url_keyed_object 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 +0 -19
- data/VERSION +1 -1
- data/lib/url_keyed_object.rb +5 -0
- data/lib/url_keyed_object/active_record.rb +39 -43
- data/lib/url_keyed_object/railtie.rb +10 -0
- data/rails/init.rb +5 -0
- metadata +49 -36
- data/.document +0 -5
- data/.gitignore +0 -22
- data/features/fixtures/.gitignore +0 -1
data/Rakefile
CHANGED
@@ -1,25 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
3
|
|
4
|
-
begin
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "url_keyed_object"
|
8
|
-
gem.summary = %Q{Making it easy to work with objects with URL keys}
|
9
|
-
gem.description = %Q{Making it easy to work with Rails objects which use a URL key in their URL instead of their database ID.}
|
10
|
-
gem.email = "matt@reprocessed.org"
|
11
|
-
gem.homepage = "http://github.com/fidothe/url_keyed_object"
|
12
|
-
gem.authors = ["Matt Patterson"]
|
13
|
-
gem.add_development_dependency "rspec", ">= 1.2.9"
|
14
|
-
gem.add_development_dependency "cucumber", ">= 0.5"
|
15
|
-
gem.add_development_dependency "activerecord", ">= 2.3"
|
16
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
17
|
-
end
|
18
|
-
Jeweler::GemcutterTasks.new
|
19
|
-
rescue LoadError
|
20
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
21
|
-
end
|
22
|
-
|
23
4
|
require 'spec/rake/spectask'
|
24
5
|
Spec::Rake::SpecTask.new(:spec) do |spec|
|
25
6
|
spec.libs << 'lib' << 'spec'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lib/url_keyed_object.rb
CHANGED
@@ -2,13 +2,27 @@ require 'url_keyed_object'
|
|
2
2
|
require 'active_record'
|
3
3
|
|
4
4
|
module UrlKeyedObject
|
5
|
+
module ActiveRecordHook
|
6
|
+
def acts_as_url_keyed(opts = {})
|
7
|
+
attr_writer :url_key_length
|
8
|
+
|
9
|
+
@url_key_column = opts[:url_key_column] if opts.has_key?(:url_key_column)
|
10
|
+
@url_key_length = opts[:url_key_length] if opts.has_key?(:url_key_length)
|
11
|
+
|
12
|
+
send :include, UrlKeyedObject::ActiveRecord
|
13
|
+
|
14
|
+
before_create :generate_valid_url_key
|
15
|
+
|
16
|
+
define_method("#{url_key_column}=") { |value| logger.warn("Attempt to set ##{url_key_column}!"); nil }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
5
20
|
module ActiveRecord
|
6
21
|
# def url_key=(value)
|
7
22
|
# logger.warn('Attempt to set #url_key!')
|
8
23
|
# nil
|
9
24
|
# end
|
10
25
|
|
11
|
-
|
12
26
|
module ClassMethods
|
13
27
|
def url_key_column
|
14
28
|
@url_key_column ||= :url_key
|
@@ -17,51 +31,33 @@ module UrlKeyedObject
|
|
17
31
|
def url_key_length
|
18
32
|
@url_key_length ||= 5
|
19
33
|
end
|
20
|
-
|
21
|
-
def acts_as_url_keyed(opts = {})
|
22
|
-
attr_writer :url_key_length
|
23
|
-
|
24
|
-
@url_key_column = opts[:url_key_column] if opts.has_key?(:url_key_column)
|
25
|
-
@url_key_length = opts[:url_key_length] if opts.has_key?(:url_key_length)
|
26
|
-
|
27
|
-
before_create :generate_valid_url_key
|
28
|
-
|
29
|
-
include InstanceMethods
|
30
|
-
|
31
|
-
define_method("#{url_key_column}=") { |value| logger.warn("Attempt to set ##{url_key_column}!"); nil }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
module InstanceMethods
|
36
|
-
protected
|
37
|
-
|
38
|
-
def generate_valid_url_key
|
39
|
-
new_url_key = UrlKeyedObject.generate_checked_url_key(url_key_length) { |value| self.valid_url_key?(value) }
|
40
|
-
write_attribute(url_key_column, new_url_key)
|
41
|
-
end
|
42
|
-
|
43
|
-
def valid_url_key?(url_key)
|
44
|
-
self.class.send("find_by_#{url_key_column}", url_key).nil?
|
45
|
-
end
|
46
|
-
|
47
|
-
def url_key_column
|
48
|
-
self.class.url_key_column
|
49
|
-
end
|
50
|
-
|
51
|
-
def url_key_length
|
52
|
-
self.class.url_key_length
|
53
|
-
end
|
54
|
-
|
55
|
-
|
56
|
-
def to_param
|
57
|
-
send url_key_column
|
58
|
-
end
|
59
34
|
end
|
60
35
|
|
61
36
|
def self.included(model_class)
|
62
37
|
model_class.extend ClassMethods
|
63
38
|
end
|
39
|
+
|
40
|
+
def to_param
|
41
|
+
send url_key_column
|
42
|
+
end
|
43
|
+
|
44
|
+
protected
|
45
|
+
|
46
|
+
def generate_valid_url_key
|
47
|
+
new_url_key = UrlKeyedObject.generate_checked_url_key(url_key_length) { |value| self.valid_url_key?(value) }
|
48
|
+
write_attribute(url_key_column, new_url_key)
|
49
|
+
end
|
50
|
+
|
51
|
+
def valid_url_key?(url_key)
|
52
|
+
self.class.send("find_by_#{url_key_column}", url_key).nil?
|
53
|
+
end
|
54
|
+
|
55
|
+
def url_key_column
|
56
|
+
self.class.url_key_column
|
57
|
+
end
|
58
|
+
|
59
|
+
def url_key_length
|
60
|
+
self.class.url_key_length
|
61
|
+
end
|
64
62
|
end
|
65
|
-
end
|
66
|
-
|
67
|
-
ActiveRecord::Base.send :include, UrlKeyedObject::ActiveRecord
|
63
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'rails'
|
2
|
+
require 'url_keyed_object/active_record'
|
3
|
+
|
4
|
+
module UrlKeyedObject
|
5
|
+
class Railtie < Rails::Railtie
|
6
|
+
initializer 'url_keyed_object.active_record_hook', :after => :preload_frameworks do
|
7
|
+
::ActiveRecord::Base.extend UrlKeyedObject::ActiveRecordHook
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
data/rails/init.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: url_keyed_object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 0.3.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Matt Patterson
|
@@ -9,39 +14,49 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-
|
17
|
+
date: 2010-06-11 00:00:00 +01:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: rspec
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 2
|
30
|
+
- 9
|
23
31
|
version: 1.2.9
|
24
|
-
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
25
34
|
- !ruby/object:Gem::Dependency
|
26
35
|
name: cucumber
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
38
|
requirements:
|
31
39
|
- - ">="
|
32
40
|
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
- 5
|
33
44
|
version: "0.5"
|
34
|
-
|
45
|
+
type: :development
|
46
|
+
version_requirements: *id002
|
35
47
|
- !ruby/object:Gem::Dependency
|
36
48
|
name: activerecord
|
37
|
-
|
38
|
-
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
49
|
+
prerelease: false
|
50
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
40
51
|
requirements:
|
41
52
|
- - ">="
|
42
53
|
- !ruby/object:Gem::Version
|
54
|
+
segments:
|
55
|
+
- 2
|
56
|
+
- 3
|
43
57
|
version: "2.3"
|
44
|
-
|
58
|
+
type: :development
|
59
|
+
version_requirements: *id003
|
45
60
|
description: Making it easy to work with Rails objects which use a URL key in their URL instead of their database ID.
|
46
61
|
email: matt@reprocessed.org
|
47
62
|
executables: []
|
@@ -52,29 +67,15 @@ extra_rdoc_files:
|
|
52
67
|
- LICENSE
|
53
68
|
- README.rdoc
|
54
69
|
files:
|
55
|
-
-
|
56
|
-
- .gitignore
|
57
|
-
- LICENSE
|
70
|
+
- VERSION
|
58
71
|
- README.rdoc
|
72
|
+
- LICENSE
|
59
73
|
- Rakefile
|
60
|
-
- VERSION
|
61
74
|
- cucumber.yml
|
62
|
-
- features/fixtures/.gitignore
|
63
|
-
- features/for_url_key-like_uses.feature
|
64
|
-
- features/step_definitions/database_steps.rb
|
65
|
-
- features/step_definitions/eval_steps.rb
|
66
|
-
- features/step_definitions/feedback_steps.rb
|
67
|
-
- features/support/env.rb
|
68
|
-
- features/support/hooks.rb
|
69
|
-
- features/support/recording_logger.rb
|
70
|
-
- features/with_active_record-basic.feature
|
71
|
-
- features/with_active_record-more-advanced.feature
|
72
|
-
- lib/url_keyed_object.rb
|
73
75
|
- lib/url_keyed_object/active_record.rb
|
74
|
-
-
|
75
|
-
-
|
76
|
-
-
|
77
|
-
- spec/url_keyed_object_spec.rb
|
76
|
+
- lib/url_keyed_object/railtie.rb
|
77
|
+
- lib/url_keyed_object.rb
|
78
|
+
- rails/init.rb
|
78
79
|
has_rdoc: true
|
79
80
|
homepage: http://github.com/fidothe/url_keyed_object
|
80
81
|
licenses: []
|
@@ -88,22 +89,34 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
88
89
|
requirements:
|
89
90
|
- - ">="
|
90
91
|
- !ruby/object:Gem::Version
|
92
|
+
segments:
|
93
|
+
- 0
|
91
94
|
version: "0"
|
92
|
-
version:
|
93
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
96
|
requirements:
|
95
97
|
- - ">="
|
96
98
|
- !ruby/object:Gem::Version
|
99
|
+
segments:
|
100
|
+
- 0
|
97
101
|
version: "0"
|
98
|
-
version:
|
99
102
|
requirements: []
|
100
103
|
|
101
104
|
rubyforge_project:
|
102
|
-
rubygems_version: 1.3.
|
105
|
+
rubygems_version: 1.3.6
|
103
106
|
signing_key:
|
104
107
|
specification_version: 3
|
105
108
|
summary: Making it easy to work with objects with URL keys
|
106
109
|
test_files:
|
110
|
+
- spec/spec.opts
|
107
111
|
- spec/spec_helper.rb
|
108
112
|
- spec/url_keyed_object/active_record_spec.rb
|
109
113
|
- spec/url_keyed_object_spec.rb
|
114
|
+
- features/step_definitions/database_steps.rb
|
115
|
+
- features/step_definitions/eval_steps.rb
|
116
|
+
- features/step_definitions/feedback_steps.rb
|
117
|
+
- features/support/env.rb
|
118
|
+
- features/support/hooks.rb
|
119
|
+
- features/support/recording_logger.rb
|
120
|
+
- features/for_url_key-like_uses.feature
|
121
|
+
- features/with_active_record-basic.feature
|
122
|
+
- features/with_active_record-more-advanced.feature
|
data/.document
DELETED
data/.gitignore
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
*.sqlite3
|