mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-15 00:40:40 -07:00
## Summary `BigDecimal.new` is deprecated since BigDecimal 1.3.3 for Ruby 2.5. This PR suppresses the following warnings. ```console % ruby -v ruby 2.6.0dev (2018-09-06 trunk 64648) [x86_64-darwin17] % RUBYOPT=-w bundle exec rake (snip) /Users/koic/src/github.com/Shopify/liquid/lib/liquid/utils.rb:49: warning: BigDecimal.new is deprecated; use Kernel.BigDecimal method instead. /Users/koic/src/github.com/Shopify/liquid/lib/liquid/utils.rb:53: warning: BigDecimal.new is deprecated; use Kernel.BigDecimal method instead. ``` ## Other Information The following is a change of BigDecimal 1.3.3 for Ruby 2.5 related to this PR. - https://github.com/ruby/bigdecimal/commit/533737338db915b00dc7168c3602e4b462b23503 - https://github.com/ruby/bigdecimal/commit/16738ad0aca158d3c70123990d8caa5789818177
84 lines
1.7 KiB
Ruby
84 lines
1.7 KiB
Ruby
module Liquid
|
|
module Utils
|
|
def self.slice_collection(collection, from, to)
|
|
if (from != 0 || !to.nil?) && collection.respond_to?(:load_slice)
|
|
collection.load_slice(from, to)
|
|
else
|
|
slice_collection_using_each(collection, from, to)
|
|
end
|
|
end
|
|
|
|
def self.slice_collection_using_each(collection, from, to)
|
|
segments = []
|
|
index = 0
|
|
|
|
# Maintains Ruby 1.8.7 String#each behaviour on 1.9
|
|
if collection.is_a?(String)
|
|
return collection.empty? ? [] : [collection]
|
|
end
|
|
return [] unless collection.respond_to?(:each)
|
|
|
|
collection.each do |item|
|
|
if to && to <= index
|
|
break
|
|
end
|
|
|
|
if from <= index
|
|
segments << item
|
|
end
|
|
|
|
index += 1
|
|
end
|
|
|
|
segments
|
|
end
|
|
|
|
def self.to_integer(num)
|
|
return num if num.is_a?(Integer)
|
|
num = num.to_s
|
|
begin
|
|
Integer(num)
|
|
rescue ::ArgumentError
|
|
raise Liquid::ArgumentError, "invalid integer"
|
|
end
|
|
end
|
|
|
|
def self.to_number(obj)
|
|
case obj
|
|
when Float
|
|
BigDecimal(obj.to_s)
|
|
when Numeric
|
|
obj
|
|
when String
|
|
(obj.strip =~ /\A-?\d+\.\d+\z/) ? BigDecimal(obj) : obj.to_i
|
|
else
|
|
if obj.respond_to?(:to_number)
|
|
obj.to_number
|
|
else
|
|
0
|
|
end
|
|
end
|
|
end
|
|
|
|
def self.to_date(obj)
|
|
return obj if obj.respond_to?(:strftime)
|
|
|
|
if obj.is_a?(String)
|
|
return nil if obj.empty?
|
|
obj = obj.downcase
|
|
end
|
|
|
|
case obj
|
|
when 'now'.freeze, 'today'.freeze
|
|
Time.now
|
|
when /\A\d+\z/, Integer
|
|
Time.at(obj.to_i)
|
|
when String
|
|
Time.parse(obj)
|
|
end
|
|
rescue ::ArgumentError
|
|
nil
|
|
end
|
|
end
|
|
end
|