parameterize 0.2.0 → 0.3.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.
- data/Rakefile +1 -3
- data/lib/parameterize.rb +20 -10
- data/lib/parameterize/matcher.rb +2 -2
- data/lib/parameterize/version.rb +1 -1
- data/parameterize.gemspec +1 -1
- data/spec/parameterize_spec.rb +45 -15
- data/spec/spec_helper.rb +4 -4
- metadata +40 -15
data/Rakefile
CHANGED
data/lib/parameterize.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'active_record'
|
2
|
-
require 'active_support/core_ext/array/extract_options'
|
3
2
|
require 'active_support/core_ext/string/inflections'
|
4
3
|
|
5
4
|
module Parameterize
|
@@ -7,26 +6,37 @@ module Parameterize
|
|
7
6
|
# with the parameterized version of the given source field.
|
8
7
|
#
|
9
8
|
# @param [Symbol, String] source The field to parameterize
|
10
|
-
def parameterize(source = :title)
|
9
|
+
def parameterize(source = :title, options = {})
|
11
10
|
include InstanceMethods
|
12
11
|
|
13
|
-
class_attribute
|
14
|
-
before_validation :
|
12
|
+
class_attribute :parameterize_config, :instance_writer => false
|
13
|
+
before_validation :parameterize, :if => :parameterize?
|
15
14
|
|
16
|
-
self.
|
15
|
+
self.parameterize_config = {
|
16
|
+
:source => source,
|
17
|
+
:target => :param,
|
18
|
+
:update => false
|
19
|
+
}.merge(options)
|
17
20
|
end
|
18
21
|
|
19
22
|
module InstanceMethods
|
20
|
-
# Overwrite #to_param to return the
|
23
|
+
# Overwrite #to_param to return the parameterize target attribute. Falls
|
24
|
+
# back to the original implementation if for some reason the target
|
25
|
+
# attribute does not exist
|
21
26
|
def to_param
|
22
|
-
|
27
|
+
__send__(parameterize_config[:target]) || super
|
23
28
|
end
|
24
29
|
|
25
30
|
protected
|
26
31
|
|
27
|
-
# Updates the
|
28
|
-
def
|
29
|
-
|
32
|
+
# Updates the target attribute with the parameterized version of the source attribute.
|
33
|
+
def parameterize
|
34
|
+
__send__(:"#{parameterize_config[:target]}=", __send__(parameterize_config[:source]).to_s.parameterize)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns true if the source attribute should be parameterized.
|
38
|
+
def parameterize?
|
39
|
+
parameterize_config[:update] || __send__(parameterize_config[:target]).nil?
|
30
40
|
end
|
31
41
|
end
|
32
42
|
end
|
data/lib/parameterize/matcher.rb
CHANGED
@@ -2,9 +2,9 @@ require 'rspec/matchers'
|
|
2
2
|
|
3
3
|
RSpec::Matchers.define :parameterize do |source|
|
4
4
|
match do |model|
|
5
|
-
model.class.include?(Parameterize::InstanceMethods) && model.class.
|
5
|
+
model.class.include?(Parameterize::InstanceMethods) && model.class.parameterize_config[:source] == source
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
failure_message_for_should do |model|
|
9
9
|
"expected #{model.class} to parameterize #{source}"
|
10
10
|
end
|
data/lib/parameterize/version.rb
CHANGED
data/parameterize.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.add_dependency 'activerecord', '~> 3.0'
|
18
18
|
s.add_dependency 'activesupport', '~> 3.0'
|
19
19
|
s.add_development_dependency 'rake', '>= 0.8.7'
|
20
|
-
s.add_development_dependency 'rspec', '~> 2.
|
20
|
+
s.add_development_dependency 'rspec', '~> 2.11'
|
21
21
|
s.add_development_dependency 'sqlite3', '~> 1.3'
|
22
22
|
|
23
23
|
s.files = `git ls-files`.split("\n")
|
data/spec/parameterize_spec.rb
CHANGED
@@ -1,33 +1,63 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Parameterize do
|
4
|
-
it 'parameterizes the source
|
5
|
-
post = Post.new :
|
4
|
+
it 'parameterizes the source attribute' do
|
5
|
+
post = Post.new title: "Hey Ho, Let's Go!"
|
6
6
|
post.valid?
|
7
|
-
post.param.
|
7
|
+
expect(post.param).to eq('hey-ho-let-s-go')
|
8
8
|
end
|
9
|
-
|
10
|
-
context 'with a
|
11
|
-
it 'parameterizes the source
|
12
|
-
user = User.new :
|
9
|
+
|
10
|
+
context 'with a custom source attribute and target attribute' do
|
11
|
+
it 'parameterizes the source attribute' do
|
12
|
+
user = User.new name: 'Donald E. Knuth'
|
13
13
|
user.valid?
|
14
|
-
user.
|
14
|
+
expect(user.slug).to eq('donald-e-knuth')
|
15
15
|
end
|
16
16
|
end
|
17
|
-
|
18
|
-
|
19
|
-
it '
|
20
|
-
post = Post.new :
|
17
|
+
|
18
|
+
context 'with an existing target attribute' do
|
19
|
+
it 'does not parameterize the source attribute' do
|
20
|
+
post = Post.new title: "Hey Ho, Let's Go!", param: 'hello-world'
|
21
21
|
post.valid?
|
22
|
-
post.
|
22
|
+
expect(post.param).to eq('hello-world')
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'with :update set to true' do
|
26
|
+
it 'parameterizes the source attribute' do
|
27
|
+
user = User.new name: 'Donald E. Knuth', slug: 'john-doe'
|
28
|
+
user.valid?
|
29
|
+
expect(user.slug).to eq('donald-e-knuth')
|
30
|
+
end
|
23
31
|
end
|
24
32
|
end
|
25
|
-
|
33
|
+
|
34
|
+
describe '#to_param' do
|
35
|
+
it 'returns the target attribute' do
|
36
|
+
post = Post.new param: 'hello-world'
|
37
|
+
expect(post.to_param).to eq('hello-world')
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'with a custom target attribute' do
|
41
|
+
it 'returns the custom target attribute' do
|
42
|
+
user = User.new slug: 'john-doe'
|
43
|
+
expect(user.to_param).to eq('john-doe')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'without a param' do
|
48
|
+
it 'returns the id' do
|
49
|
+
post = Post.new
|
50
|
+
post.id = 1
|
51
|
+
expect(post.to_param).to eq('1')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
26
56
|
describe 'matcher' do
|
27
57
|
it 'checks if Post parameterized :title' do
|
28
58
|
Post.new.should parameterize(:title)
|
29
59
|
end
|
30
|
-
|
60
|
+
|
31
61
|
it 'checks if User parameterized :name' do
|
32
62
|
User.new.should parameterize(:name)
|
33
63
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -4,9 +4,9 @@ require 'active_record'
|
|
4
4
|
require 'parameterize'
|
5
5
|
require 'parameterize/matcher'
|
6
6
|
|
7
|
-
ActiveRecord::Base.establish_connection :
|
7
|
+
ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
|
8
8
|
ActiveRecord::Migration.verbose = false
|
9
|
-
ActiveRecord::Schema.define :
|
9
|
+
ActiveRecord::Schema.define version: 1 do
|
10
10
|
create_table :posts do |t|
|
11
11
|
t.string :title
|
12
12
|
t.string :param
|
@@ -14,7 +14,7 @@ ActiveRecord::Schema.define :version => 1 do
|
|
14
14
|
|
15
15
|
create_table :users do |t|
|
16
16
|
t.string :name
|
17
|
-
t.string :
|
17
|
+
t.string :slug
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -23,5 +23,5 @@ class Post < ActiveRecord::Base
|
|
23
23
|
end
|
24
24
|
|
25
25
|
class User < ActiveRecord::Base
|
26
|
-
parameterize :name
|
26
|
+
parameterize :name, target: :slug, update: true
|
27
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parameterize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-08-22 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: activesupport
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '3.0'
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '3.0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: rake
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,21 +53,31 @@ dependencies:
|
|
43
53
|
version: 0.8.7
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.8.7
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: rspec
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ~>
|
53
68
|
- !ruby/object:Gem::Version
|
54
|
-
version: '2.
|
69
|
+
version: '2.11'
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2.11'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: sqlite3
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ~>
|
@@ -65,7 +85,12 @@ dependencies:
|
|
65
85
|
version: '1.3'
|
66
86
|
type: :development
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '1.3'
|
69
94
|
description: It uses ActiveSupport's String#parameterize to create the slug. There
|
70
95
|
are no validations. No slug history. No extra tables or models.
|
71
96
|
email:
|
@@ -102,7 +127,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
102
127
|
version: '0'
|
103
128
|
segments:
|
104
129
|
- 0
|
105
|
-
hash:
|
130
|
+
hash: 1014365171
|
106
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
132
|
none: false
|
108
133
|
requirements:
|
@@ -111,10 +136,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
136
|
version: '0'
|
112
137
|
segments:
|
113
138
|
- 0
|
114
|
-
hash:
|
139
|
+
hash: 1014365171
|
115
140
|
requirements: []
|
116
141
|
rubyforge_project: parameterize
|
117
|
-
rubygems_version: 1.8.
|
142
|
+
rubygems_version: 1.8.23
|
118
143
|
signing_key:
|
119
144
|
specification_version: 3
|
120
145
|
summary: The simplest permalink/slug solution for ActiveRecord >= 3.0
|