class ActionBlocks::BaseBuilder

Attributes

dsl_delegate[RW]
id[RW]

Public Class Methods

array_fields() click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 28
def self.array_fields()
  key = self.to_s
  if @@array_fields[key] == nil
    @@array_fields[key] = []
  end
  @@array_fields[key]
end
block_type(t) click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 6
def self.block_type(t)
  self.define_method("type") do
    return t
  end
end
builds(field_name, klass) click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 43
def self.builds(field_name, klass)
  self.send(:attr_accessor, field_name)
  self.delegate_class.define_method(field_name) do |*p, &block|
    dsl_class = eval(klass.to_s)
    n = dsl_class.new()
    n.id = p.first
    n.before_build(@obj, *p)
    if n.is_block?
      ActionBlocks.store(n)
    end
    ActionBlocks.add_to_validator(n)
    n.dsl_delegate.instance_eval(&block) if block!=nil
    n.after_build(@obj, p.first)
    @obj.send("#{field_name}=", n)
  end
end
builds_many(field_name, entry_method, klass) click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 132
def self.builds_many(field_name, entry_method, klass)
  self.array_fields().append(field_name)
  self.define_method("#{field_name}_hash") do
    Hash[self.send(field_name).map do |x|
      [x.id, x]
    end]
  end

  self.send(:attr_accessor, field_name)
  self.delegate_class.define_method(entry_method) do |*p, &block|
    dsl_class = eval(klass.to_s)
    n = dsl_class.new()
    n.id = p.first
    n.before_build(@obj, *p)
    if n.is_block?
      ActionBlocks.store(n)
    end
    ActionBlocks.add_to_validator(n)
    n.dsl_delegate.instance_eval(&block) if block!=nil
    n.after_build(@obj, p.first)
    if @obj.send(field_name) == nil
      @obj.send("#{field_name}=",[n])
    else
      @obj.send(field_name).append(n)
    end
  end
end
delegate_class() click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 16
def self.delegate_class()
  key = self.to_s
  if @@delegate_classes[key] == nil
    @@delegate_classes[key] = Class.new() do
      def initialize(obj)
        @obj = obj
      end
    end
  end
  @@delegate_classes[key]
end
includes_scheme_helpers() click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 110
def self.includes_scheme_helpers
  self.delegate_class.define_method(:_and) do |*args|
      return [:and, *args] 
  end
  
  self.delegate_class.define_method(:_or) do |*args| 
      return [:or, *args] 
  end
  
  self.delegate_class.define_method(:_eq) do |left, right|
      return [:eq, left, right] 
  end
  
  self.delegate_class.define_method(:_user) do |field|
      return [:user, field]
  end
  
  self.delegate_class.define_method(:_not_eq) do |left, right|
      return [:not_eq, left, right]
  end  
end
new(obj) click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 20
def initialize(obj)
  @obj = obj
end
references(entry_method, block_type=nil, key_proc=nil, handler: nil) click to toggle source

references :name_field, -> (s, obj) {“field-#{obj.id}-#{s}”} self.referendes block_type, [entry_method], [keyFn(f,Obj)]

# File lib/action_blocks/builders/base_builder.rb, line 70
def self.references(entry_method, block_type=nil, key_proc=nil, handler: nil)
  block_type = block_type || entry_method
  self.send(:attr_accessor, "#{entry_method}_key")

  if handler
    self.delegate_class.define_method(entry_method) do |*p|
      handler.call(@obj, *p)
    end
  else
    self.delegate_class.define_method(entry_method) do |*p|
      reference_key = "#{entry_method}_key"
      if key_proc
        k = key_proc.call(p.first, @obj)
      else
        k = "#{block_type}-#{p.first}"
      end
      @obj.send("#{entry_method}_key=", k)
    end
  end

  self.define_method(entry_method) do
    k = send("#{entry_method}_key")
    if k
      return ActionBlocks.find(k)
    else
      return nil
    end
  end

  self.validate "#{entry_method}_reference_is_valid".to_sym
  self.define_method("#{entry_method}_reference_is_valid") do
    reference_key = send("#{entry_method}_key")
    if reference_key
      if !ActionBlocks.find(reference_key)
        errors.add(entry_method.to_sym, "Reference #{reference_key} doesn't match any block in store.")
      end
    end
  end
end
sets(field_name) click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 36
def self.sets(field_name)
  self.send(:attr_accessor, field_name)
  self.delegate_class.define_method(field_name) do |value|
    @obj.send("#{field_name}=", value)
  end
end
sets_many(field_name, entry_method) click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 60
def self.sets_many(field_name, entry_method)
  self.array_fields().append(field_name)
  self.send(:attr_accessor, field_name)
  self.delegate_class.define_method(entry_method) do |*p, &block|
    @obj.send(field_name).append(p.first)
  end
end

Public Instance Methods

after_build(parent, *p) click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 187
def after_build(parent, *p)
end
after_load() click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 190
def after_load()
end
before_build(parent, *p) click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 184
def before_build(parent, *p)
end
evaluate(&block) click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 180
def evaluate(&block)
  @dsl_delegate.instance_eval(&block)
end
freeze() click to toggle source

Valid the object when freeze is called so the object

Calls superclass method
# File lib/action_blocks/builders/base_builder.rb, line 199
def freeze
  self.valid?
  super
end
is_block?() click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 193
def is_block?
  false
end
key() click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 168
def key
  if(is_block?)
    "#{type}-#{@id}"
  else
    @id
  end
end
ui_reference() click to toggle source
# File lib/action_blocks/builders/base_builder.rb, line 176
def ui_reference()
  key()
end
valid?(context = nil) click to toggle source

Runs all the specified validations and returns true if no errors were added otherwise false. Context can optionally be supplied to define which callbacks to test against (the context is defined on the validations using :on).

# File lib/action_blocks/builders/base_builder.rb, line 207
def valid?(context = nil)
  unless self.frozen?
     current_context, self.validation_context = validation_context, context
     errors.clear
     @valid = run_validations!
   else
     @valid
   end
ensure
  self.validation_context = current_context unless self.frozen?
end