cardname 0.2.2 → 0.3.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 +4 -4
- data/lib/cardname/manipulate.rb +26 -17
- data/lib/cardname/parts.rb +15 -12
- data/lib/cardname/predicates.rb +2 -7
- data/lib/cardname/variants.rb +1 -1
- data/lib/cardname.rb +18 -26
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf908ff88412470eef1eb037b0a90b398e419ad4
|
4
|
+
data.tar.gz: 791c5cf2d06a2b7d572262fb9f16d56cb647c0b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4298e82e31e1b987bd42a589f52bb13f3ee0e9e611277f64307de182db345ad34436ec4f53310b2901d447f0063338d2e53081132c288b9fa1d0e4b65c9ab985
|
7
|
+
data.tar.gz: ed7fe969ab7f71ff59ff998640b0d5489d02147501e92aedf1f6e9f30028ed178ef72f38765a5c144ffbeda2fb2f827808d4b47d2d7296e7a8296cd08e30600c
|
data/lib/cardname/manipulate.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
class Cardname
|
2
2
|
module Manipulate
|
3
|
-
#
|
3
|
+
# swap a subname
|
4
4
|
# keys are used for comparison
|
5
|
-
def
|
5
|
+
def swap old, new
|
6
6
|
old_name = old.to_name
|
7
7
|
new_name = new.to_name
|
8
|
-
return self if old_name.
|
9
|
-
return
|
8
|
+
return self if old_name.num_parts > num_parts
|
9
|
+
return swap_part(old_name, new_name) if old_name.simple?
|
10
10
|
return self unless include? old_name
|
11
|
-
|
11
|
+
swap_all_subsequences(old_name, new_name).to_name
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
|
14
|
+
def swap_part oldpart, newpart
|
15
|
+
ensure_simpleness oldpart, "Use 'swap' to swap junctions"
|
16
16
|
|
17
17
|
oldpart = oldpart.to_name
|
18
18
|
newpart = newpart.to_name
|
@@ -22,37 +22,46 @@ class Cardname
|
|
22
22
|
end.to_name
|
23
23
|
end
|
24
24
|
|
25
|
-
def
|
25
|
+
def swap_piece oldpiece, newpiece
|
26
26
|
oldpiece = oldpiece.to_name
|
27
27
|
newpiece = newpiece.to_name
|
28
28
|
|
29
|
-
return
|
29
|
+
return swap_part oldpiece, newpiece if oldpiece.simple?
|
30
30
|
return self unless self.starts_with?(oldpiece)
|
31
|
-
return newpiece if oldpiece.
|
32
|
-
newpiece
|
31
|
+
return newpiece if oldpiece.num_parts == num_parts
|
32
|
+
self.class.new [newpiece, self[oldpiece.num_parts..-1]].flatten
|
33
|
+
end
|
34
|
+
|
35
|
+
def num_parts
|
36
|
+
parts.length
|
37
|
+
end
|
38
|
+
|
39
|
+
def prepend_joint
|
40
|
+
joint = self.class.joint
|
41
|
+
self =~ /^#{Regexp.escape joint}/ ? self : (joint + self)
|
33
42
|
end
|
34
43
|
|
35
44
|
private
|
36
45
|
|
37
|
-
def
|
46
|
+
def swap_all_subsequences oldseq, newseq
|
38
47
|
res = []
|
39
48
|
i = 0
|
40
|
-
while i <=
|
49
|
+
while i <= num_parts - oldseq.num_parts
|
41
50
|
# for performance reasons: check first character first then the rest
|
42
51
|
if oldseq.part_keys.first == part_keys[i] &&
|
43
|
-
oldseq.part_keys == part_keys[i, oldseq.
|
52
|
+
oldseq.part_keys == part_keys[i, oldseq.num_parts]
|
44
53
|
res += newseq.parts
|
45
|
-
i += oldseq.
|
54
|
+
i += oldseq.num_parts
|
46
55
|
else
|
47
56
|
res << parts[i]
|
48
57
|
i += 1
|
49
58
|
end
|
50
59
|
end
|
51
|
-
res += parts[i..-1] if i <
|
60
|
+
res += parts[i..-1] if i < num_parts
|
52
61
|
res
|
53
62
|
end
|
54
63
|
|
55
|
-
def
|
64
|
+
def ensure_simpleness part, msg=nil
|
56
65
|
return if part.to_name.simple?
|
57
66
|
raise StandardError, "'#{part}' has to be simple. #{msg}"
|
58
67
|
end
|
data/lib/cardname/parts.rb
CHANGED
@@ -5,16 +5,19 @@ class Cardname
|
|
5
5
|
module Parts
|
6
6
|
attr_reader :parts, :part_keys, :simple
|
7
7
|
|
8
|
-
alias simple? simple
|
9
8
|
alias_method :to_a, :parts
|
10
9
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
@
|
17
|
-
|
10
|
+
def parts
|
11
|
+
@parts = s.split(/\s*#{JOINT_RE}\s*/, -1)
|
12
|
+
end
|
13
|
+
|
14
|
+
def simple
|
15
|
+
@simple = parts.size <= 1
|
16
|
+
end
|
17
|
+
alias simple? simple
|
18
|
+
|
19
|
+
def part_keys
|
20
|
+
@part_keys ||= simple ? [simple_key] : parts.map { |p| p.to_name.simple_key }
|
18
21
|
end
|
19
22
|
|
20
23
|
def left
|
@@ -99,16 +102,16 @@ class Cardname
|
|
99
102
|
end
|
100
103
|
end
|
101
104
|
|
102
|
-
def + other
|
103
|
-
|
104
|
-
end
|
105
|
+
# def + other
|
106
|
+
# self.class.new(parts + other.to_name.parts)
|
107
|
+
# end
|
105
108
|
|
106
109
|
def [] *args
|
107
110
|
self.class.new parts[*args]
|
108
111
|
end
|
109
112
|
|
110
113
|
# full support of array methods caused trouble with `flatten` calls
|
111
|
-
# It splits the parts of
|
114
|
+
# It splits the parts of names in arrays
|
112
115
|
# # name parts can be accessed and manipulated like an array
|
113
116
|
# def method_missing method, *args, &block
|
114
117
|
# if ARRAY_METHODS.include? method # parts.respond_to?(method)
|
data/lib/cardname/predicates.rb
CHANGED
@@ -5,11 +5,6 @@ class Cardname
|
|
5
5
|
!simple?
|
6
6
|
end
|
7
7
|
|
8
|
-
def blank?
|
9
|
-
s.blank?
|
10
|
-
end
|
11
|
-
alias empty? blank?
|
12
|
-
|
13
8
|
def valid?
|
14
9
|
!parts.find do |pt|
|
15
10
|
pt.match self.class.banned_re
|
@@ -19,14 +14,14 @@ class Cardname
|
|
19
14
|
# @return true if name starts with the same parts as `prefix`
|
20
15
|
def starts_with? prefix
|
21
16
|
start_name = prefix.to_name
|
22
|
-
start_name == self[0, start_name.
|
17
|
+
start_name == self[0, start_name.num_parts]
|
23
18
|
end
|
24
19
|
alias_method :start_with?, :starts_with?
|
25
20
|
|
26
21
|
# @return true if name ends with the same parts as `prefix`
|
27
22
|
def ends_with? postfix
|
28
23
|
end_name = postfix.to_name
|
29
|
-
end_name == self[-end_name.
|
24
|
+
end_name == self[-end_name.num_parts..-1]
|
30
25
|
end
|
31
26
|
alias_method :end_with?, :ends_with?
|
32
27
|
|
data/lib/cardname/variants.rb
CHANGED
data/lib/cardname.rb
CHANGED
@@ -3,13 +3,14 @@
|
|
3
3
|
require 'active_support/configurable'
|
4
4
|
require 'active_support/inflector'
|
5
5
|
require 'htmlentities'
|
6
|
-
require_relative 'cardname/parts'
|
7
|
-
require_relative 'cardname/variants'
|
8
|
-
require_relative 'cardname/contextual'
|
9
|
-
require_relative 'cardname/predicates'
|
10
|
-
require_relative 'cardname/manipulate'
|
11
6
|
|
12
|
-
class Cardname <
|
7
|
+
class Cardname < String
|
8
|
+
|
9
|
+
require_relative 'cardname/parts'
|
10
|
+
require_relative 'cardname/variants'
|
11
|
+
require_relative 'cardname/contextual'
|
12
|
+
require_relative 'cardname/predicates'
|
13
|
+
require_relative 'cardname/manipulate'
|
13
14
|
|
14
15
|
include Parts
|
15
16
|
include Variants
|
@@ -17,8 +18,7 @@ class Cardname < Object
|
|
17
18
|
include Predicates
|
18
19
|
include Manipulate
|
19
20
|
|
20
|
-
|
21
|
-
OK4KEY_RE = RUBYENCODING ? '\p{Word}\*' : '\w\*'
|
21
|
+
OK4KEY_RE = '\p{Word}\*'
|
22
22
|
|
23
23
|
include ActiveSupport::Configurable
|
24
24
|
|
@@ -78,32 +78,24 @@ class Cardname < Object
|
|
78
78
|
|
79
79
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
80
80
|
# ~~~~~~~~~~~~~~~~~~~~~~ INSTANCE ~~~~~~~~~~~~~~~~~~~~~~~~~
|
81
|
-
attr_reader :key
|
82
|
-
alias to_s s
|
83
|
-
alias to_str s
|
81
|
+
attr_reader :key
|
84
82
|
|
85
83
|
def initialize str
|
86
|
-
|
87
|
-
@s = @s.encode('UTF-8') if RUBYENCODING
|
88
|
-
initialize_parts
|
89
|
-
@key = @part_keys.join(self.class.joint)
|
90
|
-
@@cache[str] = self
|
84
|
+
@@cache[str] = super str.strip.encode('UTF-8')
|
91
85
|
end
|
92
86
|
|
93
|
-
def
|
94
|
-
self
|
95
|
-
end
|
96
|
-
|
97
|
-
def length
|
98
|
-
parts.length
|
87
|
+
def s
|
88
|
+
@s ||= String.new self
|
99
89
|
end
|
90
|
+
alias to_s s
|
91
|
+
alias to_str s
|
100
92
|
|
101
|
-
def
|
102
|
-
|
93
|
+
def to_name
|
94
|
+
self
|
103
95
|
end
|
104
96
|
|
105
|
-
def
|
106
|
-
|
97
|
+
def key
|
98
|
+
@key ||= part_keys.join(self.class.joint)
|
107
99
|
end
|
108
100
|
|
109
101
|
def == other
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cardname
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ethan McCutchen
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-10-
|
13
|
+
date: 2017-10-31 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -75,7 +75,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
75
75
|
requirements:
|
76
76
|
- - ">="
|
77
77
|
- !ruby/object:Gem::Version
|
78
|
-
version: '
|
78
|
+
version: '2.3'
|
79
79
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
81
|
- - ">="
|