spicerack 0.19.3 → 0.20.0

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.
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.