permalink 1.2.2 → 1.3.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +13 -7
- data/README.md +18 -0
- data/lib/permalink/active_record.rb +12 -2
- data/lib/permalink/version.rb +2 -2
- data/spec/permalink/active_record_spec.rb +21 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/post.rb +1 -0
- data/spec/support/schema.rb +4 -0
- data/spec/support/user.rb +3 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10a88f43a291f71aa70b14f54c2aecd0c290fd54
|
4
|
+
data.tar.gz: 15d48f43f326b34a7428ab9c463e7f7ad2fa4d22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1ab89dedf9b441c0d0073cf820e3c331c4275083bdbbf5a1fef594641389939fcc2e8e1d382110e06d269270f484c8ddb2c66d627a36fd1201d64dfa8a10673
|
7
|
+
data.tar.gz: d8b0173ecd447773bd6adf452703a34fa751192dcd360a4fdf5067245d5be464ea23e6a8d6a65102544e2a0675ad4b51275654ba933373e4fb37d1b5798e551a
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
permalink (1.
|
4
|
+
permalink (1.3.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -22,27 +22,33 @@ GEM
|
|
22
22
|
arel (5.0.1.20140414130214)
|
23
23
|
awesome_print (1.2.0)
|
24
24
|
builder (3.2.2)
|
25
|
+
byebug (2.7.0)
|
26
|
+
columnize (~> 0.3)
|
27
|
+
debugger-linecache (~> 1.2)
|
25
28
|
coderay (1.1.0)
|
29
|
+
columnize (0.8.9)
|
30
|
+
debugger-linecache (1.2.0)
|
26
31
|
diff-lcs (1.2.5)
|
27
32
|
i18n (0.6.9)
|
28
33
|
json (1.8.1)
|
29
34
|
method_source (0.8.2)
|
30
|
-
minitest (5.3.
|
35
|
+
minitest (5.3.4)
|
31
36
|
pry (0.9.12.6)
|
32
37
|
coderay (~> 1.0)
|
33
38
|
method_source (~> 0.8)
|
34
39
|
slop (~> 3.4)
|
35
|
-
pry-
|
40
|
+
pry-byebug (1.3.2)
|
41
|
+
byebug (~> 2.7)
|
42
|
+
pry (~> 0.9.12)
|
43
|
+
pry-meta (0.0.8)
|
36
44
|
awesome_print
|
37
45
|
pry
|
38
|
-
pry-
|
46
|
+
pry-byebug
|
39
47
|
pry-remote
|
40
|
-
pry-nav (0.2.3)
|
41
|
-
pry (~> 0.9.10)
|
42
48
|
pry-remote (0.1.8)
|
43
49
|
pry (~> 0.9)
|
44
50
|
slop (~> 3.0)
|
45
|
-
rake (10.3.
|
51
|
+
rake (10.3.2)
|
46
52
|
rspec (2.14.1)
|
47
53
|
rspec-core (~> 2.14.0)
|
48
54
|
rspec-expectations (~> 2.14.0)
|
data/README.md
CHANGED
@@ -51,6 +51,24 @@ class Page < ActiveRecord::Base
|
|
51
51
|
end
|
52
52
|
```
|
53
53
|
|
54
|
+
The permalink can be tied to a given scope. Let's say you want to have unique permalinks by user. Just set the `:scope` option.
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
class Page < ActiveRecord::Base
|
58
|
+
belongs_to :user
|
59
|
+
permalink :title, :unique => true, :scope => :user_id
|
60
|
+
end
|
61
|
+
|
62
|
+
user = User.first
|
63
|
+
another_user = User.last
|
64
|
+
|
65
|
+
page = user.pages.create(title: 'Hello')
|
66
|
+
page.permalink #=> hello
|
67
|
+
|
68
|
+
another_page = another_user.pages.create(title: 'Hello')
|
69
|
+
another_page.permalink #=> hello
|
70
|
+
```
|
71
|
+
|
54
72
|
The permalink is generated using `ActiveSupport::Multibyte::Chars` class; this means that characters will properly replaced from `áéíó` to `aeio`, for instance.
|
55
73
|
|
56
74
|
The permalink is created when `before_validation` callback is evaluated. This plugin also tries
|
@@ -26,7 +26,8 @@ module Permalink
|
|
26
26
|
to_column_name: options[:to],
|
27
27
|
to_param: [options[:to_param]].flatten,
|
28
28
|
unique: options[:unique],
|
29
|
-
force: options[:force]
|
29
|
+
force: options[:force],
|
30
|
+
scope: options[:scope]
|
30
31
|
}
|
31
32
|
|
32
33
|
before_validation :create_permalink
|
@@ -44,13 +45,15 @@ module Permalink
|
|
44
45
|
end
|
45
46
|
|
46
47
|
private
|
48
|
+
|
47
49
|
def next_available_permalink(permalink)
|
48
50
|
unique_permalink = permalink
|
51
|
+
scope = build_scope_for_permalink
|
49
52
|
|
50
53
|
if self.class.permalink_options[:unique]
|
51
54
|
suffix = 2
|
52
55
|
|
53
|
-
while
|
56
|
+
while scope.where(to_permalink_name => unique_permalink).first
|
54
57
|
unique_permalink = "#{permalink}-#{suffix}"
|
55
58
|
suffix += 1
|
56
59
|
end
|
@@ -59,6 +62,13 @@ module Permalink
|
|
59
62
|
unique_permalink
|
60
63
|
end
|
61
64
|
|
65
|
+
def build_scope_for_permalink
|
66
|
+
search_scope = self.class.permalink_options[:scope]
|
67
|
+
scope = self.class.unscoped
|
68
|
+
scope = scope.where(search_scope => public_send(search_scope)) if search_scope
|
69
|
+
scope
|
70
|
+
end
|
71
|
+
|
62
72
|
def from_permalink_name
|
63
73
|
self.class.permalink_options[:from_column_name]
|
64
74
|
end
|
data/lib/permalink/version.rb
CHANGED
@@ -44,6 +44,27 @@ describe Permalink::ActiveRecord do
|
|
44
44
|
expect(record.permalink).to eq("some-nice-post-3")
|
45
45
|
end
|
46
46
|
|
47
|
+
it "creates unique permalinks based on scope" do
|
48
|
+
model.permalink :title, :unique => true, :scope => :user_id
|
49
|
+
|
50
|
+
user = User.create!
|
51
|
+
another_user = User.create!
|
52
|
+
|
53
|
+
# Create posts for user
|
54
|
+
record = model.create(:title => "Some nice post", :user => user)
|
55
|
+
expect(record.permalink).to eq("some-nice-post")
|
56
|
+
|
57
|
+
record = model.create(:title => "Some nice post", :user => user)
|
58
|
+
expect(record.permalink).to eq("some-nice-post-2")
|
59
|
+
|
60
|
+
# Create posts for another user
|
61
|
+
record = model.create(:title => "Some nice post", :user => another_user)
|
62
|
+
expect(record.permalink).to eq("some-nice-post")
|
63
|
+
|
64
|
+
record = model.create(:title => "Some nice post", :user => another_user)
|
65
|
+
expect(record.permalink).to eq("some-nice-post-2")
|
66
|
+
end
|
67
|
+
|
47
68
|
it "returns param for unique permalink" do
|
48
69
|
model.permalink :title, :to_param => :permalink, :unique => true
|
49
70
|
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/post.rb
CHANGED
data/spec/support/schema.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: permalink
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -103,6 +103,7 @@ files:
|
|
103
103
|
- spec/spec_helper.rb
|
104
104
|
- spec/support/post.rb
|
105
105
|
- spec/support/schema.rb
|
106
|
+
- spec/support/user.rb
|
106
107
|
homepage: http://rubygems.org/gems/permalink
|
107
108
|
licenses: []
|
108
109
|
metadata: {}
|
@@ -132,3 +133,5 @@ test_files:
|
|
132
133
|
- spec/spec_helper.rb
|
133
134
|
- spec/support/post.rb
|
134
135
|
- spec/support/schema.rb
|
136
|
+
- spec/support/user.rb
|
137
|
+
has_rdoc:
|