hoodoo 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: cc8d810e400c8cd9ffab3126eaeec49c67da803c
4
- data.tar.gz: f505f3de82fcd603721120d863777d0e60a5d869
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZTQ3MTIxMDliMDRhYjA0ZTQyNTkxZTQ5NDFjMzBkNGZmMzA0MGU1MA==
5
+ data.tar.gz: !binary |-
6
+ MzM3MTY2NzNjNjg5YWVmOGY0NTZkYTUzMDMxOGRmZDc0ODg3YmZkNA==
5
7
  SHA512:
6
- metadata.gz: c7353bdfbfd398cfb8f251f9e7e324c16d457a1841182ed13d1cdce85f548e120afff3c252399caa9350bdf074dd77623123414537092cc5f2a364cc52ca336e
7
- data.tar.gz: 18ee11eda4ada2ffd346a232af94a9a1ec2a33175a67c7d723f3371ab73744185170292fc2f4677a4c1bb1cb058dbea724fe03197096b4c31dd327eecf6e3fa6
8
+ metadata.gz: !binary |-
9
+ MGFhZmZkNTQ4OTc1OGZlMDMyZGNkZWM1Mzk1OTk4NTg2M2U1NTMzZmFmZjY5
10
+ YjkyNWQxNGNlNTg1MGI2MTk1MDBjZGI1MTJiMzViMGU2NjgzODVlMDdlMTkx
11
+ ZDUxYzRmNTkxZjQ3OTc3MThkMjE0MWFkZmMxNGI3NzZiOTU5NTA=
12
+ data.tar.gz: !binary |-
13
+ N2RhYzdlNDVmYjVhMWIwMjMzNWNmZTI5YzE1NTc0MWI5ZjQ4NjU3YTBjMDg0
14
+ MDQ1MzdiMzYxMDgyMjFiNDc2ZWMyMjUwY2NhNWE2NmNlMTU0MDE1NTY4M2Vk
15
+ ZDVkZjMwMzE4ZmEyMzY4NmM2Yzk0ZDA0ODQ1ZGRmOTUwNzRhZTE=
@@ -184,7 +184,13 @@ module Hoodoo
184
184
  # preferable to looking up the wrong record!
185
185
 
186
186
  checker = where( [ "\"#{ self.table_name }\".\"#{ field }\" = ?", ident ] )
187
- return checker.first unless checker.count == 0
187
+
188
+ # If we have found a record return it, otherwise continue to loop
189
+ # through +id_fields+
190
+ #
191
+ if checker.first
192
+ return checker.first
193
+ end
188
194
  end
189
195
 
190
196
  return nil
@@ -12,6 +12,6 @@ module Hoodoo
12
12
  # The Hoodoo gem version. If this changes, ensure that the date in
13
13
  # "hoodoo.gemspec" is correct and run "bundle install" (or "update").
14
14
  #
15
- VERSION = '1.0.3'
15
+ VERSION = '1.0.4'
16
16
 
17
17
  end
@@ -153,6 +153,49 @@ describe Hoodoo::ActiveRecord::Finder do
153
153
  found = finder.acquire( @code )
154
154
  expect( found ).to eq(nil) # Not in 'group 1'
155
155
  end
156
+
157
+ # previously the finder would always cause an extra
158
+ # call to the database to preform a count
159
+ #
160
+ it 'does not do excessive database calls' do
161
+
162
+ count = count_database_calls_in do
163
+ found = RSpecModelFinderTest.acquire( @id )
164
+ expect( found ).to eq(@a)
165
+ end
166
+ # the id will be the first searched in the finder
167
+ # therefore only one call will be made
168
+ expect( count ).to eq( 1 )
169
+
170
+ count = count_database_calls_in do
171
+ found = RSpecModelFinderTest.acquire( @uuid )
172
+ expect( found ).to eq(@b)
173
+ end
174
+
175
+ # the uuid will be the second searched in the finder
176
+ # therefore two calls will be made, one for the
177
+ # id and one for the uuid
178
+ expect( count ).to eq( 2 )
179
+
180
+ count = count_database_calls_in do
181
+ found = RSpecModelFinderTest.acquire( @code )
182
+ expect( found ).to eq(@c)
183
+ end
184
+
185
+ # the code will be the third searched in the finder
186
+ # therefore three calls will be made, one for the
187
+ # id, one for the uuid and one for the code
188
+ expect( count ).to eq( 3 )
189
+
190
+
191
+ count = count_database_calls_in do
192
+ found = RSpecModelFinderTest.acquire( Hoodoo::UUID.generate )
193
+ expect( found ).to be_nil
194
+ end
195
+
196
+ # the finder will search all three
197
+ expect( count ).to eq( 3 )
198
+ end
156
199
  end
157
200
 
158
201
  # ==========================================================================
data/spec/spec_helper.rb CHANGED
@@ -296,3 +296,22 @@ def spec_helper_http( path:,
296
296
 
297
297
  return http.request( request )
298
298
  end
299
+
300
+ # Add support to count the database queries run within a
301
+ # given block. Returns the number of queries run.
302
+ #
303
+ def count_database_calls_in( &block )
304
+ count = 0
305
+
306
+ cb = ->(name, start_time, finish_time, id, query) {
307
+ # only bump the count if the database call is not to
308
+ # CACHE or SCHEMA
309
+ unless [ 'CACHE', 'SCHEMA' ].include?( query[:name] )
310
+ count += 1
311
+ end
312
+ }
313
+
314
+ ActiveSupport::Notifications.subscribed( cb, "sql.active_record", &block )
315
+
316
+ count
317
+ end
metadata CHANGED
@@ -1,265 +1,265 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hoodoo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Loyalty New Zealand
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-15 00:00:00.000000000 Z
11
+ date: 2016-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: uuidtools
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.1'
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
26
  version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: kgio
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '2.9'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.9'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: dalli
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '2.7'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.7'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: '10.4'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '10.4'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: simplecov-rcov
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ~>
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0.2'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.2'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rdoc
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ~>
88
88
  - !ruby/object:Gem::Version
89
89
  version: '4.2'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ~>
95
95
  - !ruby/object:Gem::Version
96
96
  version: '4.2'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rack-test
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ~>
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0.6'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - ~>
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0.6'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ~>
116
116
  - !ruby/object:Gem::Version
117
117
  version: '3.3'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - "~>"
122
+ - - ~>
123
123
  - !ruby/object:Gem::Version
124
124
  version: '3.3'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rspec-mocks
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - "~>"
129
+ - - ~>
130
130
  - !ruby/object:Gem::Version
131
131
  version: '3.3'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - "~>"
136
+ - - ~>
137
137
  - !ruby/object:Gem::Version
138
138
  version: '3.3'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: activerecord
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - "~>"
143
+ - - ~>
144
144
  - !ruby/object:Gem::Version
145
145
  version: '4.2'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - "~>"
150
+ - - ~>
151
151
  - !ruby/object:Gem::Version
152
152
  version: '4.2'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: activesupport
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - "~>"
157
+ - - ~>
158
158
  - !ruby/object:Gem::Version
159
159
  version: '4.2'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - "~>"
164
+ - - ~>
165
165
  - !ruby/object:Gem::Version
166
166
  version: '4.2'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: database_cleaner
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - "~>"
171
+ - - ~>
172
172
  - !ruby/object:Gem::Version
173
173
  version: 1.4.0
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - "~>"
178
+ - - ~>
179
179
  - !ruby/object:Gem::Version
180
180
  version: 1.4.0
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: pg
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - "~>"
185
+ - - ~>
186
186
  - !ruby/object:Gem::Version
187
187
  version: '0.18'
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
- - - "~>"
192
+ - - ~>
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0.18'
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: byebug
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - "~>"
199
+ - - ~>
200
200
  - !ruby/object:Gem::Version
201
201
  version: '3.5'
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
- - - "~>"
206
+ - - ~>
207
207
  - !ruby/object:Gem::Version
208
208
  version: '3.5'
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: timecop
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
- - - "~>"
213
+ - - ~>
214
214
  - !ruby/object:Gem::Version
215
215
  version: '0.8'
216
216
  type: :development
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
- - - "~>"
220
+ - - ~>
221
221
  - !ruby/object:Gem::Version
222
222
  version: '0.8'
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: raygun4ruby
225
225
  requirement: !ruby/object:Gem::Requirement
226
226
  requirements:
227
- - - "~>"
227
+ - - ~>
228
228
  - !ruby/object:Gem::Version
229
229
  version: '1.1'
230
230
  type: :development
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
- - - "~>"
234
+ - - ~>
235
235
  - !ruby/object:Gem::Version
236
236
  version: '1.1'
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: airbrake
239
239
  requirement: !ruby/object:Gem::Requirement
240
240
  requirements:
241
- - - "~>"
241
+ - - ~>
242
242
  - !ruby/object:Gem::Version
243
243
  version: '4.3'
244
244
  type: :development
245
245
  prerelease: false
246
246
  version_requirements: !ruby/object:Gem::Requirement
247
247
  requirements:
248
- - - "~>"
248
+ - - ~>
249
249
  - !ruby/object:Gem::Version
250
250
  version: '4.3'
251
251
  - !ruby/object:Gem::Dependency
252
252
  name: le
253
253
  requirement: !ruby/object:Gem::Requirement
254
254
  requirements:
255
- - - "~>"
255
+ - - ~>
256
256
  - !ruby/object:Gem::Version
257
257
  version: '2.6'
258
258
  type: :development
259
259
  prerelease: false
260
260
  version_requirements: !ruby/object:Gem::Requirement
261
261
  requirements:
262
- - - "~>"
262
+ - - ~>
263
263
  - !ruby/object:Gem::Version
264
264
  version: '2.6'
265
265
  description: Simplify the implementation of consistent services within an API-based
@@ -495,17 +495,17 @@ require_paths:
495
495
  - lib
496
496
  required_ruby_version: !ruby/object:Gem::Requirement
497
497
  requirements:
498
- - - ">="
498
+ - - ! '>='
499
499
  - !ruby/object:Gem::Version
500
500
  version: '2.1'
501
501
  required_rubygems_version: !ruby/object:Gem::Requirement
502
502
  requirements:
503
- - - ">="
503
+ - - ! '>='
504
504
  - !ruby/object:Gem::Version
505
505
  version: '0'
506
506
  requirements: []
507
507
  rubyforge_project:
508
- rubygems_version: 2.2.3
508
+ rubygems_version: 2.4.5
509
509
  signing_key:
510
510
  specification_version: 4
511
511
  summary: Opinionated APIs