spicerack 0.19.3 → 0.20.0

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
  SHA256:
3
- metadata.gz: 9142bb3eca4c03601d2fc283f02c23360fb5b06b78ff286446b4fbbef4a7e61b
4
- data.tar.gz: 14c32a2cf67cb600b08822d49133b2d1befdd6a5f8c24479552376a418b3af42
3
+ metadata.gz: 6f2b9e1c6a0d68af5bcb74f6a95ca12fe3392ab112d20bcc9f4a0f3fb046b9c4
4
+ data.tar.gz: 4da6e9aed7a4c9c364acf35e274dc5a1ca5236497e128e539814ae59e752b8e8
5
5
  SHA512:
6
- metadata.gz: f64e4722da3a47dea513a213385bd912f84b017ffd5c0f25833d47ca131ff658992c82f076a0a88b534fe16114e17b70fa8b5e4d9c41496fc93c1a0fe4876908
7
- data.tar.gz: 8eff694a206b30609cdf1a883240612456910122a23378d71ae0c32bd479d6b36d22da4419c5dda3f79dc91f5180836653ef3e20246af01f3b3613b411f7617a
6
+ metadata.gz: 9d46f73f3fbd5c748d9ccc55177c5b0f6d9003106fc6d046b0cdd1209b781dcd91a64b609fc862b1e4f80498011b91df55101b3cbc9f07b59417b979c3c3b479
7
+ data.tar.gz: 4d2632089b4d709214911527b4119428f98a0bf3d9ad45445b4ae664c6faa8930b8c1c76a3241b860285c11bd435ddf8f75cb5d0603772d8662ad9eacfa1d624
@@ -54,10 +54,27 @@ module Spicerack
54
54
  module Configurable
55
55
  delegate :configure, :config_eval, to: :_config_builder
56
56
 
57
+ # @return [Spicerack::Configurable::ConfigReader] A read-only object containing configuration options set inside {#configure}
57
58
  def config
58
59
  _config_builder.reader
59
60
  end
60
61
 
62
+ # Run a callback before the configure block is evaluated.
63
+ #
64
+ # Note: if configure is called multiple times for your gem, this block will get run each time!
65
+ #
66
+ def before_configure(&block)
67
+ _config_builder_class.set_callback(:configure, :before, &block)
68
+ end
69
+
70
+ # Run a callback after the configure block is evaluated.
71
+ #
72
+ # Note: if configure is called multiple times for your gem, this block will get run each time!
73
+ #
74
+ def after_configure(&block)
75
+ _config_builder_class.set_callback(:configure, :after, &block)
76
+ end
77
+
61
78
  private
62
79
 
63
80
  def configuration_options(&block)
@@ -65,7 +82,13 @@ module Spicerack
65
82
  end
66
83
 
67
84
  def _config_builder
68
- @_config_builder ||= ConfigBuilder.new
85
+ @_config_builder ||= _config_builder_class.new
86
+ end
87
+
88
+ def _config_builder_class
89
+ @_config_builder_class ||= Class.new(ConfigBuilder).tap do |klass|
90
+ const_set(:ConfigBuilder, klass)
91
+ end
69
92
  end
70
93
  end
71
94
  end
@@ -1,8 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "technologic"
4
+
5
+ require_relative "config_builder/double_configure"
6
+
3
7
  module Spicerack
4
8
  module Configurable
5
9
  class ConfigBuilder
10
+ include ActiveSupport::Callbacks
11
+ define_callbacks :configure
12
+
13
+ # This concern uses the configure callback, so it needs to be included after the callback is defined
14
+ include DoubleConfigure
15
+
6
16
  delegate :config_eval, to: :reader
7
17
 
8
18
  def reader
@@ -10,8 +20,10 @@ module Spicerack
10
20
  end
11
21
 
12
22
  def configure
13
- mutex.synchronize do
14
- yield configuration
23
+ run_callbacks :configure do
24
+ mutex.synchronize do
25
+ yield configuration
26
+ end
15
27
  end
16
28
  end
17
29
 
@@ -26,6 +38,8 @@ module Spicerack
26
38
 
27
39
  private
28
40
 
41
+ attr_writer :configure_called
42
+
29
43
  def configuration
30
44
  config_class.instance
31
45
  end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "technologic"
4
+
5
+ module Spicerack
6
+ module Configurable
7
+ module DoubleConfigure
8
+ extend ActiveSupport::Concern
9
+
10
+ include Technologic
11
+
12
+ included do
13
+ set_callback :configure, :after, :warn_on_multiple_configure_calls
14
+ end
15
+
16
+ private
17
+
18
+ def configure_called?
19
+ @configure_called
20
+ end
21
+
22
+ def warn_on_multiple_configure_calls
23
+ unless configure_called?
24
+ @configure_called = true
25
+ return
26
+ end
27
+
28
+ puts <<~WARNING
29
+ #{self.class._configurable_module_name}.configure has been called more than once, which can lead to unexpected consequences.
30
+ For the most predictable behavior, configure should only be called once per library.
31
+ WARNING
32
+ end
33
+
34
+ module ClassMethods
35
+ def _configurable_module_name
36
+ name.gsub("::#{name.demodulize}", "")
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Spicerack
4
4
  # This constant is managed by spicerack
5
- VERSION = "0.19.3"
5
+ VERSION = "0.20.0"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spicerack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.3
4
+ version: 0.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Garside
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2019-12-16 00:00:00.000000000 Z
14
+ date: 2020-01-03 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: around_the_world
@@ -19,82 +19,82 @@ dependencies:
19
19
  requirements:
20
20
  - - '='
21
21
  - !ruby/object:Gem::Version
22
- version: 0.19.3
22
+ version: 0.20.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - '='
28
28
  - !ruby/object:Gem::Version
29
- version: 0.19.3
29
+ version: 0.20.0
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: redis_hash
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
34
  - - '='
35
35
  - !ruby/object:Gem::Version
36
- version: 0.19.3
36
+ version: 0.20.0
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - '='
42
42
  - !ruby/object:Gem::Version
43
- version: 0.19.3
43
+ version: 0.20.0
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: short_circu_it
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
48
  - - '='
49
49
  - !ruby/object:Gem::Version
50
- version: 0.19.3
50
+ version: 0.20.0
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
55
  - - '='
56
56
  - !ruby/object:Gem::Version
57
- version: 0.19.3
57
+ version: 0.20.0
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: technologic
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
62
  - - '='
63
63
  - !ruby/object:Gem::Version
64
- version: 0.19.3
64
+ version: 0.20.0
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
69
  - - '='
70
70
  - !ruby/object:Gem::Version
71
- version: 0.19.3
71
+ version: 0.20.0
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: tablesalt
74
74
  requirement: !ruby/object:Gem::Requirement
75
75
  requirements:
76
76
  - - '='
77
77
  - !ruby/object:Gem::Version
78
- version: 0.19.3
78
+ version: 0.20.0
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
83
  - - '='
84
84
  - !ruby/object:Gem::Version
85
- version: 0.19.3
85
+ version: 0.20.0
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: bundler
88
88
  requirement: !ruby/object:Gem::Requirement
89
89
  requirements:
90
- - - "~>"
90
+ - - ">="
91
91
  - !ruby/object:Gem::Version
92
92
  version: 2.0.1
93
93
  type: :development
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - "~>"
97
+ - - ">="
98
98
  - !ruby/object:Gem::Version
99
99
  version: 2.0.1
100
100
  - !ruby/object:Gem::Dependency
@@ -207,28 +207,28 @@ dependencies:
207
207
  requirements:
208
208
  - - '='
209
209
  - !ruby/object:Gem::Version
210
- version: 0.19.3
210
+ version: 0.20.0
211
211
  type: :development
212
212
  prerelease: false
213
213
  version_requirements: !ruby/object:Gem::Requirement
214
214
  requirements:
215
215
  - - '='
216
216
  - !ruby/object:Gem::Version
217
- version: 0.19.3
217
+ version: 0.20.0
218
218
  - !ruby/object:Gem::Dependency
219
219
  name: spicerack-styleguide
220
220
  requirement: !ruby/object:Gem::Requirement
221
221
  requirements:
222
222
  - - '='
223
223
  - !ruby/object:Gem::Version
224
- version: 0.19.3
224
+ version: 0.20.0
225
225
  type: :development
226
226
  prerelease: false
227
227
  version_requirements: !ruby/object:Gem::Requirement
228
228
  requirements:
229
229
  - - '='
230
230
  - !ruby/object:Gem::Version
231
- version: 0.19.3
231
+ version: 0.20.0
232
232
  - !ruby/object:Gem::Dependency
233
233
  name: will_paginate
234
234
  requirement: !ruby/object:Gem::Requirement
@@ -295,6 +295,7 @@ files:
295
295
  - lib/spicerack/attribute_object.rb
296
296
  - lib/spicerack/configurable.rb
297
297
  - lib/spicerack/configurable/config_builder.rb
298
+ - lib/spicerack/configurable/config_builder/double_configure.rb
298
299
  - lib/spicerack/configurable/config_delegation.rb
299
300
  - lib/spicerack/configurable/config_object.rb
300
301
  - lib/spicerack/configurable/evaluator.rb
@@ -330,6 +331,7 @@ metadata:
330
331
  homepage_uri: https://github.com/Freshly/spicerack
331
332
  source_code_uri: https://github.com/Freshly/spicerack
332
333
  changelog_uri: https://github.com/Freshly/spicerack/blob/master/CHANGELOG.md
334
+ documentation_uri: https://www.rubydoc.info/gems/spicerack
333
335
  post_install_message:
334
336
  rdoc_options: []
335
337
  require_paths:
@@ -345,7 +347,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
345
347
  - !ruby/object:Gem::Version
346
348
  version: '0'
347
349
  requirements: []
348
- rubygems_version: 3.0.6
350
+ rubygems_version: 3.0.3
349
351
  signing_key:
350
352
  specification_version: 4
351
353
  summary: A suite of utility gems for Ruby on Rails.