lib/wcc/contentful/model_builder.rb in wcc-contentful-0.1.0 vs lib/wcc/contentful/model_builder.rb in wcc-contentful-0.2.0

- old
+ new

@@ -38,24 +38,34 @@ define_singleton_method(:find) do |id, context = nil| raw = WCC::Contentful::Model.store.find(id) new(raw, context) if raw.present? end - define_singleton_method(:find_all) do |context = nil| - raw = WCC::Contentful::Model.store.find_by(content_type: content_type) - raw.map { |r| new(r, context) } + define_singleton_method(:find_all) do |filter = nil, context = nil| + if filter + filter.transform_keys! { |k| k.to_s.camelize(:lower) } + bad_fields = filter.keys.reject { |k| fields.include?(k) } + raise ArgumentError, "These fields do not exist: #{bad_fields}" unless bad_fields.empty? + end + + query = WCC::Contentful::Model.store.find_all(content_type: content_type) + query = query.apply(filter) if filter + query.map { |r| new(r, context) } end define_singleton_method(:find_by) do |filter, context = nil| filter.transform_keys! { |k| k.to_s.camelize(:lower) } bad_fields = filter.keys.reject { |k| fields.include?(k) } raise ArgumentError, "These fields do not exist: #{bad_fields}" unless bad_fields.empty? - query = WCC::Contentful::Model.store.find_by(content_type: content_type) - filter.each do |field, v| - query = query.eq(field, v, context) - end - query.map { |r| new(r, context) } + result = WCC::Contentful::Model.store.find_by(content_type: content_type, filter: filter) + new(result, context) + end + + define_singleton_method(:inherited) do |subclass| + # only register if it's not already registered + return if WCC::Contentful::Model.registered?(typedef.content_type) + WCC::Contentful::Model.register_for_content_type(typedef.content_type, klass: subclass) end define_method(:initialize) do |raw, context = nil| ct = content_type_from_raw(raw) if ct != typedef.content_type