Sha256: 3bd3e583d8b0f4e672e8c5d0b7ec7066c4510f7541b57cdfb2c2a2b4942fa53b

Contents?: true

Size: 1.83 KB

Versions: 4

Compression:

Stored size: 1.83 KB

Contents

module PubliSci
  class Metadata
    module DSL

      class Instance
        include Metadata::DSL

        def initialize
          Metadata.registry.clear
        end
      end

      def var(name=nil)
        set_or_get('var',name)
      end
      alias_method :dataset, :var

      def creator(id=nil)
        set_or_get('creator',id)
      end
      alias_method :name, :creator

      def description(desc=nil)
        set_or_get('description',desc)
      end

      def title(desc=nil)
        set_or_get('title',desc)
      end

      def topic(sub=nil)
        add_or_get('topic',sub)
      end

      def publishers(pub=nil,&block)
        if block_given?
          p = Publisher.new
          p.instance_eval(&block)
          @publishers ||= [] << p
          p
        else
          add_or_get('publishers',pub)
        end
      end
      alias_method :publisher, :publishers

      def generate_n3
        opts = {}
        %w{var creator description title}.each{|field|
          opts[field.to_sym] = send(field.to_sym) if send(field.to_sym)
        }
        opts[:subject] = topic if topic
        publishers.each{|pub|
          opts[:publishers] ||= [] << {label: pub.label, uri: pub.uri}
        } if publishers
        gen = Class.new {include PubliSci::Metadata::Generator}

        gen.new.basic(opts)
      end

      private
      def set_or_get(var,input=nil)
        ivar = instance_variable_get("@#{var}")

        if input
          instance_variable_set("@#{var}", input)
        else
          ivar
        end
      end

      def add_or_get(var,input)
        ivar = instance_variable_get("@#{var}")

        if input
          instance_variable_set("@#{var}", []) unless ivar
          instance_variable_get("@#{var}") << input
          instance_variable_get("@#{var}")
        else
          ivar
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
publisci-0.1.2 lib/bio-publisci/dsl/metadata_dsl.rb
bio-publisci-0.1.0 lib/bio-publisci/dsl/metadata_dsl.rb
bio-publisci-0.0.8 lib/bio-publisci/dsl/metadata_dsl.rb
bio-publisci-0.0.7 lib/bio-publisci/dsl/metadata_dsl.rb