vanity_slug 0.0.4 → 0.0.5
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 +7 -0
- data/Gemfile +2 -2
- data/README.md +3 -0
- data/Rakefile +9 -0
- data/circle.yml +3 -0
- data/lib/vanity_slug/active_record.rb +8 -8
- data/lib/vanity_slug/version.rb +1 -1
- data/spec/spec_helper.rb +4 -4
- data/spec/vanity_slug_spec.rb +5 -5
- metadata +9 -10
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d47176486a92662a7b2ba26cb421902ee7835c2e
|
4
|
+
data.tar.gz: c0cc87e0d6c97e464b9c029ce46dcdd73c41a661
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f760ada2b91ae7639922cbcd19bcd2a68afeafc7e5a9c9fb490193b01f2e46b2ecf98b854d6d651a5baf047b3a76051f83356367be49e69985a04e794d883914
|
7
|
+
data.tar.gz: 1c346ca98738d438e323e74401b0a83cc578fc62dd46e12b1e5629fe4aba76d98e78abf24b660045cd96fe599028910dd68713b474501ee6561110fcc50b48f5
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# VanitySlug
|
2
2
|
|
3
|
+
[](https://coveralls.io/r/nickmerwin/vanity_slug)
|
4
|
+
|
3
5
|
Add unique vanity urls to any model without use of redirects. Middleware matches routes that don't resolve with the Rails router and checks if they match a slug from any vanity-slug enabled model. If found, the `env["PATH_INFO"]` is changed like so:
|
4
6
|
|
5
7
|
Given a Post with slug "my-post-title" and id 1, and a Category with slug "the-category" and id 2:
|
@@ -87,3 +89,4 @@ Use to scope the finder based on rack env, i.e. host parameter. Should return a
|
|
87
89
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
88
90
|
4. Push to the branch (`git push origin my-new-feature`)
|
89
91
|
5. Create new Pull Request
|
92
|
+
|
data/Rakefile
CHANGED
data/circle.yml
ADDED
@@ -61,11 +61,11 @@ ActiveSupport.on_load :active_record do
|
|
61
61
|
slug_to_check = send(self.class.slug_field)
|
62
62
|
|
63
63
|
exists = VanitySlug.classes.any? do |klass|
|
64
|
-
scope = klass.has_vanity_slug_opts[:uniqueness_scope]
|
64
|
+
scope = klass.has_vanity_slug_opts[:uniqueness_scope]
|
65
65
|
conditions = scope ? { scope => send(scope) } : {}
|
66
66
|
|
67
|
-
finder = klass.where(conditions.merge({
|
68
|
-
klass.slug_field => slug_to_check
|
67
|
+
finder = klass.where(conditions.merge({
|
68
|
+
klass.slug_field => slug_to_check
|
69
69
|
}))
|
70
70
|
|
71
71
|
finder = finder.where("id != ?", self.id) if klass.to_s == self.class.to_s
|
@@ -82,10 +82,10 @@ ActiveSupport.on_load :active_record do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def vanity_slug_exists?(potential_slug)
|
85
|
-
return true if VanitySlug.check_route_collision(potential_slug)
|
85
|
+
return true if VanitySlug.check_route_collision(potential_slug)
|
86
86
|
|
87
87
|
VanitySlug.classes.any? do |klass|
|
88
|
-
scope = klass.has_vanity_slug_opts[:uniqueness_scope]
|
88
|
+
scope = klass.has_vanity_slug_opts[:uniqueness_scope]
|
89
89
|
conditions = scope ? { scope => send(scope) } : {}
|
90
90
|
klass.exists? conditions.merge({ klass.slug_field => potential_slug })
|
91
91
|
end
|
@@ -96,7 +96,7 @@ ActiveSupport.on_load :active_record do
|
|
96
96
|
class << self
|
97
97
|
attr_accessor :path_scope
|
98
98
|
attr_accessor :classes
|
99
|
-
|
99
|
+
|
100
100
|
def add_class(klass)
|
101
101
|
@classes ||= []
|
102
102
|
@classes << klass unless @classes.include?(klass)
|
@@ -116,14 +116,14 @@ ActiveSupport.on_load :active_record do
|
|
116
116
|
.first
|
117
117
|
end
|
118
118
|
return false unless obj
|
119
|
-
|
119
|
+
|
120
120
|
obj.get_vanity_action + File.extname(path)
|
121
121
|
end
|
122
122
|
|
123
123
|
def check_route_collision(path)
|
124
124
|
if defined?(Rails)
|
125
125
|
begin
|
126
|
-
return true if Rails.application.routes.recognize_path(path)
|
126
|
+
return true if Rails.application.routes.recognize_path(path) || Rails.application.routes.recognize_path(path, method: :post)
|
127
127
|
rescue ActionController::RoutingError
|
128
128
|
false
|
129
129
|
end
|
data/lib/vanity_slug/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'bundler/setup'
|
3
3
|
|
4
|
-
require '
|
5
|
-
|
4
|
+
require 'coveralls'
|
5
|
+
Coveralls.wear!
|
6
6
|
|
7
7
|
require 'active_support/all'
|
8
8
|
require 'vanity_slug'
|
@@ -17,8 +17,8 @@ RSpec.configure do |config|
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def silence
|
20
|
-
return yield if ENV['silence'] == 'false'
|
21
|
-
|
20
|
+
return yield if ENV['silence'] == 'false' || !defined?(silence_stream)
|
21
|
+
|
22
22
|
silence_stream(STDOUT) do
|
23
23
|
yield
|
24
24
|
end
|
data/spec/vanity_slug_spec.rb
CHANGED
@@ -6,7 +6,7 @@ VanitySlug.path_scope = Proc.new{|env|
|
|
6
6
|
}
|
7
7
|
|
8
8
|
class Post < ActiveRecord::Base
|
9
|
-
|
9
|
+
attr_accessor :title, :site
|
10
10
|
|
11
11
|
has_vanity_slug field_to_slug: :title,
|
12
12
|
uniqueness_scope: :site_id
|
@@ -15,16 +15,16 @@ class Post < ActiveRecord::Base
|
|
15
15
|
end
|
16
16
|
|
17
17
|
class Category < ActiveRecord::Base
|
18
|
-
|
18
|
+
attr_accessor :name, :site
|
19
19
|
|
20
|
-
has_vanity_slug action: "/categories/:id/slug",
|
20
|
+
has_vanity_slug action: "/categories/:id/slug",
|
21
21
|
slug_field: :permalink
|
22
22
|
|
23
23
|
belongs_to :site
|
24
24
|
end
|
25
25
|
|
26
26
|
class Site < ActiveRecord::Base
|
27
|
-
|
27
|
+
attr_accessor :domain
|
28
28
|
end
|
29
29
|
|
30
30
|
describe VanitySlug do
|
@@ -91,4 +91,4 @@ describe VanitySlug do
|
|
91
91
|
it { @post_1.should be_valid }
|
92
92
|
it { @post_1.title.should eq new_title }
|
93
93
|
end
|
94
|
-
end
|
94
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vanity_slug
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.5
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Nick Merwin
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2017-04-28 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: root level Vanity Slug for any model
|
15
14
|
email:
|
@@ -18,11 +17,12 @@ executables: []
|
|
18
17
|
extensions: []
|
19
18
|
extra_rdoc_files: []
|
20
19
|
files:
|
21
|
-
- .gitignore
|
20
|
+
- ".gitignore"
|
22
21
|
- Gemfile
|
23
22
|
- LICENSE.txt
|
24
23
|
- README.md
|
25
24
|
- Rakefile
|
25
|
+
- circle.yml
|
26
26
|
- lib/vanity_slug.rb
|
27
27
|
- lib/vanity_slug/active_record.rb
|
28
28
|
- lib/vanity_slug/railtie.rb
|
@@ -34,27 +34,26 @@ files:
|
|
34
34
|
- vanity_slug.gemspec
|
35
35
|
homepage: https://github.com/nickmerwin/vanity_slug
|
36
36
|
licenses: []
|
37
|
+
metadata: {}
|
37
38
|
post_install_message:
|
38
39
|
rdoc_options: []
|
39
40
|
require_paths:
|
40
41
|
- lib
|
41
42
|
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
43
|
requirements:
|
44
|
-
- -
|
44
|
+
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '0'
|
47
47
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
-
none: false
|
49
48
|
requirements:
|
50
|
-
- -
|
49
|
+
- - ">="
|
51
50
|
- !ruby/object:Gem::Version
|
52
51
|
version: '0'
|
53
52
|
requirements: []
|
54
53
|
rubyforge_project:
|
55
|
-
rubygems_version:
|
54
|
+
rubygems_version: 2.5.2
|
56
55
|
signing_key:
|
57
|
-
specification_version:
|
56
|
+
specification_version: 4
|
58
57
|
summary: easily add vanity slugs
|
59
58
|
test_files:
|
60
59
|
- spec/spec_helper.rb
|