object_inspector 0.6.2 → 0.6.3
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 +4 -4
- data/README.md +26 -22
- data/lib/object_inspector/conversions.rb +17 -17
- data/lib/object_inspector/formatters/base_formatter.rb +57 -59
- data/lib/object_inspector/formatters/combining_formatter.rb +44 -46
- data/lib/object_inspector/formatters/templating_formatter.rb +168 -202
- data/lib/object_inspector/inspector.rb +165 -161
- data/lib/object_inspector/inspectors_helper.rb +10 -12
- data/lib/object_inspector/object_interrogator.rb +35 -33
- data/lib/object_inspector/scope.rb +115 -106
- data/lib/object_inspector/version.rb +2 -1
- data/lib/object_inspector.rb +6 -0
- metadata +31 -24
- data/.gitignore +0 -11
- data/.rubocop +0 -4
- data/.rubocop.yml +0 -158
- data/CHANGELOG.md +0 -49
- data/Gemfile +0 -8
- data/Gemfile.lock +0 -83
- data/Rakefile +0 -12
- data/bin/console +0 -16
- data/bin/setup +0 -8
- data/object_inspector.gemspec +0 -47
- data/scripts/benchmarking/formatters.rb +0 -118
- data/scripts/benchmarking/object_inspector.rb +0 -74
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d20f26835756f0ebb2f4ecb6371662cc35a4cb9d62e72682a5b76d8e96ca8290
|
4
|
+
data.tar.gz: c41e95352adedc432259b57f8ed0be5e16a9a0b7860ba23e5bbd8f8fa1cecf9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 141e7e013e692ff025d7f6c2bc11f395ed6ff8499c30e5d161d7e5fc0219f2981b688ea1db6c01a80e87363553bf07a5b8319d04db744f688a3839bcf9ff1982
|
7
|
+
data.tar.gz: 4a811cba205e011f8d8ce390c89da2aa93dd01e21692ce28516739b35c7907c7f7e416f606c39fdfb92edba237f76ac439175dd90c1fefc498b7e8ad25bbcfae
|
data/README.md
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
#
|
1
|
+
# Object Inspector
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/object_inspector)
|
4
|
-
[](https://codeclimate.com/github/pdobb/object_inspector/test_coverage)
|
5
4
|
[](https://codeclimate.com/github/pdobb/object_inspector/maintainability)
|
6
5
|
|
7
|
-
|
6
|
+
Object Inspector takes Object#inspect to the next level. Specify any combination of identification attributes, flags, issues, info, and/or a name along with an optional, self-definable scope option to represent objects. Great for the console, logging, etc.
|
8
7
|
|
9
8
|
Why? Because object inspection code should be uniform, easy to build, and its output should be easy to read!
|
10
9
|
|
@@ -31,20 +30,17 @@ Or install it yourself:
|
|
31
30
|
## Compatibility
|
32
31
|
|
33
32
|
Tested MRI Ruby Versions:
|
34
|
-
* 2.3
|
35
|
-
* 2.4
|
36
|
-
* 2.5
|
37
|
-
* 2.6
|
38
33
|
* 2.7
|
34
|
+
* 3.0
|
39
35
|
* 3.1
|
40
36
|
* 3.2
|
41
37
|
|
42
|
-
|
38
|
+
Object Inspector has no other dependencies.
|
43
39
|
|
44
40
|
|
45
41
|
## Configuration
|
46
42
|
|
47
|
-
Global/default values for
|
43
|
+
Global/default values for Object Inspector can be configured via the ObjectInspector::Configuration object.
|
48
44
|
|
49
45
|
_Note: In a Rails app, the following would go in e.g. `config/initializers/object_inspector.rb`_
|
50
46
|
|
@@ -393,13 +389,13 @@ class MyDelegatingWrapperObject
|
|
393
389
|
@my_object = my_object
|
394
390
|
end
|
395
391
|
|
396
|
-
def inspect(**
|
392
|
+
def inspect(**kwargs)
|
397
393
|
super(identification: self.class.name,
|
398
394
|
name: nil,
|
399
395
|
flags: nil,
|
400
396
|
info: nil,
|
401
397
|
issues: nil,
|
402
|
-
**
|
398
|
+
**kwargs)
|
403
399
|
end
|
404
400
|
|
405
401
|
def to_model
|
@@ -513,7 +509,7 @@ See examples:
|
|
513
509
|
|
514
510
|
## Supporting Gems
|
515
511
|
|
516
|
-
|
512
|
+
Object Inspector works great with the [Object Identifier](https://github.com/pdobb/object_identifier) gem.
|
517
513
|
|
518
514
|
```ruby
|
519
515
|
class MyObject
|
@@ -546,14 +542,14 @@ MyObject.new.inspect
|
|
546
542
|
|
547
543
|
## Performance
|
548
544
|
|
549
|
-
### Benchmarking
|
545
|
+
### Benchmarking Object Inspector
|
550
546
|
|
551
547
|
ObjectInspetor is ~4x slower than Ruby's default inspect.
|
552
548
|
|
553
|
-
Performance of
|
549
|
+
Performance of Object Inspector can be tested by playing the [Object Inspector Benchmarking Script](https://github.com/pdobb/object_inspector/blob/master/script/benchmarking/object_inspector.rb) in the pry console for this gem.
|
554
550
|
|
555
551
|
```ruby
|
556
|
-
play
|
552
|
+
play script/benchmarking/object_inspector.rb
|
557
553
|
# Comparison:
|
558
554
|
# Ruby: 30382.2 i/s
|
559
555
|
# ObjectInspector::Inspector: 7712.2 i/s - 3.94x slower
|
@@ -564,10 +560,10 @@ play scripts/benchmarking/object_inspector.rb
|
|
564
560
|
|
565
561
|
[ObjectInspector::TemplatingFormatter] -- which is the default Formatter -- outperforms [ObjectInspector::CombiningFormatter] by about 30% on average.
|
566
562
|
|
567
|
-
Performance of Formatters can be tested by playing the [Formatters Benchmarking Scripts] in the pry console for this gem.
|
563
|
+
Performance of Formatters can be tested by playing the [Formatters Benchmarking Scripts](https://github.com/pdobb/object_inspector/blob/master/script/benchmarking/formatters.rb) in the pry console for this gem.
|
568
564
|
|
569
565
|
```ruby
|
570
|
-
play
|
566
|
+
play script/benchmarking/formatters.rb
|
571
567
|
# == Averaged =============================================================
|
572
568
|
# ...
|
573
569
|
#
|
@@ -586,7 +582,7 @@ Custom Formatters may be similarly gauged for comparison by adding them to the `
|
|
586
582
|
```ruby
|
587
583
|
custom_formatter_klasses = [MyCustomFormatter]
|
588
584
|
|
589
|
-
play
|
585
|
+
play script/benchmarking/formatters.rb
|
590
586
|
# == Averaged =============================================================
|
591
587
|
# ...
|
592
588
|
#
|
@@ -601,12 +597,20 @@ play scripts/benchmarking/formatters.rb
|
|
601
597
|
|
602
598
|
## Development
|
603
599
|
|
604
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
600
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. Or, run `rake` to run the tests plus linters as well as `yard` (to confirm proper YARD documentation practices). You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
605
601
|
|
606
602
|
To install this gem onto your local machine, run `bundle exec rake install`.
|
607
603
|
|
608
|
-
To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and
|
604
|
+
To release a new version, update the version number in `version.rb`, bump the latest ruby target versions etc. with `rake bump`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
609
605
|
|
606
|
+
### Documentation
|
607
|
+
|
608
|
+
[YARD documentation](https://yardoc.org/index.html) can be generated and viewed live:
|
609
|
+
1. Install YARD: `gem install yard`
|
610
|
+
2. Run the YARD server: `yard server --reload`
|
611
|
+
3. Open the live documentation site: `open http://localhost:8808`
|
612
|
+
|
613
|
+
While the YARD server is running, documentation in the live site will be auto-updated on source code save (and site reload).
|
610
614
|
|
611
615
|
## Contributing
|
612
616
|
|
@@ -620,5 +624,5 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
620
624
|
|
621
625
|
[ObjectInspector::TemplatingFormatter]: https://github.com/pdobb/object_inspector/blob/master/lib/object_inspector/formatters/templating_formatter.rb
|
622
626
|
[ObjectInspector::CombiningFormatter]: https://github.com/pdobb/object_inspector/blob/master/lib/object_inspector/formatters/combining_formatter.rb
|
623
|
-
[
|
624
|
-
[Formatters Benchmarking Scripts]: https://github.com/pdobb/object_inspector/blob/master/
|
627
|
+
[Object Inspector Benchmarking Scripts]: https://github.com/pdobb/object_inspector/blob/master/script/benchmarking/object_inspector.rb
|
628
|
+
[Formatters Benchmarking Scripts]: https://github.com/pdobb/object_inspector/blob/master/script/benchmarking/formatters.rb
|
@@ -1,23 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
module_function
|
3
|
+
# ObjectInspector::Conversions defines conversion functions used by
|
4
|
+
# ObjectInspector.
|
5
|
+
module ObjectInspector::Conversions
|
6
|
+
module_function
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
8
|
+
# Convert the passed in value to an {ObjectInspector::Scope} object.
|
9
|
+
# Just returns the passed in value if it already is an
|
10
|
+
# {ObjectInspector::Scope} object.
|
11
|
+
#
|
12
|
+
# @return [ObjectInspector::Scope]
|
13
|
+
#
|
14
|
+
# :reek:UncommunicativeMethodName
|
15
|
+
def Scope(value) # rubocop:disable Naming/MethodName
|
16
|
+
case value
|
17
|
+
when ObjectInspector::Scope
|
18
|
+
value
|
19
|
+
else
|
20
|
+
ObjectInspector::Scope.new(value)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -1,71 +1,69 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
attr_reader :inspector
|
3
|
+
# ObjectInspector::BaseFormatter is an abstract base class that interfaces
|
4
|
+
# with {ObjectInspector::Inspector} objects to combine the supplied
|
5
|
+
# {#identification}, {#flags}, {#info}, and {#name} strings into a friendly
|
6
|
+
# "inspect" String.
|
7
|
+
class ObjectInspector::BaseFormatter
|
8
|
+
attr_reader :inspector
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
# @param inspector [ObjectInspector::Inspector]
|
11
|
+
def initialize(inspector)
|
12
|
+
@inspector = inspector
|
13
|
+
end
|
15
14
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
# Perform the formatting routine.
|
16
|
+
#
|
17
|
+
# @return [String]
|
18
|
+
def call
|
19
|
+
raise NotImplementedError
|
20
|
+
end
|
22
21
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
22
|
+
# Delegates to {Inspector#wrapped_object_inspection_result}.
|
23
|
+
#
|
24
|
+
# @return [String] if given
|
25
|
+
# @return [NilClass] if not given
|
26
|
+
def wrapped_object_inspection_result
|
27
|
+
@wrapped_object_inspection_result ||=
|
28
|
+
@inspector.wrapped_object_inspection_result
|
29
|
+
end
|
31
30
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
31
|
+
# Delegates to {Inspector#identification}.
|
32
|
+
#
|
33
|
+
# @return [String] if given
|
34
|
+
def identification
|
35
|
+
@identification ||= @inspector.identification
|
36
|
+
end
|
38
37
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
38
|
+
# Delegates to {Inspector#flags}.
|
39
|
+
#
|
40
|
+
# @return [String] if given
|
41
|
+
# @return [NilClass] if not given
|
42
|
+
def flags
|
43
|
+
@flags ||= @inspector.flags
|
44
|
+
end
|
46
45
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
46
|
+
# Delegates to {Inspector#issues}.
|
47
|
+
#
|
48
|
+
# @return [String] if given
|
49
|
+
# @return [NilClass] if not given
|
50
|
+
def issues
|
51
|
+
@issues ||= @inspector.issues
|
52
|
+
end
|
54
53
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
54
|
+
# Delegates to {Inspector#info}.
|
55
|
+
#
|
56
|
+
# @return [String] if given
|
57
|
+
# @return [NilClass] if not given
|
58
|
+
def info
|
59
|
+
@info ||= @inspector.info
|
60
|
+
end
|
62
61
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
end
|
62
|
+
# Delegates to {Inspector#name}.
|
63
|
+
#
|
64
|
+
# @return [String] if given
|
65
|
+
# @return [NilClass] if not given
|
66
|
+
def name
|
67
|
+
@name ||= @inspector.name
|
70
68
|
end
|
71
69
|
end
|
@@ -1,63 +1,61 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
# ObjectInspector::CombiningFormatter implements
|
4
|
+
# {ObjectInspector::BaseFormatter} to return the standard/default inspect
|
5
|
+
# output format by combining Strings.
|
6
|
+
#
|
7
|
+
# @attr (see BaseFormatter)
|
8
|
+
class ObjectInspector::CombiningFormatter < ObjectInspector::BaseFormatter
|
9
|
+
# Perform the formatting routine.
|
7
10
|
#
|
8
|
-
# @
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
if wrapped_object_inspection_result
|
15
|
-
build_wrapped_object_string
|
16
|
-
else
|
17
|
-
build_string
|
18
|
-
end
|
11
|
+
# @return [String]
|
12
|
+
def call
|
13
|
+
if wrapped_object_inspection_result
|
14
|
+
build_wrapped_object_string
|
15
|
+
else
|
16
|
+
build_string
|
19
17
|
end
|
18
|
+
end
|
20
19
|
|
21
|
-
|
20
|
+
private
|
22
21
|
|
23
|
-
|
24
|
-
|
22
|
+
def build_wrapped_object_string
|
23
|
+
"#{build_string} "\
|
25
24
|
"#{ObjectInspector.configuration.presented_object_separator} "\
|
26
25
|
"#{wrapped_object_inspection_result}"
|
27
|
-
|
26
|
+
end
|
28
27
|
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
def build_string
|
29
|
+
"<#{combine_strings}>"
|
30
|
+
end
|
32
31
|
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
def combine_strings
|
33
|
+
strings.join
|
34
|
+
end
|
36
35
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
36
|
+
# Override in subclasses as needed.
|
37
|
+
def strings
|
38
|
+
[
|
39
|
+
build_identification_string,
|
40
|
+
build_flags_string,
|
41
|
+
build_info_string,
|
42
|
+
build_name_string,
|
43
|
+
].compact
|
44
|
+
end
|
46
45
|
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
def build_identification_string
|
47
|
+
identification.to_s
|
48
|
+
end
|
50
49
|
|
51
|
-
|
52
|
-
|
53
|
-
|
50
|
+
def build_flags_string
|
51
|
+
"(#{flags.to_s.upcase})" if flags
|
52
|
+
end
|
54
53
|
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
def build_info_string
|
55
|
+
" #{info}" if info
|
56
|
+
end
|
58
57
|
|
59
|
-
|
60
|
-
|
61
|
-
end
|
58
|
+
def build_name_string
|
59
|
+
" :: #{name}" if name
|
62
60
|
end
|
63
61
|
end
|