usable 3.9.0 → 3.9.4

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
- SHA1:
3
- metadata.gz: fa4a0c548f6ca951a0db1d9e24da33e518a92533
4
- data.tar.gz: 11696a77417b8d5ecdae9aed37eb85193d9242c4
2
+ SHA256:
3
+ metadata.gz: 5cf9d19795cfe5f243f7d50765251306761edf87790628b28438503bfd28a93c
4
+ data.tar.gz: 238dab15466918520cdf25408e0bad760a5013687e2025e560ada0e725bd2020
5
5
  SHA512:
6
- metadata.gz: 067d4568b1fe8ab89c69416f9a6b3df5b887d2365350de9a29d3812a8d0069e52b631c8b8d683c6693a7a39a7d87b31178115737861bc60d2fbd02968ac7bfcb
7
- data.tar.gz: ab73c2429972136e8eb628e449b7f283bdb01c594eab8b829b34d61b50b45cf50489942e1d3bb779a09b4cacc876b671a7fd821326da469d6ef1c4a009da0b6e
6
+ metadata.gz: e8d4b8b59389b40d377b23775f9f4bef80839bc833b18f0ea0d0c8bccbebd6acddf548bd28b0a745cb3908fd73cccafc74b4612df5c847d66c5cb11cb4e40076
7
+ data.tar.gz: 95212036395041fcda47c5eb3c6eab5a9d422767689254736e612221175143a2088d8990db4609adc8d8cc14c524fb11d38906542e6231bc24170d18bf131907
data/lib/usable.rb CHANGED
@@ -53,7 +53,7 @@ module Usable
53
53
  base.instance_eval do
54
54
  def config(&block)
55
55
  if block
56
- usables.instance_eval &block
56
+ usables.instance_eval(&block)
57
57
  else
58
58
  usables
59
59
  end
@@ -128,7 +128,8 @@ module Usable
128
128
  ModExtender.new(mod, only: only, method: extension_method).call self
129
129
  # Define settings on @usables and on the scoped @usables
130
130
  scope = Config.new
131
- if mod.name
131
+ # Nest the new config under a namespace based on it's name, unless it's the default name we gave
132
+ if mod.name && !mod.name.include?("UsableMod")
132
133
  scope_name = mod.name.split('::').last.gsub(/\B([A-Z])([a-z_0-9])/, '_\1\2').downcase
133
134
  usables[scope_name] = scope
134
135
  end
@@ -141,7 +142,7 @@ module Usable
141
142
  [scope, usables].each { |x| options.each { |k, v| x[k] = v } }
142
143
  end
143
144
  if block_given?
144
- [scope, usables].each { |x| x.instance_eval &block }
145
+ [scope, usables].each { |x| x.instance_eval(&block) }
145
146
  end
146
147
  if mod.const_defined?(:InstanceMethods, false)
147
148
  send :include, mod.const_get(:InstanceMethods, false)
data/lib/usable/config.rb CHANGED
@@ -30,8 +30,12 @@ module Usable
30
30
  @spec.to_h.each(&block)
31
31
  end
32
32
 
33
+ # @note The @spec[key] could already be set in cases where the config was merged with another
34
+ # For example, a usable module defines a default with a block, and when mounting the module
35
+ # the same usable option is overridden as an options hash (usable mod, key: 'val')
33
36
  def to_h
34
- @lazy_loads.each { |key| @spec[key] = call_spec_method(key) }
37
+ @lazy_loads.each { |key| @spec[key] ||= @spec.public_send(key) }
38
+ @lazy_loads.clear
35
39
  @spec.to_h
36
40
  end
37
41
 
@@ -58,7 +62,7 @@ module Usable
58
62
  def method_missing(key, *args, &block)
59
63
  if block
60
64
  @lazy_loads << key
61
- @spec.define_singleton_method(key) { yield }
65
+ @spec.define_singleton_method(key, &block)
62
66
  else
63
67
  # Needs to be a symbol so we can consistently access @lazy_loads
64
68
  key = key.to_s.tr('=', '').to_sym
@@ -18,9 +18,7 @@ module Usable
18
18
  # @description Directly include a module whose methods you want made available in +usables.available_methods+
19
19
  # Gives the module a name when including so that it shows up properly in the list of ancestors
20
20
  def call(target)
21
- unwanted.each do |method_name|
22
- copy.send :remove_method, method_name
23
- end
21
+ unwanted.each(&method(:remove_from_module))
24
22
  if copy.name.nil?
25
23
  const_name = "#{mod_name}Used"
26
24
  target.send :remove_const, const_name if target.const_defined? const_name, false
@@ -46,5 +44,16 @@ module Usable
46
44
  @copy.instance_methods - Array(only)
47
45
  end
48
46
  end
47
+
48
+ def remove_from_module(method_name)
49
+ begin
50
+ copy.send :remove_method, method_name
51
+ rescue NameError => e
52
+ # Expected sometimes, like it could be raised trying to remove a superclass method
53
+ Usable.logger.debug("#{e.class}: #{e.message}")
54
+ end
55
+ # Block access to superclass method, and prevent it from being copied to the target
56
+ copy.send :undef_method, method_name if copy.instance_methods.include?(method_name)
57
+ end
49
58
  end
50
59
  end
@@ -68,7 +68,8 @@ module Usable
68
68
  def _config_file
69
69
  return @_config_file if @_config_file
70
70
  FileUtils.mkdir_p(usables.dir) unless File.directory?(usables.dir)
71
- @_config_file = File.join(usables.dir, "#{self.class.name.downcase.gsub('::', '_')}.yml")
71
+ filename = self.class.name ? self.class.name.downcase.gsub('::', '_') : 'usable'
72
+ @_config_file = File.join(usables.dir, "#{filename}.yml")
72
73
  FileUtils.touch(@_config_file) unless File.exists?(@_config_file)
73
74
  @_config_file
74
75
  end
@@ -1,3 +1,3 @@
1
1
  module Usable
2
- VERSION = "3.9.0".freeze
2
+ VERSION = "3.9.4".freeze
3
3
  end
data/usable.gemspec CHANGED
@@ -21,8 +21,8 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.required_ruby_version = '>= 2.0.0'
23
23
 
24
- spec.add_development_dependency 'bundler', '~> 1.10'
25
- spec.add_development_dependency 'rake', '~> 10.0'
26
- spec.add_development_dependency 'rspec', '>= 3.2', '< 4'
24
+ spec.add_development_dependency "bundler", "~> 2.2.11"
25
+ spec.add_development_dependency "rake", ">= 12.3.3"
26
+ spec.add_development_dependency "rspec", ">= 3.2", "< 4"
27
27
  # spec.add_development_dependency 'rspec-scaffold', '>= 1.0', '< 2'
28
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: usable
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.9.0
4
+ version: 3.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Buckley
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-21 00:00:00.000000000 Z
11
+ date: 2021-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.10'
19
+ version: 2.2.11
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.10'
26
+ version: 2.2.11
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: 12.3.3
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: 12.3.3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,7 +80,7 @@ homepage: https://github.com/ridiculous/usable
80
80
  licenses:
81
81
  - MIT
82
82
  metadata: {}
83
- post_install_message:
83
+ post_install_message:
84
84
  rdoc_options: []
85
85
  require_paths:
86
86
  - lib
@@ -95,9 +95,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  requirements: []
98
- rubyforge_project:
99
- rubygems_version: 2.6.13
100
- signing_key:
98
+ rubygems_version: 3.2.11
99
+ signing_key:
101
100
  specification_version: 4
102
101
  summary: Mounts and configures modules
103
102
  test_files: []