Sha256: 89b55fa4f92894e4e0c2ee4ec3149d54fb9fbbc53ad628ed31a08f1c9a38215b

Contents?: true

Size: 924 Bytes

Versions: 1

Compression:

Stored size: 924 Bytes

Contents

require 'geoff/children_dsl'

class Neo4jWrapperDsl
  def initialize *classes, &block
    options = classes.last.is_a?(Hash) ? classes.pop : {}

    validate classes

    options.merge!({
      parent_node_name: 'ROOT',
      type:       nil,
      container: Container.new
    })

    @children_dsl = ChildrenDsl.new(options, &block) if block_given?
  end

  def to_geoff
    geoff = "#{add_classes}\n"
    geoff += @children_dsl.to_geoff if @children_dsl
    geoff.chomp
  end

  def to_s
    to_geoff
  end

  private

  def add_classes
    @classes.map{|c| root_to_class_as_geoff c }.join("\n")
  end

  def root_to_class_as_geoff c
    "(ROOT)-[:#{c}]->(#{c})"
  end

  def validate classes
    @classes = classes || []

    @classes.each do |c|
      m = "Class #{c} should include Neo4j::NodeMixin"
      raise ArgumentError, m unless c.is_a?(Class) and c.included_modules.include? Neo4j::NodeMixin
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
geoff-0.0.2.beta lib/geoff/neo4j_wrapper_dsl.rb