Module: Sequel::EvalInspect
- Included in:
- Sequel
- Defined in:
- lib/sequel/extensions/eval_inspect.rb
Instance Method Summary collapse
-
#eval_inspect(obj) ⇒ Object
Special case objects where inspect does not generally produce input suitable for eval.
Instance Method Details
#eval_inspect(obj) ⇒ Object
Special case objects where inspect does not generally produce input suitable for eval. Used by Sequel::SQL::Expression#inspect so that it can produce a string suitable for eval even if components of the expression have inspect methods that do not produce strings suitable for eval.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/sequel/extensions/eval_inspect.rb', line 27 def eval_inspect(obj) case obj when Sequel::SQL::Blob, Sequel::LiteralString, Sequel::SQL::ValueList "#{obj.class}.new(#{obj.inspect})" when Array "[#{obj.map{|o| eval_inspect(o)}.join(', ')}]" when Hash "{#{obj.map{|k, v| "#{eval_inspect(k)} => #{eval_inspect(v)}"}.join(', ')}}" when Time datepart = "%Y-%m-%dT" unless obj.is_a?(Sequel::SQLTime) if RUBY_VERSION < '1.9' # :nocov: # Time on 1.8 doesn't handle %N (or %z on Windows), manually set the usec value in the string hours, mins = obj.utc_offset.divmod(3600) mins /= 60 "#{obj.class}.parse(#{obj.strftime("#{datepart}%H:%M:%S.#{sprintf('%06i%+03i%02i', obj.usec, hours, mins)}").inspect})#{'.utc' if obj.utc?}" # :nocov: else "#{obj.class}.parse(#{obj.strftime("#{datepart}%T.%N%z").inspect})#{'.utc' if obj.utc?}" end when DateTime # Ignore date of calendar reform "DateTime.parse(#{obj.strftime('%FT%T.%N%z').inspect})" when Date # Ignore offset and date of calendar reform "Date.new(#{obj.year}, #{obj.month}, #{obj.day})" when BigDecimal "BigDecimal.new(#{obj.to_s.inspect})" else obj.inspect end end |