Sha256: ef87bb230ba6c9cf0f7bfa02cd59df63996d8403210acde2f7a885de62462607

Contents?: true

Size: 1.02 KB

Versions: 1

Compression:

Stored size: 1.02 KB

Contents

# frozen_string_literal: true

module Consent
  class DSL # :nodoc:
    attr_reader :subject

    def initialize(subject, defaults)
      @subject = subject
      @defaults = defaults
    end

    def with_defaults(new_defaults, &block)
      DSL.build(@subject, @defaults.merge(new_defaults), &block)
    end

    # rubocop:disable Lint/UnusedBlockArgument, Security/Eval
    def eval_view(key, label, collection_conditions)
      view key, label do |user|
        eval(collection_conditions)
      end
    end
    # rubocop:enable Lint/UnusedBlockArgument, Security/Eval

    def view(key, label, instance = nil, collection = nil, &block)
      collection ||= block
      @subject.views[key] = View.new(key, label, instance, collection)
    end

    def action(key, label, options = {})
      @subject.actions << Action.new(@subject, key, label,
                                     @defaults.merge(options))
    end

    def self.build(subject, defaults = {}, &block)
      DSL.new(subject, defaults).instance_eval(&block)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
consent-1.0.1 lib/consent/dsl.rb