class Synchronisable::DSL::Macro::Expression

Serves as storage and provides lazy evaluation for expression. You can override attributes in subclasses, for example you can change the default value.

@api private

@see Synchronisable::DSL::Macro @see Synchronisable::DSL::Attribute @see Synchronisable::DSL::Method

Attributes

default[R]
source[R]

Public Class Methods

new(options) click to toggle source
# File lib/synchronisable/dsl/macro/expression.rb, line 16
def initialize(options)
  @default = options[:default]
end

Public Instance Methods

handle(args, &block) click to toggle source
# File lib/synchronisable/dsl/macro/expression.rb, line 20
def handle(args, &block)
  has_value = block || args.present?
  has_value ? save(args, block) : value
end

Protected Instance Methods

transform(arg) click to toggle source
# File lib/synchronisable/dsl/macro/expression.rb, line 27
def transform(arg)
  evaluate(arg)
end

Private Instance Methods

evaluate(arg) click to toggle source
# File lib/synchronisable/dsl/macro/expression.rb, line 45
def evaluate(arg)
  arg.try(:call) || arg
end
save(args, block) click to toggle source
# File lib/synchronisable/dsl/macro/expression.rb, line 33
def save(args, block)
  if args.present?
    @source = args.count > 1 ? args : args.first
  elsif block
    @source = block
  end
end
value() click to toggle source
# File lib/synchronisable/dsl/macro/expression.rb, line 41
def value
  source || default
end