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