Sha256: a1ae46c5d23b90e7c043343a637dc1822344d152588145cd72b85798352c0946

Contents?: true

Size: 958 Bytes

Versions: 3

Compression:

Stored size: 958 Bytes

Contents

require "active_model_serializers"
require "serializer_field_filter/version"
require "serializer_field_filter/resource_options"
require "serializer_field_filter/all_field"
require "serializer_field_filter/none_field"
require "serializer_field_filter/relation"

class SerializerFieldFilter
  include ResourceOptions

  attr_reader :fields

  def initialize(fields = [])
    @fields = fields
  end

  def self.init(fields = nil)
    fields.present? ? new(fields) : AllField.new
  end

  def root_fields
    return if fields.blank?
    fields.map { |field| field.split('.').first.to_sym }.uniq
  end

  def scope_of(resource_name)
    if fields.include?(resource_name.to_s)
      AllField.new
    else
      scope_fields = fields.select { |field| field.start_with?("#{resource_name}.") }
                           .map { |field| field.split('.', 2).last }
      scope_fields.present? ? SerializerFieldFilter.new(scope_fields) : NoneField.new
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
serializer_field_filter-0.0.3 lib/serializer_field_filter.rb
serializer_field_filter-0.0.2 lib/serializer_field_filter.rb
serializer_field_filter-0.0.1 lib/serializer_field_filter.rb