Sha256: 0cefd884a7e973072c088a8793f40b0ea323753f749c262ac37374ee718cfff1
Contents?: true
Size: 1.67 KB
Versions: 2
Compression:
Stored size: 1.67 KB
Contents
require 'encore/serializer/eager_loading_manager' require 'encore/serializer/linked_resource_manager' require 'encore/serializer/main_resource_manager' require 'encore/serializer/main_resource_links_manager' require 'encore/serializer/meta_manager' require 'encore/serializer/utils' require 'encore/serializer/options_parser' module Encore module Serializer class Instance def initialize(collection, opts = {}) @collection = collection @serializers = [serializer] @options = parsed_options(opts) end def as_json(*_) # Prepare main collection @collection = MetaManager.paginate_collection(@collection, @options) @collection = EagerLoadingManager.add(@collection, @options[:include]) # Fetch linked ids linked_ids = MainResourceLinksManager.add(@collection, reflections, @options[:include]) # Build final output output = MainResourceManager.add(@collection, serializer) output.merge! linked: LinkedResourceManager.add(linked_ids, @collection) output.merge! meta: MetaManager.add(@collection, serializer, @options) output end private def reflections @reflections ||= begin @collection.klass.try(:_reflections) || @collection.klass.reflections end end def serializer @serializer ||= Utils.fetch_serializer(@collection.klass) end def parsed_options(opts) parser = OptionsParser.new(opts) { include: parser.include(serializer), skip_paging: parser.skip_paging, page: parser.page, per_page: parser.per_page } end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
encore-0.2.3 | lib/encore/serializer/instance.rb |
encore-0.2.2 | lib/encore/serializer/instance.rb |