stringex 1.5.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +74 -0
- data/README.rdoc +22 -1
- data/Rakefile +46 -223
- data/VERSION +1 -0
- data/init.rb +1 -0
- data/lib/stringex.rb +11 -3
- data/lib/stringex/acts_as_url.rb +49 -97
- data/lib/stringex/acts_as_url/adapter.rb +26 -0
- data/lib/stringex/acts_as_url/adapter/active_record.rb +23 -0
- data/lib/stringex/acts_as_url/adapter/base.rb +188 -0
- data/lib/stringex/acts_as_url/adapter/data_mapper.rb +67 -0
- data/lib/stringex/acts_as_url/adapter/mongoid.rb +36 -0
- data/lib/stringex/configuration.rb +4 -0
- data/lib/stringex/configuration/acts_as_url.rb +44 -0
- data/lib/stringex/configuration/base.rb +58 -0
- data/lib/stringex/configuration/configurator.rb +25 -0
- data/lib/stringex/configuration/string_extensions.rb +19 -0
- data/lib/stringex/localization.rb +98 -0
- data/lib/stringex/localization/backend/i18n.rb +53 -0
- data/lib/stringex/localization/backend/internal.rb +51 -0
- data/lib/stringex/localization/conversion_expressions.rb +148 -0
- data/lib/stringex/localization/converter.rb +121 -0
- data/lib/stringex/localization/default_conversions.rb +88 -0
- data/lib/stringex/rails/railtie.rb +10 -0
- data/lib/stringex/string_extensions.rb +153 -208
- data/lib/stringex/unidecoder.rb +6 -101
- data/lib/stringex/unidecoder_data/x00.yml +1 -1
- data/lib/stringex/unidecoder_data/x02.yml +5 -5
- data/lib/stringex/unidecoder_data/x05.yml +1 -1
- data/lib/stringex/unidecoder_data/x06.yml +1 -1
- data/lib/stringex/unidecoder_data/x07.yml +3 -3
- data/lib/stringex/unidecoder_data/x09.yml +1 -1
- data/lib/stringex/unidecoder_data/x0e.yml +2 -2
- data/lib/stringex/unidecoder_data/x1f.yml +2 -2
- data/lib/stringex/unidecoder_data/x20.yml +1 -1
- data/lib/stringex/unidecoder_data/xfb.yml +1 -1
- data/lib/stringex/unidecoder_data/xff.yml +1 -1
- data/lib/stringex/version.rb +8 -0
- data/locales/da.yml +73 -0
- data/locales/en.yml +66 -0
- data/stringex.gemspec +77 -18
- data/test/acts_as_url/adapter/active_record.rb +72 -0
- data/test/acts_as_url/adapter/data_mapper.rb +82 -0
- data/test/acts_as_url/adapter/mongoid.rb +73 -0
- data/test/acts_as_url_configuration_test.rb +51 -0
- data/test/acts_as_url_integration_test.rb +271 -0
- data/test/localization/da_test.rb +117 -0
- data/test/localization/default_test.rb +113 -0
- data/test/localization/en_test.rb +117 -0
- data/test/localization_test.rb +123 -0
- data/test/redcloth_to_html_test.rb +37 -0
- data/test/string_extensions_test.rb +59 -91
- data/test/test_helper.rb +2 -0
- data/test/unicode_point_suite/basic_greek_test.rb +113 -0
- data/test/unicode_point_suite/basic_latin_test.rb +142 -0
- data/test/unicode_point_suite/codepoint_test_helper.rb +32 -0
- data/test/unidecoder/bad_localization.yml +1 -0
- data/test/unidecoder/localization.yml +4 -0
- data/test/unidecoder_test.rb +3 -5
- metadata +145 -37
- data/test/acts_as_url_test.rb +0 -272
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# 100% shorthand
|
4
|
+
module CodepointTestHelper
|
5
|
+
def assert_equal_encoded(expected, encode_mes)
|
6
|
+
# Killing a duck because Ruby 1.9 doesn't mix Enumerable into String
|
7
|
+
encode_mes = [encode_mes] if encode_mes.is_a?(String)
|
8
|
+
encode_mes.each do |encode_me|
|
9
|
+
encoded = encode(encode_me)
|
10
|
+
actual = encoded.to_ascii
|
11
|
+
if expected == actual
|
12
|
+
# Let's not retest it
|
13
|
+
assert true
|
14
|
+
else
|
15
|
+
message = "<#{expected.inspect}> expected but was\n<#{actual.inspect}>\n"
|
16
|
+
message << " defined in #{Stringex::Unidecoder.in_yaml_file(encoded)}"
|
17
|
+
reporting_class = defined?(Test::Unit::AssertionFailedError) ?
|
18
|
+
Test::Unit::AssertionFailedError : ActiveSupport::TestCase::Assertion
|
19
|
+
raise reporting_class.new(message)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def encode(codepoint)
|
26
|
+
Stringex::Unidecoder.encode(codepoint)
|
27
|
+
end
|
28
|
+
|
29
|
+
def which_yaml(codepoint)
|
30
|
+
Stringex::Unidecoder.in_yaml_file(encode(codepoint))
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Anything not correct
|
data/test/unidecoder_test.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
|
-
require "
|
4
|
-
|
5
|
-
$: << File.join(File.expand_path(File.dirname(__FILE__)), '../lib')
|
6
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "../init.rb")
|
3
|
+
require "test_helper"
|
4
|
+
require "stringex"
|
7
5
|
|
8
6
|
class UnidecoderTest < Test::Unit::TestCase
|
9
7
|
# Silly phrases courtesy of Frank da Cruz
|
@@ -40,7 +38,7 @@ class UnidecoderTest < Test::Unit::TestCase
|
|
40
38
|
"من می توانم بدونِ احساس درد شيشه بخورم" => # Persian
|
41
39
|
"mn my twnm bdwni Hss drd shyshh bkhwrm",
|
42
40
|
"أنا قادر على أكل الزجاج و هذا لا يؤلمن" => # Arabic
|
43
|
-
"'n qdr
|
41
|
+
"'n qdr 'l~ 'kl lzjj w hdh l yw'lmn",
|
44
42
|
"אני יכול לאכול זכוכית וזה לא מזיק לי" => # Hebrew
|
45
43
|
"ny ykvl lkvl zkvkyt vzh l mzyq ly",
|
46
44
|
"ฉันกินกระจกได้ แต่มันไม่ทำให้ฉันเจ็บ" => # Thai
|
metadata
CHANGED
@@ -1,36 +1,88 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stringex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Russell Norris
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-06-03 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activerecord
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.2.13
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.2.13
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: dm-core
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.2.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.2.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: dm-migrations
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.2.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.2.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: dm-sqlite-adapter
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.2.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.2.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: dm-validations
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '='
|
20
74
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
75
|
+
version: 1.2.0
|
22
76
|
type: :development
|
23
77
|
prerelease: false
|
24
78
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
79
|
requirements:
|
27
|
-
- -
|
80
|
+
- - '='
|
28
81
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
82
|
+
version: 1.2.0
|
30
83
|
- !ruby/object:Gem::Dependency
|
31
84
|
name: jeweler
|
32
85
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
86
|
requirements:
|
35
87
|
- - '='
|
36
88
|
- !ruby/object:Gem::Version
|
@@ -38,59 +90,80 @@ dependencies:
|
|
38
90
|
type: :development
|
39
91
|
prerelease: false
|
40
92
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
93
|
requirements:
|
43
94
|
- - '='
|
44
95
|
- !ruby/object:Gem::Version
|
45
96
|
version: 1.8.4
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: mongoid
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 3.1.4
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 3.1.4
|
46
111
|
- !ruby/object:Gem::Dependency
|
47
112
|
name: RedCloth
|
48
113
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
114
|
requirements:
|
51
|
-
- -
|
115
|
+
- - '='
|
52
116
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
117
|
+
version: 4.2.9
|
54
118
|
type: :development
|
55
119
|
prerelease: false
|
56
120
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
121
|
requirements:
|
59
|
-
- -
|
122
|
+
- - '='
|
60
123
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
124
|
+
version: 4.2.9
|
62
125
|
- !ruby/object:Gem::Dependency
|
63
126
|
name: sqlite3
|
64
127
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
128
|
requirements:
|
67
|
-
- -
|
129
|
+
- - '='
|
68
130
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
131
|
+
version: 1.3.7
|
70
132
|
type: :development
|
71
133
|
prerelease: false
|
72
134
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
135
|
requirements:
|
75
|
-
- -
|
136
|
+
- - '='
|
76
137
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
138
|
+
version: 1.3.7
|
78
139
|
- !ruby/object:Gem::Dependency
|
79
140
|
name: travis-lint
|
80
141
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
142
|
requirements:
|
83
143
|
- - '='
|
84
144
|
- !ruby/object:Gem::Version
|
85
|
-
version: 1.
|
145
|
+
version: 1.7.0
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 1.7.0
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: i18n
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - '='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 0.6.1
|
86
160
|
type: :development
|
87
161
|
prerelease: false
|
88
162
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
163
|
requirements:
|
91
164
|
- - '='
|
92
165
|
- !ruby/object:Gem::Version
|
93
|
-
version:
|
166
|
+
version: 0.6.1
|
94
167
|
description: ! 'Some [hopefully] useful extensions to Ruby''s String class. Stringex
|
95
168
|
is made up of three libraries: ActsAsUrl [permalink solution with better character
|
96
169
|
translation], Unidecoder [Unicode to ASCII transliteration], and StringExtensions
|
@@ -102,12 +175,32 @@ extra_rdoc_files:
|
|
102
175
|
- MIT-LICENSE
|
103
176
|
- README.rdoc
|
104
177
|
files:
|
178
|
+
- Gemfile
|
179
|
+
- Gemfile.lock
|
105
180
|
- MIT-LICENSE
|
106
181
|
- README.rdoc
|
107
182
|
- Rakefile
|
183
|
+
- VERSION
|
108
184
|
- init.rb
|
109
185
|
- lib/stringex.rb
|
110
186
|
- lib/stringex/acts_as_url.rb
|
187
|
+
- lib/stringex/acts_as_url/adapter.rb
|
188
|
+
- lib/stringex/acts_as_url/adapter/active_record.rb
|
189
|
+
- lib/stringex/acts_as_url/adapter/base.rb
|
190
|
+
- lib/stringex/acts_as_url/adapter/data_mapper.rb
|
191
|
+
- lib/stringex/acts_as_url/adapter/mongoid.rb
|
192
|
+
- lib/stringex/configuration.rb
|
193
|
+
- lib/stringex/configuration/acts_as_url.rb
|
194
|
+
- lib/stringex/configuration/base.rb
|
195
|
+
- lib/stringex/configuration/configurator.rb
|
196
|
+
- lib/stringex/configuration/string_extensions.rb
|
197
|
+
- lib/stringex/localization.rb
|
198
|
+
- lib/stringex/localization/backend/i18n.rb
|
199
|
+
- lib/stringex/localization/backend/internal.rb
|
200
|
+
- lib/stringex/localization/conversion_expressions.rb
|
201
|
+
- lib/stringex/localization/converter.rb
|
202
|
+
- lib/stringex/localization/default_conversions.rb
|
203
|
+
- lib/stringex/rails/railtie.rb
|
111
204
|
- lib/stringex/string_extensions.rb
|
112
205
|
- lib/stringex/unidecoder.rb
|
113
206
|
- lib/stringex/unidecoder_data/x00.yml
|
@@ -290,12 +383,32 @@ files:
|
|
290
383
|
- lib/stringex/unidecoder_data/xfd.yml
|
291
384
|
- lib/stringex/unidecoder_data/xfe.yml
|
292
385
|
- lib/stringex/unidecoder_data/xff.yml
|
386
|
+
- lib/stringex/version.rb
|
387
|
+
- locales/da.yml
|
388
|
+
- locales/en.yml
|
293
389
|
- stringex.gemspec
|
294
|
-
- test/
|
390
|
+
- test/acts_as_url/adapter/active_record.rb
|
391
|
+
- test/acts_as_url/adapter/data_mapper.rb
|
392
|
+
- test/acts_as_url/adapter/mongoid.rb
|
393
|
+
- test/acts_as_url_configuration_test.rb
|
394
|
+
- test/acts_as_url_integration_test.rb
|
395
|
+
- test/localization/da_test.rb
|
396
|
+
- test/localization/default_test.rb
|
397
|
+
- test/localization/en_test.rb
|
398
|
+
- test/localization_test.rb
|
399
|
+
- test/redcloth_to_html_test.rb
|
295
400
|
- test/string_extensions_test.rb
|
401
|
+
- test/test_helper.rb
|
402
|
+
- test/unicode_point_suite/basic_greek_test.rb
|
403
|
+
- test/unicode_point_suite/basic_latin_test.rb
|
404
|
+
- test/unicode_point_suite/codepoint_test_helper.rb
|
405
|
+
- test/unidecoder/bad_localization.yml
|
406
|
+
- test/unidecoder/localization.yml
|
296
407
|
- test/unidecoder_test.rb
|
297
408
|
homepage: http://github.com/rsl/stringex
|
298
|
-
licenses:
|
409
|
+
licenses:
|
410
|
+
- MIT
|
411
|
+
metadata: {}
|
299
412
|
post_install_message:
|
300
413
|
rdoc_options:
|
301
414
|
- --main
|
@@ -306,24 +419,19 @@ rdoc_options:
|
|
306
419
|
require_paths:
|
307
420
|
- lib
|
308
421
|
required_ruby_version: !ruby/object:Gem::Requirement
|
309
|
-
none: false
|
310
422
|
requirements:
|
311
423
|
- - ! '>='
|
312
424
|
- !ruby/object:Gem::Version
|
313
425
|
version: '0'
|
314
426
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
315
|
-
none: false
|
316
427
|
requirements:
|
317
428
|
- - ! '>='
|
318
429
|
- !ruby/object:Gem::Version
|
319
430
|
version: '0'
|
320
431
|
requirements: []
|
321
432
|
rubyforge_project:
|
322
|
-
rubygems_version:
|
433
|
+
rubygems_version: 2.0.3
|
323
434
|
signing_key:
|
324
|
-
specification_version:
|
435
|
+
specification_version: 4
|
325
436
|
summary: Some [hopefully] useful extensions to Ruby's String class
|
326
|
-
test_files:
|
327
|
-
- test/acts_as_url_test.rb
|
328
|
-
- test/string_extensions_test.rb
|
329
|
-
- test/unidecoder_test.rb
|
437
|
+
test_files: []
|
data/test/acts_as_url_test.rb
DELETED
@@ -1,272 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
require 'test/unit'
|
3
|
-
|
4
|
-
begin
|
5
|
-
require File.expand_path(File.dirname(__FILE__)) + '/../../../config/environment'
|
6
|
-
rescue LoadError
|
7
|
-
require 'rubygems'
|
8
|
-
gem 'activerecord'
|
9
|
-
require 'active_record'
|
10
|
-
|
11
|
-
RAILS_ROOT = File.expand_path(File.dirname(__FILE__))
|
12
|
-
$: << File.join(File.expand_path(File.dirname(__FILE__)), '../lib')
|
13
|
-
end
|
14
|
-
|
15
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), '../init.rb')
|
16
|
-
|
17
|
-
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => "acts_as_url.sqlite3")
|
18
|
-
|
19
|
-
ActiveRecord::Migration.verbose = false
|
20
|
-
ActiveRecord::Schema.define(:version => 1) do
|
21
|
-
create_table :documents, :force => true do |t|
|
22
|
-
t.string :title, :url, :other
|
23
|
-
end
|
24
|
-
|
25
|
-
create_table :updateuments, :force => true do |t|
|
26
|
-
t.string :title, :url, :other
|
27
|
-
end
|
28
|
-
|
29
|
-
create_table :mocuments, :force => true do |t|
|
30
|
-
t.string :title, :url, :other
|
31
|
-
end
|
32
|
-
|
33
|
-
create_table :permuments, :force => true do |t|
|
34
|
-
t.string :title, :permalink, :other
|
35
|
-
end
|
36
|
-
|
37
|
-
create_table :procuments, :force => true do |t|
|
38
|
-
t.string :title, :url, :other
|
39
|
-
end
|
40
|
-
|
41
|
-
create_table :blankuments, :force => true do |t|
|
42
|
-
t.string :title, :url, :other
|
43
|
-
end
|
44
|
-
|
45
|
-
create_table :duplicateuments, :force => true do |t|
|
46
|
-
t.string :title, :url, :other
|
47
|
-
end
|
48
|
-
|
49
|
-
create_table :validatuments, :force => true do |t|
|
50
|
-
t.string :title, :url, :other
|
51
|
-
end
|
52
|
-
|
53
|
-
create_table :ununiquments, :force => true do |t|
|
54
|
-
t.string :title, :url, :other
|
55
|
-
end
|
56
|
-
|
57
|
-
create_table :limituments, :force => true do |t|
|
58
|
-
t.string :title, :url, :other
|
59
|
-
end
|
60
|
-
|
61
|
-
create_table :skipuments, :force => true do |t|
|
62
|
-
t.string :title, :url, :other
|
63
|
-
end
|
64
|
-
end
|
65
|
-
ActiveRecord::Migration.verbose = true
|
66
|
-
|
67
|
-
class Document < ActiveRecord::Base
|
68
|
-
acts_as_url :title
|
69
|
-
end
|
70
|
-
|
71
|
-
class Updateument < ActiveRecord::Base
|
72
|
-
acts_as_url :title, :sync_url => true
|
73
|
-
end
|
74
|
-
|
75
|
-
class Mocument < ActiveRecord::Base
|
76
|
-
acts_as_url :title, :scope => :other, :sync_url => true
|
77
|
-
end
|
78
|
-
|
79
|
-
class Permument < ActiveRecord::Base
|
80
|
-
acts_as_url :title, :url_attribute => :permalink
|
81
|
-
end
|
82
|
-
|
83
|
-
class Procument < ActiveRecord::Base
|
84
|
-
acts_as_url :non_attribute_method
|
85
|
-
|
86
|
-
def non_attribute_method
|
87
|
-
"#{title} got massaged"
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
class Blankument < ActiveRecord::Base
|
92
|
-
acts_as_url :title, :only_when_blank => true
|
93
|
-
end
|
94
|
-
|
95
|
-
class Duplicateument < ActiveRecord::Base
|
96
|
-
acts_as_url :title, :duplicate_count_separator => "---"
|
97
|
-
end
|
98
|
-
|
99
|
-
class Validatument < ActiveRecord::Base
|
100
|
-
acts_as_url :title, :sync_url => true
|
101
|
-
validates_presence_of :title
|
102
|
-
end
|
103
|
-
|
104
|
-
class Ununiqument < ActiveRecord::Base
|
105
|
-
acts_as_url :title, :allow_duplicates => true
|
106
|
-
end
|
107
|
-
|
108
|
-
class Limitument < ActiveRecord::Base
|
109
|
-
acts_as_url :title, :limit => 13
|
110
|
-
end
|
111
|
-
|
112
|
-
class Skipument < ActiveRecord::Base
|
113
|
-
acts_as_url :title, :exclude => ["_So_Fucking_Special"]
|
114
|
-
end
|
115
|
-
|
116
|
-
class ActsAsUrlTest < Test::Unit::TestCase
|
117
|
-
def test_should_create_url
|
118
|
-
@doc = Document.create(:title => "Let's Make a Test Title, <em>Okay</em>?")
|
119
|
-
assert_equal "lets-make-a-test-title-okay", @doc.url
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_should_create_unique_url
|
123
|
-
@doc = Document.create!(:title => "Unique")
|
124
|
-
@other_doc = Document.create!(:title => "Unique")
|
125
|
-
assert_equal "unique-1", @other_doc.url
|
126
|
-
end
|
127
|
-
|
128
|
-
def test_should_not_create_unique_url
|
129
|
-
@doc = Ununiqument.create!(:title => "I am not a clone")
|
130
|
-
@other_doc = Ununiqument.create!(:title => "I am not a clone")
|
131
|
-
assert_equal "i-am-not-a-clone", @other_doc.url
|
132
|
-
end
|
133
|
-
|
134
|
-
def test_should_not_succ_on_repeated_saves
|
135
|
-
@doc = Document.new(:title => "Continuous or Constant")
|
136
|
-
5.times do
|
137
|
-
@doc.save!
|
138
|
-
assert_equal "continuous-or-constant", @doc.url
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_should_create_unique_url_and_not_clobber_if_another_exists
|
143
|
-
@doc = Updateument.create!(:title => "Unique")
|
144
|
-
@other_doc = Updateument.create!(:title => "Unique")
|
145
|
-
@doc.update_attributes :other => "foo"
|
146
|
-
|
147
|
-
@doc2 = Document.create!(:title => "twonique")
|
148
|
-
@other_doc2 = Document.create!(:title => "twonique")
|
149
|
-
@doc2.update_attributes(:other => "foo")
|
150
|
-
|
151
|
-
assert_equal "unique", @doc.url
|
152
|
-
assert_equal "foo", @doc.other
|
153
|
-
assert_equal "unique-1", @other_doc.url
|
154
|
-
|
155
|
-
assert_equal "twonique", @doc2.url
|
156
|
-
assert_equal "foo", @doc2.other
|
157
|
-
assert_equal "twonique-1", @other_doc2.url
|
158
|
-
end
|
159
|
-
|
160
|
-
def test_should_create_unique_url_when_partial_url_already_exists
|
161
|
-
@doc = Document.create!(:title => "House Farms")
|
162
|
-
@other_doc = Document.create!(:title => "House Farm")
|
163
|
-
|
164
|
-
assert_equal "house-farms", @doc.url
|
165
|
-
assert_equal "house-farm", @other_doc.url
|
166
|
-
end
|
167
|
-
|
168
|
-
def test_should_scope_uniqueness
|
169
|
-
@moc = Mocument.create!(:title => "Mocumentary", :other => "I dunno why but I don't care if I'm unique")
|
170
|
-
@other_moc = Mocument.create!(:title => "Mocumentary")
|
171
|
-
assert_equal @moc.url, @other_moc.url
|
172
|
-
end
|
173
|
-
|
174
|
-
def test_should_still_create_unique_if_in_same_scope
|
175
|
-
@moc = Mocument.create!(:title => "Mocumentary", :other => "Suddenly, I care if I'm unique")
|
176
|
-
@other_moc = Mocument.create!(:title => "Mocumentary", :other => "Suddenly, I care if I'm unique")
|
177
|
-
assert_not_equal @moc.url, @other_moc.url
|
178
|
-
end
|
179
|
-
|
180
|
-
def test_should_use_alternate_field_name
|
181
|
-
@perm = Permument.create!(:title => "Anything at This Point")
|
182
|
-
assert_equal "anything-at-this-point", @perm.permalink
|
183
|
-
end
|
184
|
-
|
185
|
-
def test_should_not_update_url_by_default
|
186
|
-
@doc = Document.create!(:title => "Stable as Stone")
|
187
|
-
@original_url = @doc.url
|
188
|
-
@doc.update_attributes :title => "New Unstable Madness"
|
189
|
-
assert_equal @original_url, @doc.url
|
190
|
-
end
|
191
|
-
|
192
|
-
def test_should_update_url_if_asked
|
193
|
-
@moc = Mocument.create!(:title => "Original")
|
194
|
-
@original_url = @moc.url
|
195
|
-
@moc.update_attributes :title => "New and Improved"
|
196
|
-
assert_not_equal @original_url, @moc.url
|
197
|
-
end
|
198
|
-
|
199
|
-
def test_should_update_url_only_when_blank_if_asked
|
200
|
-
@original_url = 'the-url-of-concrete'
|
201
|
-
@blank = Blankument.create!(:title => "Stable as Stone", :url => @original_url)
|
202
|
-
assert_equal @original_url, @blank.url
|
203
|
-
@blank = Blankument.create!(:title => "Stable as Stone")
|
204
|
-
assert_equal 'stable-as-stone', @blank.url
|
205
|
-
end
|
206
|
-
|
207
|
-
def test_should_mass_initialize_urls
|
208
|
-
@doc_1 = Document.create!(:title => "Initial")
|
209
|
-
@doc_2 = Document.create!(:title => "Subsequent")
|
210
|
-
@doc_1.update_attribute :url, nil
|
211
|
-
@doc_2.update_attribute :url, nil
|
212
|
-
assert_nil @doc_1.url
|
213
|
-
assert_nil @doc_2.url
|
214
|
-
Document.initialize_urls
|
215
|
-
@doc_1.reload
|
216
|
-
@doc_2.reload
|
217
|
-
assert_equal "initial", @doc_1.url
|
218
|
-
assert_equal "subsequent", @doc_2.url
|
219
|
-
end
|
220
|
-
|
221
|
-
def test_should_mass_initialize_urls_with_custom_url_attribute
|
222
|
-
@doc_1 = Permument.create!(:title => "Initial")
|
223
|
-
@doc_2 = Permument.create!(:title => "Subsequent")
|
224
|
-
@doc_1.update_attribute :permalink, nil
|
225
|
-
@doc_2.update_attribute :permalink, nil
|
226
|
-
assert_nil @doc_1.permalink
|
227
|
-
assert_nil @doc_2.permalink
|
228
|
-
Permument.initialize_urls
|
229
|
-
@doc_1.reload
|
230
|
-
@doc_2.reload
|
231
|
-
assert_equal "initial", @doc_1.permalink
|
232
|
-
assert_equal "subsequent", @doc_2.permalink
|
233
|
-
end
|
234
|
-
|
235
|
-
def test_should_utilize_block_if_given
|
236
|
-
@doc = Procument.create!(:title => "Title String")
|
237
|
-
assert_equal "title-string-got-massaged", @doc.url
|
238
|
-
end
|
239
|
-
|
240
|
-
def test_should_create_unique_with_custom_duplicate_count_separator
|
241
|
-
@doc = Duplicateument.create!(:title => "Unique")
|
242
|
-
@other_doc = Duplicateument.create!(:title => "Unique")
|
243
|
-
assert_equal "unique", @doc.url
|
244
|
-
assert_equal "unique---1", @other_doc.url
|
245
|
-
end
|
246
|
-
|
247
|
-
def test_should_only_update_url_if_model_is_valid
|
248
|
-
@doc = Validatument.create!(:title => "Initial")
|
249
|
-
@doc.title = nil
|
250
|
-
assert !@doc.valid?
|
251
|
-
assert_equal "initial", @doc.url
|
252
|
-
end
|
253
|
-
|
254
|
-
def test_should_allow_url_limit
|
255
|
-
@doc = Limitument.create!(:title => "I am much too long")
|
256
|
-
assert_equal "i-am-much-too", @doc.url
|
257
|
-
end
|
258
|
-
|
259
|
-
def test_should_handle_duplicate_urls_with_limits
|
260
|
-
@doc = Limitument.create!(:title => "I am long but not unique")
|
261
|
-
assert_equal "i-am-long-but", @doc.url
|
262
|
-
@doc_2 = Limitument.create!(:title => "I am long but not unique")
|
263
|
-
assert_equal "i-am-long-but-1", @doc_2.url
|
264
|
-
end
|
265
|
-
|
266
|
-
def test_should_allow_exclusions
|
267
|
-
@doc = Skipument.create!(:title => "_So_Fucking_Special")
|
268
|
-
assert_equal "_So_Fucking_Special", @doc.url
|
269
|
-
@doc_2 = Skipument.create!(:title => "But I'm a creep")
|
270
|
-
assert_equal "but-im-a-creep", @doc_2.url
|
271
|
-
end
|
272
|
-
end
|