core-inspect 0.1.0 → 0.2.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: 615476710018bff02b4d41a3671bc153b79e3cd9ad68fde4fff8c80b6313263b
4
- data.tar.gz: 3ce099faddcbe11e82f7de1acbb18fec0200a4525cf72c606aaf97503043c7e6
3
+ metadata.gz: 6d7b6c077a16af15bd8d6ffe2905d1bb2854e8338f03fc244592f3d4f8245b89
4
+ data.tar.gz: cdf2f0b1e1168c3d4b15efdbb2692b6faa2d7e6d37686935e7d1ecd306545019
5
5
  SHA512:
6
- metadata.gz: 9ef18b5f03f05496601ce8642dd72a38f16696b88d72e13eda75549ee3e754fd4de34733ee8c1ca2cf863847d812f7a5798b1eb1bc12bcb9fc21c94072ddcceb
7
- data.tar.gz: c61999af7e3408936794246655542317b95aa63910ac0a6a872df552caeb1807f7197ff6087ebc27e86b12dc1e1484c74e40848466e876727bbe7f5e082f72d0
6
+ metadata.gz: 959c6142dc9b0e42d896dfd8df539cdaccd717246ae7aeadd17fc7ebe1d011fdd8fdea00615b8f73ddf90fb760e59d140357ecdc5859c374d9efdd66e5b27dfd
7
+ data.tar.gz: 647dc9cb901ddf6e277f1eb2256b7319c36b874f4f8a7a68bcf4076152590d1ea35fb143858fa495f1a5c49da6e1f0cb31e0ad924b51f725d42e7687fb22bb7c
data/CHANGELOG.md CHANGED
@@ -1,21 +1,34 @@
1
- ## [v0.1.0](https://github.com/metabahn/corerb/releases/tag/2021-11-23.1)
1
+ ## [v0.2.0](https://github.com/bryanp/corerb/releases/tag/2023-12-24)
2
2
 
3
- *released on 2021-11-23.1*
3
+ *released on 2023-12-24*
4
4
 
5
- * `add` [#110](https://github.com/metabahn/corerb/pull/110) Introduce Core::Inspect::Inspectable for greater customization ([bryanp](https://github.com/bryanp))
6
- * `chg` [#109](https://github.com/metabahn/corerb/pull/109) Prefer `__send__` to `send` ([bryanp](https://github.com/bryanp))
5
+ * `dep` [#143](https://github.com/bryanp/corerb/pull/143) Deprecate `Is::*` and `Refine::*` namespaces ([bryanp](https://github.com/bryanp))
6
+ * `dep` [#135](https://github.com/bryanp/corerb/pull/135) Remove Ruby 2 support ([bryanp](https://github.com/bryanp))
7
7
 
8
- ## [v0.0.2](https://github.com/metabahn/corerb/releases/tag/2021-11-02)
8
+ ## [v0.1.1](https://github.com/bryanp/corerb/releases/tag/2022-01-13)
9
+
10
+ *released on 2022-01-13*
11
+
12
+ * `fix` [#119](https://github.com/bryanp/corerb/pull/119) Access inspectable state through instance variables ([bryanp](https://github.com/bryanp))
13
+
14
+ ## [v0.1.0](https://github.com/bryanp/corerb/releases/tag/2021-11-23.1)
15
+
16
+ *released on 2021-11-23*
17
+
18
+ * `add` [#110](https://github.com/bryanp/corerb/pull/110) Introduce Core::Inspect::Inspectable for greater customization ([bryanp](https://github.com/bryanp))
19
+ * `chg` [#109](https://github.com/bryanp/corerb/pull/109) Prefer `__send__` to `send` ([bryanp](https://github.com/bryanp))
20
+
21
+ ## [v0.0.2](https://github.com/bryanp/corerb/releases/tag/2021-11-02)
9
22
 
10
23
  *released on 2021-11-02*
11
24
 
12
- * `chg` [#97](https://github.com/metabahn/corerb/pull/97) Designate internal state with leading and trailing double underscores ([bryanp](https://github.com/bryanp))
25
+ * `chg` [#97](https://github.com/bryanp/corerb/pull/97) Designate internal state with leading and trailing double underscores ([bryanp](https://github.com/bryanp))
13
26
 
14
- ## [v0.0.0](https://github.com/metabahn/corerb/releases/tag/2021-07-07)
27
+ ## [v0.0.0](https://github.com/bryanp/corerb/releases/tag/2021-07-07)
15
28
 
16
29
  *released on 2021-07-07*
17
30
 
18
- * `chg` [#42](https://github.com/metabahn/corerb/pull/42) Drop Ruby 2.6 support from core-inspect ([bryanp](https://github.com/bryanp))
19
- * `add` [#34](https://github.com/metabahn/corerb/pull/34) Initial implementation of core-inspect ([bryanp](https://github.com/bryanp))
31
+ * `chg` [#42](https://github.com/bryanp/corerb/pull/42) Drop Ruby 2.6 support from core-inspect ([bryanp](https://github.com/bryanp))
32
+ * `add` [#34](https://github.com/bryanp/corerb/pull/34) Initial implementation of core-inspect ([bryanp](https://github.com/bryanp))
20
33
 
21
34
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Core
4
4
  module Inspect
5
- VERSION = "0.1.0"
5
+ VERSION = "0.2.0"
6
6
 
7
7
  def self.version
8
8
  VERSION
data/lib/core/inspect.rb CHANGED
@@ -1,10 +1,118 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "core/extension"
4
+ require "core/local"
5
+ require "core/state"
6
+
3
7
  module Core
8
+ # [public] Customized inspections for any object.
9
+ #
4
10
  module Inspect
5
11
  require_relative "inspect/inspection"
6
12
  require_relative "inspect/version"
13
+
14
+ extend Core::Extension
15
+
16
+ extends dependencies: [Core::State]
17
+
18
+ extends :definition do
19
+ # [public] Sets one or more instance variables or instance methods as inspectable.
20
+ #
21
+ # without - An array of instance variables or instance methods that should not be inspected.
22
+ #
23
+ def inspects(*inspectables, without: [])
24
+ if inspectables.any?
25
+ mutate_state :__inspectables__ do |current_inspectables|
26
+ inspectables.each do |inspectable|
27
+ inspection = build_inspection(inspectable)
28
+ current_inspectables[inspection.name] = inspection
29
+ end
30
+
31
+ current_inspectables
32
+ end
33
+ end
34
+
35
+ if without.any?
36
+ mutate_state :__uninspectables__ do |current_uninspectables|
37
+ without.each do |inspectable|
38
+ inspection = build_inspection(inspectable)
39
+ current_uninspectables[inspection.name] = inspection
40
+ end
41
+
42
+ current_uninspectables
43
+ end
44
+ end
45
+ end
46
+
47
+ private def build_inspection(inspectable)
48
+ case inspectable
49
+ when Core::Inspect::Inspection
50
+ inspectable
51
+ else
52
+ Core::Inspect::Inspection.new(name: inspectable)
53
+ end
54
+ end
55
+ end
56
+
57
+ applies do
58
+ state :__inspectables__, default: {}
59
+ state :__uninspectables__, default: {}
60
+ end
61
+
62
+ # [public] Inspects the object.
63
+ #
64
+ def inspect
65
+ inspection = +"#<#{self.class}:0x#{__id__.to_s(16)}"
66
+
67
+ if Inspect.inspecting?(self)
68
+ "#{inspection} ...>"
69
+ else
70
+ Inspect.prevent_recursion(self) do
71
+ each_inspectable do |inspectable|
72
+ inspection << ", #{inspectable.name}=#{inspectable.resolve(self).inspect}"
73
+ end
74
+
75
+ inspection.strip << ">"
76
+ end
77
+ end
78
+ end
79
+
80
+ private def each_inspectable
81
+ inspectables = if @__inspectables__.any?
82
+ @__inspectables__
83
+ else
84
+ instance_variables.map(&:to_s).reject { |instance_variable|
85
+ instance_variable.start_with?("@_")
86
+ }.each_with_object({}) { |instance_variable, hash|
87
+ hash[instance_variable] = self.class.__send__(:build_inspection, instance_variable)
88
+ }
89
+ end
90
+
91
+ inspectables.each_value do |inspectable|
92
+ unless @__uninspectables__.include?(inspectable.name)
93
+ yield inspectable
94
+ end
95
+ end
96
+ end
97
+
98
+ class << self
99
+ include Core::Local
100
+
101
+ def prevent_recursion(object)
102
+ object_id = object.object_id
103
+ inspected_objects[object_id] = true
104
+ yield
105
+ ensure
106
+ inspected_objects.delete(object_id)
107
+ end
108
+
109
+ def inspecting?(object)
110
+ inspected_objects[object.object_id]
111
+ end
112
+
113
+ def inspected_objects
114
+ localized(:__corerb_inspected_objects__) || localize(:__corerb_inspected_objects__, {})
115
+ end
116
+ end
7
117
  end
8
118
  end
9
-
10
- require_relative "../is/inspectable"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: core-inspect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Powell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-23 00:00:00.000000000 Z
11
+ date: 2023-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: core-extension
@@ -16,44 +16,44 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.3'
19
+ version: '0.5'
20
20
  type: :runtime
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: '0.3'
26
+ version: '0.5'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: core-local
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.0'
33
+ version: '0.2'
34
34
  type: :runtime
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: '0.0'
40
+ version: '0.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: core-state
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.0'
47
+ version: '0.2'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0.0'
54
+ version: '0.2'
55
55
  description: Customized inspections for any object.
56
- email: bryan@metabahn.com
56
+ email: bryan@bryanp.org
57
57
  executables: []
58
58
  extensions: []
59
59
  extra_rdoc_files: []
@@ -63,8 +63,7 @@ files:
63
63
  - lib/core/inspect.rb
64
64
  - lib/core/inspect/inspection.rb
65
65
  - lib/core/inspect/version.rb
66
- - lib/is/inspectable.rb
67
- homepage: https://github.com/metabahn/corerb/
66
+ homepage: https://github.com/bryanp/corerb/
68
67
  licenses:
69
68
  - MPL-2.0
70
69
  metadata: {}
@@ -76,14 +75,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
75
  requirements:
77
76
  - - ">="
78
77
  - !ruby/object:Gem::Version
79
- version: '2.7'
78
+ version: '3.0'
80
79
  required_rubygems_version: !ruby/object:Gem::Requirement
81
80
  requirements:
82
81
  - - ">="
83
82
  - !ruby/object:Gem::Version
84
83
  version: '0'
85
84
  requirements: []
86
- rubygems_version: 3.2.22
85
+ rubygems_version: 3.5.1
87
86
  signing_key:
88
87
  specification_version: 4
89
88
  summary: Customized inspections for any object.
@@ -1,117 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "is/extension"
4
- require "is/localized"
5
- require "is/stateful"
6
-
7
- require_relative "../core/inspect/inspection"
8
-
9
- module Is
10
- # [public] Customized inspections for any object.
11
- #
12
- module Inspectable
13
- extend Is::Extension
14
-
15
- extends dependencies: [Is::Stateful]
16
-
17
- extends :definition do
18
- # [public] Sets one or more instance variables or instance methods as inspectable.
19
- #
20
- # without - An array of instance variables or instance methods that should not be inspected.
21
- #
22
- def inspects(*inspectables, without: [])
23
- if inspectables.any?
24
- mutate_state :__inspectables__ do |current_inspectables|
25
- inspectables.each do |inspectable|
26
- inspection = build_inspection(inspectable)
27
- current_inspectables[inspection.name] = inspection
28
- end
29
-
30
- current_inspectables
31
- end
32
- end
33
-
34
- if without.any?
35
- mutate_state :__uninspectables__ do |current_uninspectables|
36
- without.each do |inspectable|
37
- inspection = build_inspection(inspectable)
38
- current_uninspectables[inspection.name] = inspection
39
- end
40
-
41
- current_uninspectables
42
- end
43
- end
44
- end
45
-
46
- private def build_inspection(inspectable)
47
- case inspectable
48
- when Core::Inspect::Inspection
49
- inspectable
50
- else
51
- Core::Inspect::Inspection.new(name: inspectable)
52
- end
53
- end
54
- end
55
-
56
- applies do
57
- state :__inspectables__, default: {}
58
- state :__uninspectables__, default: {}
59
- end
60
-
61
- # [public] Inspects the object.
62
- #
63
- def inspect
64
- inspection = +"#<#{self.class}:0x#{__id__.to_s(16)}"
65
-
66
- if Inspectable.inspecting?(self)
67
- "#{inspection} ...>"
68
- else
69
- Inspectable.prevent_recursion(self) do
70
- each_inspectable do |inspectable|
71
- inspection << ", #{inspectable.name}=#{inspectable.resolve(self).inspect}"
72
- end
73
-
74
- inspection.strip << ">"
75
- end
76
- end
77
- end
78
-
79
- private def each_inspectable
80
- inspectables = if __inspectables__.any?
81
- __inspectables__
82
- else
83
- instance_variables.map(&:to_s).reject { |instance_variable|
84
- instance_variable.start_with?("@_")
85
- }.each_with_object({}) { |instance_variable, hash|
86
- hash[instance_variable] = self.class.__send__(:build_inspection, instance_variable)
87
- }
88
- end
89
-
90
- inspectables.each_value do |inspectable|
91
- unless __uninspectables__.include?(inspectable.name)
92
- yield inspectable
93
- end
94
- end
95
- end
96
-
97
- class << self
98
- include Is::Localized
99
-
100
- def prevent_recursion(object)
101
- object_id = object.object_id
102
- inspected_objects[object_id] = true
103
- yield
104
- ensure
105
- inspected_objects.delete(object_id)
106
- end
107
-
108
- def inspecting?(object)
109
- inspected_objects[object.object_id]
110
- end
111
-
112
- def inspected_objects
113
- localized(:__corerb_inspected_objects__) || localize(:__corerb_inspected_objects__, {})
114
- end
115
- end
116
- end
117
- end