simple_slug 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/.travis.yml +4 -0
- data/README.md +17 -2
- data/Rakefile +6 -1
- data/lib/simple_slug/model_addition.rb +23 -6
- data/lib/simple_slug/version.rb +1 -1
- data/simple_slug.gemspec +3 -3
- data/spec/spec_helper.rb +1 -0
- metadata +14 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d858815acb25626bd487c3a08d1550cdf39c3895
|
4
|
+
data.tar.gz: 18a66060a237cb85e5f901566305e6b5e6698dff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b2edc684abb85fa503c0b214488428a4ebd5684cd62a79424e703f486e52b805fe41aa0d44dfa9e7fdde2a215f56d95295d0bee822710b21410b5bb7f9761e1
|
7
|
+
data.tar.gz: 2258496ff4fb76de5a69cd08f5d9dd14036875817eb473f0ac9d84abb35efd146877a42ca5fa62270dfa5da521559ba827c51b2ff06eecb1fa16edc4f5607f10
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# SimpleSlug
|
2
2
|
|
3
|
-
|
3
|
+
[](https://travis-ci.org/leschenko/simple_slug)
|
4
|
+
[](https://gemnasium.com/leschenko/simple_slug)
|
5
|
+
|
6
|
+
Simple friendly url generator for ActiveRecord models with history.
|
4
7
|
|
5
8
|
## Installation
|
6
9
|
|
@@ -34,9 +37,21 @@ class User < ActiveRecord::Base
|
|
34
37
|
end
|
35
38
|
```
|
36
39
|
|
40
|
+
If you want to control when slug is generated, define `should_generate_new_slug?` method:
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
class User < ActiveRecord::Base
|
44
|
+
simple_slug :full_name
|
45
|
+
|
46
|
+
def should_generate_new_slug?
|
47
|
+
true
|
48
|
+
end
|
49
|
+
end
|
50
|
+
```
|
51
|
+
|
37
52
|
## Contributing
|
38
53
|
|
39
|
-
1. Fork it ( http://github.com
|
54
|
+
1. Fork it ( http://github.com/leschenko/simple_slug/fork )
|
40
55
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
41
56
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
42
57
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/Rakefile
CHANGED
@@ -19,7 +19,7 @@ module SimpleSlug
|
|
19
19
|
exclusion: {in: SimpleSlug.excludes},
|
20
20
|
format: {without: SimpleSlug.exclude_regexp}
|
21
21
|
if simple_slug_options[:history]
|
22
|
-
after_save :simple_slug_create_history_slug
|
22
|
+
after_save :simple_slug_reset_unsaved_slug, :simple_slug_create_history_slug
|
23
23
|
after_destroy :simple_slug_cleanup_history
|
24
24
|
include InstanceHistoryMethods
|
25
25
|
end
|
@@ -42,16 +42,16 @@ module SimpleSlug
|
|
42
42
|
|
43
43
|
module InstanceMethods
|
44
44
|
def to_param
|
45
|
-
|
45
|
+
simple_slug_stored_slug.presence || super
|
46
46
|
end
|
47
47
|
|
48
48
|
def should_generate_new_slug?
|
49
|
-
|
49
|
+
simple_slug_get.blank? || simple_slug_options[:history]
|
50
50
|
end
|
51
51
|
|
52
|
-
def simple_slug_generate
|
52
|
+
def simple_slug_generate(force=false)
|
53
53
|
simple_slug = simple_slug_normalize(simple_slug_base)
|
54
|
-
return true if simple_slug == send(simple_slug_options[:slug_column]).to_s.sub(/--\d+\z/, '')
|
54
|
+
return true if !force && simple_slug == send(simple_slug_options[:slug_column]).to_s.sub(/--\d+\z/, '')
|
55
55
|
resolved_simple_slug = simple_slug_resolve(simple_slug)
|
56
56
|
send "#{simple_slug_options[:slug_column]}=", resolved_simple_slug
|
57
57
|
end
|
@@ -96,16 +96,33 @@ module SimpleSlug
|
|
96
96
|
base_scope = base_scope.where('sluggable_id != ?', id) if persisted?
|
97
97
|
base_scope.exists?
|
98
98
|
end
|
99
|
+
|
100
|
+
def simple_slug_set(value)
|
101
|
+
send "#{simple_slug_options[:slug_column]}=", value
|
102
|
+
end
|
103
|
+
|
104
|
+
def simple_slug_get
|
105
|
+
send simple_slug_options[:slug_column]
|
106
|
+
end
|
107
|
+
|
108
|
+
def simple_slug_stored_slug
|
109
|
+
send("#{simple_slug_options[:slug_column]}_was")
|
110
|
+
end
|
99
111
|
end
|
100
112
|
|
101
113
|
module InstanceHistoryMethods
|
114
|
+
def simple_slug_reset_unsaved_slug
|
115
|
+
return true if errors.blank?
|
116
|
+
simple_slug_set simple_slug_stored_slug
|
117
|
+
end
|
118
|
+
|
102
119
|
def simple_slug_cleanup_history
|
103
120
|
::SimpleSlug::HistorySlug.where(sluggable_type: self.class.name, sluggable_id: id).delete_all
|
104
121
|
end
|
105
122
|
|
106
123
|
def simple_slug_create_history_slug
|
107
124
|
return true unless slug_changed?
|
108
|
-
::SimpleSlug::HistorySlug.where(sluggable_type: self.class.name, sluggable_id: id, slug:
|
125
|
+
::SimpleSlug::HistorySlug.where(sluggable_type: self.class.name, sluggable_id: id, slug: simple_slug_get).first_or_create
|
109
126
|
end
|
110
127
|
end
|
111
128
|
|
data/lib/simple_slug/version.rb
CHANGED
data/simple_slug.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = SimpleSlug::VERSION
|
9
9
|
spec.authors = ['Alex Leschenko']
|
10
10
|
spec.email = ['leschenko.al@gmail.com']
|
11
|
-
spec.summary = %q{
|
12
|
-
spec.description = %q{
|
11
|
+
spec.summary = %q{Friendly url generator with history.}
|
12
|
+
spec.description = %q{Simple friendly url generator for ActiveRecord with history."}
|
13
13
|
spec.homepage = 'https://github.com/leschenko/simple_slug'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_dependency 'activerecord', '
|
21
|
+
spec.add_dependency 'activerecord', '>= 4.0.0', '< 5.0'
|
22
22
|
spec.add_dependency 'i18n', '~> 0.6.0'
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler', '~> 1.5'
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_slug
|
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
|
- Alex Leschenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-29 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.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 4.0.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: i18n
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,7 +86,7 @@ dependencies:
|
|
80
86
|
- - ">="
|
81
87
|
- !ruby/object:Gem::Version
|
82
88
|
version: '0'
|
83
|
-
description:
|
89
|
+
description: Simple friendly url generator for ActiveRecord with history."
|
84
90
|
email:
|
85
91
|
- leschenko.al@gmail.com
|
86
92
|
executables: []
|
@@ -88,6 +94,7 @@ extensions: []
|
|
88
94
|
extra_rdoc_files: []
|
89
95
|
files:
|
90
96
|
- ".gitignore"
|
97
|
+
- ".travis.yml"
|
91
98
|
- Gemfile
|
92
99
|
- LICENSE.txt
|
93
100
|
- README.md
|
@@ -123,10 +130,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
130
|
version: '0'
|
124
131
|
requirements: []
|
125
132
|
rubyforge_project:
|
126
|
-
rubygems_version: 2.2.
|
133
|
+
rubygems_version: 2.2.2
|
127
134
|
signing_key:
|
128
135
|
specification_version: 4
|
129
|
-
summary:
|
136
|
+
summary: Friendly url generator with history.
|
130
137
|
test_files:
|
131
138
|
- spec/simple_slug/base_spec.rb
|
132
139
|
- spec/simple_slug/history_spec.rb
|