Sha256: acb4b09bf86ff8885b69493ea9e8e6c29b0cdb0066f79f0966a076298c69d478

Contents?: true

Size: 1.03 KB

Versions: 3

Compression:

Stored size: 1.03 KB

Contents

# frozen_string_literal: true

module Lite
  module Command
    module Internals
      module Context

        def self.included(base)
          base.extend ClassMethods
        end

        module ClassMethods

          def attribute(*args, **options)
            args.each do |method_name|
              attribute = Lite::Command::Attribute.new(method_name, options)
              attributes[method_name] = attribute

              define_method(method_name) do
                ivar = :"@#{method_name}"
                return instance_variable_get(ivar) if instance_variable_defined?(ivar)

                instance_variable_set(ivar, attribute.value)
              end
            end
          end

          def attributes
            @attributes ||= {}
          end

        end

        private

        def validate_context_attributes
          validator = Lite::Command::AttributeValidator.new(self)
          return if validator.valid?

          invalid!("Invalid context attributes", validator.errors)
        end

      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
lite-command-2.1.3 lib/lite/command/internals/context.rb
lite-command-2.1.2 lib/lite/command/internals/context.rb
lite-command-2.1.1 lib/lite/command/internals/context.rb