take_care 0.0.1 → 0.0.2
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.
- data/README.md +9 -2
- data/lib/take_care/reliable.rb +18 -2
- data/lib/take_care/version.rb +1 -1
- data/spec/support/human.rb +17 -5
- data/spec/take_care/reliable_spec.rb +39 -9
- data/spec/take_care/worker_spec.rb +3 -1
- metadata +33 -15
- checksums.yaml +0 -7
data/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# TakeCare
|
|
2
2
|
|
|
3
|
-
Sidekiq wrapper for activerecord model
|
|
3
|
+
Sidekiq wrapper for activerecord model (or any class which instances are fetched by #id)
|
|
4
4
|
|
|
5
|
-
Method #take_care(method, *args) that delegates actual performing to sidekiq
|
|
5
|
+
Method #take_care(method, *args) that delegates actual performing of own method to sidekiq
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
@@ -35,6 +35,13 @@ human = Human.create(name: 'Alex')
|
|
|
35
35
|
|
|
36
36
|
human.take_care :hard_work, 'heavy box', 'second heavy box' # This goes to sidekiq
|
|
37
37
|
|
|
38
|
+
human.take_care_of :hard_work, 'heavy box', 'second heavy box' # Same using alias
|
|
39
|
+
|
|
40
|
+
# Same using dynamic methods (method is defined after first call)
|
|
41
|
+
human.take_care_hard_work 'heavy box', 'second heavy box'
|
|
42
|
+
# Or
|
|
43
|
+
human.take_care_of_hard_work 'heavy box', 'second heavy box'
|
|
44
|
+
|
|
38
45
|
```
|
|
39
46
|
|
|
40
47
|
## Contributing
|
data/lib/take_care/reliable.rb
CHANGED
|
@@ -1,8 +1,24 @@
|
|
|
1
1
|
module TakeCare
|
|
2
2
|
module Reliable
|
|
3
|
-
def take_care(
|
|
4
|
-
TakeCare::Worker.perform_async(self.class.to_s, self.id,
|
|
3
|
+
def take_care(method_name, *args)
|
|
4
|
+
TakeCare::Worker.perform_async(self.class.to_s, self.id, method_name, *args)
|
|
5
5
|
end
|
|
6
6
|
alias_method :take_care_of, :take_care
|
|
7
|
+
|
|
8
|
+
def respond_to?(method_name)
|
|
9
|
+
return false if self.class.private_method_defined?(method_name)
|
|
10
|
+
/\Atake_care_(?:of_)?(.+)\Z/ =~ method_name && self.respond_to?($1) || super
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def method_missing(method_name, *args, &block)
|
|
14
|
+
if self.class.private_method_defined?(method_name)
|
|
15
|
+
raise NoMethodError, "private method `#{method_name}' called for #{self}"
|
|
16
|
+
end
|
|
17
|
+
return super unless /\Atake_care_(?:of_)?(.+)\Z/ =~ method_name && self.respond_to?($1)
|
|
18
|
+
self.class.__send__(:define_method, method_name) do |*args|
|
|
19
|
+
self.take_care($1.to_sym, *args)
|
|
20
|
+
end
|
|
21
|
+
self.take_care($1.to_sym, *args)
|
|
22
|
+
end
|
|
7
23
|
end
|
|
8
24
|
end
|
data/lib/take_care/version.rb
CHANGED
data/spec/support/human.rb
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
def
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
module HumanMacros
|
|
2
|
+
def redefine_human_class
|
|
3
|
+
before :each do
|
|
4
|
+
Object.__send__ :remove_const, "Human" if Object.const_defined? "Human"
|
|
5
|
+
Object.const_set("Human", Class.new do
|
|
6
|
+
include TakeCare::Reliable
|
|
7
|
+
def id
|
|
8
|
+
4
|
|
9
|
+
end
|
|
5
10
|
|
|
6
|
-
|
|
11
|
+
def hard_work(box1, box2)
|
|
12
|
+
end
|
|
13
|
+
end)
|
|
14
|
+
end
|
|
7
15
|
end
|
|
8
16
|
end
|
|
17
|
+
|
|
18
|
+
RSpec.configure do |config|
|
|
19
|
+
config.extend HumanMacros
|
|
20
|
+
end
|
|
@@ -1,26 +1,56 @@
|
|
|
1
1
|
require "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe TakeCare::Reliable do
|
|
4
|
-
|
|
4
|
+
redefine_human_class
|
|
5
|
+
subject { Human.new }
|
|
5
6
|
|
|
6
7
|
describe "#take_care" do
|
|
7
8
|
it "delegates method calls to Worker" do
|
|
8
9
|
TakeCare::Worker.should_receive(:perform_async).with("Human", 4, :hard_work, :box1, :box2)
|
|
9
|
-
|
|
10
|
+
subject.take_care :hard_work, :box1, :box2
|
|
10
11
|
end
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
describe "#take_care_of (alias of #take_care)" do
|
|
14
15
|
it "delegates method calls to Worker" do
|
|
15
16
|
TakeCare::Worker.should_receive(:perform_async).with("Human", 4, :hard_work, :box1, :box2)
|
|
16
|
-
|
|
17
|
+
subject.take_care_of :hard_work, :box1, :box2
|
|
17
18
|
end
|
|
18
19
|
end
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
context 'Dynamic methods "take_care_..."' do
|
|
22
|
+
describe "#method_missing" do
|
|
23
|
+
it "delegates method calls to Worker" do
|
|
24
|
+
TakeCare::Worker.should_receive(:perform_async).with("Human", 4, :hard_work, :box1, :box2)
|
|
25
|
+
subject.take_care_hard_work :box1, :box2
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "defines dynamic method after first call (method missing should not be called after that)" do
|
|
29
|
+
TakeCare::Worker.stub(:perform_async)
|
|
30
|
+
subject.take_care_hard_work :box1, :box2
|
|
31
|
+
Human.instance_methods(false).should be_include :take_care_hard_work
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "second time acts same as first (dynamically defined method)" do
|
|
35
|
+
TakeCare::Worker.should_receive(:perform_async).with("Human", 4, :hard_work, :box1, :box2).twice
|
|
36
|
+
subject.take_care_hard_work :box1, :box2
|
|
37
|
+
subject.take_care_hard_work :box1, :box2
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "raises error if exists private method with same name" do
|
|
41
|
+
Human.class_eval { private; def take_care_hard_work; end }
|
|
42
|
+
expect { subject.take_care_hard_work :box1, :box2 }.to raise_error NameError
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe "#respond_to?" do
|
|
47
|
+
it { should be_respond_to :take_care_hard_work }
|
|
48
|
+
it { should be_respond_to :take_care_of_hard_work }
|
|
49
|
+
|
|
50
|
+
it "is false if exists private method with such name" do
|
|
51
|
+
Human.class_eval { private; def take_care_hard_work; end }
|
|
52
|
+
should_not be_respond_to :take_care_hard_work
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
26
56
|
end
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
require "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe TakeCare::Worker do
|
|
4
|
+
redefine_human_class
|
|
5
|
+
|
|
4
6
|
describe '#perform' do
|
|
5
7
|
it "should include Sidekiq::Worker" do
|
|
6
8
|
described_class.ancestors.should include Sidekiq::Worker
|
|
7
9
|
end
|
|
8
10
|
|
|
9
|
-
it "finds class instance by id and calls
|
|
11
|
+
it "finds class instance by id and calls method with received args" do
|
|
10
12
|
duty = double("Human instance")
|
|
11
13
|
Human.should_receive(:find).with(4).and_return(duty)
|
|
12
14
|
duty.should_receive(:hard_work).with(:box1, :box2)
|
metadata
CHANGED
|
@@ -1,46 +1,52 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: take_care
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.2
|
|
5
|
+
prerelease:
|
|
5
6
|
platform: ruby
|
|
6
7
|
authors:
|
|
7
8
|
- Alexander Avoyants
|
|
8
9
|
autorequire:
|
|
9
10
|
bindir: bin
|
|
10
11
|
cert_chain: []
|
|
11
|
-
date: 2013-10-
|
|
12
|
+
date: 2013-10-23 00:00:00.000000000 Z
|
|
12
13
|
dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
|
14
15
|
name: sidekiq
|
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
16
18
|
requirements:
|
|
17
|
-
- - '>='
|
|
19
|
+
- - ! '>='
|
|
18
20
|
- !ruby/object:Gem::Version
|
|
19
21
|
version: '0'
|
|
20
22
|
type: :runtime
|
|
21
23
|
prerelease: false
|
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
23
26
|
requirements:
|
|
24
|
-
- - '>='
|
|
27
|
+
- - ! '>='
|
|
25
28
|
- !ruby/object:Gem::Version
|
|
26
29
|
version: '0'
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
|
28
31
|
name: activesupport
|
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
none: false
|
|
30
34
|
requirements:
|
|
31
|
-
- - '>='
|
|
35
|
+
- - ! '>='
|
|
32
36
|
- !ruby/object:Gem::Version
|
|
33
37
|
version: '0'
|
|
34
38
|
type: :runtime
|
|
35
39
|
prerelease: false
|
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
37
42
|
requirements:
|
|
38
|
-
- - '>='
|
|
43
|
+
- - ! '>='
|
|
39
44
|
- !ruby/object:Gem::Version
|
|
40
45
|
version: '0'
|
|
41
46
|
- !ruby/object:Gem::Dependency
|
|
42
47
|
name: bundler
|
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
none: false
|
|
44
50
|
requirements:
|
|
45
51
|
- - ~>
|
|
46
52
|
- !ruby/object:Gem::Version
|
|
@@ -48,6 +54,7 @@ dependencies:
|
|
|
48
54
|
type: :development
|
|
49
55
|
prerelease: false
|
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
none: false
|
|
51
58
|
requirements:
|
|
52
59
|
- - ~>
|
|
53
60
|
- !ruby/object:Gem::Version
|
|
@@ -55,29 +62,33 @@ dependencies:
|
|
|
55
62
|
- !ruby/object:Gem::Dependency
|
|
56
63
|
name: rake
|
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
|
65
|
+
none: false
|
|
58
66
|
requirements:
|
|
59
|
-
- - '>='
|
|
67
|
+
- - ! '>='
|
|
60
68
|
- !ruby/object:Gem::Version
|
|
61
69
|
version: '0'
|
|
62
70
|
type: :development
|
|
63
71
|
prerelease: false
|
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
+
none: false
|
|
65
74
|
requirements:
|
|
66
|
-
- - '>='
|
|
75
|
+
- - ! '>='
|
|
67
76
|
- !ruby/object:Gem::Version
|
|
68
77
|
version: '0'
|
|
69
78
|
- !ruby/object:Gem::Dependency
|
|
70
79
|
name: rspec
|
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
|
81
|
+
none: false
|
|
72
82
|
requirements:
|
|
73
|
-
- - '>='
|
|
83
|
+
- - ! '>='
|
|
74
84
|
- !ruby/object:Gem::Version
|
|
75
85
|
version: '0'
|
|
76
86
|
type: :development
|
|
77
87
|
prerelease: false
|
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
|
89
|
+
none: false
|
|
79
90
|
requirements:
|
|
80
|
-
- - '>='
|
|
91
|
+
- - ! '>='
|
|
81
92
|
- !ruby/object:Gem::Version
|
|
82
93
|
version: '0'
|
|
83
94
|
description: Sidekiq wrapper for activerecord model
|
|
@@ -104,26 +115,33 @@ files:
|
|
|
104
115
|
homepage: ''
|
|
105
116
|
licenses:
|
|
106
117
|
- MIT
|
|
107
|
-
metadata: {}
|
|
108
118
|
post_install_message:
|
|
109
119
|
rdoc_options: []
|
|
110
120
|
require_paths:
|
|
111
121
|
- lib
|
|
112
122
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
123
|
+
none: false
|
|
113
124
|
requirements:
|
|
114
|
-
- - '>='
|
|
125
|
+
- - ! '>='
|
|
115
126
|
- !ruby/object:Gem::Version
|
|
116
127
|
version: '0'
|
|
128
|
+
segments:
|
|
129
|
+
- 0
|
|
130
|
+
hash: 4157606556185016579
|
|
117
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
|
+
none: false
|
|
118
133
|
requirements:
|
|
119
|
-
- - '>='
|
|
134
|
+
- - ! '>='
|
|
120
135
|
- !ruby/object:Gem::Version
|
|
121
136
|
version: '0'
|
|
137
|
+
segments:
|
|
138
|
+
- 0
|
|
139
|
+
hash: 4157606556185016579
|
|
122
140
|
requirements: []
|
|
123
141
|
rubyforge_project:
|
|
124
|
-
rubygems_version:
|
|
142
|
+
rubygems_version: 1.8.23
|
|
125
143
|
signing_key:
|
|
126
|
-
specification_version:
|
|
144
|
+
specification_version: 3
|
|
127
145
|
summary: Sidekiq wrapper for activerecord model (any class which instances fetched
|
|
128
146
|
by id)
|
|
129
147
|
test_files:
|
checksums.yaml
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
SHA1:
|
|
3
|
-
metadata.gz: fa95c237faea234849c224d4c8e00e69fc37af63
|
|
4
|
-
data.tar.gz: 7a3006a04abcdb2afcccd02407cac1efbe068d14
|
|
5
|
-
SHA512:
|
|
6
|
-
metadata.gz: fc341db5e388cdae6c349a1870d6429d137977ce0641fd9f4d4963e07385418c1d320a8830734ffd480c5fbcb5e516ae0902d0b9f74999a111c38bd9740dbcbe
|
|
7
|
-
data.tar.gz: ba4dec1f20f71aa8347ec9d1f9e9422e2f39a21a6ae1f0dd8984cd276c639e0ebe03057a47217977fc132f321a8fa045e63ebe80649cbc5c7e4ea7c12f61fa2b
|