class Necromancer::ConversionTarget
A class responsible for wrapping conversion target
@api private
Constants
- UndefinedValue
Used as a stand in for lack of value @api private
Attributes
conversions[R]
object[R]
source[R]
Public Class Methods
for(context, value, block)
click to toggle source
@api private
# File lib/necromancer/conversion_target.rb, line 19 def self.for(context, value, block) if UndefinedValue.equal?(value) unless block raise ArgumentError, "You need to pass either argument or a block to `convert`." end new(context, block.call) elsif block raise ArgumentError, "You cannot pass both an argument and a block to `convert`." else new(context, value) end end
new(conversions, object)
click to toggle source
@api private
# File lib/necromancer/conversion_target.rb, line 13 def initialize(conversions, object) @object = object @conversions = conversions end
Public Instance Methods
from(source)
click to toggle source
Allows to specify conversion source type
@example
converter.convert("1").from(:string).to(:numeric) # => 1
@return [ConversionType]
@api public
# File lib/necromancer/conversion_target.rb, line 42 def from(source) @source = source self end
inspect()
click to toggle source
Inspect this conversion
@api public
# File lib/necromancer/conversion_target.rb, line 68 def inspect %(#<#{self.class}@#{object_id} @object=#{object}, @source=#{detect(object)}>) end
to(target, options = {})
click to toggle source
Runs a given conversion
@example
converter.convert("1").to(:numeric) # => 1
@example
converter.convert("1") >> Integer # => 1
@return [Object]
the converted target type
@api public
# File lib/necromancer/conversion_target.rb, line 59 def to(target, options = {}) conversion = conversions[source || detect(object, false), detect(target)] conversion.call(object, **options) end
Also aliased as: >>
Protected Instance Methods
detect(object, symbol_as_object = true)
click to toggle source
Detect object type and coerce into known key type
@param [Object] object
@api private
# File lib/necromancer/conversion_target.rb, line 79 def detect(object, symbol_as_object = true) case object when TrueClass, FalseClass then :boolean when Integer then :integer when Class then object.name.downcase else if object.is_a?(Symbol) && symbol_as_object object else object.class.name.downcase end end end