Sha256: f365f104ec9575b49a68d1ccdd32880938a76b868968365104dce296811d3c1c

Contents?: true

Size: 1.18 KB

Versions: 17

Compression:

Stored size: 1.18 KB

Contents

module Krikri
  ##
  # Handles transformation of OriginalRecords into a target class.
  #
  #   map = Mapping.new(MyModelClass)
  #   map.dsl_method args
  #   map.process_record(my_original_record)
  #   # => #<MyModelClass:0x3ff8b7459210()>
  #
  class Mapping
    include MappingDSL

    attr_reader :klass, :parser, :parser_args

    ##
    # @param klass [Class] The model class to build in the mapping process.
    # @param parser [Class] The parser class with which to process resources.
    # @param parser_args [Array] The arguments to pass to the parser when
    #   processing records.
    def initialize(klass = DPLA::MAP::Aggregation,
                   parser = Krikri::XmlParser,
                   *parser_args)
      @klass = klass
      @parser = parser
      @parser_args = parser_args
    end

    ##
    # @param record [OriginalRecord] An original record to process.
    # @return [Object] A model object of type @klass, processed through the
    #   mapping DSL
    def process_record(record)
      mapped_record = klass.new
      properties.each do |prop|
        prop.to_proc.call(mapped_record, parser.parse(record, *@parser_args))
      end
      mapped_record
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

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