sluggi 0.0.1 → 0.1.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/.gitignore +1 -0
- data/.travis.yml +5 -0
- data/README.md +16 -7
- data/lib/sluggi/history.rb +5 -3
- data/lib/sluggi/slug.rb +1 -1
- data/lib/sluggi/version.rb +1 -1
- data/sluggi.gemspec +2 -3
- data/test/history_test.rb +29 -0
- data/test/test_helper.rb +7 -0
- metadata +9 -22
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e34bbe2f4b5982b3866ede14c2df9c616cd2e96
|
4
|
+
data.tar.gz: 61c5635cd1e788d9d9acadb875abeb0a7a4ab2fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 086b5ecf2710ebf4ed4679b26611e8ba4e500047a184341a7ff4e5658f61f12ebd09d149507f164f837b74542f28a7419c787c04ee2a3a7175f03f593d02ca78
|
7
|
+
data.tar.gz: 0052170046dc4116492555ab5f0a9d2760637b5123e9ab809f6a8d883224b00a73e79f0c3942fade85a7b19ea501e7ba8eaadbd200098462d882d43f03511e74
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Sluggi
|
2
2
|
|
3
|
-
[](http://rubygems.org/gems/sluggi)
|
4
|
+
[](https://travis-ci.org/neighborland/sluggi)
|
4
5
|
|
5
6
|
Sluggi is a simple [friendly_id](https://github.com/norman/friendly_id)-inspired slugging library for ActiveRecord models.
|
6
7
|
|
@@ -46,6 +47,8 @@ Sluggi is Magic Free(tm). Each slugged model must:
|
|
46
47
|
|
47
48
|
### Simple Slugged Model
|
48
49
|
|
50
|
+
Specify the slug value by defining `#slug_value` and `#slug_value_changed?`.
|
51
|
+
|
49
52
|
```ruby
|
50
53
|
class Cat < ActiveRecord::Base
|
51
54
|
include Sluggi::Slugged
|
@@ -77,6 +80,9 @@ Cat.find_by_slug('tuxedo-stan')
|
|
77
80
|
|
78
81
|
### Model with Slugged History
|
79
82
|
|
83
|
+
To save slug history, include `Sluggi::History`. You get a `slugs` association. You can search for any
|
84
|
+
slug in the history using `.find_slug!`.
|
85
|
+
|
80
86
|
```ruby
|
81
87
|
class Cat < ActiveRecord::Base
|
82
88
|
include Sluggi::Slugged
|
@@ -121,6 +127,9 @@ Cat.find_by_slug('tuxedo-stan')
|
|
121
127
|
|
122
128
|
### Model with Slug Candidates
|
123
129
|
|
130
|
+
Override `#slug_candidates` to define cascading candidate values for slugs. This is useful to avoid
|
131
|
+
uniqueness conflicts.
|
132
|
+
|
124
133
|
```ruby
|
125
134
|
class Cat < ActiveRecord::Base
|
126
135
|
include Sluggi::Slugged
|
@@ -155,9 +164,9 @@ cat_2.id
|
|
155
164
|
|
156
165
|
## Alternatives
|
157
166
|
|
158
|
-
[override ActiveRecord#to_param](http://guides.rubyonrails.org/active_support_core_extensions.html#to-param)
|
159
|
-
[use ActiveRecord.to_param](https://github.com/rails/rails/pull/12891)
|
160
|
-
[friendly_id](https://github.com/norman/friendly_id)
|
161
|
-
[slug](https://github.com/bkoski/slug)
|
162
|
-
[slugged](https://github.com/Sutto/slugged)
|
163
|
-
[others](https://rubygems.org/search?utf8=%E2%9C%93&query=slug)
|
167
|
+
* [override ActiveRecord#to_param](http://guides.rubyonrails.org/active_support_core_extensions.html#to-param)
|
168
|
+
* [use ActiveRecord.to_param](https://github.com/rails/rails/pull/12891)
|
169
|
+
* [friendly_id](https://github.com/norman/friendly_id)
|
170
|
+
* [slug](https://github.com/bkoski/slug)
|
171
|
+
* [slugged](https://github.com/Sutto/slugged)
|
172
|
+
* [others](https://rubygems.org/search?utf8=%E2%9C%93&query=slug)
|
data/lib/sluggi/history.rb
CHANGED
@@ -9,9 +9,11 @@ module Sluggi
|
|
9
9
|
|
10
10
|
module ClassMethods
|
11
11
|
def find_slug!(slug)
|
12
|
-
where(slug: slug).first ||
|
13
|
-
|
14
|
-
raise
|
12
|
+
object = where(slug: slug).first || find_slugs(slug).first.try(:sluggable)
|
13
|
+
unless object.is_a?(self)
|
14
|
+
raise ActiveRecord::RecordNotFound, "Couldn't find #{self.name} with 'slug'='#{slug}'"
|
15
|
+
end
|
16
|
+
object
|
15
17
|
end
|
16
18
|
|
17
19
|
def slug_exists?(slug)
|
data/lib/sluggi/slug.rb
CHANGED
data/lib/sluggi/version.rb
CHANGED
data/sluggi.gemspec
CHANGED
@@ -20,11 +20,10 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.required_ruby_version = ">= 1.9.3"
|
22
22
|
|
23
|
-
spec.add_dependency "activerecord", "
|
23
|
+
spec.add_dependency "activerecord", "~> 4.0"
|
24
24
|
|
25
25
|
spec.add_development_dependency "bundler", "~> 1.5"
|
26
26
|
spec.add_development_dependency "rake", "~> 10.1"
|
27
|
-
spec.add_development_dependency "minitest", "~> 4.7"
|
28
27
|
spec.add_development_dependency "sqlite3", "~> 1.3"
|
29
|
-
spec.add_development_dependency "rails", "
|
28
|
+
spec.add_development_dependency "rails", "~> 4.0"
|
30
29
|
end
|
data/test/history_test.rb
CHANGED
@@ -14,6 +14,25 @@ class HistoryTest < MiniTest::Spec
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
class ::Dog < ActiveRecord::Base
|
18
|
+
include Sluggi::Slugged
|
19
|
+
include Sluggi::History
|
20
|
+
|
21
|
+
def slug_value
|
22
|
+
name
|
23
|
+
end
|
24
|
+
|
25
|
+
def slug_value_changed?
|
26
|
+
name_changed?
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class ::BigDog < ::Dog
|
31
|
+
end
|
32
|
+
|
33
|
+
class ::LittleDog < ::Dog
|
34
|
+
end
|
35
|
+
|
17
36
|
before do
|
18
37
|
Cat.delete_all
|
19
38
|
Sluggi::Slug.delete_all
|
@@ -38,6 +57,16 @@ class HistoryTest < MiniTest::Spec
|
|
38
57
|
Cat.find_slug! 'garfield'
|
39
58
|
end
|
40
59
|
end
|
60
|
+
|
61
|
+
it "finds STI classes" do
|
62
|
+
big_dog = BigDog.create(name: 'Snoop')
|
63
|
+
assert_equal big_dog, Dog.find_slug!('snoop')
|
64
|
+
assert_equal big_dog, BigDog.find_slug!('snoop')
|
65
|
+
error = assert_raises(ActiveRecord::RecordNotFound) do
|
66
|
+
LittleDog.find_slug!('snoop')
|
67
|
+
end
|
68
|
+
assert_equal "Couldn't find LittleDog with 'slug'='snoop'", error.message
|
69
|
+
end
|
41
70
|
end
|
42
71
|
|
43
72
|
describe ".slug_exists?" do
|
data/test/test_helper.rb
CHANGED
@@ -29,6 +29,13 @@ unless ActiveRecord::Base.connection.tables.include?('cats')
|
|
29
29
|
t.string :sluggable_type
|
30
30
|
t.datetime :created_at
|
31
31
|
end
|
32
|
+
|
33
|
+
create_table :dogs do |t|
|
34
|
+
t.datetime :created_at
|
35
|
+
t.string :type
|
36
|
+
t.string :name
|
37
|
+
t.string :slug
|
38
|
+
end
|
32
39
|
end
|
33
40
|
end
|
34
41
|
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sluggi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tee Parham
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '4.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '4.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -52,20 +52,6 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '10.1'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: minitest
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '4.7'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '4.7'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: sqlite3
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,14 +70,14 @@ dependencies:
|
|
84
70
|
name: rails
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
|
-
- - "
|
73
|
+
- - "~>"
|
88
74
|
- !ruby/object:Gem::Version
|
89
75
|
version: '4.0'
|
90
76
|
type: :development
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
|
-
- - "
|
80
|
+
- - "~>"
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '4.0'
|
97
83
|
description: A Rails slug generator inspired by friendly_id
|
@@ -102,7 +88,7 @@ extensions: []
|
|
102
88
|
extra_rdoc_files: []
|
103
89
|
files:
|
104
90
|
- ".gitignore"
|
105
|
-
- ".
|
91
|
+
- ".travis.yml"
|
106
92
|
- Gemfile
|
107
93
|
- LICENSE.txt
|
108
94
|
- README.md
|
@@ -140,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
126
|
version: '0'
|
141
127
|
requirements: []
|
142
128
|
rubyforge_project:
|
143
|
-
rubygems_version: 2.2.
|
129
|
+
rubygems_version: 2.2.2
|
144
130
|
signing_key:
|
145
131
|
specification_version: 4
|
146
132
|
summary: Rails Slug Generator
|
@@ -150,3 +136,4 @@ test_files:
|
|
150
136
|
- test/slug_test.rb
|
151
137
|
- test/slugged_test.rb
|
152
138
|
- test/test_helper.rb
|
139
|
+
has_rdoc:
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
ruby-2.1.0
|