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