Module: Lou::Transformer
- Defined in:
- lib/lou/transformer.rb,
lib/lou/transformer/step.rb
Defined Under Namespace
Classes: NeverError, Step
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.extended(base) ⇒ Object
9
10
11
12
13
14
15
16
|
# File 'lib/lou/transformer.rb', line 9
def self.extended(base)
base.class_eval do
class_attribute :steps
self.steps = []
class_attribute :error_class
self.error_class = Lou::Transformer::NeverError
end
end
|
Instance Method Details
#apply(input, total_steps = steps.count) ⇒ Object
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/lou/transformer.rb', line 28
def apply(input, total_steps = steps.count)
applied_steps = 0
begin
steps.last(total_steps).each do |t|
input = t.apply(input)
applied_steps += 1
end
rescue error_class => e
reverse(input, applied_steps) if total_steps == steps.count
raise e
end
input
end
|
#reverse(output, total_steps = steps.count) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/lou/transformer.rb', line 42
def reverse(output, total_steps = steps.count)
reversed_steps = 0
begin
steps.first(total_steps).reverse_each do |t|
output = t.reverse(output)
reversed_steps += 1
end
rescue error_class => e
apply(output, reversed_steps) if total_steps == steps.count
raise e
end
output
end
|
#reverse_on(error) ⇒ Object
18
19
20
|
# File 'lib/lou/transformer.rb', line 18
def reverse_on(error)
self.error_class = error
end
|
#step ⇒ Object
22
23
24
25
26
|
# File 'lib/lou/transformer.rb', line 22
def step
Step.new.tap do |t|
self.steps += [t]
end
end
|