lib/jsonapi_mapper.rb in jsonapi_mapper-0.1.0 vs lib/jsonapi_mapper.rb in jsonapi_mapper-0.1.1
- old
+ new
@@ -26,26 +26,26 @@
self.unscoped = unscoped.map(&:to_sym)
self.resources = {}
setup_types(rules)
- main = if data = document[:data]
+ main = if data = self.document[:data]
if data.is_a?(Array)
data.map{|r| build_resource(r) }.compact
else
- build_resource(data)
+ [ build_resource(data) ].compact
end
end
- rest = if included = document[:included]
+ rest = if included = self.document[:included]
included.map{|r| build_resource(r) }.compact
end
resources.each{|_,r| assign_relationships(r) }
- self.data = main.is_a?(Array) ? main.map(&:object) : main.try(:object)
- self.included = rest.try(:map, &:object)
+ self.data = main.try(:map, &:object) || []
+ self.included = rest.try(:map, &:object) || []
end
def setup_types(rules)
self.types = {}
rules.each do |type_name, ruleset|
@@ -152,15 +152,32 @@
def renamed(type, attr)
renames.fetch(:attributes, {}).fetch(type, {}).fetch(attr, attr)
end
+ def all
+ (data + included)
+ end
+
def save_all
- data.is_a?(Array) ? data.each(&:save) : data.try(:save)
- included.try(:each, &:save)
+ return false unless all.all?(&:valid?)
+ all.each(&:save)
+ true
end
def collection?
- data.is_a?(Array)
+ data.size > 1
+ end
+
+ def single?
+ !collection?
+ end
+
+ def map_data(cls, &blk)
+ data.select{|o| o.is_a?(cls)}.map(&blk)
+ end
+
+ def map_all(cls, &blk)
+ all.select{|o| o.is_a?(cls)}.map(&blk)
end
end
end