scorpion-ioc 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.rspec +2 -1
  4. data/README.md +111 -44
  5. data/lib/scorpion/attribute.rb +0 -1
  6. data/lib/scorpion/attribute_set.rb +15 -7
  7. data/lib/scorpion/dependency/argument_dependency.rb +25 -0
  8. data/lib/scorpion/{prey/builder_prey.rb → dependency/builder_dependency.rb} +8 -8
  9. data/lib/scorpion/dependency/captured_dependency.rb +44 -0
  10. data/lib/scorpion/dependency/class_dependency.rb +25 -0
  11. data/lib/scorpion/dependency/module_dependency.rb +14 -0
  12. data/lib/scorpion/dependency.rb +137 -0
  13. data/lib/scorpion/dependency_map.rb +135 -0
  14. data/lib/scorpion/hunt.rb +158 -0
  15. data/lib/scorpion/hunter.rb +21 -20
  16. data/lib/scorpion/locale/en.yml +5 -1
  17. data/lib/scorpion/{king.rb → object.rb} +72 -53
  18. data/lib/scorpion/object_constructor.rb +55 -0
  19. data/lib/scorpion/rails/active_record/association.rb +65 -0
  20. data/lib/scorpion/rails/active_record/model.rb +28 -0
  21. data/lib/scorpion/rails/active_record/relation.rb +66 -0
  22. data/lib/scorpion/rails/active_record.rb +21 -0
  23. data/lib/scorpion/rails/controller.rb +22 -62
  24. data/lib/scorpion/rails/job.rb +30 -0
  25. data/lib/scorpion/rails/nest.rb +86 -0
  26. data/lib/scorpion/rails/railtie.rb +16 -0
  27. data/lib/scorpion/rails.rb +4 -0
  28. data/lib/scorpion/rspec/helper.rb +25 -0
  29. data/lib/scorpion/rspec.rb +17 -0
  30. data/lib/scorpion/stinger.rb +69 -0
  31. data/lib/scorpion/version.rb +1 -1
  32. data/lib/scorpion.rb +91 -44
  33. data/scorpion.gemspec +1 -1
  34. data/spec/internal/app/models/author.rb +17 -0
  35. data/spec/internal/app/models/todo.rb +14 -0
  36. data/spec/internal/db/schema.rb +12 -1
  37. data/spec/lib/scorpion/dependency/argument_dependency_spec.rb +18 -0
  38. data/spec/lib/scorpion/dependency/builder_dependency_spec.rb +41 -0
  39. data/spec/lib/scorpion/dependency/module_dependency_spec.rb +16 -0
  40. data/spec/lib/scorpion/dependency_map_spec.rb +108 -0
  41. data/spec/lib/scorpion/dependency_spec.rb +131 -0
  42. data/spec/lib/scorpion/hunt_spec.rb +93 -0
  43. data/spec/lib/scorpion/hunter_spec.rb +53 -14
  44. data/spec/lib/scorpion/object_constructor_spec.rb +49 -0
  45. data/spec/lib/scorpion/object_spec.rb +214 -0
  46. data/spec/lib/scorpion/rails/active_record/association_spec.rb +26 -0
  47. data/spec/lib/scorpion/rails/active_record/model_spec.rb +33 -0
  48. data/spec/lib/scorpion/rails/active_record/relation_spec.rb +72 -0
  49. data/spec/lib/scorpion/rails/controller_spec.rb +9 -9
  50. data/spec/lib/scorpion/rails/job_spec.rb +34 -0
  51. data/spec/lib/scorpion/rspec/helper_spec.rb +44 -0
  52. data/spec/lib/scorpion_spec.rb +0 -35
  53. data/spec/spec_helper.rb +1 -0
  54. metadata +54 -26
  55. data/lib/scorpion/hunting_map.rb +0 -139
  56. data/lib/scorpion/prey/captured_prey.rb +0 -44
  57. data/lib/scorpion/prey/class_prey.rb +0 -13
  58. data/lib/scorpion/prey/hunted_prey.rb +0 -14
  59. data/lib/scorpion/prey/module_prey.rb +0 -14
  60. data/lib/scorpion/prey.rb +0 -94
  61. data/spec/internal/db/combustion_test.sqlite +0 -0
  62. data/spec/lib/scorpion/hunting_map_spec.rb +0 -126
  63. data/spec/lib/scorpion/instance_spec.rb +0 -5
  64. data/spec/lib/scorpion/king_spec.rb +0 -198
  65. data/spec/lib/scorpion/prey/builder_prey_spec.rb +0 -42
  66. data/spec/lib/scorpion/prey/module_prey_spec.rb +0 -16
  67. data/spec/lib/scorpion/prey_spec.rb +0 -76
@@ -0,0 +1,93 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ module Test
5
+ module Hunt
6
+ class Logger; end
7
+
8
+ class Target
9
+ include ::Scorpion::Object
10
+
11
+ depend_on do
12
+ logger Logger, public: true
13
+ sailor Logger, public: true, lazy: true
14
+ end
15
+ end
16
+
17
+ end
18
+ end
19
+
20
+ describe Scorpion::Hunt do
21
+
22
+ let( :scorpion ){ double Scorpion }
23
+ let( :hunt ){ Scorpion::Hunt.new scorpion, String, nil }
24
+
25
+ describe "#fetch_by_traits" do
26
+ it "changes context" do
27
+ expect( scorpion ).to receive( :execute ) do |hunt|
28
+ expect( hunt.contract ).to eq Regexp
29
+ end
30
+
31
+ hunt.fetch_by_traits Regexp, nil
32
+ end
33
+
34
+ it "restores context" do
35
+ expect( scorpion ).to receive( :execute )
36
+
37
+ hunt.fetch_by_traits Numeric, nil
38
+ expect( hunt.contract ).to eq String
39
+ end
40
+
41
+ it "finds matching argument in parent" do
42
+ hunt.arguments << "Hello"
43
+
44
+ expect( hunt.fetch String ).to eq "Hello"
45
+ end
46
+
47
+ it "finds matching argument in grandparent" do
48
+ hunt = Scorpion::Hunt.new scorpion, String, nil, "Hello"
49
+ hunt.send :push, Regexp, nil, [], nil
50
+
51
+ expect( scorpion ).to receive( :execute ) do |hunt|
52
+ next if hunt.contract == String
53
+
54
+ expect( hunt.fetch String ).to eq "Hello"
55
+ end.at_least(:once)
56
+
57
+ hunt.fetch Numeric
58
+ end
59
+ end
60
+
61
+ describe "#inject" do
62
+ let( :target ) do
63
+ Test::Hunt::Target.new
64
+ end
65
+
66
+ before( :each ) do
67
+ allow( scorpion ).to receive( :execute ) do |hunt|
68
+ Test::Hunt::Logger.new if hunt.contract == Test::Hunt::Logger
69
+ end
70
+ end
71
+
72
+ it "injects attributes" do
73
+ hunt.inject target
74
+
75
+ expect( target.logger? ).to be_truthy
76
+ expect( target.logger ).to be_a Test::Hunt::Logger
77
+ end
78
+
79
+ it "does not overwrite existing attributes" do
80
+ logger = Test::Hunt::Logger.new
81
+ target.logger = logger
82
+ hunt.inject target
83
+
84
+ expect( target.logger ).to be logger
85
+ end
86
+
87
+ it "does not fetch lazy attributes" do
88
+ hunt.inject target
89
+ expect( target.sailor? ).to be_falsy
90
+ end
91
+ end
92
+
93
+ end
@@ -15,12 +15,35 @@ module Test
15
15
  class Implicit; end
16
16
 
17
17
  class Zoo
18
- include Scorpion::King
18
+ include Scorpion::Object
19
19
 
20
- feed_on do
20
+ depend_on do
21
21
  bear Bear
22
22
  end
23
23
  end
24
+
25
+ class City; end
26
+
27
+ class Park
28
+ include Scorpion::Object
29
+
30
+ depend_on do
31
+ city City
32
+ end
33
+
34
+ initialize( zoo: Test::Hunter::Zoo )
35
+ end
36
+
37
+ class City
38
+ include Scorpion::Object
39
+
40
+ depend_on do
41
+ park Park
42
+ end
43
+
44
+ initialize( zoo: Test::Hunter::Zoo )
45
+ end
46
+
24
47
  end
25
48
  end
26
49
 
@@ -39,36 +62,52 @@ describe Scorpion::Hunter do
39
62
  end
40
63
  end
41
64
 
42
- it "spawns prey" do
43
- expect( hunter.hunt Test::Hunter::Beast ).to be_a Test::Hunter::Beast
65
+ it "spawns dependency" do
66
+ expect( hunter.fetch Test::Hunter::Beast ).to be_a Test::Hunter::Beast
44
67
  end
45
68
 
46
69
  it "spawns a new instance for multiple requests" do
47
- first = hunter.hunt Test::Hunter::Beast
48
- expect( hunter.hunt Test::Hunter::Beast ).not_to be first
70
+ first = hunter.fetch Test::Hunter::Beast
71
+ expect( hunter.fetch Test::Hunter::Beast ).not_to be first
49
72
  end
50
73
 
51
- it "spawns the same instance for captured prey" do
52
- first = hunter.hunt_by_traits Test::Hunter::Beast, :tame
53
- expect( hunter.hunt_by_traits Test::Hunter::Beast, :tame ).to be first
74
+ it "spawns the same instance for captured dependency" do
75
+ first = hunter.fetch_by_traits Test::Hunter::Beast, :tame
76
+ expect( hunter.fetch_by_traits Test::Hunter::Beast, :tame ).to be first
54
77
  end
55
78
 
56
- it "injects nested kings" do
57
- zoo = hunter.hunt Test::Hunter::Zoo
79
+ it "injects nested objects" do
80
+ zoo = hunter.fetch Test::Hunter::Zoo
58
81
  expect( zoo.bear ).to be_a Test::Hunter::Bear
59
82
  end
60
83
 
61
84
  it "accepts arguments that are passed to constructor" do
62
- obj = hunter.hunt Test::Hunter::Argumented, :awesome
85
+ obj = hunter.fetch Test::Hunter::Argumented, :awesome
63
86
  expect( obj.arg ).to eq :awesome
64
87
  end
65
88
 
66
89
  it "implicitly spawns Class contracts" do
67
- expect( hunter.hunt Test::Hunter::Implicit ).to be_a Test::Hunter::Implicit
90
+ expect( hunter.fetch Test::Hunter::Implicit ).to be_a Test::Hunter::Implicit
68
91
  end
69
92
 
70
93
  it "implicitly spawns Class contracts with empty traits" do
71
- expect( hunter.hunt_by_traits Test::Hunter::Implicit, [] ).to be_a Test::Hunter::Implicit
94
+ expect( hunter.fetch_by_traits Test::Hunter::Implicit, [] ).to be_a Test::Hunter::Implicit
95
+ end
96
+
97
+ context "child dependencies" do
98
+ it "passes initializer args to child dependencies" do
99
+ zoo = Test::Hunter::Zoo.new
100
+ city = hunter.fetch Test::Hunter::City, zoo
101
+
102
+ expect( city.park.zoo ).to be zoo
103
+ end
104
+
105
+ it "passes self to child dependencies" do
106
+ zoo = Test::Hunter::Zoo.new
107
+ city = hunter.fetch Test::Hunter::City, zoo
108
+
109
+ expect( city.park.city ).to be city
110
+ end
72
111
  end
73
112
 
74
113
  end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe Scorpion::ObjectConstructor do
4
+ it 'defined an initializer' do
5
+ klass = Class.new do
6
+ include Scorpion::Object
7
+
8
+ initialize logger: String
9
+ end
10
+
11
+ expect( klass.instance_method(:initialize).arity ).to eq 1
12
+ end
13
+
14
+ it "executes initializer code" do
15
+ expect do |b|
16
+ klass = Class.new do
17
+ include Scorpion::Object
18
+
19
+ initialize label: String, &b
20
+ end
21
+
22
+ klass.new "home"
23
+ end.to yield_control
24
+ end
25
+
26
+ it "creates an initializer that accepts a block" do
27
+ klass = Class.new do
28
+ include Scorpion::Object
29
+
30
+ initialize label: String do |&block|
31
+ block.call
32
+ end
33
+ end
34
+
35
+ expect do |b|
36
+ klass.new "apples", &b
37
+ end.to yield_control
38
+ end
39
+
40
+ it "it defines matching attributes" do
41
+ klass = Class.new do
42
+ include Scorpion::Object
43
+
44
+ initialize label: String
45
+ end
46
+
47
+ expect( klass.new( "apples" ).label ).to eq "apples"
48
+ end
49
+ end
@@ -0,0 +1,214 @@
1
+ require 'spec_helper'
2
+
3
+ module Test
4
+ module Object
5
+ class UserService; end
6
+ class Logger; end
7
+ class BackLogger; end
8
+ class ColorLogger; end
9
+
10
+ class Mamal
11
+ include Scorpion::Object
12
+
13
+ def initialize( family, parent = nil, options={}, &block )
14
+ @family = family
15
+ @parent = parent
16
+ @options = inject_from! options
17
+
18
+
19
+ yield if block_given?
20
+ end
21
+
22
+ depend_on do
23
+ user_service Test::Object::UserService
24
+ logger Test::Object::Logger
25
+ manager Test::Object::Logger, public: true
26
+ executive_manager Test::Object::Logger, private: true
27
+ end
28
+
29
+ attr_accessor :family
30
+ attr_accessor :parent
31
+ attr_accessor :options
32
+ end
33
+
34
+ class Mouse < Mamal
35
+
36
+ depend_on do
37
+ cheese Test::Object::Logger
38
+ logger Test::Object::BackLogger
39
+ end
40
+ def initialize( options = {} )
41
+ super 'mouse', nil, options
42
+ end
43
+ end
44
+
45
+ class Bear < Mamal
46
+ depend_on do
47
+ logger Test::Object::ColorLogger
48
+ end
49
+ end
50
+
51
+ end
52
+ end
53
+
54
+ describe Scorpion::Object do
55
+
56
+ let( :scorpion ){ double Scorpion }
57
+ let( :hunt ) { double Scorpion::Hunt }
58
+
59
+ before( :each ) do
60
+ allow( scorpion ).to receive( :prepare )
61
+
62
+ allow( hunt ).to receive( :inject )
63
+ allow( hunt ).to receive( :scorpion ).and_return scorpion
64
+ end
65
+
66
+ describe ".spawn" do
67
+
68
+ it "can spawn" do
69
+ mamal = Test::Object::Mamal.spawn hunt, 'mouse', 'rodent', name: 'name'
70
+ expect( mamal ).to be_a Test::Object::Mamal
71
+ end
72
+
73
+ it "calls inject" do
74
+ expect( hunt ).to receive( :inject )
75
+ Test::Object::Mouse.spawn hunt
76
+ end
77
+
78
+ it "can inherit" do
79
+ mouse = Test::Object::Mouse.spawn hunt, name: 'name'
80
+ expect( mouse.family ).to eq 'mouse'
81
+ expect( mouse.options ).to include name: 'name'
82
+ end
83
+
84
+ it "yields to constructor" do
85
+ expect do |b|
86
+ Test::Object::Mouse.spawn hunt, name: 'name', &b
87
+ end.to yield_control
88
+ end
89
+
90
+ it "invokes on_injected" do
91
+ expect_any_instance_of( Test::Object::Mouse ).to receive( :on_injected )
92
+ Test::Object::Mouse.spawn hunt
93
+ end
94
+ end
95
+
96
+ describe "accessors" do
97
+ let( :object ) do
98
+ Test::Object::Mamal.spawn hunt, 'harry', 'jim', name: 'name', manager: double
99
+ end
100
+
101
+ subject{ object }
102
+
103
+ it "defines accessors" do
104
+ expect( object ).to respond_to :user_service
105
+ expect( object ).not_to respond_to :user_service=
106
+ end
107
+
108
+ it "supports private reader" do
109
+ expect( object.respond_to? :executive_manager, false ).to be_falsy
110
+ expect( object.respond_to? :executive_manager, true ).to be_truthy
111
+ end
112
+
113
+ it "supports public writer" do
114
+ expect( object.respond_to? :manager=, false ).to be_truthy
115
+ end
116
+
117
+ describe "#attr_dependency" do
118
+ it "defines attributes" do
119
+ klass = Class.new do
120
+ include Scorpion::Object
121
+
122
+ attr_dependency :logger, Test::Object::Logger
123
+ end
124
+
125
+ expect( klass.new ).to respond_to :logger
126
+ end
127
+ end
128
+
129
+ describe "inheritance" do
130
+ let( :object ) do
131
+ Test::Object::Mouse.spawn hunt
132
+ end
133
+
134
+ it "inherits attributes" do
135
+ expect( object.injected_attributes[:user_service].contract ).to be Test::Object::UserService
136
+ end
137
+
138
+ it "overrides attributes" do
139
+ expect( object.injected_attributes[:logger].contract ).to be Test::Object::BackLogger
140
+ end
141
+
142
+ it "doesn't effect other classes" do
143
+ expect( Test::Object::Bear.spawn( hunt, 'Yogi' ).injected_attributes[:logger].contract ).to be Test::Object::ColorLogger
144
+ end
145
+
146
+ end
147
+
148
+ end
149
+
150
+ describe "feasting" do
151
+ let( :logger ) { Test::Object::Logger.new }
152
+ let( :options ) { { manager: logger, color: :red } }
153
+ let( :object ) { Test::Object::Mouse.new name: 'mighty' }
154
+
155
+
156
+ describe "#inject_from" do
157
+ it "assigns attributes" do
158
+ object.send :inject_from, options
159
+ expect( object.manager ).to be logger
160
+ end
161
+
162
+ it "doesn't overwrite" do
163
+ object.manager = Test::Object::Logger.new
164
+ object.send :inject_from, options
165
+ expect( object.manager ).not_to be logger
166
+ end
167
+
168
+ it "overwrites when asked" do
169
+ object.manager = Test::Object::Logger.new
170
+ object.send :inject_from, options, true
171
+ expect( object.manager ).to be logger
172
+ end
173
+ end
174
+
175
+ describe "inject_from!" do
176
+ it "assigns attributes" do
177
+ object.send :inject_from!, options
178
+ expect( object.manager ).to be logger
179
+ end
180
+
181
+ it "doesn't overwrite" do
182
+ object.manager = Test::Object::Logger.new
183
+ object.send :inject_from!, options
184
+ expect( object.manager ).not_to be logger
185
+ end
186
+
187
+ it "overwrites when asked" do
188
+ object.manager = Test::Object::Logger.new
189
+ object.send :inject_from!, options, true
190
+ expect( object.manager ).to be logger
191
+ end
192
+
193
+ it "removes injected attributes" do
194
+ expect( options ).to have_key :manager
195
+ object.send :inject_from!, options
196
+ expect( options ).not_to have_key :manager
197
+ end
198
+
199
+ it "removes injected attribute even if already set" do
200
+ expect( options ).to have_key :manager
201
+ object.manager = Test::Object::Logger.new
202
+ object.send :inject_from!, options
203
+ expect( options ).not_to have_key :manager
204
+ end
205
+
206
+ it "doesn't remove other options" do
207
+ object.send :inject_from!, options
208
+ expect( options ).to have_key :color
209
+ end
210
+
211
+ end
212
+ end
213
+
214
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe Scorpion::Rails::ActiveRecord::Association, type: :model do
4
+ include Scorpion::Rspec::Helper
5
+
6
+ before( :each ) do
7
+ author = Author.create! name: "Pitbull"
8
+ todo = Todo.create! name: "Be even more awesome", author: author
9
+ end
10
+
11
+ it "shares scorpion with associations" do
12
+ author = Author.with_scorpion( scorpion ).first
13
+ expect( author.todos.scorpion ).to be scorpion
14
+ end
15
+
16
+ it "shares scorpion with association results" do
17
+ author = Author.with_scorpion( scorpion ).first
18
+ expect( author.todos.first.scorpion ).to be scorpion
19
+ end
20
+
21
+ it "shares scorpion with single associations" do
22
+ todo = Todo.with_scorpion( scorpion ).first
23
+ expect( todo.author.scorpion ).to be scorpion
24
+ end
25
+
26
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe Scorpion::Rails::ActiveRecord::Model, type: :model do
4
+ include Scorpion::Rspec::Helper
5
+
6
+ before( :each ) do
7
+ author = Author.create! name: "Pitbull"
8
+ todo = Todo.create! name: "Be even more awesome", author: author
9
+ end
10
+
11
+ it "shares scorpion with associations" do
12
+ author = Author.with_scorpion( scorpion ).first
13
+ expect( author.todos.scorpion ).to be scorpion
14
+ end
15
+
16
+ it "shares scorpion with single associations" do
17
+ todo = Todo.with_scorpion( scorpion ).first
18
+ expect( todo.author.scorpion ).to be scorpion
19
+ end
20
+
21
+ it "shares scorpion with custom scope" do
22
+ expect( Author.with_scorpion( scorpion ).named( "Pitbull" ).scorpion ).to be scorpion
23
+ end
24
+
25
+ it "shares scorpion with custom scope results" do
26
+ expect( Author.with_scorpion( scorpion ).named( "Pitbull" ).first.scorpion ).to be scorpion
27
+ end
28
+
29
+ it "shares scorpion with custom scope extension results" do
30
+ expect( Author.with_scorpion( scorpion ).named( "Pitbull" ).alphabetical.first.scorpion ).to be scorpion
31
+ end
32
+
33
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+ require 'scorpion/rails'
3
+
4
+ describe Scorpion::Rails::ActiveRecord::Relation, type: :model do
5
+ include Scorpion::Rspec::Helper
6
+
7
+ let( :criteria ) { Todo.with_scorpion( scorpion ) }
8
+
9
+ it "shares scorpion with fetched records" do
10
+ Todo.create! name: "Be awesome"
11
+
12
+ expect( criteria.first.scorpion ).to eq scorpion
13
+ end
14
+
15
+ it "shares scorpion with chained relations" do
16
+ expect( criteria.where( name: "" ).scorpion ).to be scorpion
17
+ end
18
+
19
+ it "shares scorpion with new records" do
20
+ expect( criteria.new.scorpion ).to be scorpion
21
+ expect( criteria.build.scorpion ).to be scorpion
22
+ end
23
+
24
+ it "shares scorpion with new records builder block" do
25
+ criteria.new do |todo|
26
+ expect( todo.scorpion ).to be scorpion
27
+ end
28
+ end
29
+
30
+ it "shares scorpion with created records" do
31
+ expect( criteria.create.scorpion ).to be scorpion
32
+ end
33
+
34
+ it "shares scorpion with created records builder block" do
35
+ criteria.create do |todo|
36
+ expect( todo.scorpion ).to be scorpion
37
+ end
38
+ end
39
+
40
+ it "shares scorpion with created! records" do
41
+ expect( criteria.create!.scorpion ).to be scorpion
42
+ end
43
+
44
+ it "shares scorpion with created! records builder block" do
45
+ criteria.create! do |todo|
46
+ expect( todo.scorpion ).to be scorpion
47
+ end
48
+ end
49
+
50
+ context "find methods" do
51
+ let!( :todo ){ Todo.create! name: "Bill" }
52
+
53
+ it "shares scorpion with found records" do
54
+ expect( criteria.find( todo.id ).scorpion ).to be scorpion
55
+ end
56
+
57
+ it "shares scorpion with find_by records" do
58
+ expect( criteria.find_by( name: "Bill" ).scorpion ).to be scorpion
59
+ end
60
+
61
+ it "shares scorpion with first record" do
62
+ expect( criteria.first.scorpion ).to be scorpion
63
+ end
64
+
65
+ it "shares scorpion with enumerated records" do
66
+ criteria.each do |todo|
67
+ expect( todo.scorpion ).to be scorpion
68
+ end
69
+ end
70
+ end
71
+
72
+ end
@@ -12,14 +12,14 @@ describe Scorpion::Rails::Controller, type: :controller do
12
12
  controller ActionController::Base do
13
13
  include Scorpion::Rails::Controller
14
14
 
15
- feed_on do
15
+ depend_on do
16
16
  service Test::Nest::Service
17
17
  cache Test::Nest::Cache
18
18
  end
19
19
 
20
20
  def index
21
- @guard1 = scorpion.hunt Test::Nest::Guard
22
- @guard2 = scorpion.hunt Test::Nest::Guard
21
+ @guard1 = scorpion.fetch Test::Nest::Guard
22
+ @guard2 = scorpion.fetch Test::Nest::Guard
23
23
  render nothing: true
24
24
  end
25
25
  end
@@ -62,8 +62,8 @@ describe Scorpion::Rails::Controller, type: :controller do
62
62
 
63
63
  it "spawns the same service during the same request" do
64
64
  allow( subject ).to receive( :index ) do
65
- service = subject.scorpion.hunt Test::Nest::Service
66
- expect( subject.scorpion.hunt Test::Nest::Service ).to be service
65
+ service = subject.scorpion.fetch Test::Nest::Service
66
+ expect( subject.scorpion.fetch Test::Nest::Service ).to be service
67
67
  controller.render nothing: true
68
68
  end
69
69
 
@@ -74,7 +74,7 @@ describe Scorpion::Rails::Controller, type: :controller do
74
74
  service = subject.service
75
75
 
76
76
  allow( subject ).to receive( :index ) do
77
- expect( subject.scorpion.hunt Test::Nest::Service ).not_to be service
77
+ expect( subject.scorpion.fetch Test::Nest::Service ).not_to be service
78
78
  controller.render nothing: true
79
79
  end
80
80
 
@@ -83,7 +83,7 @@ describe Scorpion::Rails::Controller, type: :controller do
83
83
 
84
84
  it "hunts for controller" do
85
85
  allow( subject ).to receive( :index ) do
86
- expect( subject.scorpion.hunt( AbstractController::Base ) ).to be subject
86
+ expect( subject.scorpion.fetch( AbstractController::Base ) ).to be subject
87
87
  controller.render nothing: true
88
88
  end
89
89
 
@@ -92,7 +92,7 @@ describe Scorpion::Rails::Controller, type: :controller do
92
92
 
93
93
  it "hunts for response" do
94
94
  allow( subject ).to receive( :index ) do
95
- expect( subject.scorpion.hunt( ActionDispatch::Response ) ).to be subject.response
95
+ expect( subject.scorpion.fetch( ActionDispatch::Response ) ).to be subject.response
96
96
  controller.render nothing: true
97
97
  end
98
98
 
@@ -101,7 +101,7 @@ describe Scorpion::Rails::Controller, type: :controller do
101
101
 
102
102
  it "hunts for request" do
103
103
  allow( subject ).to receive( :index ) do
104
- expect( subject.scorpion.hunt( ActionDispatch::Request ).object_id ).to be subject.request.object_id
104
+ expect( subject.scorpion.fetch( ActionDispatch::Request ).object_id ).to be subject.request.object_id
105
105
  controller.render nothing: true
106
106
  end
107
107
 
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ module Test
4
+ module Job
5
+ class Compass
6
+ def directions; end
7
+ end
8
+
9
+ class Journey < ActiveJob::Base
10
+ include Scorpion::Rails::Job
11
+
12
+ depend_on do
13
+ compass Test::Job::Compass
14
+ end
15
+
16
+ def perform
17
+ compass.directions
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ describe Scorpion::Rails::Job do
24
+ it "perform has been feed" do
25
+ compass = Test::Job::Compass.new
26
+
27
+ Test::Job::Journey.scorpion_nest do |hunter|
28
+ hunter.hunt_for Test::Job::Compass, return: compass
29
+ end
30
+
31
+ expect( compass ).to receive( :directions )
32
+ Test::Job::Journey.perform_now
33
+ end
34
+ end