class A4Tools::ObjectBuilder
Attributes
description_text[R]
generate_block[R]
id[RW]
is_cached[R]
Public Class Methods
[](identifier)
click to toggle source
# File lib/object_builder/object_builder.rb, line 83 def [](identifier) @definitions[identifier.to_sym] end
[]=(identifier, defn)
click to toggle source
# File lib/object_builder/object_builder.rb, line 87 def []=(identifier, defn) @definitions[identifier.to_sym] = defn end
builders()
click to toggle source
# File lib/object_builder/object_builder.rb, line 64 def builders @definitions.values end
builders_for_name(name)
click to toggle source
# File lib/object_builder/object_builder.rb, line 68 def builders_for_name(name) @definitions.values.select do |defn| defn.name_matches?(name) end end
cache(is_cached)
click to toggle source
# File lib/object_builder/object_builder.rb, line 105 def cache(is_cached) @is_cached = is_cached end
define_with_directory(directory)
click to toggle source
# File lib/object_builder/object_builder.rb, line 32 def define_with_directory(directory) Dir[File.join(directory, "*")].map { |file| define_with_filename(file) } end
define_with_filename(filename)
click to toggle source
# File lib/object_builder/object_builder.rb, line 36 def define_with_filename(filename) contents = IO.read(filename) id = File.basename(filename).gsub(/\..*$/, "").to_sym return define_with_script(contents, id) if filename.end_with? ".rb" define_with_json(contents, id) end
define_with_json(string, id=nil, description=nil)
click to toggle source
# File lib/object_builder/object_builder.rb, line 50 def define_with_json(string, id=nil, description=nil) object = symbolify(JSON.parse(string)) description ||= object[:___description] || "Supplied from JSON" definition = Class.new(A4Tools::ObjectBuilder) do generate { self.class.instance_variable_get("@obj") } end object.delete(:__description) definition.class_eval("description \"#{description}\"") definition.instance_variable_set("@obj", object) definition.id = id.to_sym definition.new end
define_with_script(script, id)
click to toggle source
# File lib/object_builder/object_builder.rb, line 43 def define_with_script(script, id) definition = Class.new(A4Tools::ObjectBuilder) {} definition.id = id definition.class_eval(script, id.to_s) definition.new end
description(desc)
click to toggle source
# File lib/object_builder/object_builder.rb, line 101 def description(desc) @description_text = desc end
generate(&block)
click to toggle source
# File lib/object_builder/object_builder.rb, line 109 def generate(&block) @generate_block = block end
identifier(id)
click to toggle source
DSL stuff for defining items
# File lib/object_builder/object_builder.rb, line 97 def identifier(id) @id = id end
identifiers_like(id)
click to toggle source
# File lib/object_builder/object_builder.rb, line 91 def identifiers_like(id) @definitions.keys.select { |key| key.to_s.start_with? id.to_s } end
load_object(obj, id, description)
click to toggle source
# File lib/object_builder/object_builder.rb, line 27 def load_object(obj, id, description) obj = JSON.generate(obj) unless obj.is_a? String @definitions[id.to_sym] = define_with_json(obj, id.to_sym, description) end
load_objects()
click to toggle source
# File lib/object_builder/object_builder.rb, line 7 def load_objects @definitions = {} load_path(File.join(File.dirname(__FILE__), "definitions")) end
load_path(path)
click to toggle source
# File lib/object_builder/object_builder.rb, line 12 def load_path(path) if File.directory?(path) then define_with_directory(path).each do |defn| @definitions[defn.identifier] = defn end true elsif File.file?(path) then defn = define_with_filename(path) @definitions[defn.identifier] = defn true else false end end
supported_classes(truncate=true)
click to toggle source
# File lib/object_builder/object_builder.rb, line 74 def supported_classes(truncate=true) r = {} @definitions.each do |id, defn| key = truncate ? talk.truncated_name(defn.name) : defn.name r[key] = true end r.keys end
Public Instance Methods
block_call(&block)
click to toggle source
# File lib/object_builder/object_builder.rb, line 114 def block_call(&block) self.class.send(:define_method, :__block_call, &block) self.class.send(:instance_method, :__block_call).bind(self).call end
description()
click to toggle source
# File lib/object_builder/object_builder.rb, line 132 def description self.class.description_text end
identifier()
click to toggle source
# File lib/object_builder/object_builder.rb, line 119 def identifier self.class.id end
name()
click to toggle source
# File lib/object_builder/object_builder.rb, line 127 def name value if @cached.nil? @cached[:__class] || "" end
name_matches?(other)
click to toggle source
# File lib/object_builder/object_builder.rb, line 123 def name_matches?(other) name.end_with? other.to_s end
value()
click to toggle source
# File lib/object_builder/object_builder.rb, line 136 def value return @cached unless @cached.nil? or not self.class.is_cached v = block_call(&self.class.generate_block) v.delete(:__description) @cached = v end