permalink 1.2.2 → 1.3.0

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: e6134036196c8dacbfa748c16d8f492810708376
4
- data.tar.gz: 66baea744850d6cdece44c322a459dcdff13ce5c
3
+ metadata.gz: 10a88f43a291f71aa70b14f54c2aecd0c290fd54
4
+ data.tar.gz: 15d48f43f326b34a7428ab9c463e7f7ad2fa4d22
5
5
  SHA512:
6
- metadata.gz: 4692d97753d72d8b6ffc8045a121977ec801d91ccd72f08cb3e0fe85c4bd1e4814aed1df77993e2e09e5b46a3677e8950268800b6c586c49b17979f043dc77d5
7
- data.tar.gz: 7056c29ddbd87866bfbcf2516bb4fd7e73ba262d76925c90c3a6a70e279165635d6ee57a5663e8139a50d55ede00e091e2563cfd88d5e58a30b7e44a22b7251e
6
+ metadata.gz: b1ab89dedf9b441c0d0073cf820e3c331c4275083bdbbf5a1fef594641389939fcc2e8e1d382110e06d269270f484c8ddb2c66d627a36fd1201d64dfa8a10673
7
+ data.tar.gz: d8b0173ecd447773bd6adf452703a34fa751192dcd360a4fdf5067245d5be464ea23e6a8d6a65102544e2a0675ad4b51275654ba933373e4fb37d1b5798e551a
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- permalink (1.2.2)
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.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-meta (0.0.7)
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-nav
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.1)
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 self.class.where(to_permalink_name => unique_permalink).first
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
@@ -1,8 +1,8 @@
1
1
  module Permalink
2
2
  module Version
3
3
  MAJOR = 1
4
- MINOR = 2
5
- PATCH = 2
4
+ MINOR = 3
5
+ PATCH = 0
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
@@ -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
 
@@ -5,4 +5,5 @@ ActiveRecord::Base
5
5
  .establish_connection(adapter: "sqlite3", database: ":memory:")
6
6
 
7
7
  load("support/schema.rb")
8
+ require "support/user"
8
9
  require "support/post"
@@ -1,2 +1,3 @@
1
1
  class Post < ActiveRecord::Base
2
+ belongs_to :user
2
3
  end
@@ -1,5 +1,9 @@
1
1
  ActiveRecord::Schema.define(:version => 0) do
2
2
  create_table :posts do |t|
3
3
  t.string :title, :permalink, :description, :slug
4
+ t.belongs_to :user
5
+ end
6
+
7
+ create_table :users do |t|
4
8
  end
5
9
  end
@@ -0,0 +1,3 @@
1
+ class User < ActiveRecord::Base
2
+ has_many :posts
3
+ end
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.2.2
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-14 00:00:00.000000000 Z
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: