friendly_id 2.0.4 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
@@ -1 +1,2 @@
1
- NGk�3�p�o���$�2�D��<�tT]�9����*b����Ψ������+[rGS^4z��G_H��*�X�BV�/�&c���ho�:U��=;s �M,��� ��g�B�O�_n�. �#�����9=��`��_j[0�q���r$xO����LE��#��L�*�d.�^�Z��脥��$;5٫�3��+���
1
+ ��D��u�#&�� ;\��/�����PPvd����N���e��;gVk���9���0>�\�R��k�Z”����tk���b����;.^Ň>d��]dq %<Wc߽�-�xE��$]Dd���>��Rhx� P�=!�HWip7NO\�{4,��X'XTV��!]u
2
+ �[�HFɗ#�i_�F* gqyĪ��8���v�ʽ�M�zٹlD�?�W��p����-��F�/�4�tٚd��6�do�§�2����]
data/History.txt CHANGED
@@ -1,3 +1,9 @@
1
+ == 2.1.0 2009-03-25
2
+
3
+ 2 major enhancements:
4
+ * Ruby 1.9 compatibility.
5
+ * Removed dependency on ancient Unicode gem.
6
+
1
7
  == 2.0.4 2009-02-12
2
8
 
3
9
  * 1 major enhancment:
data/README.rdoc CHANGED
@@ -219,30 +219,19 @@ While FriendlyId's slug generation options work for most people, you may need
219
219
  something else. As of version 2.0.4 you can pass in your own custom slug
220
220
  generation block:
221
221
 
222
- require 'stringex'
223
222
  class Post < ActiveRecord::Base
224
223
  has_friendly_id :title, :use_slug => true do |text|
225
- # User stringex to generate the friendly_id rather than the baked-in methods
226
- text.to_url
224
+ MySlugGeneratorClass::my_slug_method(text)
227
225
  end
228
226
  end
229
227
 
230
- ...
231
-
232
- @post = Post.create(:title => "tell your readers 你好")
233
- @post.friendly_id # "tell-your-readers-ni-hao"
234
-
235
228
  FriendlyId will still respect your settings for max length and reserved words,
236
229
  but will use your block rather than the baked-in methods to normalize the
237
230
  friendly_id text.
238
231
 
239
- (As an aside, the stringex[http://github.com/rsl/stringex/tree/master] library
240
- provides some very cool slugging functionality and is a great option for
241
- apps using FriendlyId in either English or Chinese. Definitely check it out.)
242
-
243
232
  == Getting it
244
233
 
245
- FriendlyId is installed as a Ruby Gem:
234
+ FriendlyId is best installed as a Ruby Gem:
246
235
 
247
236
  gem install friendly_id
248
237
 
@@ -251,12 +240,6 @@ discouraged:
251
240
 
252
241
  ./script/plugin install git://github.com/norman/friendly_id.git
253
242
 
254
- If you are installing as a plugin, make sure you have installed the unicode gem,
255
- which FriendlyId depends on:
256
-
257
- gem install unicode
258
-
259
-
260
243
  == Setting it up
261
244
 
262
245
  FriendlyId currently works with Rails 2.0.0 - 2.3.0. Here's how to set it up.
data/Rakefile CHANGED
@@ -9,8 +9,8 @@ $hoe = Hoe.new("friendly_id", FriendlyId::Version::STRING) do |p|
9
9
  p.description = 'A comprehensive slugging and pretty-URL plugin for ActiveRecord.'
10
10
  p.url = 'http://friendly-id.rubyforge.org/'
11
11
  p.test_globs = ['test/**/*_test.rb']
12
- p.extra_deps << ['unicode', '>= 0.1']
13
12
  p.extra_deps << ['activerecord', '>= 2.0.0']
13
+ p.extra_deps << ['activesupport', '>= 2.0.0']
14
14
  p.extra_dev_deps << ['newgem', ">= #{::Newgem::VERSION}"]
15
15
  p.extra_dev_deps << ['Shoulda', ">= 1.2.0"]
16
16
  p.extra_dev_deps << ['sqlite3-ruby']
data/friendly_id.gemspec CHANGED
@@ -2,11 +2,10 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{friendly_id}
5
- s.version = "2.0.4"
6
-
5
+ s.version = "2.1.0"
7
6
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
7
  s.authors = ["Norman Clarke", "Adrian Mugnolo", "Emilio Tagua"]
9
- s.date = %q{2009-02-12}
8
+ s.date = %q{2009-03-25}
10
9
  s.description = %q{A comprehensive slugging and pretty-URL plugin for ActiveRecord.}
11
10
  s.email = ["norman@randomba.org", "adrian@randomba.org", "miloops@gmail.com"]
12
11
  s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.rdoc"]
@@ -25,23 +24,23 @@ Gem::Specification.new do |s|
25
24
  s.specification_version = 2
26
25
 
27
26
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
- s.add_runtime_dependency(%q<unicode>, [">= 0.1"])
29
27
  s.add_runtime_dependency(%q<activerecord>, [">= 2.0.0"])
28
+ s.add_runtime_dependency(%q<activesupport>, [">= 2.0.0"])
30
29
  s.add_development_dependency(%q<newgem>, [">= 1.2.3"])
31
30
  s.add_development_dependency(%q<Shoulda>, [">= 1.2.0"])
32
31
  s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
33
32
  s.add_development_dependency(%q<hoe>, [">= 1.8.0"])
34
33
  else
35
- s.add_dependency(%q<unicode>, [">= 0.1"])
36
34
  s.add_dependency(%q<activerecord>, [">= 2.0.0"])
35
+ s.add_dependency(%q<activesupport>, [">= 2.0.0"])
37
36
  s.add_dependency(%q<newgem>, [">= 1.2.3"])
38
37
  s.add_dependency(%q<Shoulda>, [">= 1.2.0"])
39
38
  s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
40
39
  s.add_dependency(%q<hoe>, [">= 1.8.0"])
41
40
  end
42
41
  else
43
- s.add_dependency(%q<unicode>, [">= 0.1"])
44
42
  s.add_dependency(%q<activerecord>, [">= 2.0.0"])
43
+ s.add_dependency(%q<activesupport>, [">= 2.0.0"])
45
44
  s.add_dependency(%q<newgem>, [">= 1.2.3"])
46
45
  s.add_dependency(%q<Shoulda>, [">= 1.2.0"])
47
46
  s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
data/lib/friendly_id.rb CHANGED
@@ -42,6 +42,18 @@ module FriendlyId
42
42
  # * <tt>:strip_non_ascii</tt> - Defaults to false. If true, it will all non-ascii ([^a-z0-9]) characters.
43
43
  # * <tt>:reserved</tt> - Array of words that are reserved and can't be used as friendly_id's. For sluggable models, if such a word is used, it will be treated the same as if that slug was already taken (numeric extension will be appended). Defaults to ["new", "index"].
44
44
  # * <tt>:reserved_message</tt> - The validation message that will be shown when a reserved word is used as a frindly_id. Defaults to '"%s" is reserved'.
45
+ #
46
+ # You can also optionally pass a block if you want to use your own custom
47
+ # slugnormalization routines rather than the default ones that come with
48
+ # friendly_id:
49
+ #
50
+ # require 'stringex'
51
+ # class Post < ActiveRecord::Base
52
+ # has_friendly_id :title, :use_slug => true do |text|
53
+ # # Use stringex to generate the friendly_id rather than the baked-in methods
54
+ # text.to_url
55
+ # end
56
+ # end
45
57
  def has_friendly_id(column, options = {}, &block)
46
58
  options.assert_valid_keys VALID_FRIENDLY_ID_KEYS
47
59
  options = DEFAULT_FRIENDLY_ID_OPTIONS.merge(options).merge(:column => column)
@@ -1,9 +1,23 @@
1
- require 'unicode'
1
+ #encoding: utf-8
2
+
2
3
  # A Slug is a unique, human-friendly identifier for an ActiveRecord.
3
4
  class Slug < ActiveRecord::Base
4
5
 
5
6
  belongs_to :sluggable, :polymorphic => true
6
7
  before_save :check_for_blank_name, :set_sequence
8
+
9
+
10
+ ASCII_APPROXIMATIONS = {
11
+ 198 => "AE",
12
+ 208 => "D",
13
+ 216 => "O",
14
+ 222 => "Th",
15
+ 223 => "ss",
16
+ 230 => "ae",
17
+ 240 => "d",
18
+ 248 => "o",
19
+ 254 => "th"
20
+ }.freeze
7
21
 
8
22
  class << self
9
23
 
@@ -13,20 +27,14 @@ class Slug < ActiveRecord::Base
13
27
  #
14
28
  # slug.normalize('This... is an example!') # => "this-is-an-example"
15
29
  #
16
- # Note that Rails 2.2.x offers a parameterize method for this. It's not
17
- # used here because it assumes you want to strip away accented characters,
18
- # and this may not always be your desire.
19
- #
20
- # At the time of writing, it also handles several characters incorrectly,
21
- # for instance replacing Icelandic's "thorn" character with "y" rather
22
- # than "d." This might be pedantic, but I don't want to piss off the
23
- # Vikings. The last time anyone pissed them off, they uleashed a wave of
24
- # terror in Europe unlike anything ever seen before or after. I'm not
25
- # taking any chances.
30
+ # Note that the Unicode handling in ActiveSupport may fail to process some
31
+ # characters from Polish, Icelandic and other languages. If your
32
+ # application uses these languages, check {out this
33
+ # article}[http://link-coming-soon.com] for information on how to get
34
+ # better urls in your application.
26
35
  def normalize(slug_text)
27
36
  return "" if slug_text.nil? || slug_text == ""
28
- Unicode::normalize_KC(slug_text).
29
- send(chars_func).
37
+ ActiveSupport::Multibyte.proxy_class.new(slug_text).normalize(:kc).
30
38
  # For some reason Spanish ¡ and ¿ are not detected as non-word
31
39
  # characters. Bug in Ruby?
32
40
  gsub(/[\W|¡|¿]/u, ' ').
@@ -36,6 +44,10 @@ class Slug < ActiveRecord::Base
36
44
  downcase.
37
45
  to_s
38
46
  end
47
+
48
+ def postnormalize(string)
49
+ string.gs
50
+ end
39
51
 
40
52
  def parse(friendly_id)
41
53
  name, sequence = friendly_id.split('--')
@@ -46,8 +58,17 @@ class Slug < ActiveRecord::Base
46
58
  # Remove diacritics (accents, umlauts, etc.) from the string. Borrowed
47
59
  # from "The Ruby Way."
48
60
  def strip_diacritics(string)
49
- Unicode::normalize_KD(string).unpack('U*').select { |u| u < 0x300 || u > 0x036F }.pack('U*')
61
+ ActiveSupport::Multibyte.proxy_class.new(string).normalize(:kd).unpack('U*').inject([]) { |a, u|
62
+ if ASCII_APPROXIMATIONS[u]
63
+ a += ASCII_APPROXIMATIONS[u].unpack('U*')
64
+ elsif (u < 0x300 || u > 0x036F)
65
+ a << u
66
+ end
67
+ a
68
+ }.pack('U*')
50
69
  end
70
+
71
+
51
72
 
52
73
  # Remove non-ascii characters from the string.
53
74
  def strip_non_ascii(string)
@@ -75,7 +96,7 @@ class Slug < ActiveRecord::Base
75
96
 
76
97
  # Raise a FriendlyId::SlugGenerationError if the slug name is blank.
77
98
  def check_for_blank_name #:nodoc:#
78
- if name == "" || name.nil?
99
+ if name.blank?
79
100
  raise FriendlyId::SlugGenerationError.new("The slug text is blank.")
80
101
  end
81
102
  end
@@ -1,8 +1,8 @@
1
1
  module FriendlyId #:nodoc:
2
2
  module Version #:nodoc:
3
3
  MAJOR = 2
4
- MINOR = 0
5
- TINY = 4
4
+ MINOR = 1
5
+ TINY = 0
6
6
  STRING = [MAJOR, MINOR, TINY].join('.')
7
7
  end
8
8
  end
data/test/slug_test.rb CHANGED
@@ -39,8 +39,8 @@ class SlugTest < Test::Unit::TestCase
39
39
  input = "ÀÁÂÃÄÅÆÇÈÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ"
40
40
  output = Slug::strip_diacritics(input).split(//)
41
41
  expected = "AAAAAAAECEEEIIIIDNOOOOOOUUUUYThssaaaaaaaeceeeeiiiidnoooooouuuuythy".split(//)
42
- output.split.each_index do |i|
43
- assert_equal output[i], expected[i]
42
+ output.each_index do |i|
43
+ assert_equal expected[i], output[i]
44
44
  end
45
45
  end
46
46
 
data/test/sti_test.rb CHANGED
@@ -17,9 +17,9 @@ class SluggedModelTest < Test::Unit::TestCase
17
17
  should "have a slug" do
18
18
  assert_not_nil @novel.slug
19
19
  end
20
-
20
+
21
21
  context "found by its friendly id" do
22
-
22
+
23
23
  setup do
24
24
  @novel = Novel.find(@novel.friendly_id)
25
25
  end
@@ -29,10 +29,10 @@ class SluggedModelTest < Test::Unit::TestCase
29
29
  end
30
30
 
31
31
  end
32
-
32
+
33
33
 
34
34
  context "found by its numeric id" do
35
-
35
+
36
36
  setup do
37
37
  @novel = Novel.find(@novel.id)
38
38
  end
data/test/test_helper.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  $:.unshift(File.dirname(__FILE__) + '/../lib')
2
2
  $:.unshift(File.dirname(__FILE__))
3
- $VERBOSE=false
3
+ $KCODE = 'UTF8' if RUBY_VERSION < '1.9'
4
+ $VERBOSE = false
4
5
  require 'rubygems'
5
6
  require 'test/unit'
6
7
  require 'shoulda'
@@ -8,8 +9,10 @@ require 'shoulda'
8
9
  # The default is to use the latest installed ActiveRecord.
9
10
  if ENV["AR_VERSION"]
10
11
  gem 'activerecord', "#{ENV["AR_VERSION"]}"
12
+ gem 'activesupport', "#{ENV["AR_VERSION"]}"
11
13
  end
12
14
  require 'active_record'
15
+ require 'active_support'
13
16
 
14
17
  require 'friendly_id'
15
18
  require 'models/post'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: friendly_id
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Norman Clarke
@@ -32,21 +32,21 @@ cert_chain:
32
32
  h7fbBRfStxI=
33
33
  -----END CERTIFICATE-----
34
34
 
35
- date: 2009-02-12 00:00:00 -02:00
35
+ date: 2009-03-25 00:00:00 -03:00
36
36
  default_executable:
37
37
  dependencies:
38
38
  - !ruby/object:Gem::Dependency
39
- name: unicode
39
+ name: activerecord
40
40
  type: :runtime
41
41
  version_requirement:
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: "0.1"
46
+ version: 2.0.0
47
47
  version:
48
48
  - !ruby/object:Gem::Dependency
49
- name: activerecord
49
+ name: activesupport
50
50
  type: :runtime
51
51
  version_requirement:
52
52
  version_requirements: !ruby/object:Gem::Requirement
metadata.gz.sig CHANGED
Binary file