Sha256: 868ef2d0789fe0ba2189e0004feab708d46bcc571095507ff543a9a49e8c65da

Contents?: true

Size: 1.64 KB

Versions: 10

Compression:

Stored size: 1.64 KB

Contents

require 'forwardable'

module Spread2RDF
  module Mapping
    class Element
      extend Forwardable

      attr_reader :schema
      attr_reader :parent

      def_delegators :parent, :spreadsheet

      def initialize(schema, parent)
        @graph = RDF::Repository.new
        @schema = schema
        @parent = parent
      end

      def to_s
        "#{self.class.name.split('::').last}-mapping of #{schema}"
      end

      ##########################################################################
      # children

      def _children_
        raise NotImplementedError, 'subclasses must implement this method'
      end

      def empty?
        _children_.empty? or _children_.all?(&:empty?)
      end

      ##########################################################################
      # RDF graph

      def graph
        if _children_
          _children_.inject(@graph.clone) { |graph, child| graph << child.graph }
        else
          @graph
        end
      end
      alias to_rdf graph

    private

      def add_statement(*args)
        args = args.first if args.count == 1 and args.first.is_a? Array
        #puts "adding statement: #{args.inspect}"
        raise "internal error: trying to add a bad triple with nil value: #{args}" if args.count != 3 or args.one? { |arg| arg.nil? }
        @graph << RDF::Statement.new(*args)
      end
      alias statement add_statement

      def add_statements(*args)
        args = args.first if args.count == 1 and args.first.is_a? Array
        args.each { |arg| statement(arg) }
      end
      alias statements add_statements

    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
spread2rdf-0.1.7 lib/spread2rdf/mapping/element.rb
spread2rdf-0.1.6 lib/spread2rdf/mapping/element.rb
spread2rdf-0.1.5 lib/spread2rdf/mapping/element.rb
spread2rdf-0.1.4 lib/spread2rdf/mapping/element.rb
spread2rdf-0.1.3 lib/spread2rdf/mapping/element.rb
spread2rdf-0.1.2 lib/spread2rdf/mapping/element.rb
spread2rdf-0.1.1 lib/spread2rdf/mapping/element.rb
spread2rdf-0.1.0 lib/spread2rdf/mapping/element.rb
spread2rdf-0.0.2 lib/spread2rdf/mapping/element.rb
spread2rdf-0.0.1 lib/spread2rdf/mapping/element.rb