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