sub_string 1.1 → 1.2
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/ChangeLog +5 -0
 - data/README.en.rdoc +18 -12
 - data/lib/sub_string.rb +25 -1
 - data/sub_string.gemspec +4 -3
 - data/test/test_sub_string.rb +23 -2
 - metadata +16 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 4a09c6fbaa026b755be6a24a94173f329d29f05695abc7de8ebc135b0cfa8c59
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 10e9d237218dbe2fe26c987f87617547b85b4469b80692846416ef6f8cae1081
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 53d20271499902491470468848a19129be4ff3e61be0687e1c7d4783c9eacd729b80344505f859f030e5da803e9bceb2c13954a01cdaa22704758d5d3c0be889
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 99b0f5db08ba2aa094beee4bd96b6910dd80bda57079470bd1f15ee947efa3b8fca836b85a5158c7a517f63fad21fd69406470de51e9d826af7e3753ebfb6040
         
     | 
    
        data/ChangeLog
    CHANGED
    
    
    
        data/README.en.rdoc
    CHANGED
    
    | 
         @@ -27,14 +27,16 @@ in {Github}[https://github.com/masasakano/sub_string] 
     | 
|
| 
       27 
27 
     | 
    
         
             
            This class takes three parameters in the initialization: *source*, *pos*
         
     | 
| 
       28 
28 
     | 
    
         
             
            (starting positional character-index), and *size* (of the substring of the original String *source*.
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
              SubString.new( source,  
     | 
| 
      
 30 
     | 
    
         
            +
              SubString.new( source, pos=0, size=nil, attr: arbitrary_object )
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
32 
     | 
    
         
             
            The constructed instance of this class keeps only these three pieces
         
     | 
| 
       33 
     | 
    
         
            -
            of information  
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
      
 33 
     | 
    
         
            +
            of information, plus user-supplied instance-specific additional
         
     | 
| 
      
 34 
     | 
    
         
            +
            information +attr+, (plus a hash value, strictly speaking), and hence uses negligible internal memory space on its own,
         
     | 
| 
      
 35 
     | 
    
         
            +
            unlike the Ruby default +String#[ i, j ]+ .
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            Note that the default of +pos+ is 0, and negative values are allowed
         
     | 
| 
      
 38 
     | 
    
         
            +
            for it just like +String#[ -2, 1 ]+ .   If the size is unspecified,
         
     | 
| 
      
 39 
     | 
    
         
            +
            the maximum possible size for +source+ counted from +pos+ is used.
         
     | 
| 
       38 
40 
     | 
    
         | 
| 
       39 
41 
     | 
    
         
             
            Then, whenever it is referred to, it reconstructs the original
         
     | 
| 
       40 
42 
     | 
    
         
             
            sub-String object:
         
     | 
| 
         @@ -54,7 +56,8 @@ As an example, the child class {SubString}[http://rubygems.org/gems/sub_string] 
     | 
|
| 
       54 
56 
     | 
    
         
             
            works as:
         
     | 
| 
       55 
57 
     | 
    
         | 
| 
       56 
58 
     | 
    
         
             
              src = "abcdef"
         
     | 
| 
       57 
     | 
    
         
            -
              ss = SubString 
     | 
| 
      
 59 
     | 
    
         
            +
              ss = SubString(src, -4, 3, attr: (5..6)) # => Short form of SubString.new()
         
     | 
| 
      
 60 
     | 
    
         
            +
                           # => Similar to "abcdef"[-4,3]
         
     | 
| 
       58 
61 
     | 
    
         
             
              print ss     # => "cde" (STDOUT)
         
     | 
| 
       59 
62 
     | 
    
         
             
              ss+'3p'      # => "cde3p"
         
     | 
| 
       60 
63 
     | 
    
         
             
              ss.upcase    # => "CDE"
         
     | 
| 
         @@ -62,6 +65,7 @@ works as: 
     | 
|
| 
       62 
65 
     | 
    
         
             
              ss.is_a?(String)  # => true
         
     | 
| 
       63 
66 
     | 
    
         
             
              "xy_"+ss     # => "xy_cde"
         
     | 
| 
       64 
67 
     | 
    
         
             
              "cde" == ss  # => true
         
     | 
| 
      
 68 
     | 
    
         
            +
              ss.attr      # => (5..6)  # user-specified instance-specific additional information
         
     | 
| 
       65 
69 
     | 
    
         | 
| 
       66 
70 
     | 
    
         
             
            Internally the instance holds the source object.  Therefore, as long
         
     | 
| 
       67 
71 
     | 
    
         
             
            as the instance is alive, the source object is never garbage-collected (GC).
         
     | 
| 
         @@ -172,20 +176,22 @@ Or, alternatively, download them and put the library files in one of your Ruby l 
     | 
|
| 
       172 
176 
     | 
    
         | 
| 
       173 
177 
     | 
    
         
             
            == Developer's note
         
     | 
| 
       174 
178 
     | 
    
         | 
| 
       175 
     | 
    
         
            -
            The master of this README file is found in
         
     | 
| 
       176 
     | 
    
         
            -
            {RubyGems/ 
     | 
| 
      
 179 
     | 
    
         
            +
            The master of this README file as well as the entire package is found in
         
     | 
| 
      
 180 
     | 
    
         
            +
            {RubyGems/sub_string}[https://rubygems.org/gems/sub_string]
         
     | 
| 
       177 
181 
     | 
    
         | 
| 
       178 
     | 
    
         
            -
             
     | 
| 
      
 182 
     | 
    
         
            +
            The source code is maintained also in
         
     | 
| 
      
 183 
     | 
    
         
            +
            {Github}[https://github.com/masasakano/sub_string] with no intuitive
         
     | 
| 
      
 184 
     | 
    
         
            +
            interface for annotation but with easily-browsable {ChangeLog}[https://github.com/masasakano/sub_string/blob/master/ChangeLog]
         
     | 
| 
       179 
185 
     | 
    
         | 
| 
       180 
186 
     | 
    
         
             
            === Tests
         
     | 
| 
       181 
187 
     | 
    
         | 
| 
       182 
     | 
    
         
            -
            Ruby codes under the directory <tt>test/</tt> are the test scripts.
         
     | 
| 
      
 188 
     | 
    
         
            +
            The Ruby codes under the directory <tt>test/</tt> are the test scripts.
         
     | 
| 
       183 
189 
     | 
    
         
             
            You can run them from the top directory as <tt>ruby test/test_****.rb</tt>
         
     | 
| 
       184 
190 
     | 
    
         
             
            or simply run <tt>make test</tt>.
         
     | 
| 
       185 
191 
     | 
    
         | 
| 
       186 
192 
     | 
    
         
             
            == Known bugs and Todo items
         
     | 
| 
       187 
193 
     | 
    
         | 
| 
       188 
     | 
    
         
            -
            * This class ignores any optional (keyword) parameters for the methods.  It is due to the fact Ruby {BasicObject#method_missing}[https://ruby-doc.org/core-2.6.5/BasicObject.html#method-i-method_missing] does not take them into account as of Ruby-2.6.5.  It may change in future versions of Ruby. As far as the Ruby built-in methods of String are concerned, it does not matter because none of them uses one.  However, if String  
     | 
| 
      
 194 
     | 
    
         
            +
            * This class ignores any optional (keyword) parameters for the methods of the original String class.  It is due to the fact Ruby {BasicObject#method_missing}[https://ruby-doc.org/core-2.6.5/BasicObject.html#method-i-method_missing] does not take them into account as of Ruby-2.6.5.  It may change in future versions of Ruby. As far as the Ruby built-in methods of String are concerned, it does not matter because none of them uses one.  However, if String has methods of this kind defined by a user or in external library, it may encounter a trouble.
         
     | 
| 
       189 
195 
     | 
    
         | 
| 
       190 
196 
     | 
    
         | 
| 
       191 
197 
     | 
    
         
             
            == Copyright
         
     | 
    
        data/lib/sub_string.rb
    CHANGED
    
    | 
         @@ -15,8 +15,32 @@ require 'sub_object'  # Gem: {SubObject}[http://rubygems.org/gems/sub_object] 
     | 
|
| 
       15 
15 
     | 
    
         
             
            #
         
     | 
| 
       16 
16 
     | 
    
         
             
            class SubString < SubObject
         
     | 
| 
       17 
17 
     | 
    
         
             
              # Symbol of the method that projects to (returns) the original-like instance;
         
     | 
| 
       18 
     | 
    
         
            -
              # e.g., :to_str for String. The value should be overwritten in the child class of SubObject.
         
     | 
| 
      
 18 
     | 
    
         
            +
              # e.g., :to_str for String. The value should be overwritten in the child class of {SubObject}, namely this class {SubString} in this case.
         
     | 
| 
       19 
19 
     | 
    
         
             
              TO_SOURCE_METHOD = :to_str
         
     | 
| 
       20 
20 
     | 
    
         
             
              alias_method TO_SOURCE_METHOD, :to_source
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              # Returns a new instance of SubString equivalent to source[ pos, size ]
         
     | 
| 
      
 23 
     | 
    
         
            +
              #
         
     | 
| 
      
 24 
     | 
    
         
            +
              # Difference from the original SubObject is the defaults are set for
         
     | 
| 
      
 25 
     | 
    
         
            +
              # the second and third parameters.
         
     | 
| 
      
 26 
     | 
    
         
            +
              #
         
     | 
| 
      
 27 
     | 
    
         
            +
              # If the third parameter is nil, it is set as the maximum size possible
         
     | 
| 
      
 28 
     | 
    
         
            +
              # counted from pos (the starting position)
         
     | 
| 
      
 29 
     | 
    
         
            +
              #
         
     | 
| 
      
 30 
     | 
    
         
            +
              # @param source [String]
         
     | 
| 
      
 31 
     | 
    
         
            +
              # @param pos [Integer] Starting character index position.
         
     | 
| 
      
 32 
     | 
    
         
            +
              # @param size [Integer, nil] Size of the substring to make.
         
     | 
| 
      
 33 
     | 
    
         
            +
              # @param attr: [Object] user-specified arbitrary object
         
     | 
| 
      
 34 
     | 
    
         
            +
              def initialize(source, pos=0, size=nil, attr: nil)
         
     | 
| 
      
 35 
     | 
    
         
            +
                size ||= ((pos >= 0) ? source.size - pos : -pos)
         
     | 
| 
      
 36 
     | 
    
         
            +
                super source, pos, size, attr: attr
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            # Function version of {SubString#initialize}
         
     | 
| 
      
 41 
     | 
    
         
            +
            #
         
     | 
| 
      
 42 
     | 
    
         
            +
            # @param (see SubString#initialize)
         
     | 
| 
      
 43 
     | 
    
         
            +
            def SubString(*rest, **kwd)
         
     | 
| 
      
 44 
     | 
    
         
            +
              SubString.new(*rest, **kwd)
         
     | 
| 
       21 
45 
     | 
    
         
             
            end
         
     | 
| 
       22 
46 
     | 
    
         | 
    
        data/sub_string.gemspec
    CHANGED
    
    | 
         @@ -5,7 +5,7 @@ require 'date' 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       7 
7 
     | 
    
         
             
              s.name = 'sub_string'.sub(/.*/){|c| (c == File.basename(Dir.pwd)) ? c : raise("ERROR: s.name=(#{c}) in gemspec seems wrong!")}
         
     | 
| 
       8 
     | 
    
         
            -
              s.version = "1. 
     | 
| 
      
 8 
     | 
    
         
            +
              s.version = "1.2".sub(/.*/){|c| fs = Dir.glob('changelog{,.*}', File::FNM_CASEFOLD); raise('More than one ChangeLog exist!') if fs.size > 1; warn("WARNING: Version(s.version=#{c}) already exists in #{fs[0]} - ok?") if fs.size == 1 && !IO.readlines(fs[0]).grep(/^\(Version: #{Regexp.quote c}\)$/).empty? ; c }  # n.b., In macOS, changelog and ChangeLog are identical in default.
         
     | 
| 
       9 
9 
     | 
    
         
             
              # s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       10 
10 
     | 
    
         
             
              # s.bindir = 'bin'
         
     | 
| 
       11 
11 
     | 
    
         
             
              # %w(sub_string).each do |f|
         
     | 
| 
         @@ -13,7 +13,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       13 
13 
     | 
    
         
             
              #   File.executable?(path) ? s.executables << f : raise("ERROR: Executable (#{path}) is not executable!")
         
     | 
| 
       14 
14 
     | 
    
         
             
              # end
         
     | 
| 
       15 
15 
     | 
    
         
             
              s.authors = ["Masa Sakano"]
         
     | 
| 
       16 
     | 
    
         
            -
              s.date = %q{2019-11- 
     | 
| 
      
 16 
     | 
    
         
            +
              s.date = %q{2019-11-12}.sub(/.*/){|c| (Date.parse(c) == Date.today) ? c : raise("ERROR: s.date=(#{c}) is not today!")}
         
     | 
| 
       17 
17 
     | 
    
         
             
              s.summary = %q{Duck-typed String class with negligible memory use}
         
     | 
| 
       18 
18 
     | 
    
         
             
              s.description = <<-EOF
         
     | 
| 
       19 
19 
     | 
    
         
             
                Class SubString that expresses Ruby sub-String but taking up negligible memory space, as its instance holds the positional information only.  It behaves exactly like String (duck-typing), except destructive modification is prohibited.  If the original string is destructively altered, warning is issued.
         
     | 
| 
         @@ -38,7 +38,8 @@ Gem::Specification.new do |s| 
     | 
|
| 
       38 
38 
     | 
    
         
             
              s.files.reject! { |fn| File.symlink? fn }
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
              s.add_runtime_dependency 'sub_object', '>= 1.1'
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              s.add_development_dependency "plain_text", [">= 0.6"]
         
     | 
| 
       42 
43 
     | 
    
         
             
              s.homepage = "https://www.wisebabel.com"
         
     | 
| 
       43 
44 
     | 
    
         
             
              s.rdoc_options = ["--charset=UTF-8"]  # "-e UTF-8" is now Default...
         
     | 
| 
       44 
45 
     | 
    
         | 
    
        data/test/test_sub_string.rb
    CHANGED
    
    | 
         @@ -117,12 +117,32 @@ class TestUnitSubString < MiniTest::Test 
     | 
|
| 
       117 
117 
     | 
    
         
             
                assert_equal hs, obj.attr
         
     | 
| 
       118 
118 
     | 
    
         
             
                obj.attr[:try] = 89
         
     | 
| 
       119 
119 
     | 
    
         
             
                assert_equal 89, obj.attr[:try]
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                # Tests of default
         
     | 
| 
      
 122 
     | 
    
         
            +
                str = 'abcdefghijklm'*20
         
     | 
| 
      
 123 
     | 
    
         
            +
                obj = SubString.new str
         
     | 
| 
      
 124 
     | 
    
         
            +
                assert_equal str.size, obj.size
         
     | 
| 
      
 125 
     | 
    
         
            +
                assert_equal str.size, obj.subsize
         
     | 
| 
      
 126 
     | 
    
         
            +
                assert_equal str, obj
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
                obj = SubString.new str, attr: 6
         
     | 
| 
      
 129 
     | 
    
         
            +
                assert_equal  6, obj.attr
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                obj = SubString.new str, 1
         
     | 
| 
      
 132 
     | 
    
         
            +
                assert_equal str.size, obj.size+1
         
     | 
| 
      
 133 
     | 
    
         
            +
                assert_equal str.size, obj.subsize+1
         
     | 
| 
      
 134 
     | 
    
         
            +
                assert_equal str[1..-1], obj
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
                obj = SubString.new str, -2
         
     | 
| 
      
 137 
     | 
    
         
            +
                assert_equal 2, obj.size
         
     | 
| 
      
 138 
     | 
    
         
            +
                assert_equal 2, obj.subsize
         
     | 
| 
      
 139 
     | 
    
         
            +
                assert_equal str[-2..-1], obj
         
     | 
| 
       120 
140 
     | 
    
         
             
              end
         
     | 
| 
       121 
141 
     | 
    
         | 
| 
       122 
     | 
    
         
            -
              # As in README.en.rdoc
         
     | 
| 
      
 142 
     | 
    
         
            +
              # As in README.en.rdoc (also tests of SubString() as opposed to SubString.new)
         
     | 
| 
       123 
143 
     | 
    
         
             
              def test_sub_string03
         
     | 
| 
       124 
144 
     | 
    
         
             
                src = "abcdef"
         
     | 
| 
       125 
     | 
    
         
            -
                ss = SubString 
     | 
| 
      
 145 
     | 
    
         
            +
                ss = SubString(src, -4, 3, attr: (5..6))  # => Similar to "abcdef"[-4,3]
         
     | 
| 
       126 
146 
     | 
    
         
             
                assert_operator "cde", '==', ss
         
     | 
| 
       127 
147 
     | 
    
         
             
                assert_equal "cde",    ss.to_s
         
     | 
| 
       128 
148 
     | 
    
         
             
                assert_equal "cde3p",  ss+'3p'
         
     | 
| 
         @@ -130,6 +150,7 @@ class TestUnitSubString < MiniTest::Test 
     | 
|
| 
       130 
150 
     | 
    
         
             
                assert_equal "Qde",    ss.sub(/^./, 'Q')
         
     | 
| 
       131 
151 
     | 
    
         
             
                assert                 ss.is_a?(String)
         
     | 
| 
       132 
152 
     | 
    
         
             
                assert_equal "xy_cde", "xy_"+ss
         
     | 
| 
      
 153 
     | 
    
         
            +
                assert_equal (5..6),   ss.attr
         
     | 
| 
       133 
154 
     | 
    
         
             
              end
         
     | 
| 
       134 
155 
     | 
    
         
             
            end # class TestUnitSubString < MiniTest::Test
         
     | 
| 
       135 
156 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: sub_string
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: '1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: '1.2'
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Masa Sakano
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2019-11- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2019-11-12 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: sub_object
         
     | 
| 
         @@ -24,6 +24,20 @@ dependencies: 
     | 
|
| 
       24 
24 
     | 
    
         
             
                - - ">="
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
26 
     | 
    
         
             
                    version: '1.1'
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: plain_text
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: '0.6'
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: '0.6'
         
     | 
| 
       27 
41 
     | 
    
         
             
            description: "    Class SubString that expresses Ruby sub-String but taking up negligible
         
     | 
| 
       28 
42 
     | 
    
         
             
              memory space, as its instance holds the positional information only.  It behaves
         
     | 
| 
       29 
43 
     | 
    
         
             
              exactly like String (duck-typing), except destructive modification is prohibited.
         
     |