mobb 0.3.1 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 749131cf75ad400bf376e82f587cf2c51812255091fe617d015a3310e2c73758
4
- data.tar.gz: a4f1869ab602a310a36dea7a501211fe598e85b42c264989ae2b20e19b411e70
3
+ metadata.gz: febcad507b908eb89cc3a74a26787e1d7d216157bb6d24e4bee947308a781fab
4
+ data.tar.gz: 7a952215c219f37bb24e02606b0e36daba75c240e19ff0f2ca2f0e11dfab3e45
5
5
  SHA512:
6
- metadata.gz: d253c8903cb253552a9e8821cc565a39647d51e0d229f21bc83c3ef117a9916b6eef3c2dcaed658556661a8908c852be8e09d6452b620cd8e3b2ab46526d1e0c
7
- data.tar.gz: 164d570551220f9779646f01e19f88ae991c13a175d2f9ffcba91a4cb5a8460e8912436992ae71cf84ff639b0d0b182efc87a7981ac96c1e35a3bbde6fb67755
6
+ metadata.gz: 1bbff647c951289f4de76e6739a1dce400f5ad68ca671c93c43563b1b7f585730c0963e47fe2e32e8d8e3834de932ec8ec60b82843a33c733aa4f98c7b745543
7
+ data.tar.gz: a141458e8442486f8729d3debbc1555e0a71d7fe02cc1ac7eecad20ea3beeb1b169c1cc0e7d07e062cfca187ff1306a81ca283ef15f3657168877f80e1d05016
@@ -3,6 +3,20 @@ require 'mobb'
3
3
  set :service, 'slack'
4
4
  set :name, "example bot"
5
5
 
6
+ before do
7
+ puts "=========="
8
+ puts "before filter"
9
+ puts @env.body
10
+ puts "=========="
11
+ end
12
+
13
+ after do
14
+ puts "=========="
15
+ puts "after filter"
16
+ puts @body
17
+ puts "=========="
18
+ end
19
+
6
20
  on "hello" do
7
21
  "Hi! I'm #{settings.name}"
8
22
  end
data/lib/mobb/base.rb CHANGED
@@ -71,11 +71,15 @@ module Mobb
71
71
  # TODO: encode input messages
72
72
 
73
73
  invoke do
74
- # TODO: before filters
74
+ filter! :before
75
75
  handle_event
76
76
  end
77
77
  ensure
78
- # TODO: after fillters
78
+ begin
79
+ filter! :after
80
+ rescue ::Exception => boom
81
+ # TODO: invoke { handle_exception!(boom) }
82
+ end
79
83
  end
80
84
 
81
85
  def invoke
@@ -93,6 +97,17 @@ module Mobb
93
97
  nil
94
98
  end
95
99
 
100
+ def filter!(type, base = settings)
101
+ filter! type, base.superclass if base.superclass.respond_to?(:filters)
102
+ base.filters[type].each { |signature|
103
+ # TODO: Refactor compile! and process_event to change conditions in a hash (e,g, { source_cond: [], dest_cond: [] })
104
+ pattern = signature.first
105
+ source_conditions = signature[2]
106
+ wrapper = signature[1]
107
+ process_event(pattern, source_conditions, wrapper)
108
+ }
109
+ end
110
+
96
111
  def handle_event(base = settings, passed_block = nil)
97
112
  if responds = base.events[@env.event_type]
98
113
  responds.each do |pattern, block, source_conditions, dest_conditions|
@@ -116,9 +131,9 @@ module Mobb
116
131
 
117
132
  case res
118
133
  when ::Mobb::Matcher::Matched
119
- yield(self, *(res.matched))
134
+ block ? block[self, *(res.matched)] : yield(self, *(res.matched))
120
135
  when TrueClass
121
- yield self
136
+ block ? block[self] : yield(self)
122
137
  else
123
138
  nil
124
139
  end
@@ -142,10 +157,11 @@ module Mobb
142
157
  /src\/kernel\/bootstrap\/[A-Z]/ # maglev kernel files
143
158
  ]
144
159
 
145
- attr_reader :events
160
+ attr_reader :events, :filters
146
161
 
147
162
  def reset!
148
163
  @events = {}
164
+ @filters = { before: [], after: [] }
149
165
  @source_conditions = []
150
166
  @dest_conditions = []
151
167
  @extensions = []
@@ -163,6 +179,18 @@ module Mobb
163
179
  self
164
180
  end
165
181
 
182
+ def before(pattern = /.*/, **options, &block)
183
+ add_filter(:before, pattern, options, &block)
184
+ end
185
+
186
+ def after(pattern = /.*/, **options, &block)
187
+ add_filter(:after, pattern, options, &block)
188
+ end
189
+
190
+ def add_filter(type, pattern = /.*/, **options, &block)
191
+ filters[type] << compile!(type, pattern, options, &block)
192
+ end
193
+
166
194
  def receive(pattern, options = {}, &block) event(:message, pattern, options, &block); end
167
195
  alias :on :receive
168
196
 
@@ -189,6 +217,8 @@ module Mobb
189
217
  compile(pattern, options)
190
218
  when :ticker
191
219
  compile_cron(pattern, at)
220
+ else
221
+ compile(pattern, options)
192
222
  end
193
223
  unbound_method = generate_method("#{type}", &block)
194
224
  source_conditions, @source_conditions = @source_conditions, []
@@ -438,7 +468,7 @@ module Mobb
438
468
  end
439
469
 
440
470
  delegate :receive, :on, :every, :cron,
441
- :set, :enable, :disable, :clear,
471
+ :set, :enable, :disable, :clear, :before, :after,
442
472
  :helpers, :register
443
473
 
444
474
  class << self
@@ -447,4 +477,26 @@ module Mobb
447
477
 
448
478
  self.target = Application
449
479
  end
480
+
481
+ # Create a new Mobb application; the block is evaluated in the class scope.
482
+ def self.new(base = Base, &block)
483
+ base = Class.new(base)
484
+ base.class_eval(&block) if block_given?
485
+ base
486
+ end
487
+
488
+ # Extend the top-level DSL with the modules provided.
489
+ def self.register(*extensions, &block)
490
+ Delegator.target.register(*extensions, &block)
491
+ end
492
+
493
+ # Include the helper modules provided in Mobb's request context.
494
+ def self.helpers(*extensions, &block)
495
+ Delegator.target.helpers(*extensions, &block)
496
+ end
497
+
498
+ # Use the middleware for classic applications.
499
+ def self.use(*args, &block)
500
+ Delegator.target.use(*args, &block)
501
+ end
450
502
  end
data/lib/mobb/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Mobb
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mobb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kinoppyd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-21 00:00:00.000000000 Z
11
+ date: 2018-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: repp