smartname 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f2f4c617fed45e34cec94aa7d68ab31cf0a13673
4
- data.tar.gz: 02aada66770f823481391f135d7e289d77d4af5e
3
+ metadata.gz: fa282b70e290a7ba8992394815a56a59a82a725e
4
+ data.tar.gz: 4eca49b980ee540634174c58bb21ad478d94ead6
5
5
  SHA512:
6
- metadata.gz: cfdcd640b8a171858e06440dc2ec12046a2019f217d4068bb556c94bfca4baeeff02db5e5f1fd15da0e5cae0f8be1ebb6e673b9525d09e4dc58b7537ed2721dd
7
- data.tar.gz: 489b2fea70357c763ec38ab65e26d646bfd27fb480228738179ac73562fd6970e13022b1ebbb3e9b95d015d1335bfe74734b3f77aad3f397ee4eb38c1e5c6e15
6
+ metadata.gz: f740e5c97e12c676d329c7c8da7c0ec4cbd2782ed8b034748bdb5b907e091a28ef150469f20c621e64650081ca01a01253e99f72592896cee097254277ce28ef
7
+ data.tar.gz: ba9b593644295fdb93de0db2b123f38bfd608a6b54dc6fcdf78d2cd62c6290f6ae9f12804e5ee2dda17a28ad61a90992fece91a95cbf8b3de228c84c49df84f2
@@ -1,21 +1,53 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- activesupport (3.2.13)
5
- i18n (= 0.6.1)
6
- multi_json (~> 1.0)
4
+ activesupport (4.2.6)
5
+ i18n (~> 0.7)
6
+ json (~> 1.7, >= 1.7.7)
7
+ minitest (~> 5.1)
8
+ thread_safe (~> 0.3, >= 0.3.4)
9
+ tzinfo (~> 1.1)
10
+ addressable (2.4.0)
11
+ builder (3.2.2)
7
12
  diff-lcs (1.1.3)
8
- git (1.2.5)
9
- htmlentities (4.3.1)
10
- i18n (0.6.1)
11
- jeweler (1.8.4)
13
+ faraday (0.8.11)
14
+ multipart-post (~> 1.2.0)
15
+ git (1.3.0)
16
+ github_api (0.10.1)
17
+ addressable
18
+ faraday (~> 0.8.1)
19
+ hashie (>= 1.2)
20
+ multi_json (~> 1.4)
21
+ nokogiri (~> 1.5.2)
22
+ oauth2
23
+ hashie (3.4.4)
24
+ highline (1.7.8)
25
+ htmlentities (4.3.4)
26
+ i18n (0.7.0)
27
+ jeweler (1.8.8)
28
+ builder
12
29
  bundler (~> 1.0)
13
30
  git (>= 1.2.5)
31
+ github_api (= 0.10.1)
32
+ highline (>= 1.6.15)
33
+ nokogiri (= 1.5.10)
14
34
  rake
15
35
  rdoc
16
- json (1.7.7)
17
- multi_json (1.7.2)
18
- rake (10.0.4)
36
+ json (1.8.3)
37
+ jwt (1.5.1)
38
+ minitest (5.8.4)
39
+ multi_json (1.12.0)
40
+ multi_xml (0.5.5)
41
+ multipart-post (1.2.0)
42
+ nokogiri (1.5.10)
43
+ oauth2 (1.1.0)
44
+ faraday (>= 0.8, < 0.10)
45
+ jwt (~> 1.0, < 1.5.2)
46
+ multi_json (~> 1.3)
47
+ multi_xml (~> 0.5)
48
+ rack (>= 1.2, < 3)
49
+ rack (1.6.4)
50
+ rake (11.1.2)
19
51
  rdoc (3.12.2)
20
52
  json (~> 1.4)
21
53
  rspec (2.8.0)
@@ -26,6 +58,9 @@ GEM
26
58
  rspec-expectations (2.8.0)
27
59
  diff-lcs (~> 1.1.2)
28
60
  rspec-mocks (2.8.0)
61
+ thread_safe (0.3.5)
62
+ tzinfo (1.2.2)
63
+ thread_safe (~> 0.1)
29
64
 
30
65
  PLATFORMS
31
66
  ruby
@@ -37,3 +72,6 @@ DEPENDENCIES
37
72
  jeweler (~> 1.8.3)
38
73
  rdoc (~> 3.12)
39
74
  rspec (~> 2.8.0)
75
+
76
+ BUNDLED WITH
77
+ 1.11.2
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.3
1
+ 0.3.1
@@ -9,14 +9,11 @@ class SmartName < Object
9
9
  OK4KEY_RE = RUBYENCODING ? '\p{Word}\*' : '\w\*'
10
10
 
11
11
  include ActiveSupport::Configurable
12
-
13
- config_accessor :joint, :name_attribute, :banned_array, :var_re, :uninflect, :params, :session
14
-
15
- # Wagny defaults:
16
- #config_accessor :joint, :default => '+'
12
+
13
+ config_accessor :joint, :banned_array, :var_re, :uninflect, :params, :session
14
+
17
15
  SmartName.joint = '+'
18
- SmartName.banned_array = [ '/', '~', '|' ]
19
- SmartName.name_attribute = :cardname
16
+ SmartName.banned_array = ['/', '~', '|']
20
17
  SmartName.var_re = /\{([^\}]*\})\}/
21
18
  SmartName.uninflect = :singularize
22
19
 
@@ -26,9 +23,9 @@ class SmartName < Object
26
23
 
27
24
  class << self
28
25
  def new obj
29
- return obj if self.class===obj
30
- str = Array===obj ? obj*joint : obj.to_s
31
- if known_name = @@name2nameobject[str]
26
+ return obj if obj.is_a? self.class
27
+ str = obj.is_a?(Array) ? obj * joint : obj.to_s
28
+ if (known_name = @@name2nameobject[str])
32
29
  known_name
33
30
  else
34
31
  super str.strip
@@ -36,13 +33,12 @@ class SmartName < Object
36
33
  end
37
34
 
38
35
  def banned_re
39
- %r{#{ (['['] + banned_array << joint )*'\\' + ']' }}
36
+ %r{#{ (['['] + banned_array << joint) * '\\' + ']' }}
40
37
  end
41
38
  end
42
39
 
43
-
44
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45
- #~~~~~~~~~~~~~~~~~~~~~~ INSTANCE ~~~~~~~~~~~~~~~~~~~~~~~~~
40
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41
+ # ~~~~~~~~~~~~~~~~~~~~~~ INSTANCE ~~~~~~~~~~~~~~~~~~~~~~~~~
46
42
 
47
43
  attr_reader :simple, :parts, :key, :s
48
44
  alias to_s s
@@ -51,27 +47,38 @@ class SmartName < Object
51
47
  @s = str.to_s.strip
52
48
  @s = @s.encode('UTF-8') if RUBYENCODING
53
49
  @key = if @s.index(self.class.joint)
54
- @parts = @s.split(/\s*#{JOINT_RE}\s*/)
55
- @parts << '' if @s[-1,1] == self.class.joint
56
- @simple = false
57
- @parts.map { |p| p.to_name.key } * self.class.joint
58
- else
59
- @parts = [str]
60
- @simple = true
61
- str.empty? ? '' : simple_key
62
- end
50
+ @parts = @s.split(/\s*#{JOINT_RE}\s*/)
51
+ @parts << '' if @s[-1, 1] == self.class.joint
52
+ @simple = false
53
+ @parts.map { |p| p.to_name.key } * self.class.joint
54
+ else
55
+ @parts = [str]
56
+ @simple = true
57
+ str.empty? ? '' : simple_key
58
+ end
63
59
  @@name2nameobject[str] = self
64
60
  end
65
61
 
66
- def to_name() self end
67
- def length() parts.length end
68
- def size() to_s.size end
69
- def blank?() s.blank? end
62
+ def to_name
63
+ self
64
+ end
65
+
66
+ def length
67
+ parts.length
68
+ end
69
+
70
+ def size
71
+ to_s.size
72
+ end
73
+
74
+ def blank?
75
+ s.blank?
76
+ end
70
77
  alias empty? blank?
71
78
 
72
79
  def valid?
73
- not parts.find do |pt|
74
- pt.match self.class.banned_re
80
+ !parts.find do |pt|
81
+ pt.match self.class.banned_re
75
82
  end
76
83
  end
77
84
 
@@ -79,123 +86,151 @@ class SmartName < Object
79
86
  "<#{self.class.name} key=#{key}[#{self}]>"
80
87
  end
81
88
 
82
- def == obj
83
- object_key = case
84
- when obj.respond_to?(:key) ; obj.key
85
- when obj.respond_to?(:to_name) ; obj.to_name.key
86
- else ; obj.to_s
89
+ def == other
90
+ other_key =
91
+ case
92
+ when other.respond_to?(:key) then other.key
93
+ when other.respond_to?(:to_name) then other.to_name.key
94
+ else other.to_s
87
95
  end
88
- object_key == key
96
+ other_key == key
89
97
  end
90
98
 
91
-
92
- #~~~~~~~~~~~~~~~~~~~ VARIANTS ~~~~~~~~~~~~~~~~~~~
99
+ # ~~~~~~~~~~~~~~~~~~~ VARIANTS ~~~~~~~~~~~~~~~~~~~
93
100
 
94
101
  def simple_key
95
- decoded.underscore.gsub(/[^#{OK4KEY_RE}]+/,'_').split(/_+/).reject(&:empty?).map(&(self.class.uninflect))*'_'
102
+ decoded
103
+ .underscore
104
+ .gsub(/[^#{OK4KEY_RE}]+/, '_')
105
+ .split(/_+/)
106
+ .reject(&:empty?)
107
+ .map(&self.class.uninflect) * '_'
96
108
  end
97
109
 
98
110
  def url_key
99
- @url_key ||= decoded.gsub(/[^#{OK4KEY_RE}#{JOINT_RE}]+/,' ').strip.gsub /[\s\_]+/, '_'
111
+ @url_key ||= part_names.map do |part_name|
112
+ stripped = part_name.decoded.gsub(/[^#{OK4KEY_RE}]+/, ' ').strip
113
+ stripped.gsub(/[\s\_]+/, '_')
114
+ end * self.class.joint
100
115
  end
101
116
 
102
117
  def safe_key
103
- @safe_key ||= key.gsub('*','X').gsub self.class.joint, '-'
118
+ @safe_key ||= key.tr('*', 'X').tr self.class.joint, '-'
104
119
  end
105
120
 
106
121
  def decoded
107
- @decoded ||= (s.index('&') ? HTMLEntities.new.decode(s) : s)
122
+ @decoded ||= s.index('&') ? HTMLEntities.new.decode(s) : s
108
123
  end
109
124
 
110
- def pre_cgi
111
- #why is this necessary?? doesn't real CGI escaping handle this??
112
- # hmmm. is this to prevent absolutizing
113
- @pre_cgi ||= parts.join '~plus~'
125
+ # ~~~~~~~~~~~~~~~~~~~ PARTS ~~~~~~~~~~~~~~~~~~~
126
+
127
+ alias simple? simple
128
+ def junction?
129
+ !simple?
114
130
  end
115
131
 
116
- def post_cgi
117
- #hmm. this could resolve to the key of some other card. move to class method?
118
- @post_cgi ||= s.gsub '~plus~', self.class.joint
132
+ def left
133
+ @left ||= simple? ? nil : parts[0..-2] * self.class.joint
119
134
  end
120
135
 
121
- #~~~~~~~~~~~~~~~~~~~ PARTS ~~~~~~~~~~~~~~~~~~~
136
+ def right
137
+ @right ||= simple? ? nil : parts[-1]
138
+ end
122
139
 
123
- alias simple? simple
124
- def junction?() not simple? end
125
-
126
- def left() @left ||= simple? ? nil : parts[0..-2]*self.class.joint end
127
- def right() @right ||= simple? ? nil : parts[-1] end
128
-
129
- def left_name() @left_name ||= left && self.class.new( left ) end
130
- def right_name() @right_name ||= right && self.class.new( right ) end
131
-
132
- # Note that all n ames have a trunk and tag, but only junctions have left and right
133
-
134
- def trunk() @trunk ||= simple? ? s : left end
135
- def tag() @tag ||= simple? ? s : right end
136
-
137
- def trunk_name() @trunk_name ||= simple? ? self : left_name end
138
- def tag_name() @tag_name ||= simple? ? self : right_name end
139
-
140
- def part_names() @part_names ||= parts.map &:to_name end
141
- def piece_names() @piece_names ||= pieces.map &:to_name end
142
-
143
- def pieces
144
- @pieces ||= if simple?
145
- [ self ]
146
- else
147
- junction_pieces = []
148
- parts[1..-1].inject parts[0] do |left, right|
149
- piece = [left, right] * self.class.joint
150
- junction_pieces << piece
151
- piece
152
- end
153
- parts + junction_pieces
154
- end
140
+ def left_name
141
+ @left_name ||= left && self.class.new(left)
142
+ end
143
+
144
+ def right_name
145
+ @right_name ||= right && self.class.new(right)
146
+ end
147
+
148
+ # Note that all names have a trunk and tag,
149
+ # but only junctions have left and right
150
+
151
+ def trunk
152
+ @trunk ||= simple? ? s : left
153
+ end
154
+
155
+ def tag
156
+ @tag ||= simple? ? s : right
155
157
  end
156
158
 
159
+ def trunk_name
160
+ @trunk_name ||= simple? ? self : left_name
161
+ end
162
+
163
+ def tag_name
164
+ @tag_name ||= simple? ? self : right_name
165
+ end
157
166
 
167
+ def part_names
168
+ @part_names ||= parts.map(&:to_name)
169
+ end
158
170
 
159
- #~~~~~~~~~~~~~~~~~~~~ SHOW / ABSOLUTE ~~~~~~~~~~~~~~~~~~~~
171
+ def piece_names
172
+ @piece_names ||= pieces.map(&:to_name)
173
+ end
174
+
175
+ def pieces
176
+ @pieces ||=
177
+ if simple?
178
+ [self]
179
+ else
180
+ junction_pieces = []
181
+ parts[1..-1].inject parts[0] do |left, right|
182
+ piece = [left, right] * self.class.joint
183
+ junction_pieces << piece
184
+ piece
185
+ end
186
+ parts + junction_pieces
187
+ end
188
+ end
189
+
190
+ # ~~~~~~~~~~~~~~~~~~~~ SHOW / ABSOLUTE ~~~~~~~~~~~~~~~~~~~~
160
191
 
161
192
  def to_show *ignore
162
- ignore.map! &:to_name
193
+ ignore.map!(&:to_name)
163
194
 
164
195
  show_parts = parts.map do |part|
165
- reject = ( part.empty? or part =~ /^_/ or ignore.member? part.to_name )
196
+ reject = (part.empty? || (part =~ /^_/) || ignore.member?(part.to_name))
166
197
  reject ? nil : part
167
198
  end
168
199
 
169
200
  show_name = show_parts.compact.to_name.s
170
-
201
+
171
202
  case
172
- when show_parts.compact.empty?; self
173
- when show_parts[0].nil? ; self.class.joint + show_name
203
+ when show_parts.compact.empty? then self
204
+ when show_parts[0].nil? then self.class.joint + show_name
174
205
  else show_name
175
206
  end
176
207
  end
177
208
 
178
-
179
209
  def to_absolute context, args={}
180
210
  context = context.to_name
181
211
  parts.map do |part|
182
- new_part = case part
183
- when /^_user$/i; name_proc = self.class.session and name_proc.call or part
184
- when /^_main$/i; self.class.params[:main_name]
185
- when /^(_self|_whole|_)$/i; context.s
186
- when /^_left$/i; context.trunk #note - inconsistent use of left v. trunk
187
- when /^_right$/i; context.tag
212
+ new_part =
213
+ case part
214
+ when /^_user$/i
215
+ name_proc = self.class.session
216
+ name_proc ? name_proc.call : part
217
+ when /^_main$/i then self.class.params[:main_name]
218
+ when /^(_self|_whole|_)$/i then context.s
219
+ when /^_left$/i then context.trunk
220
+ # note - inconsistent use of left v. trunk
221
+ when /^_right$/i then context.tag
188
222
  when /^_(\d+)$/i
189
223
  pos = $~[1].to_i
190
224
  pos = context.length if pos > context.length
191
- context.parts[pos-1]
225
+ context.parts[pos - 1]
192
226
  when /^_(L*)(R?)$/i
193
227
  l_s, r_s = $~[1].size, !$~[2].empty?
194
228
  l_part = context.nth_left l_s
195
229
  r_s ? l_part.tag : l_part.s
196
- when /^_/
197
- custom = args[:params] ? args[:params][part] : nil
198
- custom ? CGI.escapeHTML(custom) : part #why are we escaping HTML here?
230
+ # when /^_/
231
+ # custom = args[:params] ? args[:params][part] : nil
232
+ # custom ? CGI.escapeHTML(custom) : part
233
+ # why are we escaping HTML here?
199
234
  else
200
235
  part
201
236
  end.to_s.strip
@@ -209,11 +244,10 @@ class SmartName < Object
209
244
 
210
245
  def nth_left n
211
246
  # 1 = left; 2= left of left; 3 = left of left of left....
212
- ( n >= length ? parts[0] : parts[0..-n-1] ).to_name
247
+ (n >= length ? parts[0] : parts[0..-n - 1]).to_name
213
248
  end
214
249
 
215
-
216
- #~~~~~~~~~~~~~~~~~~~~ MISC ~~~~~~~~~~~~~~~~~~~~
250
+ # ~~~~~~~~~~~~~~~~~~~~ MISC ~~~~~~~~~~~~~~~~~~~~
217
251
 
218
252
  def replace_part oldpart, newpart
219
253
  oldpart = oldpart.to_name
@@ -230,10 +264,10 @@ class SmartName < Object
230
264
  self
231
265
  else
232
266
  if oldpart == parts[0, oldpart.length]
233
- if self.length == oldpart.length
267
+ if length == oldpart.length
234
268
  newpart
235
269
  else
236
- ( newpart.parts + parts[ oldpart.length..-1 ] ).to_name
270
+ (newpart.parts + parts[oldpart.length..-1]).to_name
237
271
  end
238
272
  else
239
273
  self
@@ -245,11 +279,10 @@ class SmartName < Object
245
279
  # shouldn't it use inclusions???
246
280
  def self.substitute! str, hash
247
281
  hash.keys.each do |var|
248
- str.gsub! var_re do |x|
282
+ str.gsub! var_re do |x|
249
283
  hash[var.to_sym]
250
284
  end
251
285
  end
252
286
  str
253
287
  end
254
-
255
288
  end
@@ -4,9 +4,9 @@
4
4
  ActiveSupport::Inflector.inflections do |inflect|
5
5
  inflect.irregular 'grave', 'graveyard'
6
6
  inflect.uncountable 'this'
7
- # inflect.uncountable 'plus'
7
+ # inflect.uncountable 'plus'
8
8
  inflect.uncountable 'anonymous'
9
- inflect.uncountable /^s$/
9
+ inflect.uncountable 's'
10
10
  inflect.singular(/(ss)$/i, '\1')
11
11
  inflect.plural(/(ss)$/i, '\1')
12
12
  end
@@ -2,231 +2,232 @@
2
2
  require File.expand_path('../spec_helper', File.dirname(__FILE__))
3
3
  require 'core_ext'
4
4
 
5
-
6
5
  describe SmartName do
7
-
8
- describe "#key" do
9
- it "should remove spaces" do
10
- "this Name".to_name.key.should == "this_name"
6
+ describe '#key' do
7
+ it 'should remove spaces' do
8
+ 'this Name'.to_name.key.should == 'this_name'
11
9
  end
12
10
 
13
- it "should have initial _ for initial cap" do
14
- "This Name".to_name.key.should == "this_name"
11
+ it 'should have initial _ for initial cap' do
12
+ 'This Name'.to_name.key.should == 'this_name'
15
13
  end
16
14
 
17
- it "should have initial _ for initial cap" do
18
- "_This Name".to_name.key.should == "this_name"
15
+ it 'should have initial _ for initial cap' do
16
+ '_This Name'.to_name.key.should == 'this_name'
19
17
  end
20
18
 
21
- it "should singularize" do
22
- "ethans".to_name.key.should == "ethan"
19
+ it 'should singularize' do
20
+ 'ethans'.to_name.key.should == 'ethan'
23
21
  end
24
22
 
25
- it "should underscore" do
26
- "ThisThing".to_name.key.should == "this_thing"
23
+ it 'should underscore' do
24
+ 'ThisThing'.to_name.key.should == 'this_thing'
27
25
  end
28
26
 
29
- it "should handle plus cards" do
30
- "ThisThing+Ethans".to_name.key.should == "this_thing+ethan"
27
+ it 'should handle plus cards' do
28
+ 'ThisThing+Ethans'.to_name.key.should == 'this_thing+ethan'
31
29
  end
32
30
 
33
- it "should retain * for star cards" do
34
- "*right".to_name.key.should == "*right"
31
+ it 'should retain * for star cards' do
32
+ '*right'.to_name.key.should == '*right'
35
33
  end
36
34
 
37
35
  it "should not singularize double s's" do
38
- "grass".to_name.key.should == 'grass'
36
+ 'grass'.to_name.key.should == 'grass'
39
37
  end
40
38
 
41
39
  it "should not singularize letter 'S'" do
42
40
  'S'.to_name.key.should == 's'
43
41
  end
44
42
 
45
- it "should handle unicode characters" do
46
- "Mañana".to_name.key.should == 'mañana'
43
+ it 'should handle unicode characters' do
44
+ 'Mañana'.to_name.key.should == 'mañana'
47
45
  end
48
46
 
49
- it "should handle weird initial characters" do
47
+ it 'should handle weird initial characters' do
50
48
  '__you motha @#$'.to_name.key.should == 'you_motha'
51
49
  '?!_you motha @#$'.to_name.key.should == 'you_motha'
52
50
  end
53
51
 
54
- it "should allow numbers" do
55
- "3way".to_name.key.should == '3way'
52
+ it 'should allow numbers' do
53
+ '3way'.to_name.key.should == '3way'
56
54
  end
57
55
 
58
- it "internal plurals" do
59
- "cards hooks label foos".to_name.key.should == 'card_hook_label_foo'
56
+ it 'internal plurals' do
57
+ 'cards hooks label foos'.to_name.key.should == 'card_hook_label_foo'
60
58
  end
61
59
 
62
- it "should handle html entities" do
60
+ it 'should handle html entities' do
63
61
  # This no longer takes off the s, is singularize broken now?
64
- "Jean-fran&ccedil;ois Noubel".to_name.key.should == 'jean_françoi_noubel'
62
+ 'Jean-fran&ccedil;ois Noubel'.to_name.key.should == 'jean_françoi_noubel'
65
63
  end
66
64
  end
67
65
 
68
-
69
- describe "parts and pieces" do
70
- it "should produce simple strings for parts" do
71
- "A+B+C+D".to_name.parts.should == %w{ A B C D }
66
+ describe 'parts and pieces' do
67
+ it 'should produce simple strings for parts' do
68
+ 'A+B+C+D'.to_name.parts.should == %w( A B C D )
72
69
  end
73
70
 
74
- it "should produce simple name objects for part_names" do
75
- "A+B+C+D".to_name.part_names.should == %w{ A B C D }.map( &:to_name )
71
+ it 'should produce simple name objects for part_names' do
72
+ 'A+B+C+D'.to_name.part_names.should == %w( A B C D ).map(&:to_name)
76
73
  end
77
-
78
- it "should produce compound strings for pieces" do
79
- "A+B+C+D".to_name.pieces.should == %w{ A B C D A+B A+B+C A+B+C+D }
74
+
75
+ it 'should produce compound strings for pieces' do
76
+ 'A+B+C+D'.to_name.pieces.should == %w( A B C D A+B A+B+C A+B+C+D )
80
77
  end
81
-
82
- it "should produce compound name objects for piece_names" do
83
- "A+B+C+D".to_name.piece_names.should == %w{ A B C D A+B A+B+C A+B+C+D }.map( &:to_name )
78
+
79
+ it 'should produce compound name objects for piece_names' do
80
+ 'A+B+C+D'.to_name.piece_names.should ==
81
+ %w( A B C D A+B A+B+C A+B+C+D ).map(&:to_name)
84
82
  end
85
83
  end
86
-
87
-
88
84
 
89
-
90
-
91
- describe "#url_key" do
92
- cardnames = ["GrassCommons.org", 'Oh you @##', "Alice's Restaurant!", "PB &amp; J", "Mañana"].map(&:to_name)
85
+ describe '#url_key' do
86
+ cardnames = [
87
+ 'GrassCommons.org',
88
+ 'Oh you @##',
89
+ "Alice's Restaurant!",
90
+ 'PB &amp; J',
91
+ 'Mañana'
92
+ ].map(&:to_name)
93
93
 
94
94
  cardnames.each do |cardname|
95
- it "should have the same key as the name" do
96
- k, k2 = cardname.key, cardname.url_key
97
- #warn "cn tok #{cardname.inspect}, #{k.inspect}, #{k2.inspect}"
98
- k.should == k2.to_name.key
95
+ it 'should have the same key as the name' do
96
+ cardname.key.should == cardname.url_key.to_name.key
99
97
  end
100
98
  end
99
+
100
+ it 'should handle compound names cleanly' do
101
+ 'What?+the!+heck$'.to_name.url_key.should == 'What+the+heck'
102
+ end
101
103
  end
102
104
 
103
- describe "#valid" do
104
- it "accepts valid names" do
105
- "this+THAT".to_name.should be_valid
106
- "THE*ONE*AND$!ONLY".to_name.should be_valid
105
+ describe '#valid' do
106
+ it 'accepts valid names' do
107
+ 'this+THAT'.to_name.should be_valid
108
+ 'THE*ONE*AND$!ONLY'.to_name.should be_valid
107
109
  end
108
110
 
109
- it "rejects invalide names" do
110
- "Tes~sd".to_name.should_not be_valid
111
- "TEST/DDER".to_name.should_not be_valid
111
+ it 'rejects invalide names' do
112
+ 'Tes~sd'.to_name.should_not be_valid
113
+ 'TEST/DDER'.to_name.should_not be_valid
112
114
  end
113
115
  end
114
116
 
115
- describe "#left_name" do
116
- it "returns nil for non junction" do
117
- "a".to_name.left_name.should == nil
117
+ describe '#left_name' do
118
+ it 'returns nil for non junction' do
119
+ 'a'.to_name.left_name.should == nil
118
120
  end
119
121
 
120
- it "returns parent for parent" do
121
- "a+b+c+d".to_name.left_name.should == "a+b+c"
122
+ it 'returns parent for parent' do
123
+ 'a+b+c+d'.to_name.left_name.should == 'a+b+c'
122
124
  end
123
125
  end
124
126
 
125
- describe "#tag_name" do
126
- it "returns last part of plus card" do
127
- "a+b+c".to_name.tag.should == "c"
127
+ describe '#tag_name' do
128
+ it 'returns last part of plus card' do
129
+ 'a+b+c'.to_name.tag.should == 'c'
128
130
  end
129
131
 
130
- it "returns name of simple card" do
131
- "a".to_name.tag.should == "a"
132
+ it 'returns name of simple card' do
133
+ 'a'.to_name.tag.should == 'a'
132
134
  end
133
135
  end
134
136
 
135
- describe "#safe_key" do
136
- it "subs pluses & stars" do
137
- "Alpha?+*be-ta".to_name.safe_key.should == "alpha-Xbe_tum"
137
+ describe '#safe_key' do
138
+ it 'subs pluses & stars' do
139
+ 'Alpha?+*be-ta'.to_name.safe_key.should == 'alpha-Xbe_tum'
138
140
  end
139
141
  end
140
142
 
141
- describe "#replace_part" do
142
- it "replaces first name part" do
143
- 'a+b'.to_name.replace_part('a','x').to_s.should == 'x+b'
143
+ describe '#replace_part' do
144
+ it 'replaces first name part' do
145
+ 'a+b'.to_name.replace_part('a', 'x').to_s.should == 'x+b'
144
146
  end
145
- it "replaces second name part" do
146
- 'a+b'.to_name.replace_part('b','x').to_s.should == 'a+x'
147
+ it 'replaces second name part' do
148
+ 'a+b'.to_name.replace_part('b', 'x').to_s.should == 'a+x'
147
149
  end
148
- it "replaces two name parts" do
149
- 'a+b+c' .to_name.replace_part('a+b', 'x' ).to_s.should == 'x+c'
150
+ it 'replaces two name parts' do
151
+ 'a+b+c' .to_name.replace_part('a+b', 'x').to_s.should == 'x+c'
150
152
  'a+b+c+d'.to_name.replace_part('a+b', 'e+f').to_s.should == 'e+f+c+d'
151
153
  end
152
154
  it "doesn't replace two part tag" do
153
- 'a+b+c'.to_name.replace_part('b+c','x').to_s.should == 'a+b+c'
155
+ 'a+b+c'.to_name.replace_part('b+c', 'x').to_s.should == 'a+b+c'
154
156
  end
155
157
  end
156
158
 
157
-
158
- describe "#to_absolute" do
159
- it "handles _self, _whole, _" do
160
- "_self".to_name.to_absolute("foo").should == "foo"
161
- "_whole".to_name.to_absolute("foo").should == "foo"
162
- "_".to_name.to_absolute("foo").should == "foo"
159
+ describe '#to_absolute' do
160
+ it 'handles _self, _whole, _' do
161
+ '_self'.to_name.to_absolute('foo').should == 'foo'
162
+ '_whole'.to_name.to_absolute('foo').should == 'foo'
163
+ '_'.to_name.to_absolute('foo').should == 'foo'
163
164
  end
164
165
 
165
- it "handles _left" do
166
- "_left+Z".to_name.to_absolute("A+B+C").should == "A+B+Z"
166
+ it 'handles _left' do
167
+ '_left+Z'.to_name.to_absolute('A+B+C').should == 'A+B+Z'
167
168
  end
168
169
 
169
- it "handles white space" do
170
- "_left + Z".to_name.to_absolute("A+B+C").should == "A+B+Z"
170
+ it 'handles white space' do
171
+ '_left + Z'.to_name.to_absolute('A+B+C').should == 'A+B+Z'
171
172
  end
172
173
 
173
- it "handles _right" do
174
- "_right+bang".to_name.to_absolute("nutter+butter").should == "butter+bang"
175
- "C+_right".to_name.to_absolute("B+A").should == "C+A"
174
+ it 'handles _right' do
175
+ '_right+bang'.to_name.to_absolute('nutter+butter').should == 'butter+bang'
176
+ 'C+_right'.to_name.to_absolute('B+A').should == 'C+A'
176
177
  end
177
178
 
178
- it "handles leading +" do
179
- "+bug".to_name.to_absolute("hum").should == "hum+bug"
179
+ it 'handles leading +' do
180
+ '+bug'.to_name.to_absolute('hum').should == 'hum+bug'
180
181
  end
181
182
 
182
- it "handles trailing +" do
183
- "bug+".to_name.to_absolute("tracks").should == "bug+tracks"
183
+ it 'handles trailing +' do
184
+ 'bug+'.to_name.to_absolute('tracks').should == 'bug+tracks'
184
185
  end
185
186
 
186
- it "handles _(numbers)" do
187
- "_1".to_name.to_absolute("A+B+C").should == "A"
188
- "_1+_2".to_name.to_absolute("A+B+C").should == "A+B"
189
- "_2+_3".to_name.to_absolute("A+B+C").should == "B+C"
187
+ it 'handles _(numbers)' do
188
+ '_1'.to_name.to_absolute('A+B+C').should == 'A'
189
+ '_1+_2'.to_name.to_absolute('A+B+C').should == 'A+B'
190
+ '_2+_3'.to_name.to_absolute('A+B+C').should == 'B+C'
190
191
  end
191
192
 
192
- it "handles _LLR etc" do
193
- "_R".to_name.to_absolute("A+B+C+D+E").should == "E"
194
- "_L".to_name.to_absolute("A+B+C+D+E").should == "A+B+C+D"
195
- "_LR".to_name.to_absolute("A+B+C+D+E").should == "D"
196
- "_LL".to_name.to_absolute("A+B+C+D+E").should == "A+B+C"
197
- "_LLR".to_name.to_absolute("A+B+C+D+E").should == "C"
198
- "_LLL".to_name.to_absolute("A+B+C+D+E").should == "A+B"
199
- "_LLLR".to_name.to_absolute("A+B+C+D+E").should == "B"
200
- "_LLLL".to_name.to_absolute("A+B+C+D+E").should == "A"
193
+ it 'handles _LLR etc' do
194
+ '_R'.to_name.to_absolute('A+B+C+D+E').should == 'E'
195
+ '_L'.to_name.to_absolute('A+B+C+D+E').should == 'A+B+C+D'
196
+ '_LR'.to_name.to_absolute('A+B+C+D+E').should == 'D'
197
+ '_LL'.to_name.to_absolute('A+B+C+D+E').should == 'A+B+C'
198
+ '_LLR'.to_name.to_absolute('A+B+C+D+E').should == 'C'
199
+ '_LLL'.to_name.to_absolute('A+B+C+D+E').should == 'A+B'
200
+ '_LLLR'.to_name.to_absolute('A+B+C+D+E').should == 'B'
201
+ '_LLLL'.to_name.to_absolute('A+B+C+D+E').should == 'A'
201
202
  end
202
203
 
203
- context "mismatched requests" do
204
- it "returns _self for _left or _right on simple cards" do
205
- "_left+Z".to_name.to_absolute("A").should == "A+Z"
206
- "_right+Z".to_name.to_absolute("A").should == "A+Z"
204
+ context 'mismatched requests' do
205
+ it 'returns _self for _left or _right on simple cards' do
206
+ '_left+Z'.to_name.to_absolute('A').should == 'A+Z'
207
+ '_right+Z'.to_name.to_absolute('A').should == 'A+Z'
207
208
  end
208
209
 
209
- it "handles bogus numbers" do
210
- "_1".to_name.to_absolute("A").should == "A"
211
- "_1+_2".to_name.to_absolute("A").should == "A+A"
212
- "_2+_3".to_name.to_absolute("A").should == "A+A"
210
+ it 'handles bogus numbers' do
211
+ '_1'.to_name.to_absolute('A').should == 'A'
212
+ '_1+_2'.to_name.to_absolute('A').should == 'A+A'
213
+ '_2+_3'.to_name.to_absolute('A').should == 'A+A'
213
214
  end
214
215
 
215
- it "handles bogus _llr requests" do
216
- "_R".to_name.to_absolute("A").should == "A"
217
- "_L".to_name.to_absolute("A").should == "A"
218
- "_LR".to_name.to_absolute("A").should == "A"
219
- "_LL".to_name.to_absolute("A").should == "A"
220
- "_LLR".to_name.to_absolute("A").should == "A"
221
- "_LLL".to_name.to_absolute("A").should == "A"
222
- "_LLLR".to_name.to_absolute("A").should == "A"
223
- "_LLLL".to_name.to_absolute("A").should == "A"
216
+ it 'handles bogus _llr requests' do
217
+ '_R'.to_name.to_absolute('A').should == 'A'
218
+ '_L'.to_name.to_absolute('A').should == 'A'
219
+ '_LR'.to_name.to_absolute('A').should == 'A'
220
+ '_LL'.to_name.to_absolute('A').should == 'A'
221
+ '_LLR'.to_name.to_absolute('A').should == 'A'
222
+ '_LLL'.to_name.to_absolute('A').should == 'A'
223
+ '_LLLR'.to_name.to_absolute('A').should == 'A'
224
+ '_LLLL'.to_name.to_absolute('A').should == 'A'
224
225
  end
225
226
  end
226
227
  end
227
228
 
228
- describe "#to_show" do
229
- it "ignores ignorables" do
229
+ describe '#to_show' do
230
+ it 'ignores ignorables' do
230
231
  'you+awe'.to_name.to_show('you').should == '+awe'
231
232
  'me+you+awe'.to_name.to_show('you').should == 'me+awe' #HMMM..... what should this do?
232
233
  'me+you+awe'.to_name.to_show('me' ).should == '+you+awe'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smartname
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerry Gleason
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-05-10 00:00:00.000000000 Z
12
+ date: 2016-05-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport