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
         |