sluggi 0.0.1 → 0.1.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: b4eacb5e7a6e4854fe19afd19c33334713eec8fd
4
- data.tar.gz: 2947d37f4a2e6bee1e7d78c266779ee3dcb6f7f9
3
+ metadata.gz: 4e34bbe2f4b5982b3866ede14c2df9c616cd2e96
4
+ data.tar.gz: 61c5635cd1e788d9d9acadb875abeb0a7a4ab2fd
5
5
  SHA512:
6
- metadata.gz: 462925b7ad95990ad73e6628f02ee22fe456598ceb6078e72992a3fd66f30c045efab0b2ad2b8b3aa58af00aa9ee8defeef875acf09035ceeacd33a42effc1cf
7
- data.tar.gz: 026e843376f90f95a87d724bdbe56158e6906c1671aed4d153e8106c585d2cb627b6381265b79743d2234c217ed1a7b576820afedb94f070e4d31e2d086b1dce
6
+ metadata.gz: 086b5ecf2710ebf4ed4679b26611e8ba4e500047a184341a7ff4e5658f61f12ebd09d149507f164f837b74542f28a7419c787c04ee2a3a7175f03f593d02ca78
7
+ data.tar.gz: 0052170046dc4116492555ab5f0a9d2760637b5123e9ab809f6a8d883224b00a73e79f0c3942fade85a7b19ea501e7ba8eaadbd200098462d882d43f03511e74
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ .ruby-version
1
2
  Gemfile.lock
2
3
  coverage
3
4
  pkg
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.2
4
+ - 2.0.0
5
+ - 1.9.3
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Sluggi
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/sluggi.png)](http://badge.fury.io/rb/sluggi)
3
+ [![Gem Version](http://img.shields.io/gem/v/sluggi.svg)](http://rubygems.org/gems/sluggi)
4
+ [![Build Status](http://img.shields.io/travis/neighborland/sluggi.svg)](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)
@@ -9,9 +9,11 @@ module Sluggi
9
9
 
10
10
  module ClassMethods
11
11
  def find_slug!(slug)
12
- where(slug: slug).first ||
13
- find_slugs(slug).first.try(:sluggable) ||
14
- raise(ActiveRecord::RecordNotFound)
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
@@ -8,7 +8,7 @@ module Sluggi
8
8
 
9
9
  class << self
10
10
  def find_type(slug, sluggable_type)
11
- where(slug: slug).where(sluggable_type: sluggable_type).order(id: :desc)
11
+ where(slug: slug, sluggable_type: sluggable_type).order(id: :desc)
12
12
  end
13
13
  end
14
14
 
@@ -1,3 +1,3 @@
1
1
  module Sluggi
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
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", ">= 4.0"
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", ">= 4.0"
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.1
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-01-08 00:00:00.000000000 Z
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
- - ".ruby-version"
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.1
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