mobb 0.1.1 → 0.2.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: 2047c6ffa8e1ad5878d243eadea897391f90059aa77d4a9d1cb5a45941b64550
4
- data.tar.gz: b4ba4916d0397c8b2f7545b0d42da3054e660bcb178c8083a88e36a6640ccaf9
3
+ metadata.gz: f1786f31311eda789fd50527e7a5cbdbce91c63388668ba248db37f32f5c2578
4
+ data.tar.gz: c89c89b84d4e6298152dd78113d941bc397dfa2c65ea352bafa084caa5a5d009
5
5
  SHA512:
6
- metadata.gz: 9570920bc64af22401fc063d04dc710d8ea4f68114c98f210f03cc67734234c9fa9e8bbe1a5f7f4fcb55edf9cba07b39321cc0e1d1289062990ffec71715e063
7
- data.tar.gz: 7636deef2a178bd6753118f2446dc8d4692c3ed343028616339fde990ab3369109f82f4e8f345d98e320fe195c610e7c85ae2f475c601411980f3e1c2012d111
6
+ metadata.gz: 74778071b90f9656e2cd2e29b8b88e98ccf6168c05f33c0af44c82036f1214eac7ac8bc6742cd6658a2039849fa35bc117cf55e515cb409e0945cc80b859b03c
7
+ data.tar.gz: a0c47902564e323ccb4be959451ec21d433ceedb66f656efa1d56762e1705e0fea316f92ce1c03444bc1100f5ebe45e3381a9bb75e59c9b4ed3bd14db77f4600
data/README.md CHANGED
@@ -32,7 +32,7 @@ Write your logic in `app.rb` like...
32
32
  require 'mobb'
33
33
 
34
34
  set :name, "example bot"
35
- '
35
+
36
36
  on "hello" do
37
37
  "hi! i'm #{settings.name}!"
38
38
  end
@@ -50,6 +50,60 @@ then the shell will start to wait for your input, so you can type 'hello' and hi
50
50
  hi! i'm example bot!"
51
51
  ```
52
52
 
53
+ ## Helpers
54
+
55
+ You can define helper methods like this.
56
+
57
+ ```ruby
58
+ require 'mobb'
59
+
60
+ helpers do
61
+ def greet(name)
62
+ "Hi #{name}, what't up"
63
+ end
64
+ end
65
+
66
+ on "hello" do
67
+ greet(@env.user.name)
68
+ end
69
+
70
+ ```
71
+
72
+ ## Conditions
73
+
74
+ You can use conditions `ignore_bot` and `reply_to_me`.
75
+
76
+ ```ruby
77
+ require 'mobb'
78
+ set :service, 'slack'
79
+
80
+ # You must set `ignore_bot` true when response same message
81
+ on 'Yo', ignore_bot: true do
82
+ 'Yo'
83
+ end
84
+
85
+ on /Hi/, reply_to_me: true do
86
+ "Hi #{@env.user.name}"
87
+ end
88
+ ```
89
+
90
+ And you can define conditions yourself.
91
+
92
+ ```ruby
93
+ require 'mobb'
94
+ set :service, 'slack'
95
+
96
+ set(:probability) { |value| condition { rand <= value } }
97
+
98
+ on /Yo/, reply_to_me: true, probability: 0.1 do
99
+ "Yo"
100
+ end
101
+
102
+ on /Yo/, reply_to_me: true do
103
+ "Ha?"
104
+ end
105
+ ```
106
+
53
107
  # Service handlers
54
108
 
55
109
  Mobb is implemented based on [Repp](https://github.com/kinoppyd/repp) Interface.
@@ -92,8 +92,8 @@ module Mobb
92
92
 
93
93
  def handle_event(base = settings, passed_block = nil)
94
94
  if responds = base.events[@env.event_type]
95
- responds.each do |pattern, block|
96
- process_event(pattern) do |*args|
95
+ responds.each do |pattern, block, conditions|
96
+ process_event(pattern, conditions) do |*args|
97
97
  event_eval { block[*args] }
98
98
  end
99
99
  end
@@ -103,15 +103,19 @@ module Mobb
103
103
  nil
104
104
  end
105
105
 
106
- def process_event(pattern, block = nil, values = [])
106
+ def process_event(pattern, conditions, block = nil, values = [])
107
107
  res = pattern.match?(@env.body)
108
- case res
109
- when ::Mobb::Matcher::Matched
110
- yield(self, *(res.matched))
111
- when TrueClass
112
- yield self
113
- else
114
- nil
108
+ catch(:pass) do
109
+ conditions.each { |c| throw :pass unless c.bind(self).call }
110
+
111
+ case res
112
+ when ::Mobb::Matcher::Matched
113
+ yield(self, *(res.matched))
114
+ when TrueClass
115
+ yield self
116
+ else
117
+ nil
118
+ end
115
119
  end
116
120
  end
117
121
 
@@ -136,6 +140,7 @@ module Mobb
136
140
 
137
141
  def reset!
138
142
  @events = {}
143
+ @conditions = []
139
144
  end
140
145
 
141
146
  def settings
@@ -151,13 +156,17 @@ module Mobb
151
156
  (@events[type] ||= []) << compile!(type, pattern, options, &block)
152
157
  end
153
158
 
154
- def compile!(type, pattern, option, &block)
155
- matcher = compile(pattern, option)
159
+ def compile!(type, pattern, options, &block)
160
+ options.each_pair { |option, args| send(option, *args) }
161
+
162
+ matcher = compile(pattern, options)
156
163
  unbound_method = generate_method("#{type}", &block)
164
+ conditions, @conditions = @conditions, []
157
165
  wrapper = block.arity != 0 ?
158
166
  proc { |instance, args| unbound_method.bind(instance).call(*args) } :
159
167
  proc { |instance, args| unbound_method.bind(instance).call }
160
- [matcher, wrapper]
168
+
169
+ [ matcher, wrapper, conditions ]
161
170
  end
162
171
 
163
172
  def compile(pattern, options) Matcher.new(pattern, options); end
@@ -169,6 +178,11 @@ module Mobb
169
178
  method
170
179
  end
171
180
 
181
+ def helpers(*extensions, &block)
182
+ class_eval(&block) if block_given?
183
+ include(*extensions) if extensions.any?
184
+ end
185
+
172
186
  def development?; environment == :development; end
173
187
  def production?; environment == :production; end
174
188
  def test?; environment == :test; end
@@ -209,6 +223,22 @@ module Mobb
209
223
  self
210
224
  end
211
225
 
226
+ def condition(name = "#{caller.first[/`.*'/]} condition", &block)
227
+ @conditions << generate_method(name, &block)
228
+ end
229
+
230
+ def ignore_bot(cond)
231
+ condition do
232
+ @env.bot? != cond
233
+ end
234
+ end
235
+
236
+ def reply_to_me(cond)
237
+ condition do
238
+ @env.reply_to.include?(settings.name) == cond
239
+ end
240
+ end
241
+
212
242
  def enable(*options) options.each { |option| set(option, true) }; end
213
243
  def disable(*options) options.each { |option| set(option, false) }; end
214
244
  def clear(*options) options.each { |option| set(option, nil) }; end
@@ -343,7 +373,8 @@ module Mobb
343
373
  end
344
374
 
345
375
  delegate :receive, :on, #:every,
346
- :set, :enable, :disable, :clear
376
+ :set, :enable, :disable, :clear,
377
+ :helpers
347
378
 
348
379
  class << self
349
380
  attr_accessor :target
@@ -1,3 +1,3 @@
1
1
  module Mobb
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  end
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency "repp", "~> 0.1"
22
+ spec.add_dependency "repp", "~> 0.2"
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.16"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
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.1.1
4
+ version: 0.2.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-06-29 00:00:00.000000000 Z
11
+ date: 2018-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: repp
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.1'
19
+ version: '0.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.1'
26
+ version: '0.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement