Class: Patty::Base
- Inherits:
-
Object
- Object
- Patty::Base
- Defined in:
- lib/patty/base.rb
Instance Method Summary collapse
- #build_signature(datetime_string = '') ⇒ Object
- #emit(signature = nil, value = nil, marker = nil) ⇒ Object
- #fetch(signature = nil, marker = nil) ⇒ Object
- #flow ⇒ Object
-
#initialize(storage = nil) ⇒ Base
constructor
A new instance of Base.
- #map(flow_title = '', signature = nil, record = nil) ⇒ Object
- #reduce(data = []) ⇒ Object
- #run ⇒ Object
- #title ⇒ Object
Constructor Details
Instance Method Details
#build_signature(datetime_string = '') ⇒ Object
20 21 22 |
# File 'lib/patty/base.rb', line 20 def build_signature(datetime_string = '') Patty::TimeSignature.new(datetime_string[0, 16]).align end |
#emit(signature = nil, value = nil, marker = nil) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/patty/base.rb', line 24 def emit(signature = nil, value = nil, marker = nil) if signature.nil? signature = Patty::TimeSignature.from_datetime.align end current_value = fetch signature, marker if current_value.nil? current_value = reduce [current_value, value] else current_value = value end @storage.put signature, current_value, marker end |
#fetch(signature = nil, marker = nil) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/patty/base.rb', line 48 def fetch(signature = nil, marker = nil) current_value = @storage.get signature, marker if current_value.nil? data = signature.children.inject([]) do |acc, child| child_value = fetch(child, marker) acc << child_value acc end current_value = reduce data @storage.put signature, current_value, marker end current_value end |
#flow ⇒ Object
16 17 18 |
# File 'lib/patty/base.rb', line 16 def flow 'events' end |
#map(flow_title = '', signature = nil, record = nil) ⇒ Object
40 41 42 |
# File 'lib/patty/base.rb', line 40 def map(flow_title = '', signature = nil, record = nil) emit(signature, value, record['marker']) end |
#reduce(data = []) ⇒ Object
44 45 46 |
# File 'lib/patty/base.rb', line 44 def reduce(data = []) data.inject(0){ |acc, item| acc += item } end |
#run ⇒ Object
66 67 68 69 70 71 72 |
# File 'lib/patty/base.rb', line 66 def run transport = Waffle::Base.new eval("Waffle::Transports::#{Waffle::Config.transport.capitalize}").new transport.subscribe flow do |flow_title, event| map flow_title, build_signature(event['occured_at']), event end end |
#title ⇒ Object
12 13 14 |
# File 'lib/patty/base.rb', line 12 def title self.class.to_s.downcase end |