mobb 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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