lib/pluck_map/attribute.rb in pluck_map-0.3.0 vs lib/pluck_map/attribute.rb in pluck_map-0.4.0

- old
+ new

@@ -1,14 +1,14 @@ module PluckMap class Attribute - attr_reader :id, :selects, :name, :alias, :block + attr_reader :id, :selects, :name, :value, :block + attr_accessor :indexes def initialize(id, options={}) @id = id @selects = Array(options.fetch(:select, id)) @name = options.fetch(:as, id) - @alias = name.to_s.tr("_", " ") @block = options[:map] if options.key? :value @value = options[:value] @selects = [] @@ -21,21 +21,10 @@ def apply(object) block.call(*object) end - # These are the names of the values that are returned - # from the database (every row returned by the database - # will be a hash of key-value pairs) - # - # If we are only selecting one thing from the database - # then the PluckMapPresenter will automatically alias - # the select-expression, so the key will be the alias. - def keys - selects.length == 1 ? [self.alias] : selects - end - def no_map? block.nil? end # When the PluckMapPresenter performs the query, it will @@ -43,19 +32,39 @@ # array of values. # # This method constructs a Ruby expression that will # extract the appropriate values from each row that # correspond to this Attribute. - # - # The array of values will be correspond to the array - # of keys. This method determines which values pertain - # to it by figuring out which order its keys were selected in - def to_ruby(keys) + def to_ruby(selects = nil) + if selects + puts "DEPRECATION WARNING: PluckMap::Attribute#to_ruby no longer requires an argument. Replace `attribute.to_ruby(keys)` with `attribute.to_ruby`." + end + return @value.inspect if defined?(@value) - indexes = self.keys.map { |key| keys.index(key) } return "values[#{indexes[0]}]" if indexes.length == 1 && !block ruby = "values.values_at(#{indexes.join(", ")})" ruby = "invoke(:\"#{id}\", #{ruby})" if block ruby + end + + + + def values + [id, selects, name, value, block] + end + + def ==(other) + return false if self.class != other.class + self.values == other.values + end + + def hash + values.hash + end + + def eql?(other) + return true if self.equal?(other) + return false if self.class != other.class + self.values.eql?(other.values) end end end