hoodie 0.4.1 → 0.4.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: 426eabc32be60c299ca43f6543ba20a03df847cc
4
- data.tar.gz: b3951228007594470384a5063e805a81e935a3da
3
+ metadata.gz: 3f049115fb6e28197cf8fc99f90a93b47dfc6d36
4
+ data.tar.gz: 11356e662f4b076be57c3b42f5e0f0f37ceba367
5
5
  SHA512:
6
- metadata.gz: 7e49a845d9aa835d222cb7ebb8fe2993d8e9bb26cf7f737f203ad54b504d56f822dd574c2077fe83b0be67bf05acf7c3f081bd6cd115af97e2fc4c99ab3b26f7
7
- data.tar.gz: ed1b3f56e2afdd79fb9556d13d79398b0ed2cb16c5f0dd117ed95d46df96783d33dd821225208d07c09f05dc4661464a301d16988c9db74000d00174ebe20e1a
6
+ metadata.gz: b7655a46f873e0a0bcaa29b190086e05782816696cbf8d59d013547c32a98d99486fc85d3a773da46655315a26e4cab78a2f4eb22a570f3cb6897d9f8a2bab65
7
+ data.tar.gz: f4d66b616e2e3f5a73adb2f1dd22b201be54f49c9d8bc43126bb9498333e018f4a75795c6cb25fe739c15bdc853deb5b1757610b9340594eaaa832ebec485c1e
@@ -17,78 +17,80 @@
17
17
  # permissions and limitations under the License.
18
18
  #
19
19
 
20
- module Hoodie::IdentityMap
21
- def self.enabled=(flag)
22
- Thread.current[:identity_map_enabled] = flag
23
- end
24
-
25
- def self.enabled
26
- Thread.current[:identity_map_enabled]
27
- end
28
-
29
- def self.enabled?
30
- enabled == true
31
- end
20
+ module Hoodie
21
+ module IdentityMap
22
+ def self.enabled=(flag)
23
+ Thread.current[:identity_map_enabled] = flag
24
+ end
32
25
 
33
- def self.repository
34
- Thread.current[:identity_map] ||= {}
35
- end
26
+ def self.enabled
27
+ Thread.current[:identity_map_enabled]
28
+ end
36
29
 
37
- def self.clear
38
- repository.clear
39
- end
30
+ def self.enabled?
31
+ enabled == true
32
+ end
40
33
 
41
- def self.include?(object)
42
- repository.keys.include?(object.id)
43
- end
34
+ def self.repository
35
+ Thread.current[:identity_map] ||= {}
36
+ end
44
37
 
45
- def self.use
46
- old, self.enabled = enabled, true
47
- yield if block_given?
48
- ensure
49
- self.enabled = old
50
- clear
51
- end
38
+ def self.clear
39
+ repository.clear
40
+ end
52
41
 
53
- def self.without
54
- old, self.enabled = enabled, false
55
- yield if block_given?
56
- ensure
57
- self.enabled = old
58
- end
42
+ def self.include?(object)
43
+ repository.keys.include?(object.id)
44
+ end
59
45
 
60
- module ClassMethods
61
- def get(id, options = nil)
62
- get_from_identity_map(id) || super
46
+ def self.use
47
+ old, self.enabled = enabled, true
48
+ yield if block_given?
49
+ ensure
50
+ self.enabled = old
51
+ clear
63
52
  end
64
53
 
65
- def get_from_identity_map(id)
66
- IdentityMap.repository[id] if IdentityMap.enabled?
54
+ def self.without
55
+ old, self.enabled = enabled, false
56
+ yield if block_given?
57
+ ensure
58
+ self.enabled = old
67
59
  end
68
- private :get_from_identity_map
69
60
 
70
- def load(id, attrs)
71
- if IdentityMap.enabled? && instance = IdentityMap.repository[id]
72
- instance
73
- else
74
- super.tap { |doc| doc.add_to_identity_map }
61
+ module ClassMethods
62
+ def get(id, options = nil)
63
+ get_from_identity_map(id) || super
64
+ end
65
+
66
+ def get_from_identity_map(id)
67
+ IdentityMap.repository[id] if IdentityMap.enabled?
68
+ end
69
+ private :get_from_identity_map
70
+
71
+ def load(id, attrs)
72
+ if IdentityMap.enabled? && instance = IdentityMap.repository[id]
73
+ instance
74
+ else
75
+ super.tap { |doc| doc.add_to_identity_map }
76
+ end
75
77
  end
76
78
  end
77
- end
78
79
 
79
- def save(options={})
80
- super.tap { |result| add_to_identity_map if result }
81
- end
80
+ def save(options={})
81
+ super.tap { |result| add_to_identity_map if result }
82
+ end
82
83
 
83
- def delete
84
- super.tap { remove_from_identity_map }
85
- end
84
+ def delete
85
+ super.tap { remove_from_identity_map }
86
+ end
86
87
 
87
- def add_to_identity_map
88
- IdentityMap.repository[id] = self if IdentityMap.enabled?
89
- end
88
+ def add_to_identity_map
89
+ IdentityMap.repository[id] = self if IdentityMap.enabled?
90
+ end
90
91
 
91
- def remove_from_identity_map
92
- IdentityMap.repository.delete(id) if IdentityMap.enabled?
92
+ def remove_from_identity_map
93
+ IdentityMap.repository.delete(id) if IdentityMap.enabled?
94
+ end
93
95
  end
94
96
  end
data/lib/hoodie/utils.rb CHANGED
@@ -21,13 +21,84 @@
21
21
  require 'securerandom'
22
22
  require 'time'
23
23
 
24
- module Hoodie::Utils
25
- def self.included(base)
26
- base.extend(ClassMethods)
27
- end
28
- private_class_method :included
24
+ module Hoodie
25
+ module Utils
26
+ def self.included(base)
27
+ base.extend(ClassMethods)
28
+ end
29
+ private_class_method :included
30
+
31
+ module ClassMethods
32
+ def callable(call_her)
33
+ call_her.respond_to?(:call) ? call_her : lambda { call_her }
34
+ end
35
+
36
+ def camelize(underscored_word)
37
+ underscored_word.to_s.gsub(/(?:^|_)(.)/) { $1.upcase }
38
+ end
39
+
40
+ def classify(table_name)
41
+ camelize singularize(table_name.to_s.sub(/.*\./, ''))
42
+ end
43
+
44
+ def class_name
45
+ demodulize(self.class)
46
+ end
47
+
48
+ def caller_name
49
+ caller_locations(2, 1).first.label
50
+ end
51
+
52
+ def demodulize(class_name_in_module)
53
+ class_name_in_module.to_s.sub(/^.*::/, '')
54
+ end
55
+
56
+ def pluralize(word)
57
+ word.to_s.sub(/([^s])$/, '\1s')
58
+ end
59
+
60
+ def singularize(word)
61
+ word.to_s.sub(/s$/, '').sub(/ie$/, 'y')
62
+ end
63
+
64
+ def underscore(camel_cased_word)
65
+ word = camel_cased_word.to_s.dup
66
+ word.gsub!(/::/, '/')
67
+ word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
68
+ word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
69
+ word.tr! '-', '_'
70
+ word.downcase!
71
+ word
72
+ end
73
+
74
+ # Return the date and time in "HTTP-date" format as defined by RFC 7231.
75
+ #
76
+ # @return [Date,Time] in "HTTP-date" format
77
+ def utc_httpdate
78
+ Time.now.utc.httpdate
79
+ end
80
+
81
+ def request_id
82
+ SecureRandom.uuid
83
+ end
84
+
85
+ def twenty_four_hours_ago
86
+ Time.now - ( 60 * 60 * 24)
87
+ end
88
+
89
+ def verify_options(accepted, actual) # @private
90
+ return unless debug || $DEBUG
91
+ unless (act=Set[*actual.keys]).subset?(acc=Set[*accepted])
92
+ raise Croesus::Errors::UnknownOption,
93
+ "\nDetected unknown option(s): #{(act - acc).to_a.inspect}\n" <<
94
+ "Accepted options are: #{accepted.inspect}"
95
+ end
96
+ yield if block_given?
97
+ end
98
+ end # module ClassMethods
99
+
100
+ # ============================================================================
29
101
 
30
- module ClassMethods
31
102
  def callable(call_her)
32
103
  call_her.respond_to?(:call) ? call_her : lambda { call_her }
33
104
  end
@@ -94,172 +165,103 @@ module Hoodie::Utils
94
165
  end
95
166
  yield if block_given?
96
167
  end
97
- end # module ClassMethods
98
-
99
- # ============================================================================
100
-
101
- def callable(call_her)
102
- call_her.respond_to?(:call) ? call_her : lambda { call_her }
103
- end
104
-
105
- def camelize(underscored_word)
106
- underscored_word.to_s.gsub(/(?:^|_)(.)/) { $1.upcase }
107
- end
108
-
109
- def classify(table_name)
110
- camelize singularize(table_name.to_s.sub(/.*\./, ''))
111
- end
112
168
 
113
- def class_name
114
- demodulize(self.class)
115
- end
116
-
117
- def caller_name
118
- caller_locations(2, 1).first.label
119
- end
120
-
121
- def demodulize(class_name_in_module)
122
- class_name_in_module.to_s.sub(/^.*::/, '')
123
- end
124
-
125
- def pluralize(word)
126
- word.to_s.sub(/([^s])$/, '\1s')
127
- end
128
-
129
- def singularize(word)
130
- word.to_s.sub(/s$/, '').sub(/ie$/, 'y')
131
- end
132
-
133
- def underscore(camel_cased_word)
134
- word = camel_cased_word.to_s.dup
135
- word.gsub!(/::/, '/')
136
- word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
137
- word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
138
- word.tr! '-', '_'
139
- word.downcase!
140
- word
141
- end
142
-
143
- # Return the date and time in "HTTP-date" format as defined by RFC 7231.
144
- #
145
- # @return [Date,Time] in "HTTP-date" format
146
- def utc_httpdate
147
- Time.now.utc.httpdate
148
- end
169
+ # Returns the columns and lines of the current tty.
170
+ #
171
+ # @return [Integer]
172
+ # number of columns and lines of tty, returns [0, 0] if no tty is present.
173
+ #
174
+ # @api public
175
+ def terminal_dimensions
176
+ [0, 0] unless STDOUT.tty?
177
+ [80, 40] if OS.windows?
178
+
179
+ if ENV['COLUMNS'] && ENV['LINES']
180
+ [ENV['COLUMNS'].to_i, ENV['LINES'].to_i]
181
+ elsif ENV['TERM'] && command_in_path?('tput')
182
+ [`tput cols`.to_i, `tput lines`.to_i]
183
+ elsif command_in_path?('stty')
184
+ `stty size`.scan(/\d+/).map {|s| s.to_i }
185
+ else
186
+ [0, 0]
187
+ end
188
+ rescue
189
+ [0, 0]
190
+ end
149
191
 
150
- def request_id
151
- SecureRandom.uuid
152
- end
192
+ # Checks in PATH returns true if the command is found
193
+ def command_in_path?(command)
194
+ found = ENV['PATH'].split(File::PATH_SEPARATOR).map do |p|
195
+ File.exist?(File.join(p, command))
196
+ end
197
+ found.include?(true)
198
+ end
153
199
 
154
- def twenty_four_hours_ago
155
- Time.now - ( 60 * 60 * 24)
156
- end
200
+ # Runs a code block, and retries it when an exception occurs. Should the
201
+ # number of retries be reached without success, the last exception will be
202
+ # raised.
203
+ #
204
+ # @param opts [Hash{Symbol => Value}]
205
+ # @option opts [Fixnum] :tries
206
+ # number of attempts to retry before raising the last exception
207
+ # @option opts [Fixnum] :sleep
208
+ # number of seconds to wait between retries, use lambda to exponentially
209
+ # increasing delay between retries
210
+ # @option opts [Array(Exception)] :on
211
+ # the type of exception(s) to catch and retry on
212
+ # @option opts [Regex] :matching
213
+ # match based on the exception message
214
+ # @option opts [Block] :ensure
215
+ # ensure a block of code is executed, regardless of whether an exception
216
+ # is raised
217
+ #
218
+ # @return [Block]
219
+ #
220
+ def retrier(opts = {}, &block)
221
+ defaults = {
222
+ tries: 2,
223
+ sleep: 1,
224
+ on: StandardError,
225
+ matching: /.*/,
226
+ :ensure => Proc.new {}
227
+ }
157
228
 
158
- def verify_options(accepted, actual) # @private
159
- return unless debug || $DEBUG
160
- unless (act=Set[*actual.keys]).subset?(acc=Set[*accepted])
161
- raise Croesus::Errors::UnknownOption,
162
- "\nDetected unknown option(s): #{(act - acc).to_a.inspect}\n" <<
163
- "Accepted options are: #{accepted.inspect}"
164
- end
165
- yield if block_given?
166
- end
229
+ check_for_invalid_options(opts, defaults)
230
+ defaults.merge!(opts)
167
231
 
168
- # Returns the columns and lines of the current tty.
169
- #
170
- # @return [Integer]
171
- # number of columns and lines of tty, returns [0, 0] if no tty is present.
172
- #
173
- # @api public
174
- def terminal_dimensions
175
- [0, 0] unless STDOUT.tty?
176
- [80, 40] if OS.windows?
177
-
178
- if ENV['COLUMNS'] && ENV['LINES']
179
- [ENV['COLUMNS'].to_i, ENV['LINES'].to_i]
180
- elsif ENV['TERM'] && command_in_path?('tput')
181
- [`tput cols`.to_i, `tput lines`.to_i]
182
- elsif command_in_path?('stty')
183
- `stty size`.scan(/\d+/).map {|s| s.to_i }
184
- else
185
- [0, 0]
186
- end
187
- rescue
188
- [0, 0]
189
- end
232
+ return if defaults[:tries] == 0
190
233
 
191
- # Checks in PATH returns true if the command is found
192
- def command_in_path?(command)
193
- found = ENV['PATH'].split(File::PATH_SEPARATOR).map do |p|
194
- File.exist?(File.join(p, command))
195
- end
196
- found.include?(true)
197
- end
234
+ on_exception, tries = [defaults[:on]].flatten, defaults[:tries]
235
+ retries = 0
236
+ retry_exception = nil
198
237
 
199
- # Runs a code block, and retries it when an exception occurs. Should the
200
- # number of retries be reached without success, the last exception will be
201
- # raised.
202
- #
203
- # @param opts [Hash{Symbol => Value}]
204
- # @option opts [Fixnum] :tries
205
- # number of attempts to retry before raising the last exception
206
- # @option opts [Fixnum] :sleep
207
- # number of seconds to wait between retries, use lambda to exponentially
208
- # increasing delay between retries
209
- # @option opts [Array(Exception)] :on
210
- # the type of exception(s) to catch and retry on
211
- # @option opts [Regex] :matching
212
- # match based on the exception message
213
- # @option opts [Block] :ensure
214
- # ensure a block of code is executed, regardless of whether an exception
215
- # is raised
216
- #
217
- # @return [Block]
218
- #
219
- def retrier(opts = {}, &block)
220
- defaults = {
221
- tries: 2,
222
- sleep: 1,
223
- on: StandardError,
224
- matching: /.*/,
225
- :ensure => Proc.new {}
226
- }
227
-
228
- check_for_invalid_options(opts, defaults)
229
- defaults.merge!(opts)
230
-
231
- return if defaults[:tries] == 0
232
-
233
- on_exception, tries = [defaults[:on]].flatten, defaults[:tries]
234
- retries = 0
235
- retry_exception = nil
236
-
237
- begin
238
- yield retries, retry_exception
239
- rescue *on_exception => exception
240
- raise unless exception.message =~ defaults[:matching]
241
- raise if retries+1 >= defaults[:tries]
242
-
243
- # Interrupt Exception could be raised while sleeping
244
238
  begin
245
- sleep defaults[:sleep].respond_to?(:call) ?
246
- defaults[:sleep].call(retries) : defaults[:sleep]
247
- rescue *on_exception
239
+ yield retries, retry_exception
240
+ rescue *on_exception => exception
241
+ raise unless exception.message =~ defaults[:matching]
242
+ raise if retries+1 >= defaults[:tries]
243
+
244
+ # Interrupt Exception could be raised while sleeping
245
+ begin
246
+ sleep defaults[:sleep].respond_to?(:call) ?
247
+ defaults[:sleep].call(retries) : defaults[:sleep]
248
+ rescue *on_exception
249
+ end
250
+
251
+ retries += 1
252
+ retry_exception = exception
253
+ retry
254
+ ensure
255
+ defaults[:ensure].call(retries)
248
256
  end
249
-
250
- retries += 1
251
- retry_exception = exception
252
- retry
253
- ensure
254
- defaults[:ensure].call(retries)
255
257
  end
256
- end
257
258
 
258
- private # P R O P R I E T À P R I V A T A Vietato L'accesso
259
+ private # P R O P R I E T À P R I V A T A Vietato L'accesso
259
260
 
260
- def check_for_invalid_options(custom_options, defaults)
261
- invalid_options = defaults.merge(custom_options).keys - defaults.keys
262
- raise ArgumentError.new('[Retrier] Invalid options: ' \
263
- "#{invalid_options.join(", ")}") unless invalid_options.empty?
261
+ def check_for_invalid_options(custom_options, defaults)
262
+ invalid_options = defaults.merge(custom_options).keys - defaults.keys
263
+ raise ArgumentError.new('[Retrier] Invalid options: ' \
264
+ "#{invalid_options.join(", ")}") unless invalid_options.empty?
265
+ end
264
266
  end
265
267
  end
@@ -18,5 +18,5 @@
18
18
  #
19
19
 
20
20
  module Hoodie
21
- VERSION = '0.4.1'
21
+ VERSION = '0.4.2'
22
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hoodie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefano Harding