Sha256: 5cffba09a8f87e96b6a14e530332105bcd987dade883fc03ae3b51f66f268c27

Contents?: true

Size: 1.17 KB

Versions: 19

Compression:

Stored size: 1.17 KB

Contents

require 'krikri/mapping_dsl/property_declaration'
require 'krikri/mapping_dsl/child_declaration'
require 'krikri/mapping_dsl/parser_methods'
require 'krikri/mapping_dsl/rdf_subjects'

module Krikri
  ##
  # Mixin implementing DSL methods for metadata mapping. The main MappingDSL
  # module implements the core property definition methods, while nested modules
  # add various extensions.
  module MappingDSL
    extend ActiveSupport::Concern
    include ParserMethods
    include RdfSubjects

    def properties
      @properties ||= []
    end

    def respond_to_missing?(*)
      true
    end

    def method_missing(name, *args, &block)
      return add_child(name, *args, &block) if block && block.arity == 0
      add_property(name, *args, &block)
    end

    private

    def add_child(name, opts = {}, &block)
      delete_property(name)
      properties << ChildDeclaration.new(name, opts.delete(:class), opts, &block)
    end

    def add_property(name, value = nil, &block)
      delete_property(name)
      properties << PropertyDeclaration.new(name, value, &block)
    end

    def delete_property(name)
      properties.delete_if { |prop| prop.name == name }
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
krikri-0.6.0 lib/krikri/mapping_dsl.rb
krikri-0.5.7 lib/krikri/mapping_dsl.rb
krikri-0.5.6 lib/krikri/mapping_dsl.rb
krikri-0.5.5 lib/krikri/mapping_dsl.rb
krikri-0.5.4 lib/krikri/mapping_dsl.rb
krikri-0.5.3 lib/krikri/mapping_dsl.rb
krikri-0.5.2 lib/krikri/mapping_dsl.rb
krikri-0.5.1 lib/krikri/mapping_dsl.rb
krikri-0.5.0 lib/krikri/mapping_dsl.rb
krikri-0.4.0 lib/krikri/mapping_dsl.rb
krikri-0.3.3 lib/krikri/mapping_dsl.rb
krikri-0.3.2 lib/krikri/mapping_dsl.rb
krikri-0.3.1 lib/krikri/mapping_dsl.rb
krikri-0.2.1 lib/krikri/mapping_dsl.rb
krikri-0.2.0 lib/krikri/mapping_dsl.rb
krikri-0.1.3 lib/krikri/mapping_dsl.rb
krikri-0.1.2 lib/krikri/mapping_dsl.rb
krikri-0.1.1 lib/krikri/mapping_dsl.rb
krikri-0.1.0 lib/krikri/mapping_dsl.rb