module Synchronisable::DSL::Macro::ClassMethods

Public Instance Methods

attribute(*args) click to toggle source

Defines a new attribute.

@overload attribute(*attrs, options)

@param attrs [Array] attributes
@param options [Hash]
@option options :default default value,
  procs & lambdas are lazily evaluated
@option options [Lambda] :converter method that
  will be lazily applied to the source value in order to convert it
  to the desired type

@overload attribute(*attrs)

@api private

# File lib/synchronisable/dsl/macro.rb, line 68
def attribute(*args)
  define_expressions(Attribute, args)
end
inherited(subclass) click to toggle source
Calls superclass method
# File lib/synchronisable/dsl/macro.rb, line 50
def inherited(subclass)
  super
  class_attributes[subclass] = Hash[class_attributes[self].map { |k, v| [k, v.clone] }]
end
method(*args) click to toggle source

Defines a new method.

@overload method(*attrs, options)

@param attrs [Array] attributes
@param options [Hash]
@option options :default default value,
  procs & lambdas are lazily evaluated

@overload method(*attrs)

@api private

# File lib/synchronisable/dsl/macro.rb, line 82
def method(*args)
  define_expressions(Method, args)
end

Private Instance Methods

define_expressions(klass, args) click to toggle source
# File lib/synchronisable/dsl/macro.rb, line 88
def define_expressions(klass, args)
  options = args.extract_options!
  args.each do |attr|
    name = attr.to_sym
    class_attributes[self][name] = klass.new(options)
    define_singleton_method(name) do |*params, &block|
      class_attributes[self][name].handle(params, &block)
    end
  end
end