class TwoWayMapper::Node::Base
Constants
- DIVIDER
Attributes
options[RW]
selector[RW]
Public Class Methods
new(selector, options = {})
click to toggle source
# File lib/two_way_mapper/node/base.rb, line 10 def initialize(selector, options = {}) @selector, @options = selector, options end
Public Instance Methods
keys(&block)
click to toggle source
# File lib/two_way_mapper/node/base.rb, line 14 def keys(&block) unless block block = options[:stringify_keys] ? :to_s : :to_sym block = block.to_proc end selector.split(DIVIDER).map(&block) end
read(source)
click to toggle source
# File lib/two_way_mapper/node/base.rb, line 22 def read(source) rewind_forward(source) { |_obj, _key| return nil } end
writable?(current_value, new_value)
click to toggle source
# File lib/two_way_mapper/node/base.rb, line 30 def writable?(current_value, new_value) !options[:write_if] || !options[:write_if].respond_to?(:call) || options[:write_if].call(current_value, new_value) end
write(_obj, _value)
click to toggle source
# File lib/two_way_mapper/node/base.rb, line 26 def write(_obj, _value) raise NotImplementedError end
Private Instance Methods
create_node(_obj, _key)
click to toggle source
# File lib/two_way_mapper/node/base.rb, line 55 def create_node(_obj, _key) raise NotImplementedError end
next_key(_obj, _key)
click to toggle source
# File lib/two_way_mapper/node/base.rb, line 59 def next_key(_obj, _key) raise NotImplementedError end
rewind_forward(obj, margin = 0) { |obj, key| ... }
click to toggle source
# File lib/two_way_mapper/node/base.rb, line 38 def rewind_forward(obj, margin = 0) to = -(1 + margin.to_i.abs) keys[0..to].each do |key| unless rewind_to?(obj, key) block_given? ? yield(obj, key) : create_node(obj, key) end obj = next_key(obj, key) end obj end
rewind_to?(_obj, _key)
click to toggle source
# File lib/two_way_mapper/node/base.rb, line 51 def rewind_to?(_obj, _key) raise NotImplementedError end