sub_string 1.0.2 → 1.1
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/Makefile +1 -1
- data/README.en.rdoc +21 -6
- data/sub_string.gemspec +3 -3
- data/test/test_sub_string.rb +11 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be037dc9ea050057d431c3c5802fd2f68bed5cfa9784608b7838c8edff615240
|
4
|
+
data.tar.gz: b69983867ce0acd0bd43f13897c9440a6933970f42b8bd94640074960d21895e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7531ec47934fcfdde76d82dcc3bd171d5550d3be4fa9df127a31e1d8e142932a39e7730829c1bf81183749b3b7b3c2aed37f403452654273f02c3198e14b8c35
|
7
|
+
data.tar.gz: fa87ab5c861b9e5c5436e32a4f329a0957d3d80e20ba04871f9bf21c886b17e9edbeaf9f4698bf5195314110b4912ad6c1ec419cd4750f7c6771892e15cd5a97
|
data/ChangeLog
CHANGED
data/Makefile
CHANGED
@@ -20,5 +20,5 @@ test:
|
|
20
20
|
|
21
21
|
## yard2md_afterclean in Gem plain_text https://rubygems.org/gems/plain_text
|
22
22
|
doc:
|
23
|
-
yard doc; [[ -x ".github" && ( "README.en.rdoc" -nt ".github/README.md" ) ]] && ( ruby -r rdoc -e 'puts RDoc::Markup::ToMarkdown.new.convert ARGF.read' < README.en.rdoc | yard2md_afterclean > .github/README.md
|
23
|
+
yard doc; [[ -x ".github" && ( "README.en.rdoc" -nt ".github/README.md" ) ]] && ( ruby -r rdoc -e 'puts RDoc::Markup::ToMarkdown.new.convert ARGF.read' < README.en.rdoc | yard2md_afterclean > .github/README.md.$$ && ( mv -f .github/README.md.$$ .github/README.md && echo ".github/README.md is updated." ) || ( echo "ERROR: failed to create .github/README.md" >&2 ) ) || exit 0
|
24
24
|
|
data/README.en.rdoc
CHANGED
@@ -3,7 +3,8 @@
|
|
3
3
|
|
4
4
|
== Summary
|
5
5
|
|
6
|
-
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 modified, warning is issued.
|
6
|
+
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 modified, warning is issued. Also, as a bonus, an
|
7
|
+
arbitrary object can be associated with instances of this class with +SubString#attr+.
|
7
8
|
|
8
9
|
On the surface, this is a String version of the class MatchSkeleton
|
9
10
|
{match_skeleton}[https://rubygems.org/gems/match_skeleton] (also in
|
@@ -26,7 +27,7 @@ in {Github}[https://github.com/masasakano/sub_string]
|
|
26
27
|
This class takes three parameters in the initialization: *source*, *pos*
|
27
28
|
(starting positional character-index), and *size* (of the substring of the original String *source*.
|
28
29
|
|
29
|
-
|
30
|
+
SubString.new( source, index1, index2, attr: arbitrary_object )
|
30
31
|
|
31
32
|
The constructed instance of this class keeps only these three pieces
|
32
33
|
of information (plus a hash value, strictly speaking), and hence uses negligible internal memory space on its own.
|
@@ -43,6 +44,12 @@ sub-String object:
|
|
43
44
|
and works exactly like *source*
|
44
45
|
({duck-typing}[https://en.wikipedia.org/wiki/Duck_typing]).
|
45
46
|
|
47
|
+
Note +attr+ option is optional and to set an arbitrary object as an
|
48
|
+
instance variable. The default value is nil. It can be
|
49
|
+
reset any time later with the setter method of +SubString#attr=+.
|
50
|
+
To store an arbitrary number of pieces of information, a Hash instance
|
51
|
+
would be convenient.
|
52
|
+
|
46
53
|
As an example, the child class {SubString}[http://rubygems.org/gems/sub_string] (provided as a different Gem)
|
47
54
|
works as:
|
48
55
|
|
@@ -61,13 +68,16 @@ as the instance is alive, the source object is never garbage-collected (GC).
|
|
61
68
|
|
62
69
|
=== Instance methods
|
63
70
|
|
64
|
-
The following is the instance methods of
|
71
|
+
The following is the instance methods of this class that do not exist in String. All are
|
72
|
+
inherited from the parent {SubObject}[http://rubygems.org/gems/sub_object] class.
|
65
73
|
|
66
74
|
+#source()+:: Returns the first argument (+source+ String) given in initialization. The returned value is dup-ped and **frozen**.
|
67
75
|
+#pos()+:: Returns the second argument (positional index) given in initialization.
|
68
76
|
+#subsize()+:: Returns the third argument (size) given in initialization. Equivalent to the method +#size+.
|
69
77
|
+#pos_size()+:: Returns the two-component array of +[pos, subsize]+
|
70
78
|
+#to_source()+:: Returns the instance projected with +to_src+
|
79
|
+
+#attr=()+:: Setter of the user-defined instance variable.
|
80
|
+
+#attr()+:: Getter of the user-defined instance variable. The default is nil.
|
71
81
|
|
72
82
|
In addition, +#inspect+ is redefined.
|
73
83
|
|
@@ -91,6 +101,11 @@ program applied to a huge text document with a complex grammar may
|
|
91
101
|
hold a number of such String variables. By using this class instead
|
92
102
|
of String, it can save some valuable memory.
|
93
103
|
|
104
|
+
Note this class also offers a function to associate an arbitrary
|
105
|
+
object with it with the setter and getter methods of +SubString#attr=+ and +SubString#attr+
|
106
|
+
(which are inherited methods from the parent class {SubObject}[http://rubygems.org/gems/sub_object]
|
107
|
+
like the others).
|
108
|
+
|
94
109
|
=== Warning about destructive methods to this instance or worse, to the source
|
95
110
|
|
96
111
|
If the source object has been destructively altered, such as with the
|
@@ -138,8 +153,8 @@ However if you want to suppress the warning message, set the Ruby
|
|
138
153
|
global variable +$VERBOSE+ to nil. Alternatively, you can control it with
|
139
154
|
a class instance variable as
|
140
155
|
|
141
|
-
|
142
|
-
|
156
|
+
SubString.verbose # => getter
|
157
|
+
SubString.verbose=true # => setter
|
143
158
|
|
144
159
|
If it is set either TRUE or FALSE, this verbosity level has a
|
145
160
|
priority, regardless of the value of +$VERBOSE+.
|
@@ -149,7 +164,7 @@ In default it is nil and $VERBOSE is referred to.
|
|
149
164
|
== Install
|
150
165
|
|
151
166
|
This script requires {Ruby}[http://www.ruby-lang.org] Version 2.0
|
152
|
-
or above.
|
167
|
+
or above. Also, all this library depends on {SubObject (sub_object)}[https://rubygems.org/gems/sub_object], which you can
|
153
168
|
find in RubyGems.
|
154
169
|
|
155
170
|
You can install the packages of both this library and SubObject with the usual Ruby gem command.
|
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.1".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-09}.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.
|
@@ -37,7 +37,7 @@ Gem::Specification.new do |s|
|
|
37
37
|
}
|
38
38
|
s.files.reject! { |fn| File.symlink? fn }
|
39
39
|
|
40
|
-
s.add_runtime_dependency 'sub_object', '>= 1.
|
40
|
+
s.add_runtime_dependency 'sub_object', '>= 1.1'
|
41
41
|
# s.add_development_dependency "bourne", [">= 0"] # '~> 2.0' to mean for only 2.0.x
|
42
42
|
s.homepage = "https://www.wisebabel.com"
|
43
43
|
s.rdoc_options = ["--charset=UTF-8"] # "-e UTF-8" is now Default...
|
data/test/test_sub_string.rb
CHANGED
@@ -106,6 +106,17 @@ class TestUnitSubString < MiniTest::Test
|
|
106
106
|
assert_equal '..."'+"\n", err[-5..-1]
|
107
107
|
assert_equal 60, (err.split(']')[-1].size-4)/10.0.round*10
|
108
108
|
assert_equal 120, siz
|
109
|
+
|
110
|
+
# Tests of attr
|
111
|
+
assert_nil obj.attr
|
112
|
+
str = 'abcdefghijklm'*20
|
113
|
+
obj = SubString.new str, 0, 120, attr: 5
|
114
|
+
assert_equal 5, obj.attr
|
115
|
+
hs = Hash[{ try: 67 }]
|
116
|
+
obj.attr = hs
|
117
|
+
assert_equal hs, obj.attr
|
118
|
+
obj.attr[:try] = 89
|
119
|
+
assert_equal 89, obj.attr[:try]
|
109
120
|
end
|
110
121
|
|
111
122
|
# As in README.en.rdoc
|
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.1'
|
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-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sub_object
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.1'
|
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: '1.
|
26
|
+
version: '1.1'
|
27
27
|
description: " Class SubString that expresses Ruby sub-String but taking up negligible
|
28
28
|
memory space, as its instance holds the positional information only. It behaves
|
29
29
|
exactly like String (duck-typing), except destructive modification is prohibited.
|