rpromise 0.1.1 → 0.1.2

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
  SHA1:
3
- metadata.gz: 71a0304c401834de12b087ed0616ad637b7ad3a6
4
- data.tar.gz: b38e756b3ccb4dcc60dbdffe866987f29ad34314
3
+ metadata.gz: 6a717f4226d359019498c9ce4aa6f47bffb97d89
4
+ data.tar.gz: df6fbd05f8e20065d2f9a1ff17110810b8e34cfc
5
5
  SHA512:
6
- metadata.gz: 6b09464f4d17c111bafae20fcbdcff7d000b8edcf715e1bbb320ebb07e84c4bb14b0e2d1b53b5000bb079aadb00c8e3aa2ab14ded7f89a2d4e45b23a4f7f8486
7
- data.tar.gz: f2f7a02741c54b6e7452131b9fc4d54bb5d1b652f1a29f1fa9a483e894aa60baffa061c450f55d13ed0a96ba2499ef34bd9d94aa19993ba55c0d711e5e9f66bb
6
+ metadata.gz: 2d8305e2ecae4c6aa80150b6294ac93b38ab1b836ab4114c821b2d731f072a2fd3ecc13f30e2f32a91ac92979789f7dde06b3a1f7a370be3ef2a0a5c684a7eff
7
+ data.tar.gz: 4852082d68d72be33c8897e31192da03ca4354ed22fa86974925da93838d40c9ae55e37e21cb154e87960ef16f682ea39e6f4d9e279963dfaf0e8221c40b8c80
data/README.md CHANGED
@@ -137,6 +137,18 @@ end, lambda do |err|
137
137
  end)
138
138
  ```
139
139
 
140
+ ### Convert method to promise
141
+
142
+ You can convert any method into a promise
143
+
144
+ ```ruby
145
+ promise = Rpromise.from_method(100, :to_s)
146
+
147
+ promise.then(lambda do |value|
148
+ value[0...2] # => "10"
149
+ end)
150
+ ```
151
+
140
152
  ## Contributing
141
153
 
142
154
  1. Fork it
@@ -1,3 +1,3 @@
1
1
  class Rpromise
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/rpromise.rb CHANGED
@@ -69,6 +69,12 @@ class Rpromise
69
69
  end
70
70
  end
71
71
 
72
+ def self.from_method(obj, method_name, *args, &block)
73
+ Rpromise.new do |resolve, reject|
74
+ resolve.call(obj.method(method_name).call(*args,&block))
75
+ end
76
+ end
77
+
72
78
  protected
73
79
 
74
80
  def is_valid_block?(arg)
@@ -243,4 +243,55 @@ describe ::Rpromise do
243
243
  end
244
244
  end
245
245
 
246
+ describe '.from_method' do
247
+ MyObject = Struct.new(:store) do
248
+ def method_with_args(*args)
249
+ return args
250
+ end
251
+ def method_with_block
252
+ yield
253
+ end
254
+ end
255
+
256
+ before(:each) do
257
+ @obj = MyObject.new('Hello World')
258
+ end
259
+
260
+ it 'converts method to a running promise' do
261
+ lambda_value = nil
262
+ lock = true
263
+ promise = Rpromise.from_method(@obj, :store)
264
+ promise.then(lambda do |store_value|
265
+ lambda_value = store_value
266
+ lock = false
267
+ end)
268
+ loop { break unless lock }
269
+ expect(lambda_value).to eq 'Hello World'
270
+ end
271
+
272
+ it 'passes the method arguments' do
273
+ promise = Rpromise.from_method(@obj, :method_with_args, 1, 2, 3, 'test')
274
+ lambda_value = nil
275
+ lock = true
276
+ promise.then(lambda do |value|
277
+ lambda_value = value
278
+ lock = false
279
+ end)
280
+ loop { break unless lock }
281
+ expect(lambda_value).to eq [1,2,3,'test']
282
+ end
283
+
284
+ it 'passes the method block' do
285
+ promise = Rpromise.from_method(@obj, :method_with_block) { 'Block' }
286
+ lambda_value = nil
287
+ lock = true
288
+ promise.then(lambda do |value|
289
+ lambda_value = value
290
+ lock = false
291
+ end)
292
+ loop { break unless lock }
293
+ expect(lambda_value).to eq 'Block'
294
+ end
295
+ end
296
+
246
297
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rpromise
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Molinari