Class: Riak::MapReduce::Phase

Inherits:
Object
  • Object
show all
Includes:
Util::Translation
Defined in:
lib/riak/map_reduce/phase.rb

Overview

Represents an individual phase in a map-reduce pipeline. Generally you’ll want to call methods of MapReduce instead of using this directly.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Util::Translation

#i18n_scope, #t

Constructor Details

#initialize(options = {}) ⇒ Phase

Creates a phase in the map-reduce pipeline

Parameters:

  • options (Hash) (defaults to: {})

    options for the phase

Options Hash (options):

  • :type (Symbol)

    one of :map, :reduce, :link

  • :language (String) — default: "javascript"

    “erlang” or “javascript”

  • :function (String, Array, Hash)

    In the case of Javascript, a literal function in a string, or a hash with :bucket and :key. In the case of Erlang, an Array of [module, function]. For a :link phase, a hash including any of :bucket, :tag or a WalkSpec.

  • :keep (Boolean) — default: false

    whether to return the results of this phase

  • :arg (Array) — default: nil

    any extra static arguments to pass to the phase



34
35
36
37
38
39
40
# File 'lib/riak/map_reduce/phase.rb', line 34

def initialize(options = {})
  self.type = options[:type]
  self.language = options[:language] || "javascript"
  self.function = options[:function]
  self.keep = options[:keep] || false
  self.arg = options[:arg]
end

Instance Attribute Details

#argArray

Returns any extra static arguments to pass to the phase.

Returns:

  • (Array)

    any extra static arguments to pass to the phase



25
26
27
# File 'lib/riak/map_reduce/phase.rb', line 25

def arg
  @arg
end

#functionString, ...

Returns For :map and :reduce types, the Javascript function to run (as a string or hash with bucket/key), or the module + function in Erlang to run. For a :link type, a WalkSpec or an equivalent hash.

Returns:

  • (String, Array<String, String>, Hash, WalkSpec)

    For :map and :reduce types, the Javascript function to run (as a string or hash with bucket/key), or the module + function in Erlang to run. For a :link type, a WalkSpec or an equivalent hash.



16
17
18
# File 'lib/riak/map_reduce/phase.rb', line 16

def function
  @function
end

#keepBoolean

Returns whether results of this phase will be returned.

Returns:

  • (Boolean)

    whether results of this phase will be returned



22
23
24
# File 'lib/riak/map_reduce/phase.rb', line 22

def keep
  @keep
end

#languageString

Returns the language of the phase’s function - “javascript” or “erlang”. Meaningless for :link type phases.

Returns:

  • (String)

    the language of the phase’s function - “javascript” or “erlang”. Meaningless for :link type phases.



19
20
21
# File 'lib/riak/map_reduce/phase.rb', line 19

def language
  @language
end

#typeSymbol

Returns the type of phase - :map, :reduce, or :link.

Returns:

  • (Symbol)

    the type of phase - :map, :reduce, or :link



13
14
15
# File 'lib/riak/map_reduce/phase.rb', line 13

def type
  @type
end

Instance Method Details

#as_json(options = nil) ⇒ Hash

Converts the phase to its JSON-compatible representation for job invocation.

Returns:

  • (Hash)

    a Hash-equivalent of the phase



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/riak/map_reduce/phase.rb', line 73

def as_json(options = nil)
  obj = case type
        when :map, :reduce
          defaults = {"language" => language, "keep" => keep}
          case function
          when Hash
            defaults.merge(function)
          when String
            if function =~ /\s*function\s*\(/ || function =~ /\s*fun\s*\(.*\)\s*->/
              defaults.merge("source" => function)
            else
              defaults.merge("name" => function)
            end
          when Array
            defaults.merge("module" => function[0], "function" => function[1])
          end
        when :link
          spec = WalkSpec.normalize(function).first
          {"bucket" => spec.bucket, "tag" => spec.tag, "keep" => spec.keep || keep}
        end
  obj["arg"] = arg if arg
  { type => obj }
end

#to_json(*a) ⇒ String

Converts the phase to JSON for use while invoking a job.

Returns:

  • (String)

    a JSON representation of the phase



67
68
69
# File 'lib/riak/map_reduce/phase.rb', line 67

def to_json(*a)
  as_json.to_json(*a)
end