class ActiveTriples::PropertyBuilder
A builder for property `NodeConfig`s
@example
PropertyBuilder.build(:creator, predicate: RDF::Vocab::DC.creator)
@see NodeConfig
Attributes
name[R]
@!attribute [r] name
@return
@!attribute [r] options
@return
options[R]
@!attribute [r] name
@return
@!attribute [r] options
@return
Public Class Methods
build(model, name, options, &block)
click to toggle source
# File lib/active_triples/property_builder.rb, line 52 def self.build(model, name, options, &block) builder = create_builder name, options, &block reflection = builder.build(&block) define_accessors model, reflection, options reflection end
create_builder(name, options, &block)
click to toggle source
@param name [Symbol] @param options [Hash<Symbol>] @option options [RDF::URI] :predicate
@option options [String, Class] :class_name @option options [Boolean] :cast
@yield yields to block configuring index behaviors @yieldparam index_object [NodeConfig::IndexObject]
@return [PropertyBuilder] @raise [ArgumentError] if name is not a symbol and/or :predicate can't be
coerced into a URI
@see build
# File lib/active_triples/property_builder.rb, line 41 def self.create_builder(name, options, &block) raise ArgumentError, "property names must be a Symbol" unless name.kind_of?(Symbol) options[:predicate] = RDF::URI.intern(options[:predicate]) raise ArgumentError, "must provide an RDF::URI to :predicate" unless options[:predicate].valid? new(name, options, &block) end
define_accessors(model, reflection, options={})
click to toggle source
# File lib/active_triples/property_builder.rb, line 59 def self.define_accessors(model, reflection, options={}) mixin = model.generated_property_methods name = reflection.term define_readers(mixin, name) define_id_reader(model, name) unless options[:cast] == false define_writers(mixin, name) end
define_id_reader(mixin, name)
click to toggle source
# File lib/active_triples/property_builder.rb, line 75 def self.define_id_reader(mixin, name) mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1 def #{name}_ids(*) get_values(:#{name}, cast: false) end CODE end
define_readers(mixin, name)
click to toggle source
# File lib/active_triples/property_builder.rb, line 67 def self.define_readers(mixin, name) mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1 def #{name}(*args) get_values(:#{name}, *args) end CODE end
define_writers(mixin, name)
click to toggle source
# File lib/active_triples/property_builder.rb, line 83 def self.define_writers(mixin, name) mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1 def #{name}=(value) set_value(:#{name}, value) end CODE end
new(name, options, &block)
click to toggle source
@param name [] @param options []
# File lib/active_triples/property_builder.rb, line 21 def initialize(name, options, &block) @name = name @options = options end
Public Instance Methods
build(&block)
click to toggle source
@yield yields to block configuring index behaviors @yieldparam index_object [NodeConfig::IndexObject]
@return [NodeConfig] a new property node config
# File lib/active_triples/property_builder.rb, line 96 def build(&block) NodeConfig.new(name, options[:predicate], options.except(:predicate)) do |config| config.with_index(&block) if block_given? end end