usable 3.9.0 → 3.9.4

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
- 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: []