Sha256: d8c2a616c400f9af735ddb2b8a6f8f2f6bbbb91958249908105b26b3620e0421
Contents?: true
Size: 1.8 KB
Versions: 2
Compression:
Stored size: 1.8 KB
Contents
module BrainstemAdaptor class Association include Enumerable attr_reader :name, :record, :specification, :collection_name, :foreign_key # @param record [BrainstemAdaptor::Record] # @param name [String, Symbol] def initialize(record, name) @name = name.to_s unless record.has_association?(@name) raise ArgumentError, "No '#@name' specification found for #{record.collection_name}" end @record = record @specification = record.associations_specification[@name] @collection_name = @specification['collection'] || @name @foreign_key = @specification['foreign_key'] end # @param other [Enumerable] # @return [true, false] def ==(other) other == each.to_a end # @param order [Integer] Index in collection starting from zero def [](order) records[order] end # @return [Enumerable] def each(&block) records.each(&block) end def has_many? ids.is_a?(Array) end def has_one? !has_many? end # Checks if association has been included in request # @return [true, false] def loaded? (!record[foreign_key].nil?) && (!!record.response[@collection_name].try(:any?)) end # @return [Array<BrainstemAdaptor::Record>] def records [*ids].map do |id| BrainstemAdaptor::Record.new(collection_name, id, record.response) end end alias_method :all, :records # Returns relation object for has_many associations and record for has_one # Acts as AR::find for has_one associations, as AR::where for has_many # @return [BrainstemAdaptor::Record, self] def reflect has_many? ? self : records.first end private def ids # TODO(SZ): move to public? record[foreign_key] end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
brainstem-adaptor-0.0.4 | lib/brainstem_adaptor/association.rb |
brainstem-adaptor-0.0.3 | lib/brainstem_adaptor/association.rb |