smartname 0.1.8 → 0.2.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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.8
1
+ 0.2.0
@@ -0,0 +1,5 @@
1
+ class Object
2
+ def to_name
3
+ SmartName.new self
4
+ end
5
+ end
@@ -4,37 +4,30 @@ require 'active_support/configurable'
4
4
  require 'active_support/inflector'
5
5
  require 'htmlentities'
6
6
 
7
- class Object
8
- def to_name
9
- SmartName.new self
10
- end
11
- end
12
-
13
7
  class SmartName < Object
14
- RUBYENCODING = RUBY_VERSION =~ /^(2|1\.9)/
8
+ RUBYENCODING = RUBY_VERSION !=~ /^1\.8/
15
9
  OK4KEY_RE = RUBYENCODING ? '\p{Word}\*' : '\w\*'
16
10
 
17
11
  include ActiveSupport::Configurable
18
-
19
- config_accessor :joint, :name_attribute, :banned_array,
20
- :var_re, :uninflect, :params, :codes, :lookup, :session
21
-
12
+
13
+ config_accessor :joint, :name_attribute, :banned_array, :var_re, :uninflect, :params, :session
14
+
22
15
  # Wagny defaults:
16
+ #config_accessor :joint, :default => '+'
23
17
  SmartName.joint = '+'
24
18
  SmartName.banned_array = [ '/', '~', '|' ]
25
19
  SmartName.name_attribute = :cardname
26
20
  SmartName.var_re = /\{([^\}]*\})\}/
27
21
  SmartName.uninflect = :singularize
28
22
 
29
- JOINT_RE = Regexp.escape SmartName.joint
30
-
23
+ JOINT_RE = Regexp.escape joint
31
24
 
32
25
  @@name2nameobject = {}
33
26
 
34
27
  class << self
35
28
  def new obj
36
- return obj if SmartName===obj
37
- str = Array===obj ? obj*SmartName.joint : obj.to_s
29
+ return obj if self.class===obj
30
+ str = Array===obj ? obj*joint : obj.to_s
38
31
  if known_name = @@name2nameobject[str]
39
32
  known_name
40
33
  else
@@ -43,7 +36,7 @@ class SmartName < Object
43
36
  end
44
37
 
45
38
  def banned_re
46
- %r{#{ (['['] + SmartName.banned_array << SmartName.joint )*'\\' + ']' }}
39
+ %r{#{ (['['] + banned_array << joint )*'\\' + ']' }}
47
40
  end
48
41
  end
49
42
 
@@ -57,11 +50,11 @@ class SmartName < Object
57
50
  def initialize str
58
51
  @s = str.to_s.strip
59
52
  @s = @s.encode('UTF-8') if RUBYENCODING
60
- @key = if @s.index(SmartName.joint)
53
+ @key = if @s.index(self.class.joint)
61
54
  @parts = @s.split(/\s*#{JOINT_RE}\s*/)
62
- @parts << '' if @s[-1,1] == SmartName.joint
55
+ @parts << '' if @s[-1,1] == self.class.joint
63
56
  @simple = false
64
- @parts.map { |p| p.to_name.key } * SmartName.joint
57
+ @parts.map { |p| p.to_name.key } * self.class.joint
65
58
  else
66
59
  @parts = [str]
67
60
  @simple = true
@@ -78,12 +71,12 @@ class SmartName < Object
78
71
 
79
72
  def valid?
80
73
  not parts.find do |pt|
81
- pt.match SmartName.banned_re
74
+ pt.match self.class.banned_re
82
75
  end
83
76
  end
84
77
 
85
78
  def inspect
86
- "<SmartName key=#{key}[#{self}]>"
79
+ "<#{self.class.name} key=#{key}[#{self}]>"
87
80
  end
88
81
 
89
82
  def == obj
@@ -99,7 +92,7 @@ class SmartName < Object
99
92
  #~~~~~~~~~~~~~~~~~~~ VARIANTS ~~~~~~~~~~~~~~~~~~~
100
93
 
101
94
  def simple_key
102
- decoded.underscore.gsub(/[^#{OK4KEY_RE}]+/,'_').split(/_+/).reject(&:empty?).map(&(SmartName.uninflect))*'_'
95
+ decoded.underscore.gsub(/[^#{OK4KEY_RE}]+/,'_').split(/_+/).reject(&:empty?).map(&(self.class.uninflect))*'_'
103
96
  end
104
97
 
105
98
  def url_key
@@ -107,7 +100,7 @@ class SmartName < Object
107
100
  end
108
101
 
109
102
  def safe_key
110
- @safe_key ||= key.gsub('*','X').gsub SmartName.joint, '-'
103
+ @safe_key ||= key.gsub('*','X').gsub self.class.joint, '-'
111
104
  end
112
105
 
113
106
  def decoded
@@ -122,7 +115,7 @@ class SmartName < Object
122
115
 
123
116
  def post_cgi
124
117
  #hmm. this could resolve to the key of some other card. move to class method?
125
- @post_cgi ||= s.gsub '~plus~', SmartName.joint
118
+ @post_cgi ||= s.gsub '~plus~', self.class.joint
126
119
  end
127
120
 
128
121
  #~~~~~~~~~~~~~~~~~~~ PARTS ~~~~~~~~~~~~~~~~~~~
@@ -130,11 +123,11 @@ class SmartName < Object
130
123
  alias simple? simple
131
124
  def junction?() not simple? end
132
125
 
133
- def left() @left ||= simple? ? nil : parts[0..-2]*SmartName.joint end
126
+ def left() @left ||= simple? ? nil : parts[0..-2]*self.class.joint end
134
127
  def right() @right ||= simple? ? nil : parts[-1] end
135
128
 
136
- def left_name() @left_name ||= left && SmartName.new( left ) end
137
- def right_name() @right_name ||= right && SmartName.new( right ) end
129
+ def left_name() @left_name ||= left && self.class.new( left ) end
130
+ def right_name() @right_name ||= right && self.class.new( right ) end
138
131
 
139
132
  # Note that all n ames have a trunk and tag, but only junctions have left and right
140
133
 
@@ -153,7 +146,7 @@ class SmartName < Object
153
146
  else
154
147
  junction_pieces = []
155
148
  parts[1..-1].inject parts[0] do |left, right|
156
- piece = [left, right] * SmartName.joint
149
+ piece = [left, right] * self.class.joint
157
150
  junction_pieces << piece
158
151
  piece
159
152
  end
@@ -163,34 +156,6 @@ class SmartName < Object
163
156
 
164
157
 
165
158
 
166
-
167
- #~~~~~~~~~~~~~~~~~~~ TRAITS / STARS ~~~~~~~~~~~~~~~~~~~
168
-
169
- #all the below seems pretty wagn-specific
170
-
171
- def star?() simple? and '*' == s[0,1] end
172
- def rstar?() right and '*' == right[0,1] end
173
-
174
- def trait_name? *traitlist
175
- junction? && begin
176
- right_key = right_name.key
177
- !!traitlist.find do |codename|
178
- card_id = SmartName.codes[ codename ] and card = SmartName.lookup[ card_id ] and
179
- card.send(SmartName.name_attribute).key == right_key
180
- end
181
- end
182
- end
183
-
184
- def trait_name tag_code
185
- card_id = SmartName.codes[ tag_code ] and card = SmartName.lookup[ card_id ] and
186
- [ self, card.send(SmartName.name_attribute) ].to_name
187
- end
188
-
189
- def trait tag_code
190
- trait_name( tag_code ).s
191
- end
192
-
193
-
194
159
  #~~~~~~~~~~~~~~~~~~~~ SHOW / ABSOLUTE ~~~~~~~~~~~~~~~~~~~~
195
160
 
196
161
  def to_show *ignore
@@ -205,7 +170,7 @@ class SmartName < Object
205
170
 
206
171
  case
207
172
  when show_parts.compact.empty?; self
208
- when show_parts[0].nil? ; SmartName.joint + show_name
173
+ when show_parts[0].nil? ; self.class.joint + show_name
209
174
  else show_name
210
175
  end
211
176
  end
@@ -215,8 +180,8 @@ class SmartName < Object
215
180
  context = context.to_name
216
181
  parts.map do |part|
217
182
  new_part = case part
218
- when /^_user$/i; name_proc = SmartName.session and name_proc.call or part
219
- when /^_main$/i; SmartName.params[:main_name]
183
+ when /^_user$/i; name_proc = self.class.session and name_proc.call or part
184
+ when /^_main$/i; self.class.params[:main_name]
220
185
  when /^(_self|_whole|_)$/i; context.s
221
186
  when /^_left$/i; context.trunk #note - inconsistent use of left v. trunk
222
187
  when /^_right$/i; context.tag
@@ -235,11 +200,11 @@ class SmartName < Object
235
200
  part
236
201
  end.to_s.strip
237
202
  new_part.empty? ? context.to_s : new_part
238
- end * SmartName.joint
203
+ end * self.class.joint
239
204
  end
240
205
 
241
206
  def to_absolute_name *args
242
- SmartName.new to_absolute(*args)
207
+ self.class.new to_absolute(*args)
243
208
  end
244
209
 
245
210
  def nth_left n
@@ -280,7 +245,7 @@ class SmartName < Object
280
245
  # shouldn't it use inclusions???
281
246
  def self.substitute! str, hash
282
247
  hash.keys.each do |var|
283
- str.gsub! SmartName.var_re do |x|
248
+ str.gsub! self.class.var_re do |x|
284
249
  hash[var.to_sym]
285
250
  end
286
251
  end
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require File.expand_path('../spec_helper', File.dirname(__FILE__))
3
+ require 'core_ext'
4
+
3
5
 
4
6
  describe SmartName do
5
7
 
@@ -151,41 +153,6 @@ describe SmartName do
151
153
  end
152
154
  end
153
155
 
154
- describe "Cardnames star handling" do
155
- it "recognizes star cards" do
156
- '*a'.to_name.star?.should be_true
157
- end
158
-
159
- it "doesn't recognize star cards with plusses" do
160
- '*a+*b'.to_name.star?.should be_false
161
- end
162
-
163
- it "recognizes rstar cards" do
164
- 'a+*a'.to_name.rstar?.should be_true
165
- end
166
-
167
- it "doesn't recognize star cards as rstar" do
168
- '*a'.to_name.rstar?.should be_false
169
- end
170
-
171
- it "doesn't recognize non-star or star left" do
172
- '*a+a'.to_name.rstar?.should be_false
173
- end
174
- end
175
-
176
- describe "trait_name?" do
177
- it "returns true for content codename" do
178
- "bazoinga+*right+*content".to_name.trait_name?(:content).should be_true
179
- end
180
-
181
- it "handles arrays" do
182
- "bazoinga+*right+*content".to_name.trait_name?(:content, :default).should be_true
183
- end
184
-
185
- it "returns false for non-template" do
186
- "bazoinga+*right+nontent".to_name.trait_name?(:content).should be_false
187
- end
188
- end
189
156
 
190
157
  describe "#to_absolute" do
191
158
  it "handles _self, _whole, _" do
@@ -2,13 +2,6 @@
2
2
  require 'smart_name'
3
3
  require File.expand_path('./inflection_helper', File.dirname(__FILE__))
4
4
 
5
- class CardMock < String
6
- def name() to_name end
7
- end
8
-
9
- SmartName.name_attribute= :name
10
- SmartName.codes= { :content => 1 }
11
- SmartName.lookup= { 1 => CardMock.new('*content'), }
12
5
 
13
6
  RSpec.configure do |config|
14
7
 
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.1.8
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-05-02 00:00:00.000000000 Z
13
+ date: 2013-06-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -120,6 +120,7 @@ files:
120
120
  - README.rdoc
121
121
  - Rakefile
122
122
  - VERSION
123
+ - lib/core_ext.rb
123
124
  - lib/smart_name.rb
124
125
  - spec/inflection_helper.rb
125
126
  - spec/lib/smart_name_spec.rb
@@ -143,7 +144,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
143
144
  version: '0'
144
145
  segments:
145
146
  - 0
146
- hash: -2297301681558297744
147
+ hash: -3553502979741413020
147
148
  required_rubygems_version: !ruby/object:Gem::Requirement
148
149
  none: false
149
150
  requirements: