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 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: