Sha256: 4922501dd9e343922e6315f7733f6915846e1a83d23e8bee31bee4c05ffda283

Contents?: true

Size: 1.46 KB

Versions: 8

Compression:

Stored size: 1.46 KB

Contents

require 'active_support/concern'
require 'active_support/core_ext/class/attribute'
require 'ostruct'

monkey_patch = Module.new do
  extend ActiveSupport::Concern

  prepended do
    class_attribute :filter_options_defaults,
                    instance_predicate: false,
                    instance_writer: false,
                    instance_reader: true,
                    default: {
                      enabled:          true,
                      attribute_name:   :method_sym.to_proc,
                      association_name: :method_sym.to_proc
                    }
  end

  def initialize *args, filter: true, **kwargs, &block
    super(*args, **kwargs) do
      filter filter

      next if block.nil?

      if block.arity == 1
        block.call self
      else
        instance_exec &block
      end
    end
  end

  def filter options={}, **kwargs
    # options can be either true, false, or an hash, so `if options` or `if options.present?` aren't enough

    options = case options
              when false
                {enabled: false}
              when true
                {enabled: true}
              else
                options
              end

    filter_options.merge! options
    filter_options.merge! kwargs
  end

  def filter_options
    @filter_options ||= filter_options_defaults.transform_values do |value|
      if value.is_a? Proc
        value.call self
      else
        value
      end
    end
  end
end

GraphQL::Schema::Field.prepend monkey_patch

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
graphql-filters-1.0.8 lib/graphql/filters/dsl/graphql/schema/field.rb
graphql-filters-1.0.7 lib/graphql/filters/dsl/graphql/schema/field.rb
graphql-filters-1.0.6 lib/graphql/filters/dsl/graphql/schema/field.rb
graphql-filters-1.0.5 lib/graphql/filters/dsl/graphql/schema/field.rb
graphql-filters-1.0.4 lib/graphql/filters/dsl/graphql/schema/field.rb
graphql-filters-1.0.3 lib/graphql/filters/dsl/graphql/schema/field.rb
graphql-filters-1.0.2 lib/graphql/filters/dsl/graphql/schema/field.rb
graphql-filters-1.0.1 lib/graphql/filters/dsl/graphql/schema/field.rb