Sha256: bfe5883220274a546f23c1b9ecec505d30210dbbb2b9ea2e3c28cc1f4538c3a5

Contents?: true

Size: 965 Bytes

Versions: 8

Compression:

Stored size: 965 Bytes

Contents

module ZTK::DSL::Core

  # @author Zachary Patten <zachary AT jovelabs DOT com>
  # @api private
  module Attributes

    def self.included(base)
      base.class_eval do
        base.send(:extend, ZTK::DSL::Core::Options::ClassMethods)
        base.add_option(:attribute)
        base.send(:extend, ZTK::DSL::Core::Attributes::ClassMethods)
      end
    end

    def attributes
      @attributes ||= Hash.new
    end

    # @author Zachary Patten <zachary AT jovelabs DOT com>
    module ClassMethods

      def attribute(key, options={})
        attribute_options[key] = options

        send(:define_method, key) do |*args|
          if args.count == 0
            attributes[key] ||= self.class.attribute_options[key][:default]
            attributes[key]
          else
            send("#{key}=", *args)
          end
        end

        send(:define_method, "#{key}=") do |value|
          attributes[key] = value
        end
      end

    end

  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
ztk-1.4.16 lib/ztk/dsl/core/attributes.rb
ztk-1.4.15 lib/ztk/dsl/core/attributes.rb
ztk-1.4.14 lib/ztk/dsl/core/attributes.rb
ztk-1.4.13 lib/ztk/dsl/core/attributes.rb
ztk-1.4.12 lib/ztk/dsl/core/attributes.rb
ztk-1.4.11 lib/ztk/dsl/core/attributes.rb
ztk-1.4.10 lib/ztk/dsl/core/attributes.rb
ztk-1.4.9 lib/ztk/dsl/core/attributes.rb