class TwoWayMapper::Mapping

Constants

DIRECTIONS

Attributes

left_class[R]
left_options[R]
right_class[R]
right_options[R]
rules_list[R]

Public Class Methods

new() click to toggle source
# File lib/two_way_mapper/mapping.rb, line 9
def initialize
  @rules_list = []
end

Public Instance Methods

rule(left_selectors, right_selectors = {}, options = {}) click to toggle source
# File lib/two_way_mapper/mapping.rb, line 37
def rule(left_selectors, right_selectors = {}, options = {})
  raise 'left is not defined' unless left_class
  raise 'right is not defined' unless right_class

  opt = options.dup
  left_opt = opt.delete(:left) || {}
  right_opt = opt.delete(:right) || {}

  if left_selectors.is_a?(Hash)
    raise ArgumentError if left_selectors.count < 2

    opt = left_selectors
    left_selectors = opt.keys.first
    left_opt.merge! opt.delete(left_selectors)
    right_selectors = opt.keys.first
    right_opt.merge!(opt.delete(right_selectors))
  end

  @rules_list << Rule.new(
    build_nodes(left_selectors, left_class, left_options.merge(left_opt)),
    build_nodes(right_selectors, right_class, right_options.merge(right_opt)),
    opt
  )
end
rules(hash) click to toggle source
# File lib/two_way_mapper/mapping.rb, line 62
def rules(hash)
  hash.each do |left_selector, right_selector|
    rule(left_selector, right_selector)
  end
end

Private Instance Methods

build_nodes(selectors, klass, opt) click to toggle source
# File lib/two_way_mapper/mapping.rb, line 76
def build_nodes(selectors, klass, opt)
  Array(selectors).map do |selector|
    klass.new(selector, opt)
  end
end
node_class(plugin) click to toggle source
# File lib/two_way_mapper/mapping.rb, line 70
def node_class(plugin)
  TwoWayMapper::Node.const_get(plugin.to_s.camelize)
rescue NameError
  raise NameError, 'Cannot find node'
end