piece_pipe 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ v0.1.0 - 2012-06-06
2
+ * Some class name changes for "step" motif consistency.
3
+
4
+ v0.0.1 - 2012-05-30
5
+ * Initial release
data/README.md CHANGED
@@ -2,6 +2,21 @@
2
2
 
3
3
  PiecePipe is about breaking your problem into its smallest, most interesting pieces, solving those pieces and not spending time on the glue code between them.
4
4
 
5
+ ## Motivation
6
+
7
+ Though this style of programming is similar to sequence processing using map, select and inject, PiecePipe
8
+ gives us power to:
9
+
10
+ * Improve expressiveness -- our high-level pipeline definition reads like a book and encompasses a comprehensible algorithm.
11
+ * Address and test each of the interesting little steps.
12
+ * Decouple ourselves from the implementation of map, select etc, which assume you're processing a collection, and have preconceptions on how they should be iterated over.
13
+
14
+ For sufficiently interesting algorithms we often talk in circles about how to break the problem down such that
15
+ no one piece is too complicated, then glue it all together. We end up with a tree of strangely named calculator
16
+ objects and an almost arbitrary sprinkling of looping/mapping constructs. We got sick of trying to
17
+ organize the glue and decided to see if we could just boil it down to "what are the interesting operations,
18
+ and what are the smallest pieces we can operate on?"
19
+
5
20
  ## Installation
6
21
 
7
22
  Add this line to your application's Gemfile:
@@ -31,6 +46,79 @@ class NuclearPowerPlantHealthSummaryGenerator
31
46
  collect(:plant_health_summary).
32
47
  to_enum
33
48
  end
49
+
50
+ # Custom Step, overriding #generate_sequence to produce a sequence of power plants for a given region.
51
+ # Each power plant is "produced" as a Hash with one key (so far) heading down the pipeline.
52
+ class FetchPowerPlantsByRegion < PiecePipe::Step
53
+ def generate_sequence(inputs)
54
+ # The expected interface of any Step's soure is that it supports #to_enum.
55
+ source.to_enum.each do |inputs|
56
+ inputs[:region].power_plants.those_still_open.each do |power_plant|
57
+ produce power_plant: power_plant # Each call to #produce sends another object down the pipe
58
+ end
59
+ end
60
+ enb
61
+ end
62
+
63
+ # For any given power plant, determine the worst reactor.
64
+ # Implemented as an AssemblyStep that analyzes inputs[:power_plant] from the prior Step,
65
+ # and installs a new key/val pair for :worst_reactor.
66
+ class FindWorstReactor < PiecePipe::AssemblyStep
67
+ def receive(inputs)
68
+ # Figure out which reactor has the highest radiation levels.
69
+ # "install" works a lot like "produce", but rather than take responsibility for the totality
70
+ # of the produced object, we're just saying "add :worst_reactor to whatever's there and pass it on".
71
+ install worst_reactor: inputs[:power_plant].reactors.reject(&:offline?).max_by(:&radiation)
72
+ end
73
+ end
74
+
75
+ # Figure out which CSS class corresonds to the radiation from the worst reactor.
76
+ # (At this point, the inputs Hash has keys :region, :power_plant, and :worst_reactor.)
77
+ class DetermineStatusClass < PiecePipe::AssemblyStep
78
+ def receive(inputs)
79
+ install highlight_css_class: StatusFormatters.determine_css_class(inputs[:worst_reactor].radiation)
80
+ end
81
+ end
82
+
83
+ # Composite our details into a line-item structure for our report.
84
+ # Even though we consume most of the interesting values that arrive in the inputs Hash,
85
+ # we're letting them ride as we simply install one more key, :plant_health_summary.
86
+ # (This comes in handy, as we intend to sort these structures in a later step, using values
87
+ # that are present in our transient input Hash, but NOT actually available in the
88
+ # report structure.)
89
+ class BuildPlantHealthSummary < PiecePipe::AssemblyStep
90
+ def receive(inputs)
91
+ power_plant = inputs[:power_plant]
92
+ worst_reactor = inputs[:worst_reactor]
93
+ install plant_health_summary: PlantHealthSummary.new(
94
+ power_plant_id: power_plant.id,
95
+ supervisor: power_plant.supervisor,
96
+ reactor_name: worst_reactor.name,
97
+ radiation: StatusFormatters.format_radiation(worst_reactor.radiation),
98
+ css_class: inputs[:highlight_css_class]
99
+ )
100
+ end
101
+ end
102
+
103
+ # Sort all the values that come through the pipe based on the radiation of the worst reactor
104
+ # in each power_plant.
105
+ # Notice this is not an AssemblyStep, and we're overriding #generate_sequence again, this time
106
+ # because we're implementing a sink. The resulting downstream objects have the same structure
107
+ # they arrived with.
108
+ class SortByRadiationLevelsDescending < PiecePipe::Step
109
+ def generate_sequence
110
+ source.to_enum.sort_by do |inputs|
111
+ inputs[:worst_reactor].radiation
112
+ end.each do |inputs|
113
+ produce inputs
114
+ end
115
+ end
116
+ end
117
+
118
+ #... and that's it. Recall that the pipeline terminates with .collect(:plant_health_summary), which
119
+ # is shorthand for a special Step that accepts Hashes and uses #produce to spit out only the specified
120
+ # objects. Downstream of our #collect, only the PlantHealthSummary remains.
121
+
34
122
  end
35
123
  ```
36
124
 
@@ -0,0 +1,13 @@
1
+ MethodStep
2
+ MethodAssemblyStep
3
+ TapStep
4
+ MapStep
5
+ HashedAggregator
6
+
7
+ In-file docs and example on how to use the MapStep and Aggregator. Mention in the README.
8
+
9
+ Details on the AssemblyStep concept and implementation.
10
+
11
+ Testing: ezpipe. Bring it, document it, provide examples.
12
+
13
+
@@ -1,12 +1,12 @@
1
1
  require 'piece_pipe/pipeline'
2
- require 'piece_pipe/pipeline_element'
2
+ require 'piece_pipe/step'
3
3
 
4
- require 'piece_pipe/assembly_station'
4
+ require 'piece_pipe/assembly_step'
5
5
  require 'piece_pipe/collector'
6
6
  require 'piece_pipe/debug_step'
7
7
  require 'piece_pipe/hashed_aggregator'
8
8
  require 'piece_pipe/map_step'
9
- require 'piece_pipe/method_assembly_station'
10
- require 'piece_pipe/method_element'
9
+ require 'piece_pipe/method_assembly_step'
10
+ require 'piece_pipe/method_step'
11
11
  require 'piece_pipe/tap_step'
12
12
  require 'piece_pipe/version'
@@ -1,6 +1,6 @@
1
1
 
2
2
  module PiecePipe
3
- class AssemblyStation < PipelineElement
3
+ class AssemblyStep < Step
4
4
  def process(item)
5
5
  ensure_hash_like_object item
6
6
  @assembly = item
@@ -33,7 +33,7 @@ module PiecePipe
33
33
  private
34
34
  def ensure_hash_like_object(obj)
35
35
  unless obj.respond_to?(:[]) and obj.respond_to?(:merge) and obj.respond_to?(:dup)
36
- raise "AssemblyStation object #{self.class.name} requires its source to produce Hash-like elements; not acceptable: #{obj.inspect}"
36
+ raise "AssemblyStep object #{self.class.name} requires its source to produce Hash-like elements; not acceptable: #{obj.inspect}"
37
37
  end
38
38
  end
39
39
  end
@@ -1,5 +1,5 @@
1
1
  module PiecePipe
2
- class Collector < PipelineElement
2
+ class Collector < Step
3
3
  def initialize(key)
4
4
  @key = key
5
5
  end
@@ -1,5 +1,5 @@
1
1
  module PiecePipe
2
- class DebugStep < PipelineElement
2
+ class DebugStep < Step
3
3
  def initialize(opts={},&block)
4
4
  @opts = opts
5
5
  @block = block
@@ -1,5 +1,5 @@
1
1
  module PiecePipe
2
- class HashedAggregator < PipelineElement
2
+ class HashedAggregator < Step
3
3
  def initialize
4
4
  @hash = {}
5
5
  end
@@ -1,5 +1,5 @@
1
1
  module PiecePipe
2
- class MapStep < PipelineElement
2
+ class MapStep < Step
3
3
  def process(item)
4
4
  map item
5
5
  end
@@ -1,5 +1,5 @@
1
1
  module PiecePipe
2
- class MethodAssemblyStation < AssemblyStation
2
+ class MethodAssemblyStep < AssemblyStep
3
3
  def initialize(meth)
4
4
  @method = meth
5
5
  end
@@ -1,5 +1,5 @@
1
1
  module PiecePipe
2
- class MethodElement < PipelineElement
2
+ class MethodStep < Step
3
3
  def initialize(meth)
4
4
  raise "method cannot be nil" if meth.nil?
5
5
  raise "method must accept 1 or 2 arguments; it accepts #{meth.arity}" if meth.arity != 1 and meth.arity != 2
@@ -20,7 +20,7 @@ module PiecePipe
20
20
  when Class
21
21
  step = step.new # If the arg is a Class, instantiate it
22
22
  when Method
23
- step = MethodElement.new(step)
23
+ step = MethodStep.new(step)
24
24
  end
25
25
  add_step step
26
26
  end
@@ -30,7 +30,7 @@ module PiecePipe
30
30
  when Class
31
31
  step = step.new # If the arg is a Class, instantiate it
32
32
  when Method
33
- step = MethodAssemblyStation.new(step)
33
+ step = MethodAssemblyStep.new(step)
34
34
  end
35
35
  add_step step
36
36
  end
@@ -1,5 +1,5 @@
1
1
  module PiecePipe
2
- class PipelineElement
2
+ class Step
3
3
  attr_accessor :source
4
4
 
5
5
  def to_enum
@@ -17,7 +17,7 @@ module PiecePipe
17
17
 
18
18
  def generate_sequence
19
19
  if source.nil?
20
- raise "The source of PipelineElement #{self.class.name} is nil"
20
+ raise "The source of Step #{self.class.name} is nil"
21
21
  end
22
22
  source.to_enum.each do |item|
23
23
  process(item)
@@ -1,5 +1,5 @@
1
1
  module PiecePipe
2
- class TapStep < PipelineElement
2
+ class TapStep < Step
3
3
  def initialize(&block)
4
4
  @block = block
5
5
  end
@@ -1,3 +1,3 @@
1
1
  module PiecePipe
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -1,10 +1,10 @@
1
1
  require "spec_helper"
2
2
 
3
- describe PiecePipe::AssemblyStation do
3
+ describe PiecePipe::AssemblyStep do
4
4
 
5
- context "default AssemblyStation" do
5
+ context "default AssemblyStep" do
6
6
  it "produces unaltered items from its source" do
7
- as = PiecePipe::AssemblyStation.new
7
+ as = PiecePipe::AssemblyStep.new
8
8
  as.source = [
9
9
  {hello: "hippo"},
10
10
  {hello: "lion"}
@@ -17,8 +17,8 @@ describe PiecePipe::AssemblyStation do
17
17
  end
18
18
  end
19
19
 
20
- context "a typical AssemblyStation" do
21
- class AnimalPhraser < PiecePipe::AssemblyStation
20
+ context "a typical AssemblyStep" do
21
+ class AnimalPhraser < PiecePipe::AssemblyStep
22
22
  def receive(inputs)
23
23
  install phrase: "There are #{inputs[:count]} #{inputs[:animal]}s"
24
24
  end
@@ -36,7 +36,7 @@ describe PiecePipe::AssemblyStation do
36
36
  ]
37
37
  end
38
38
 
39
- class Cuber < PiecePipe::AssemblyStation
39
+ class Cuber < PiecePipe::AssemblyStep
40
40
  def receive(inputs)
41
41
  num = inputs[:num]
42
42
  install squared: num * num, cubed: num * num * num
@@ -56,8 +56,8 @@ describe PiecePipe::AssemblyStation do
56
56
  end
57
57
  end
58
58
 
59
- context "a filtering AssemblyStation" do
60
- class HippoHater < PiecePipe::AssemblyStation
59
+ context "a filtering AssemblyStep" do
60
+ class HippoHater < PiecePipe::AssemblyStep
61
61
  def receive(inputs)
62
62
  unless inputs[:animal] == "Hippo"
63
63
  install phrase: "There are #{inputs[:count]} #{inputs[:animal]}s"
@@ -80,8 +80,8 @@ describe PiecePipe::AssemblyStation do
80
80
  end
81
81
  end
82
82
 
83
- context "an exploding AssemblyStation" do
84
- class LionCrusher < PiecePipe::AssemblyStation
83
+ context "an exploding AssemblyStep" do
84
+ class LionCrusher < PiecePipe::AssemblyStep
85
85
  def receive(inputs)
86
86
  if inputs[:animal] == "Hippo"
87
87
  inputs[:lion_count].times do
@@ -106,18 +106,18 @@ describe PiecePipe::AssemblyStation do
106
106
 
107
107
  context "error and oddball cases" do
108
108
  context "source produces non-Hash inputs" do
109
- class MyOtherSomething < PiecePipe::AssemblyStation
109
+ class MyOtherSomething < PiecePipe::AssemblyStep
110
110
  end
111
111
 
112
112
  it "raises an error indicating requisite input type" do
113
113
  as = MyOtherSomething.new
114
114
  as.source = [1,2,3]
115
- lambda do as.to_enum.to_a end.should raise_error(/AssemblyStation object MyOtherSomething.*Hash-like/)
115
+ lambda do as.to_enum.to_a end.should raise_error(/AssemblyStep object MyOtherSomething.*Hash-like/)
116
116
  end
117
117
  end
118
118
 
119
119
  context "overridden receive() installs nil" do
120
- class NilInstaller < PiecePipe::AssemblyStation
120
+ class NilInstaller < PiecePipe::AssemblyStep
121
121
  def receive(inputs)
122
122
  install nil
123
123
  end
@@ -136,7 +136,7 @@ describe PiecePipe::AssemblyStation do
136
136
  end
137
137
 
138
138
  context "using noop()" do
139
- class UseTheNoOp < PiecePipe::AssemblyStation
139
+ class UseTheNoOp < PiecePipe::AssemblyStep
140
140
  def receive(inputs)
141
141
  noop
142
142
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe PiecePipe::MethodAssemblyStation do
3
+ describe PiecePipe::MethodAssemblyStep do
4
4
  let(:pipeline) { PiecePipe::Pipeline.new }
5
5
 
6
6
  context "wrapping methods with single arguments" do
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe PiecePipe::MethodElement do
3
+ describe PiecePipe::MethodStep do
4
4
  let(:pipeline) { PiecePipe::Pipeline.new }
5
5
 
6
6
  context "wrapping methods with single arguments" do
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe PiecePipe::Pipeline do
4
- class OneTwoThree < PiecePipe::PipelineElement
4
+ class OneTwoThree < PiecePipe::Step
5
5
  def generate_sequence
6
6
  produce 1
7
7
  produce 2
@@ -9,7 +9,7 @@ describe PiecePipe::Pipeline do
9
9
  end
10
10
  end
11
11
 
12
- class TheDoubler < PiecePipe::PipelineElement
12
+ class TheDoubler < PiecePipe::Step
13
13
  def process(item)
14
14
  produce item * 2
15
15
  end
@@ -32,7 +32,7 @@ describe PiecePipe::Pipeline do
32
32
  end
33
33
  end
34
34
 
35
- context "using instantiated PipelineElements as steps" do
35
+ context "using instantiated Steps as steps" do
36
36
  it "produces transformed values by processing both steps for each item" do
37
37
  subject.
38
38
  step(OneTwoThree.new).
@@ -50,7 +50,7 @@ describe PiecePipe::Pipeline do
50
50
  subject.to_enum.to_a.should == [20, 40, 60]
51
51
  end
52
52
 
53
- it "works with PipelineElements" do
53
+ it "works with Steps" do
54
54
  subject.
55
55
  source(OneTwoThree.new).
56
56
  step(TheDoubler)
@@ -1,13 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe PiecePipe::PipelineElement do
3
+ describe PiecePipe::Step do
4
4
 
5
5
  let (:array_source) { [ "hippo", "distribution", "mechanism" ] }
6
6
 
7
- context "default PipelineElement" do
7
+ context "default Step" do
8
8
 
9
9
  it "provides an enumeration of its source's elements" do
10
- e = PiecePipe::PipelineElement.new
10
+ e = PiecePipe::Step.new
11
11
  e.source = array_source
12
12
 
13
13
  en = e.to_enum
@@ -19,7 +19,7 @@ describe PiecePipe::PipelineElement do
19
19
  end
20
20
 
21
21
  context "overriding #generate_sequence" do
22
- class IntegerGenerator < PiecePipe::PipelineElement
22
+ class IntegerGenerator < PiecePipe::Step
23
23
  def generate_sequence
24
24
  process 1
25
25
  process 2
@@ -32,7 +32,7 @@ describe PiecePipe::PipelineElement do
32
32
  en.to_a.should == [1,2,3]
33
33
  end
34
34
 
35
- class NothingGenerator < PiecePipe::PipelineElement
35
+ class NothingGenerator < PiecePipe::Step
36
36
  def generate_sequence
37
37
 
38
38
  end
@@ -45,7 +45,7 @@ describe PiecePipe::PipelineElement do
45
45
  end
46
46
 
47
47
  context "bypassing the default #process invocation" do
48
- class IntegerProducer < PiecePipe::PipelineElement
48
+ class IntegerProducer < PiecePipe::Step
49
49
  def generate_sequence
50
50
  produce 1
51
51
  produce 2
@@ -58,7 +58,7 @@ describe PiecePipe::PipelineElement do
58
58
  en.to_a.should == [1,2,3]
59
59
  end
60
60
 
61
- class NothingProducer < PiecePipe::PipelineElement
61
+ class NothingProducer < PiecePipe::Step
62
62
  def generate_sequence
63
63
 
64
64
  end
@@ -72,7 +72,7 @@ describe PiecePipe::PipelineElement do
72
72
  end
73
73
 
74
74
  context "overriding #process" do
75
- class StringExpander < PiecePipe::PipelineElement
75
+ class StringExpander < PiecePipe::Step
76
76
  def process(item)
77
77
  produce "x" * item
78
78
  end
@@ -84,7 +84,7 @@ describe PiecePipe::PipelineElement do
84
84
  se.to_enum.to_a.should == ["xx", "xxxx"]
85
85
  end
86
86
 
87
- class AllFilter < PiecePipe::PipelineElement
87
+ class AllFilter < PiecePipe::Step
88
88
  def process(item)
89
89
 
90
90
  end
@@ -96,7 +96,7 @@ describe PiecePipe::PipelineElement do
96
96
  al.to_enum.to_a.should == []
97
97
  end
98
98
 
99
- class Exploder < PiecePipe::PipelineElement
99
+ class Exploder < PiecePipe::Step
100
100
  def process(item)
101
101
  item.times do
102
102
  produce "hi #{item}"
@@ -112,7 +112,7 @@ describe PiecePipe::PipelineElement do
112
112
  end
113
113
 
114
114
  context "nill source" do
115
- class MySomething < PiecePipe::PipelineElement
115
+ class MySomething < PiecePipe::Step
116
116
  end
117
117
 
118
118
  it "raises an error" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: piece_pipe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-05-30 00:00:00.000000000 Z
13
+ date: 2012-06-07 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: mocha
17
- requirement: !ruby/object:Gem::Requirement
17
+ requirement: &2152338560 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,15 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
- requirements:
28
- - - ! '>='
29
- - !ruby/object:Gem::Version
30
- version: '0'
25
+ version_requirements: *2152338560
31
26
  - !ruby/object:Gem::Dependency
32
27
  name: rspec
33
- requirement: !ruby/object:Gem::Requirement
28
+ requirement: &2152337340 !ruby/object:Gem::Requirement
34
29
  none: false
35
30
  requirements:
36
31
  - - ! '>='
@@ -38,15 +33,10 @@ dependencies:
38
33
  version: '0'
39
34
  type: :development
40
35
  prerelease: false
41
- version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
- requirements:
44
- - - ! '>='
45
- - !ruby/object:Gem::Version
46
- version: '0'
36
+ version_requirements: *2152337340
47
37
  - !ruby/object:Gem::Dependency
48
38
  name: rake
49
- requirement: !ruby/object:Gem::Requirement
39
+ requirement: &2152321200 !ruby/object:Gem::Requirement
50
40
  none: false
51
41
  requirements:
52
42
  - - ! '>='
@@ -54,12 +44,7 @@ dependencies:
54
44
  version: '0'
55
45
  type: :development
56
46
  prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
- requirements:
60
- - - ! '>='
61
- - !ruby/object:Gem::Version
62
- version: '0'
47
+ version_requirements: *2152321200
63
48
  description: ! 'PiecePipe is about breaking your problem into its smallest, most interesting
64
49
  pieces, solving those pieces and not spending time on the glue code between them. '
65
50
  email:
@@ -70,32 +55,34 @@ extensions: []
70
55
  extra_rdoc_files: []
71
56
  files:
72
57
  - .gitignore
58
+ - CHANGELOG
73
59
  - Gemfile
74
60
  - LICENSE
75
61
  - README.md
76
62
  - Rakefile
63
+ - documentation_todo.txt
77
64
  - lib/piece_pipe.rb
78
- - lib/piece_pipe/assembly_station.rb
65
+ - lib/piece_pipe/assembly_step.rb
79
66
  - lib/piece_pipe/collector.rb
80
67
  - lib/piece_pipe/debug_step.rb
81
68
  - lib/piece_pipe/hashed_aggregator.rb
82
69
  - lib/piece_pipe/map_step.rb
83
- - lib/piece_pipe/method_assembly_station.rb
84
- - lib/piece_pipe/method_element.rb
70
+ - lib/piece_pipe/method_assembly_step.rb
71
+ - lib/piece_pipe/method_step.rb
85
72
  - lib/piece_pipe/pipeline.rb
86
- - lib/piece_pipe/pipeline_element.rb
73
+ - lib/piece_pipe/step.rb
87
74
  - lib/piece_pipe/tap_step.rb
88
75
  - lib/piece_pipe/version.rb
89
76
  - piece_pipe.gemspec
90
- - spec/assembly_station_spec.rb
77
+ - spec/assembly_step_spec.rb
91
78
  - spec/collector_spec.rb
92
79
  - spec/hashed_aggregator_spec.rb
93
80
  - spec/map_step_spec.rb
94
- - spec/method_assembly_station_spec.rb
95
- - spec/method_element_spec.rb
96
- - spec/pipeline_element_spec.rb
81
+ - spec/method_assembly_step_spec.rb
82
+ - spec/method_step_spec.rb
97
83
  - spec/pipeline_spec.rb
98
84
  - spec/spec_helper.rb
85
+ - spec/step_spec.rb
99
86
  homepage: http://atomicobject.com
100
87
  licenses: []
101
88
  post_install_message:
@@ -116,19 +103,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
103
  version: '0'
117
104
  requirements: []
118
105
  rubyforge_project:
119
- rubygems_version: 1.8.24
106
+ rubygems_version: 1.8.10
120
107
  signing_key:
121
108
  specification_version: 3
122
109
  summary: PiecePipe helps you break your code into small interesting pieces and provides
123
110
  the glue for pipelining them together to provide elegant, readable code.
124
111
  test_files:
125
- - spec/assembly_station_spec.rb
112
+ - spec/assembly_step_spec.rb
126
113
  - spec/collector_spec.rb
127
114
  - spec/hashed_aggregator_spec.rb
128
115
  - spec/map_step_spec.rb
129
- - spec/method_assembly_station_spec.rb
130
- - spec/method_element_spec.rb
131
- - spec/pipeline_element_spec.rb
116
+ - spec/method_assembly_step_spec.rb
117
+ - spec/method_step_spec.rb
132
118
  - spec/pipeline_spec.rb
133
119
  - spec/spec_helper.rb
134
- has_rdoc:
120
+ - spec/step_spec.rb