Class: JSONAPI::Consumer::IncludedData
- Inherits:
-
Object
- Object
- JSONAPI::Consumer::IncludedData
- Defined in:
- lib/jsonapi/consumer/included_data.rb
Instance Attribute Summary collapse
-
#data ⇒ Object
readonly
Returns the value of attribute data.
Instance Method Summary collapse
- #data_for(method_name, definition) ⇒ Object
- #has_link?(name) ⇒ Boolean
-
#initialize(result_set, data) ⇒ IncludedData
constructor
A new instance of IncludedData.
Constructor Details
#initialize(result_set, data) ⇒ IncludedData
Returns a new instance of IncludedData.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/jsonapi/consumer/included_data.rb', line 5 def initialize(result_set, data) record_class = result_set.record_class grouped_data = data.group_by{|datum| datum["type"]} @data = grouped_data.inject({}) do |h, (type, records)| klass = Utils.compute_type(record_class, record_class.key_formatter.unformat(type).singularize.classify) h[type] = records.map do |datum| params = klass.parser.parameters_from_resource(datum) resource = klass.load(params) resource.last_result_set = result_set resource end.index_by(&:id) h end end |
Instance Attribute Details
#data ⇒ Object (readonly)
Returns the value of attribute data.
3 4 5 |
# File 'lib/jsonapi/consumer/included_data.rb', line 3 def data @data end |
Instance Method Details
#data_for(method_name, definition) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/jsonapi/consumer/included_data.rb', line 20 def data_for(method_name, definition) # this method only returns an array. It's up to the caller to decide if it's going to return # just the first element if it's a has_one relationship. # If data is defined, pull the record from the included data defined_data = definition["data"] return nil unless defined_data [defined_data].flatten.map do |link_def| # should return a resource record of some type for this linked document # even if there's no matching record included. if data[link_def["type"]] record_for(link_def) else # if there's no matching record in included then go and get it given the data link_def["type"].underscore.classify.constantize.find(link_def["id"]).first end end end |
#has_link?(name) ⇒ Boolean
38 39 40 |
# File 'lib/jsonapi/consumer/included_data.rb', line 38 def has_link?(name) data.has_key?(name.to_s) end |