effective_slugs 0.1 → 1.0.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 +7 -0
- data/MIT-LICENSE +1 -1
- data/README.md +17 -4
- data/app/models/concerns/acts_as_sluggable.rb +2 -61
- data/lib/effective_slugs/version.rb +1 -1
- metadata +23 -100
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +0 -6
- data/spec/dummy/log/test.log +0 -2
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3dfb5564879f29db8bf15459160f2e29a4307845
|
4
|
+
data.tar.gz: 4a995a792f311a2aa13675bcf71a364f21433272
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a263b6aa15b529a7da2dbe4cc69c3e17b4f8f1113efd4bb34cced03322d717b40b809afc2721bdb7f4a2fc40f8461aefbe2458b53adda7dc9012fca92e2d11a2
|
7
|
+
data.tar.gz: 29f798fe97ebcb6ccbff2a05eab7fb75f3059465abf96e63a7b741e7525812639b20699c7661cfb4d86b4820d92a8a3b200bdb774d6d10cb68370fbfd48fc96d
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Effective Slugs
|
2
2
|
|
3
|
-
|
3
|
+
Automatically generate URL-appropriate slugs when saving a record. Rails 3 only.
|
4
4
|
|
5
5
|
Also overrides ActiveRecord .find() methods to accept the slug, or an id as the parameter.
|
6
6
|
|
@@ -109,15 +109,16 @@ Post.where(:slug => 'my-first-post').first
|
|
109
109
|
|
110
110
|
## License
|
111
111
|
|
112
|
-
MIT License. Copyright Code and Effect Inc.
|
112
|
+
MIT License. Copyright [Code and Effect Inc.](http://www.codeandeffect.com/)
|
113
|
+
|
114
|
+
Code and Effect is the product arm of [AgileStyle](http://www.agilestyle.com/), an Edmonton-based shop that specializes in building custom web applications with Ruby on Rails.
|
113
115
|
|
114
|
-
You are not granted rights or licenses to the trademarks of Code and Effect
|
115
116
|
|
116
117
|
## Credits
|
117
118
|
|
118
119
|
Some of the code in this gem was inspired by an old version of FriendlyId (https://github.com/FriendlyId/friendly_id)
|
119
120
|
|
120
|
-
|
121
|
+
## Testing
|
121
122
|
|
122
123
|
The test suite for this gem is unfortunately not yet complete.
|
123
124
|
|
@@ -126,3 +127,15 @@ Run tests by:
|
|
126
127
|
```ruby
|
127
128
|
rake spec
|
128
129
|
```
|
130
|
+
|
131
|
+
|
132
|
+
## Contributing
|
133
|
+
|
134
|
+
1. Fork it
|
135
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
136
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
137
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
138
|
+
5. Bonus points for test coverage
|
139
|
+
6. Create new Pull Request
|
140
|
+
|
141
|
+
|
@@ -58,10 +58,9 @@ module ActsAsSluggable
|
|
58
58
|
included do
|
59
59
|
before_validation :set_slug, :if => proc { should_generate_new_slug? }
|
60
60
|
|
61
|
-
#attr_accessible :slug
|
62
61
|
validates_presence_of :slug
|
63
62
|
validates_exclusion_of :slug, :in => EffectiveSlugs.all_excluded_slugs
|
64
|
-
validates_format_of :slug, :with =>
|
63
|
+
validates_format_of :slug, :with => /\A[a-zA-Z0-9_-]*\z/, :message => 'only _ and - symbols allowed'
|
65
64
|
|
66
65
|
if @acts_as_sluggable_opts[:validation_scope]
|
67
66
|
validates_uniqueness_of :slug, :scope => @acts_as_sluggable_opts[:validation_scope]
|
@@ -69,64 +68,6 @@ module ActsAsSluggable
|
|
69
68
|
validates_uniqueness_of :slug
|
70
69
|
end
|
71
70
|
|
72
|
-
class_eval do
|
73
|
-
class << self
|
74
|
-
alias relation_without_sluggable relation
|
75
|
-
end
|
76
|
-
|
77
|
-
def self.relation
|
78
|
-
@relation = nil unless @relation.class <= relation_class
|
79
|
-
@relation ||= relation_class.new(self, arel_table)
|
80
|
-
end
|
81
|
-
|
82
|
-
# Gets an anonymous subclass of the model's relation class.
|
83
|
-
# This should increase long term compatibility with any gems that also override finder methods
|
84
|
-
# The other idea would be to just return Class.new(ActiveRecord::Relation)
|
85
|
-
|
86
|
-
def self.relation_class
|
87
|
-
@relation_class ||= Class.new(relation_without_sluggable.class) do
|
88
|
-
alias_method :find_one_without_sluggable, :find_one
|
89
|
-
alias_method :exists_without_sluggable?, :exists?
|
90
|
-
include ActsAsSluggable::FinderMethods
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
module ClassMethods
|
97
|
-
end
|
98
|
-
|
99
|
-
# We inject these methods into the ActsAsSluggable.relation class, as below
|
100
|
-
# Allows us to use sluggable id's identically to numeric ids in Finders
|
101
|
-
# And lets all the pages_path() type stuff work
|
102
|
-
#
|
103
|
-
# This makes all these the same:
|
104
|
-
# Post.find(3) == Post.find('post-slug') == Post.find(post)
|
105
|
-
module FinderMethods
|
106
|
-
protected
|
107
|
-
|
108
|
-
# Find one can be passed 4, "my-slug" or <Object>
|
109
|
-
def find_one(id)
|
110
|
-
begin
|
111
|
-
if id.respond_to?(:slug)
|
112
|
-
where(:slug => id.slug).first
|
113
|
-
elsif id.kind_of?(String)
|
114
|
-
where(:slug => id).first
|
115
|
-
end || super
|
116
|
-
rescue => e
|
117
|
-
super
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
def exists?(id = false)
|
122
|
-
if id.respond_to?(:slug)
|
123
|
-
super :slug => id.slug
|
124
|
-
elsif id.kind_of?(String)
|
125
|
-
super :slug => id
|
126
|
-
else
|
127
|
-
super
|
128
|
-
end
|
129
|
-
end
|
130
71
|
end
|
131
72
|
|
132
73
|
def set_slug
|
@@ -160,7 +101,7 @@ module ActsAsSluggable
|
|
160
101
|
end
|
161
102
|
|
162
103
|
def to_param
|
163
|
-
slug.present? ? slug_was :
|
104
|
+
(slug.present? rescue false) ? "#{id}-#{slug_was}" : super
|
164
105
|
end
|
165
106
|
|
166
107
|
end
|
metadata
CHANGED
@@ -1,121 +1,56 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_slugs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Code and Effect
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-12-08 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rails
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
19
|
+
version: '3.2'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
30
|
-
-
|
31
|
-
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ! '>='
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '0'
|
38
|
-
type: :development
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: factory_girl_rails
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ! '>='
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: psych
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ! '>='
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
|
-
type: :development
|
71
|
-
prerelease: false
|
72
|
-
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: sqlite3
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
|
-
requirements:
|
83
|
-
- - ! '>='
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: '0'
|
86
|
-
type: :development
|
87
|
-
prerelease: false
|
88
|
-
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
94
|
-
description: Generates a URL-appropriate slug, as required, when saving a record.
|
95
|
-
Also overrides ActiveRecord .find() methods to accept the slug, or an id as the
|
96
|
-
parameter.
|
26
|
+
version: '3.2'
|
27
|
+
description: Automatically generate URL-appropriate slugs when saving a record. Rails
|
28
|
+
3 only.
|
97
29
|
email:
|
98
30
|
- info@codeandeffect.com
|
99
31
|
executables: []
|
100
32
|
extensions: []
|
101
33
|
extra_rdoc_files: []
|
102
34
|
files:
|
35
|
+
- MIT-LICENSE
|
36
|
+
- README.md
|
37
|
+
- Rakefile
|
103
38
|
- app/models/concerns/acts_as_sluggable.rb
|
39
|
+
- lib/effective_slugs.rb
|
104
40
|
- lib/effective_slugs/engine.rb
|
105
41
|
- lib/effective_slugs/version.rb
|
106
|
-
- lib/effective_slugs.rb
|
107
42
|
- lib/generators/effective_slugs/install_generator.rb
|
108
|
-
- lib/generators/templates/effective_slugs.rb
|
109
43
|
- lib/generators/templates/README
|
44
|
+
- lib/generators/templates/effective_slugs.rb
|
110
45
|
- lib/tasks/effective_slugs_tasks.rake
|
111
|
-
-
|
112
|
-
- Rakefile
|
113
|
-
- README.md
|
46
|
+
- spec/dummy/README.rdoc
|
47
|
+
- spec/dummy/Rakefile
|
114
48
|
- spec/dummy/app/assets/javascripts/application.js
|
115
49
|
- spec/dummy/app/assets/stylesheets/application.css
|
116
50
|
- spec/dummy/app/controllers/application_controller.rb
|
117
51
|
- spec/dummy/app/helpers/application_helper.rb
|
118
52
|
- spec/dummy/app/views/layouts/application.html.erb
|
53
|
+
- spec/dummy/config.ru
|
119
54
|
- spec/dummy/config/application.rb
|
120
55
|
- spec/dummy/config/boot.rb
|
121
56
|
- spec/dummy/config/database.yml
|
@@ -131,46 +66,39 @@ files:
|
|
131
66
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
132
67
|
- spec/dummy/config/locales/en.yml
|
133
68
|
- spec/dummy/config/routes.rb
|
134
|
-
- spec/dummy/config.ru
|
135
|
-
- spec/dummy/db/development.sqlite3
|
136
69
|
- spec/dummy/db/schema.rb
|
137
|
-
- spec/dummy/db/test.sqlite3
|
138
|
-
- spec/dummy/log/development.log
|
139
|
-
- spec/dummy/log/test.log
|
140
70
|
- spec/dummy/public/404.html
|
141
71
|
- spec/dummy/public/422.html
|
142
72
|
- spec/dummy/public/500.html
|
143
73
|
- spec/dummy/public/favicon.ico
|
144
|
-
- spec/dummy/Rakefile
|
145
|
-
- spec/dummy/README.rdoc
|
146
74
|
- spec/dummy/script/rails
|
147
75
|
- spec/effective_slugs_spec.rb
|
148
76
|
- spec/spec_helper.rb
|
149
77
|
- spec/support/factories.rb
|
150
78
|
homepage: https://github.com/code-and-effect/effective_slugs
|
151
79
|
licenses: []
|
80
|
+
metadata: {}
|
152
81
|
post_install_message:
|
153
82
|
rdoc_options: []
|
154
83
|
require_paths:
|
155
84
|
- lib
|
156
85
|
required_ruby_version: !ruby/object:Gem::Requirement
|
157
|
-
none: false
|
158
86
|
requirements:
|
159
|
-
- -
|
87
|
+
- - ">="
|
160
88
|
- !ruby/object:Gem::Version
|
161
89
|
version: '0'
|
162
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
|
-
none: false
|
164
91
|
requirements:
|
165
|
-
- -
|
92
|
+
- - ">="
|
166
93
|
- !ruby/object:Gem::Version
|
167
94
|
version: '0'
|
168
95
|
requirements: []
|
169
96
|
rubyforge_project:
|
170
|
-
rubygems_version:
|
97
|
+
rubygems_version: 2.4.3
|
171
98
|
signing_key:
|
172
|
-
specification_version:
|
173
|
-
summary:
|
99
|
+
specification_version: 4
|
100
|
+
summary: Automatically generate URL-appropriate slugs when saving a record. Rails
|
101
|
+
3 only.
|
174
102
|
test_files:
|
175
103
|
- spec/dummy/app/assets/javascripts/application.js
|
176
104
|
- spec/dummy/app/assets/stylesheets/application.css
|
@@ -193,11 +121,7 @@ test_files:
|
|
193
121
|
- spec/dummy/config/locales/en.yml
|
194
122
|
- spec/dummy/config/routes.rb
|
195
123
|
- spec/dummy/config.ru
|
196
|
-
- spec/dummy/db/development.sqlite3
|
197
124
|
- spec/dummy/db/schema.rb
|
198
|
-
- spec/dummy/db/test.sqlite3
|
199
|
-
- spec/dummy/log/development.log
|
200
|
-
- spec/dummy/log/test.log
|
201
125
|
- spec/dummy/public/404.html
|
202
126
|
- spec/dummy/public/422.html
|
203
127
|
- spec/dummy/public/500.html
|
@@ -208,4 +132,3 @@ test_files:
|
|
208
132
|
- spec/effective_slugs_spec.rb
|
209
133
|
- spec/spec_helper.rb
|
210
134
|
- spec/support/factories.rb
|
211
|
-
has_rdoc:
|
Binary file
|
data/spec/dummy/db/test.sqlite3
DELETED
Binary file
|
@@ -1,6 +0,0 @@
|
|
1
|
-
Connecting to database specified by database.yml
|
2
|
-
[1m[36m (1.6ms)[0m [1mSELECT "schema_migrations"."version" FROM "schema_migrations" [0m
|
3
|
-
[1m[35m (0.1ms)[0m SELECT version FROM "schema_migrations"
|
4
|
-
Connecting to database specified by database.yml
|
5
|
-
[1m[36m (1.6ms)[0m [1mSELECT "schema_migrations"."version" FROM "schema_migrations" [0m
|
6
|
-
[1m[35m (0.1ms)[0m SELECT version FROM "schema_migrations"
|
data/spec/dummy/log/test.log
DELETED