evt-subst_attr 2.1.0.3 → 2.3.0.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: 7cd9e0e75afa44800d3af10e87c289aaac6955c0c5d679eff4f36e95f2592436
4
- data.tar.gz: 3a61d8de2af93bfa4d1341784461a1db4b02299528aea709ca792b7661cf1f68
3
+ metadata.gz: 51385491182124c0f1e675f1df90d7e81f3e84f8324b665720da9a67a037acff
4
+ data.tar.gz: 5212e853afa9c4eefe2039716b1f8438c9dda7ed105a0c65f0202c13b47f8032
5
5
  SHA512:
6
- metadata.gz: 59b316523005e8cf28b9b493a04bcfc5c08494784b0f9b8da825265bd36246c7b51931c816eea9e6c7175f357bbbaa42760f7fd7b59cce1777bb33f11db7a946
7
- data.tar.gz: da367377a46cd31c69caa583f6d6a9976e80fff8034a03cf9f4898ab4dfa9c8e5c8c5c9f245b413324571ca246338151675293cdba2a79e4cc2e8ed8cc7fee2c
6
+ metadata.gz: 2001883e0fee53b47f8259a3d74bf70ab5c1b41ebb5427e72a496ba28940b722a4c10f1430fb6a826946eb55b988ce2d8f6fc8740f081fd5fe91e380d5b91c57
7
+ data.tar.gz: 14919ff5da8885b09e3b315cc85fe211ae44972e516bd9da1ba49090bd4cfc9fd64e49ddb8984c0a7058b4776872ee6e9ff86a22e1d9bcbd564b746b4525e2b6
@@ -1,8 +1,8 @@
1
1
  module SubstAttr
2
2
  module Attribute
3
- def self.define(target_class, attr_name, interface=nil)
3
+ def self.define(target_class, attr_name, interface=nil, record=nil)
4
4
  ::Attribute::Define.(target_class, attr_name, :accessor) do
5
- Substitute.build(interface)
5
+ Substitute.build(interface, record)
6
6
  end
7
7
  end
8
8
  end
@@ -3,18 +3,34 @@ module SubstAttr
3
3
  module Dependency
4
4
  class Example
5
5
  def self.configure(receiver)
6
- receiver.some_attr = new
6
+ receiver.constructed_substitute_attr = new
7
7
  end
8
8
 
9
9
  module Substitute
10
10
  def self.build
11
- :some_substutute
11
+ :some_substitute
12
12
  end
13
13
  end
14
14
 
15
15
  class Descendant < Example
16
16
  end
17
17
  end
18
+
19
+ module NoSubstituteModule
20
+ class Example
21
+ def some_method
22
+ end
23
+ end
24
+ end
25
+
26
+ module MixinSubstitute
27
+ class Example
28
+ module Substitute
29
+ def some_method
30
+ end
31
+ end
32
+ end
33
+ end
18
34
  end
19
35
  end
20
36
  end
@@ -3,9 +3,13 @@ module SubstAttr
3
3
  class Example
4
4
  include SubstAttr
5
5
 
6
- subst_attr :some_attr, Dependency::Example
6
+ subst_attr :null_object_substitute_attr
7
7
 
8
- subst_attr :weak_attr
8
+ subst_attr :mimic_substitute_attr, Dependency::NoSubstituteModule::Example
9
+ subst_attr :no_recorder_mimic_substitute_attr, Dependency::NoSubstituteModule::Example, record: false
10
+ subst_attr :mixed_in_mimic_substitute_attr, Dependency::MixinSubstitute::Example
11
+
12
+ subst_attr :constructed_substitute_attr, Dependency::Example
9
13
 
10
14
  def self.build
11
15
  new.tap do |instance|
@@ -17,7 +21,7 @@ module SubstAttr
17
21
  class Example
18
22
  include SubstAttr
19
23
 
20
- subst_attr :some_attr, Dependency::Example::Descendant
24
+ subst_attr :some_dependency_attr, Dependency::Example::Descendant
21
25
  end
22
26
  end
23
27
  end
@@ -1,7 +1,7 @@
1
1
  module SubstAttr
2
2
  module Macro
3
- def subst_attr_macro(attr_name, interface=nil)
4
- SubstAttr::Attribute.define(self, attr_name, interface)
3
+ def subst_attr_macro(attr_name, interface=nil, record: nil)
4
+ SubstAttr::Attribute.define(self, attr_name, interface, record)
5
5
  end
6
6
  alias :subst_attr :subst_attr_macro
7
7
  end
@@ -1,28 +1,16 @@
1
1
  module SubstAttr
2
2
  module Substitute
3
- module NullObject
4
- extend self
5
-
6
- def build(interface=nil)
7
- if interface
8
- return strict(interface)
3
+ def self.null_object_class
4
+ Mimic::Build.(Object, record: false) do
5
+ def self.build
6
+ new
9
7
  end
10
8
 
11
- weak
12
- end
13
-
14
- def strict(interface)
15
- Mimic.(interface, record: false)
16
- end
17
-
18
- def weak
19
- Weak.new
20
- end
21
-
22
- Weak = Mimic::Build.(Object, record: false) do
23
9
  def method_missing(*)
24
10
  end
25
11
  end
26
12
  end
13
+
14
+ NullObject = Class.new(null_object_class)
27
15
  end
28
16
  end
@@ -2,13 +2,37 @@ module SubstAttr
2
2
  module Substitute
3
3
  extend self
4
4
 
5
- def build(interface=nil)
6
- if interface
7
- specialization = specialization(interface)
8
- return specialization if specialization
5
+ def build(interface=nil, record=nil)
6
+ if record.nil?
7
+ record = Defaults.record
9
8
  end
10
9
 
11
- return NullObject.build(interface)
10
+ if interface.nil?
11
+ return NullObject.build
12
+ end
13
+
14
+ substitute_module = substitute_module(interface)
15
+
16
+ if substitute_module.nil?
17
+ return mimic(interface, record)
18
+ end
19
+
20
+ if substitute_module.respond_to?(:build)
21
+ return substitute_module.send(:build)
22
+ end
23
+
24
+ mimic = mimic(interface, record)
25
+ mimic.extend(substitute_module)
26
+
27
+ mimic
28
+ end
29
+
30
+ def null_object
31
+ NullObject.build
32
+ end
33
+
34
+ def mimic(interface, record)
35
+ Mimic.(interface, record: record)
12
36
  end
13
37
 
14
38
  def call(attr_name, receiver)
@@ -18,7 +42,7 @@ module SubstAttr
18
42
  substitute
19
43
  end
20
44
 
21
- def specialization(interface)
45
+ def substitute_module(interface)
22
46
  constant_name = :Substitute
23
47
 
24
48
  reflection = Reflect.(interface, constant_name, strict: false, ancestors: true)
@@ -27,13 +51,22 @@ module SubstAttr
27
51
  return nil
28
52
  end
29
53
 
30
- specialization_module = reflection.constant
54
+ mod = reflection.constant
31
55
 
32
- unless specialization_module.respond_to?(:build)
56
+ # Special case:
57
+ # Including Substitute puts SubstAttr::Substitute
58
+ # in the constant lookup class
59
+ if mod.equal?(self)
33
60
  return nil
34
61
  end
35
62
 
36
- specialization_module.send(:build)
63
+ mod
64
+ end
65
+
66
+ module Defaults
67
+ def self.record
68
+ true
69
+ end
37
70
  end
38
71
  end
39
72
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evt-subst_attr
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0.3
4
+ version: 2.3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Eventide Project
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-04 00:00:00.000000000 Z
11
+ date: 2023-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: evt-attribute
@@ -103,9 +103,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  requirements: []
106
- rubygems_version: 3.1.2
106
+ rubygems_version: 3.4.6
107
107
  signing_key:
108
108
  specification_version: 4
109
- summary: Declare attributes that have default implementations that are substitutes
110
- or null objects
109
+ summary: Declare attributes that have default implementations that are diagnostic
110
+ substitutes or null objects
111
111
  test_files: []