friendly_id-globalize 1.0.0.alpha1 → 1.0.0.alpha2

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: 62cd4376867d5bac0911aee989a1772629a02456
4
- data.tar.gz: 1b996d875da46468e07477f4c6b4ca293c403730
3
+ metadata.gz: c240c7dc5d34b3afb7338ae100c7202f04d73e96
4
+ data.tar.gz: f5655d526ff831df27bad81a74699c824123ffb0
5
5
  SHA512:
6
- metadata.gz: 34e2632179917e0fd224e2bf296a55d31ade506f83f16fbae8191be5adb795949bffff910726b3bc94a435af68617e51e7be6006766c3ed0cea25b454b86433d
7
- data.tar.gz: cef14323a9b9c071b823a0b059ada2becfa590548634061d6151ba4d4f9ca3a5bbd4beb8016f92c3909b79e9d718996c4c271b4f5bc7d385a32916b3e0350924
6
+ metadata.gz: a6b36a173d89897737d18071f84a55eddeeb9edf1afaf61cec54b703a9a2975e1e65ab632486a5873bd707ab994a366c2d6105bbe15fb1008c8b455de332f5a9
7
+ data.tar.gz: 07d69a9ec4616a7ba1da6f744cae485b6c1bb7a75abd5b379334492992f1d0a829de35b3dd78454f87193663488b00dcaf77f3d5ef5636fc1ac64b967c50a53b
data/.gitignore CHANGED
@@ -10,3 +10,6 @@ coverage
10
10
  *.rbc
11
11
  *.lock
12
12
  .rbx
13
+ bin
14
+ .bundle
15
+
data/Gemfile CHANGED
@@ -4,9 +4,8 @@ gemspec
4
4
 
5
5
  # Database Configuration
6
6
  group :development, :test do
7
- gem 'globalize3', github: 'svenfuchs/globalize3', branch: 'rails4'
8
- gem 'paper_trail', github: 'airblade/paper_trail', branch: 'master'
9
- gem 'friendly_id', github: 'norman/friendly_id', branch: 'master'
7
+ gem "globalize", '~> 5.0.0'
8
+ gem 'rake'
10
9
 
11
10
  platforms :jruby do
12
11
  gem 'activerecord-jdbcsqlite3-adapter', '>= 1.3.0.beta2'
@@ -20,3 +19,4 @@ group :development, :test do
20
19
  gem 'pry'
21
20
  gem 'pry-nav'
22
21
  end
22
+
data/README.md CHANGED
@@ -1,4 +1,58 @@
1
1
  # FriendlyId Globalize
2
2
 
3
- [Globalize3](https://github.com/svenfuchs/globalize3) support for
3
+ [Globalize](https://github.com/globalize/globalize) support for
4
4
  [FriendlyId](https://github.com/norman/friendly_id).
5
+
6
+ ### Translating Slugs Using Globalize
7
+ The `FriendlyId::Globalize Globalize` module lets you use
8
+ [Globalize](https://github.com/globalize/globalize) to translate slugs. This
9
+ module is most suitable for applications that need to be localized to many
10
+ languages. If your application only needs to be localized to one or two
11
+ languages, you may wish to consider the `FriendlyId::SimpleI18n SimpleI18n`
12
+ module.
13
+
14
+ In order to use this module, your model's table and translation table must both
15
+ have a slug column, and your model must set the `slug` field as translatable
16
+ with Globalize:
17
+ ```ruby
18
+ class Post < ActiveRecord::Base
19
+ translates :title, :slug
20
+ extend FriendlyId
21
+ friendly_id :title, :use => :globalize
22
+ end
23
+ ```
24
+ Note that call to `translates` must be made before calling `friendly_id`.
25
+
26
+ ### Finds
27
+ Finds will take the current locale into consideration:
28
+ ```ruby
29
+ I18n.locale = :it
30
+ Post.find("guerre-stellari")
31
+ I18n.locale = :en
32
+ Post.find("star-wars")
33
+ ```
34
+ Additionally, finds will fall back to the default locale:
35
+ ```ruby
36
+ I18n.locale = :it
37
+ Post.find("star-wars")
38
+ ```
39
+ To find a slug by an explicit locale, perform the find inside a block
40
+ passed to I18n's `with_locale` method:
41
+ ```ruby
42
+ I18n.with_locale(:it) { Post.find("guerre-stellari") }
43
+ ```
44
+ ### Creating Records
45
+ When new records are created, the slug is generated for the current locale only.
46
+ ### Translating Slugs
47
+ To translate an existing record's friendly_id, use
48
+ `FriendlyId::Globalize::Model#set_friendly_id`. This will ensure that the slug
49
+ you add is properly escaped, transliterated and sequenced:
50
+ ```ruby
51
+ post = Post.create :name => "Star Wars"
52
+ post.set_friendly_id("Guerre stellari", :it)
53
+ ```
54
+ If you don't pass in a locale argument, `FriendlyId::Globalize` will just use the
55
+ current locale:
56
+ ```ruby
57
+ I18n.with_locale(:it) { post.set_friendly_id("Guerre stellari") }
58
+ ```
@@ -12,12 +12,13 @@ Gem::Specification.new do |s|
12
12
  s.test_files = `git ls-files -- {test}/*`.split("\n")
13
13
  s.require_paths = ['lib']
14
14
  s.license = 'MIT'
15
- s.description = 'Adds Globalize 3 support to the FriendlyId gem.'
15
+ s.description = 'Adds Globalize support to the FriendlyId gem.'
16
16
 
17
17
  s.required_ruby_version = '>= 1.9.3'
18
18
 
19
- s.add_dependency 'friendly_id', '>= 5.0.0.beta4', '< 6.0'
19
+ s.add_dependency 'friendly_id', '~> 5.1.0', '< 6.0'
20
20
  s.add_development_dependency 'minitest'
21
21
  s.add_development_dependency 'yard'
22
- s.add_development_dependency "globalize3"
22
+ s.add_development_dependency "globalize"
23
23
  end
24
+
@@ -94,7 +94,22 @@ current locale:
94
94
  end
95
95
 
96
96
  def set_slug(normalized_slug = nil)
97
- ::Globalize.with_locale(::Globalize.locale) { super }
97
+ if self.translations.size > 1
98
+ self.translations.map(&:locale).each do |locale|
99
+ ::Globalize.with_locale(locale) { super_set_slug(normalized_slug) }
100
+ end
101
+ else
102
+ ::Globalize.with_locale(::Globalize.locale) { super_set_slug(normalized_slug) }
103
+ end
104
+ end
105
+
106
+ def super_set_slug(normalized_slug = nil)
107
+ if should_generate_new_friendly_id?
108
+ candidates = FriendlyId::Candidates.new(self, normalized_slug || send(friendly_id_config.base))
109
+ slug = slug_generator.generate(candidates) || resolve_friendly_id_conflict(candidates)
110
+ translation.slug = slug
111
+ end
98
112
  end
99
113
  end
100
114
  end
115
+
@@ -1,5 +1,5 @@
1
1
  module FriendlyId
2
2
  module Globalize
3
- VERSION = '1.0.0.alpha1'
3
+ VERSION = '1.0.0.alpha2'
4
4
  end
5
- end
5
+ end
@@ -3,32 +3,34 @@ require 'bundler/setup'
3
3
  require 'active_record'
4
4
  require 'friendly_id'
5
5
  require 'friendly_id/globalize'
6
- require 'globalize3'
6
+ require 'globalize'
7
7
  require 'minitest/autorun'
8
8
 
9
9
  ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
10
-
11
- class Article < ActiveRecord::Base
12
- translates :slug, :title
13
- extend FriendlyId
14
- friendly_id :title, :use => [:slugged, :globalize]
15
- end
10
+ ::I18n.enforce_available_locales = false
11
+ Globalize.fallbacks = {:en => [:en, :de], :de => [:de, :en]}
16
12
 
17
13
  class FriendlyIdGlobalizeTest < ActiveRecord::Migration
18
14
  def self.up
19
15
  create_table :articles do |t|
20
16
  t.string :name
21
- t.string :slug
22
17
  end
23
-
24
- add_index :articles, :slug, unique: true
25
- Article.create_translation_table! :slug => :string, :title => :string
26
18
  end
27
19
  end
28
20
 
29
21
  ActiveRecord::Migration.verbose = false
30
22
  FriendlyIdGlobalizeTest.up
31
23
 
24
+ class Article < ActiveRecord::Base
25
+ translates :slug, :title, fallbacks_for_empty_translations: true
26
+ accepts_nested_attributes_for :translations
27
+
28
+ extend FriendlyId
29
+ friendly_id :title, :use => [:slugged, :globalize]
30
+ end
31
+
32
+ Article.create_translation_table! :slug => :string, :title => :string
33
+
32
34
  class Module
33
35
  def test(name, &block)
34
36
  define_method("test_#{name.gsub(/[^a-z0-9']/i, "_")}".to_sym, &block)
@@ -53,18 +55,11 @@ class GlobalizeTest < MiniTest::Unit::TestCase
53
55
 
54
56
  test 'should have a value for friendly_id after creation' do
55
57
  transaction do
56
- article = I18n.with_locale(:de) { Article.create!(:title => 'Der Herbst des Einsamen') }
58
+ article = ::I18n.with_locale(:de) { Article.create!(:title => 'Der Herbst des Einsamen') }
57
59
  refute_nil article.friendly_id
58
60
  end
59
61
  end
60
62
 
61
- test 'should allow nil friendly_ids' do
62
- transaction do
63
- article = I18n.with_locale(:de) { Article.create!(:title => nil) }
64
- assert_nil article.reload.friendly_id
65
- end
66
- end
67
-
68
63
  test "should find slug in current locale if locale is set, otherwise in default locale" do
69
64
  transaction do
70
65
  I18n.default_locale = :en
@@ -89,6 +84,17 @@ class GlobalizeTest < MiniTest::Unit::TestCase
89
84
  end
90
85
  end
91
86
 
87
+ test "should set all friendly ids for each nested translation" do
88
+ transaction do
89
+ article = Article.create!(translations_attributes: {
90
+ xx: { :title => "Guerra e pace", locale: 'it' },
91
+ yy: { title: 'Guerre et paix', locale: 'fr' }
92
+ })
93
+ I18n.with_locale(:it) { assert_equal "guerra-e-pace", article.friendly_id }
94
+ I18n.with_locale(:fr) { assert_equal "guerre-et-paix", article.friendly_id }
95
+ end
96
+ end
97
+
92
98
  # https://github.com/svenfuchs/globalize3/blob/master/test/globalize3/dynamic_finders_test.rb#L101
93
99
  # see: https://github.com/svenfuchs/globalize3/issues/100
94
100
  test "record returned by friendly_id should have all translations" do
@@ -104,3 +110,4 @@ class GlobalizeTest < MiniTest::Unit::TestCase
104
110
  end
105
111
  end
106
112
  end
113
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: friendly_id-globalize
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.alpha1
4
+ version: 1.0.0.alpha2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Norman Clarke
@@ -9,71 +9,71 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-29 00:00:00.000000000 Z
12
+ date: 2015-07-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: friendly_id
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - '>='
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 5.0.0.beta4
21
- - - <
20
+ version: 5.1.0
21
+ - - "<"
22
22
  - !ruby/object:Gem::Version
23
23
  version: '6.0'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
- - - '>='
28
+ - - "~>"
29
29
  - !ruby/object:Gem::Version
30
- version: 5.0.0.beta4
31
- - - <
30
+ version: 5.1.0
31
+ - - "<"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '6.0'
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: minitest
36
36
  requirement: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  type: :development
42
42
  prerelease: false
43
43
  version_requirements: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: yard
50
50
  requirement: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
57
  version_requirements: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  - !ruby/object:Gem::Dependency
63
- name: globalize3
63
+ name: globalize
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  type: :development
70
70
  prerelease: false
71
71
  version_requirements: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
- description: Adds Globalize 3 support to the FriendlyId gem.
76
+ description: Adds Globalize support to the FriendlyId gem.
77
77
  email:
78
78
  - norman@njclarke.com
79
79
  - p@arndt.io
@@ -81,8 +81,8 @@ executables: []
81
81
  extensions: []
82
82
  extra_rdoc_files: []
83
83
  files:
84
- - .gitignore
85
- - .yardopts
84
+ - ".gitignore"
85
+ - ".yardopts"
86
86
  - Gemfile
87
87
  - MIT-LICENSE
88
88
  - README.md
@@ -101,17 +101,17 @@ require_paths:
101
101
  - lib
102
102
  required_ruby_version: !ruby/object:Gem::Requirement
103
103
  requirements:
104
- - - '>='
104
+ - - ">="
105
105
  - !ruby/object:Gem::Version
106
106
  version: 1.9.3
107
107
  required_rubygems_version: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - '>'
109
+ - - ">"
110
110
  - !ruby/object:Gem::Version
111
111
  version: 1.3.1
112
112
  requirements: []
113
113
  rubyforge_project:
114
- rubygems_version: 2.0.3
114
+ rubygems_version: 2.4.6
115
115
  signing_key:
116
116
  specification_version: 4
117
117
  summary: Globalize support for FriendlyId.