Sha256: fc5ed40aaca4801e226d739097f9889fd9033612c054a197e374a0a62d7308d6

Contents?: true

Size: 1.77 KB

Versions: 13

Compression:

Stored size: 1.77 KB

Contents

module Plutonium
  module Core
    module Definers
      module InputDefiner
        extend ActiveSupport::Concern
        include Plutonium::Core::Autodiscovery::InputDiscoverer

        class InputDefinitions
          def initialize(hash)
            @hash = hash
          end

          def []=(key, value)
            hash[key] = value
          end

          def [](key)
            hash[key]
          end

          def slice(*)
            self.class.new(hash.slice(*))
          end

          def collect_all(params)
            hash.values.map { |input| input.collect params }.reduce(:merge) || {}
          end

          def size
            hash.size
          end

          def keys
            hash.keys
          end

          def values
            hash.values
          end

          def blank?
            hash.blank?
          end

          private

          attr_reader :hash
        end

        def defined_inputs_for(*names)
          (names - input_definitions.keys).each do |name|
            define_input(name, input: autodiscover_input(name))
          end
          input_definitions.slice(*names)
        end

        def define_input(name, input: nil, type: nil, **options)
          input_definitions[name] = if input.present?
            input
          elsif type.present?
            Plutonium::Core::Fields::Inputs::Factory.build(name, type:, **options)
          elsif options.present?
            Plutonium::Core::Fields::Inputs::Factory.for_resource_attribute(resource_class, name, **options)
          else
            autodiscover_input(name)
          end
        end

        def input_defined?(name)
          input_definitions.key? name
        end

        def input_definitions = @input_definitions ||= InputDefinitions.new({})
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
plutonium-0.12.9 lib/plutonium/core/definers/input_definer.rb
plutonium-0.12.8 lib/plutonium/core/definers/input_definer.rb
plutonium-0.12.7 lib/plutonium/core/definers/input_definer.rb
plutonium-0.12.5 lib/plutonium/core/definers/input_definer.rb
plutonium-0.12.4 lib/plutonium/core/definers/input_definer.rb
plutonium-0.12.3 lib/plutonium/core/definers/input_definer.rb
plutonium-0.12.2 lib/plutonium/core/definers/input_definer.rb
plutonium-0.12.1 lib/plutonium/core/definers/input_definer.rb
plutonium-0.12.0 lib/plutonium/core/definers/input_definer.rb
plutonium-0.11.2 lib/plutonium/core/definers/input_definer.rb
plutonium-0.11.1 lib/plutonium/core/definers/input_definer.rb
plutonium-0.11.0 lib/plutonium/core/definers/input_definer.rb
plutonium-0.8.0 lib/plutonium/core/definers/input_definer.rb