Class: Pipeblock::Pipeblock

Inherits:
BasicObject
Defined in:
lib/pipeblock.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(caller_object, &computation) ⇒ Pipeblock

Returns a new instance of Pipeblock.



17
18
19
20
21
# File 'lib/pipeblock.rb', line 17

def initialize(caller_object, &computation)
  @computation = computation
  @caller_object = caller_object
  @last_value = nil
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(*args, &b) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/pipeblock.rb', line 52

def method_missing(*args, &b)
  if last_value.nil?
    @last_value = __result__.__send__(*args, &b)
  else
    new_args = args.insert(1, last_value)
    @last_value = caller_object.__send__(*new_args, &b)
    @reference = last_value
  end
  last_value
end

Instance Attribute Details

#caller_objectObject (readonly)

Returns the value of attribute caller_object.



15
16
17
# File 'lib/pipeblock.rb', line 15

def caller_object
  @caller_object
end

#last_valueObject (readonly)

Returns the value of attribute last_value.



15
16
17
# File 'lib/pipeblock.rb', line 15

def last_value
  @last_value
end

Instance Method Details

#__result__Object



23
24
25
# File 'lib/pipeblock.rb', line 23

def __result__
  @reference
end

#external(*args, &block) ⇒ Object



63
64
65
66
67
# File 'lib/pipeblock.rb', line 63

def external(*args, &block)
  proc = args.shift
  @last_value = proc.call(last_value)
  @reference = last_value
end

#inspectObject



31
32
33
# File 'lib/pipeblock.rb', line 31

def inspect
  last_value.present? ? last_value.inspect : @reference.inspect
end

#raise(*args) ⇒ Object



40
41
42
# File 'lib/pipeblock.rb', line 40

def raise(*args)
  __result__.__send__(:raise, *args, &b)
end

#respond_to?(message) ⇒ Boolean

Returns:

  • (Boolean)


35
36
37
38
# File 'lib/pipeblock.rb', line 35

def respond_to? (message)
  message = message.to_sym
  [:__result__, :__inspect__].include?(message) or __result__.respond_to? message
end

#run_listObject



48
49
50
# File 'lib/pipeblock.rb', line 48

def run_list
  self.instance_eval(&@computation)
end

#start(value) ⇒ Object



27
28
29
# File 'lib/pipeblock.rb', line 27

def start(value)
  @last_value = value
end

#to_s(*args) ⇒ Object



44
45
46
# File 'lib/pipeblock.rb', line 44

def to_s(*args)
  last_value.to_s(*args)
end