Sha256: a63d6244ae4d5a3c376df4456e34b0771529aedc2997d544f01d33264a4e23ca

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

# Accumulates captured variables during a query match.
# Subclasses `Hash`, providing a non-destructive
# {CaptureHash#add} method, and merging.
#
# @see ActionTree::Basic::Query#captures
# @api private

class ActionTree::CaptureHash < Hash

  # {CaptureHash#add} each key and value in the given Hash.
  #
  # @return [CaptureHash] self, after merging
  #
  def merge!(hsh)
    hsh.each {|k,v| add(k,v) }
    self
  end

  # Nondestructive version of {CaptureHash#merge!}
  #
  # @return [CaptureHash]
  def merge(*args)
    dup.merge!(*args)
  end

  # Add a specified value to a specified key.
  #
  # Depending on the value already at the specified key:
  # 
  # * `Array`: append the new value
  # * `nil`: replace with new value
  # * else: wrap existing value followed by new value in an Array
  #
  # @return [CaptureHash] self, after adding
  def add(key, value)
    case self[key]
      when nil    then self[key] = value
      when Array  then self[key] << value
      else             self[key] = [self[key], value]
    end
    self
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
action_tree-0.2.0 lib/action_tree/capture_hash.rb