textris 0.2.3 → 0.3.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
  SHA1:
3
- metadata.gz: b44445640c697f0c38a8da55759fd8be3c133dbb
4
- data.tar.gz: eb601a7627c8d9c371902757e1e6094aa5fa6635
3
+ metadata.gz: 41a7e696b4cae68e7793538ad07e490c415f048c
4
+ data.tar.gz: 1cd679882d001d36860d0e9e0129dd096d036422
5
5
  SHA512:
6
- metadata.gz: 366ba25af97f926c66bdf98885178f321aa850bd6f781995771d054c15240281a850310fa52a8e1300c83c3a4a7b4b150ceba24a6e7cdf30b3e36f6407553e7d
7
- data.tar.gz: 1402b57a76a44888c4331e54efd25f6a675228f5f96cbecb6b35bf84c836324284ead86894a28a4abea072ecf4b0c932cfa31735f5fe8a7447da1f254f63b94d
6
+ metadata.gz: 67b9819759fb074b871ce4ef1f4aef2c6baeddd9472e111b75beb1ac8ce33530126481d04aac3f47ac3274229bf910341d8a7f9ba926e79b813e36f114a181ac
7
+ data.tar.gz: 08cffc6511507e0c2898d0f0ea07ea9667e9947054db10fc89031ce0b4d977f1ea1480a3ab9f4643856e867c3a9a31e29495a6b57ce51011f59173fb03eff165
data/README.md CHANGED
@@ -74,6 +74,8 @@ UserTexter.delay_until(1.day.from_now).welcome(user)
74
74
 
75
75
  > You should not call `deliver` after the action invocation when using delay. It will be called by the *Textris::Delay::Sidekiq::Worker* worker.
76
76
 
77
+ > You can safely pass ActiveRecord records and arrays as delayed action arguments. **textris** will store their `id`'s and find them upon scheduled delivery.
78
+
77
79
  Keep in mind that **textris** does not install *sidekiq* for you. If you don't have it yet, [install Redis](http://redis.io/topics/quickstart) on your machine and add the *sidekiq* gem to `Gemfile`:
78
80
 
79
81
  ```ruby
@@ -5,7 +5,6 @@ require 'phony'
5
5
  begin
6
6
  require 'twilio-ruby'
7
7
  rescue LoadError
8
- # no twilio-ruby
9
8
  end
10
9
 
11
10
  begin
@@ -17,6 +16,7 @@ rescue LoadError
17
16
  else
18
17
  require 'textris/delay/sidekiq'
19
18
  require 'textris/delay/sidekiq/proxy'
19
+ require 'textris/delay/sidekiq/serializer'
20
20
  require 'textris/delay/sidekiq/worker'
21
21
  end
22
22
 
@@ -9,6 +9,7 @@ module Textris
9
9
  end
10
10
 
11
11
  def method_missing(method_name, *args)
12
+ args = ::Textris::Delay::Sidekiq::Serializer.serialize(args)
12
13
  args = [@texter, method_name, args]
13
14
 
14
15
  if @perform_in
@@ -0,0 +1,75 @@
1
+ module Textris
2
+ module Delay
3
+ module Sidekiq
4
+ module Serializer
5
+ ACTIVERECORD_POINTER = 'Textris::ActiveRecordPointer'
6
+ ACTIVERECORD_ARRAY_POINTER = 'Textris::ActiveRecordArrayPointer'
7
+
8
+ class << self
9
+ def serialize(objects)
10
+ objects.collect do |object|
11
+ serialize_active_record_object(object) ||
12
+ serialize_active_record_array(object) ||
13
+ object
14
+ end
15
+ rescue NameError
16
+ objects
17
+ end
18
+
19
+ def deserialize(objects)
20
+ objects.collect do |object|
21
+ deserialize_active_record_object(object) ||
22
+ deserialize_active_record_array(object) ||
23
+ object
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def serialize_active_record_object(object)
30
+ if object.class < ActiveRecord::Base && object.id.present?
31
+ [ACTIVERECORD_POINTER, object.class.to_s, object.id]
32
+ end
33
+ end
34
+
35
+ def deserialize_active_record_object(object)
36
+ if object.is_a?(Array) &&
37
+ object.try(:length) == 3 &&
38
+ object[0] == ACTIVERECORD_POINTER
39
+ object[1].constantize.find(object[2])
40
+ end
41
+ end
42
+
43
+ def serialize_active_record_array(array)
44
+ if array.class < ActiveRecord::Relation
45
+ [ACTIVERECORD_ARRAY_POINTER, array.model.to_s, array.map(&:id)]
46
+ elsif array.is_a?(Array) &&
47
+ (model = get_active_record_common_model(array))
48
+ [ACTIVERECORD_ARRAY_POINTER, model, array.map(&:id)]
49
+ end
50
+ end
51
+
52
+ def deserialize_active_record_array(object)
53
+ if object.is_a?(Array) &&
54
+ object.try(:length) == 3 &&
55
+ object[0] == ACTIVERECORD_ARRAY_POINTER
56
+ object[1].constantize.find(object[2])
57
+ end
58
+ end
59
+
60
+ def get_active_record_common_model(items)
61
+ items = items.collect do |item|
62
+ if item.class < ActiveRecord::Base
63
+ item.class.to_s
64
+ end
65
+ end.uniq
66
+
67
+ if items.size == 1
68
+ items.first
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -4,11 +4,13 @@ module Textris
4
4
  class Worker
5
5
  include ::Sidekiq::Worker
6
6
 
7
- def perform(texter, action, params)
7
+ def perform(texter, action, args)
8
8
  texter = texter.safe_constantize
9
9
 
10
10
  if texter.present?
11
- texter.new(action, *params).call_action.deliver
11
+ args = ::Textris::Delay::Sidekiq::Serializer.deserialize(args)
12
+
13
+ texter.new(action, *args).call_action.deliver
12
14
  end
13
15
  end
14
16
  end
@@ -63,8 +63,8 @@ module Textris
63
63
 
64
64
  def parse_to(to)
65
65
  to = [*to]
66
- to = to.select { |phone| Phony.plausible?(phone) }
67
- to = to.map { |phone| Phony.normalize(phone) }
66
+ to = to.select { |phone| Phony.plausible?(phone.to_s) }
67
+ to = to.map { |phone| Phony.normalize(phone.to_s) }
68
68
 
69
69
  to
70
70
  end
@@ -1,3 +1,3 @@
1
1
  module Textris
2
- VERSION = "0.2.3"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: textris
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karol Słuszniak
@@ -179,6 +179,7 @@ files:
179
179
  - lib/textris/delay/sidekiq.rb
180
180
  - lib/textris/delay/sidekiq/missing.rb
181
181
  - lib/textris/delay/sidekiq/proxy.rb
182
+ - lib/textris/delay/sidekiq/serializer.rb
182
183
  - lib/textris/delay/sidekiq/worker.rb
183
184
  - lib/textris/delivery.rb
184
185
  - lib/textris/delivery/base.rb