Class/Module Index [+]

Quicksearch

Ruote::Exp::MergeMixin

Gathering methods for merging workitems.

Public Instance Methods

merge_workitem(index, target, source, merge_type) click to toggle source

Merge workitem ‘source’ into workitem ‘target’.

If type is ‘override’, the source will prevail and be returned.

If type is ‘mix’, the source fields will be merge into the target fields.

If type is ‘isolate’, the source fields will be placed in a separte field in the target workitem. The name of this field is the child_id of the source workitem (a string from ‘0’ to ‘99999’ and beyond)

The ‘concat’ type merge hashes and concats arrays. The ‘union’ type behaves much like ‘concat’, but it makes sure to remove duplicates.

Warning: ‘union’ will remove duplicates that were present before the merge.

# File lib/ruote/exp/merge.rb, line 63
def merge_workitem(index, target, source, merge_type)

  return source if merge_type == 'override'

  if target == nil

    case merge_type

      #when 'mix'
         # do nothing

      when 'stack'
        source['fields'] = { 'stack' => [ source['fields'] ] }

      when 'isolate'
        source['fields'] = { index.to_s => source['fields'] }

      #when 'union', 'concat'
         # do nothing
    end

    source

  else

    case merge_type

      when 'mix'

        target['fields'].merge!(source['fields'])

      when 'stack'

        target['fields']['stack'] << source['fields']
        target['fields']['stack_attributes'] = compile_atts

      when 'isolate'

        target['fields'][index.to_s] = source['fields']

      when 'union', 'concat'

        source['fields'].each do |k, sv|

          tv = target['fields'][k]

          if sv.is_a?(Array) and tv.is_a?(Array)
            tv.concat(sv)
            tv.uniq! if merge_type == 'union'
          elsif sv.is_a?(Hash) and tv.is_a?(Hash)
            tv.merge!(sv)
          else
            target['fields'][k] = sv
          end
        end
    end

    target
  end
end
merge_workitems(workitems, merge_type) click to toggle source

Given a list of workitems and a merge_type, will merge according to the merge type.

The return value is the merged workitem.

# File lib/ruote/exp/merge.rb, line 38
def merge_workitems(workitems, merge_type)

  rworkitems = workitems.reverse

  workitems.inject(nil) do |t, wi|
    merge_workitem(workitems.index(wi), t, wi, merge_type)
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.