resource_controller 0.4.9
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/LICENSE +22 -0
- data/README +282 -0
- data/README.rdoc +282 -0
- data/Rakefile +35 -0
- data/generators/scaffold_resource/USAGE +29 -0
- data/generators/scaffold_resource/scaffold_resource_generator.rb +179 -0
- data/generators/scaffold_resource/templates/controller.rb +2 -0
- data/generators/scaffold_resource/templates/fixtures.yml +10 -0
- data/generators/scaffold_resource/templates/functional_test.rb +57 -0
- data/generators/scaffold_resource/templates/helper.rb +2 -0
- data/generators/scaffold_resource/templates/migration.rb +15 -0
- data/generators/scaffold_resource/templates/model.rb +2 -0
- data/generators/scaffold_resource/templates/old_migration.rb +13 -0
- data/generators/scaffold_resource/templates/rspec/functional_spec.rb +255 -0
- data/generators/scaffold_resource/templates/rspec/helper_spec.rb +11 -0
- data/generators/scaffold_resource/templates/rspec/routing_spec.rb +61 -0
- data/generators/scaffold_resource/templates/rspec/unit_spec.rb +11 -0
- data/generators/scaffold_resource/templates/rspec/views/edit_spec.rb +28 -0
- data/generators/scaffold_resource/templates/rspec/views/index_spec.rb +26 -0
- data/generators/scaffold_resource/templates/rspec/views/new_spec.rb +30 -0
- data/generators/scaffold_resource/templates/rspec/views/show_spec.rb +25 -0
- data/generators/scaffold_resource/templates/shoulda_functional_test.rb +19 -0
- data/generators/scaffold_resource/templates/unit_test.rb +7 -0
- data/generators/scaffold_resource/templates/view__form.erb +6 -0
- data/generators/scaffold_resource/templates/view__form.haml +5 -0
- data/generators/scaffold_resource/templates/view_edit.erb +16 -0
- data/generators/scaffold_resource/templates/view_edit.haml +11 -0
- data/generators/scaffold_resource/templates/view_index.erb +22 -0
- data/generators/scaffold_resource/templates/view_index.haml +19 -0
- data/generators/scaffold_resource/templates/view_new.erb +12 -0
- data/generators/scaffold_resource/templates/view_new.haml +9 -0
- data/generators/scaffold_resource/templates/view_show.erb +9 -0
- data/generators/scaffold_resource/templates/view_show.haml +9 -0
- data/init.rb +1 -0
- data/lib/resource_controller.rb +15 -0
- data/lib/resource_controller/accessors.rb +77 -0
- data/lib/resource_controller/action_options.rb +40 -0
- data/lib/resource_controller/actions.rb +75 -0
- data/lib/resource_controller/base.rb +15 -0
- data/lib/resource_controller/class_methods.rb +22 -0
- data/lib/resource_controller/controller.rb +63 -0
- data/lib/resource_controller/failable_action_options.rb +25 -0
- data/lib/resource_controller/helpers.rb +28 -0
- data/lib/resource_controller/helpers/current_objects.rb +69 -0
- data/lib/resource_controller/helpers/internal.rb +76 -0
- data/lib/resource_controller/helpers/nested.rb +45 -0
- data/lib/resource_controller/helpers/urls.rb +124 -0
- data/lib/resource_controller/response_collector.rb +27 -0
- data/lib/resource_controller/version.rb +9 -0
- data/lib/tasks/gem.rake +67 -0
- data/lib/urligence.rb +50 -0
- data/rails/init.rb +6 -0
- data/test/Rakefile +10 -0
- data/test/app/controllers/application.rb +7 -0
- data/test/app/controllers/cms/options_controller.rb +3 -0
- data/test/app/controllers/cms/products_controller.rb +3 -0
- data/test/app/controllers/comments_controller.rb +3 -0
- data/test/app/controllers/people_controller.rb +9 -0
- data/test/app/controllers/photos_controller.rb +11 -0
- data/test/app/controllers/posts_controller.rb +10 -0
- data/test/app/controllers/projects_controller.rb +3 -0
- data/test/app/controllers/somethings_controller.rb +3 -0
- data/test/app/controllers/tags_controller.rb +13 -0
- data/test/app/controllers/users_controller.rb +12 -0
- data/test/app/helpers/application_helper.rb +3 -0
- data/test/app/helpers/cms/products_helper.rb +2 -0
- data/test/app/helpers/comments_helper.rb +2 -0
- data/test/app/helpers/options_helper.rb +2 -0
- data/test/app/helpers/people_helper.rb +2 -0
- data/test/app/helpers/photos_helper.rb +2 -0
- data/test/app/helpers/posts_helper.rb +2 -0
- data/test/app/helpers/projects_helper.rb +2 -0
- data/test/app/helpers/somethings_helper.rb +2 -0
- data/test/app/helpers/tags_helper.rb +2 -0
- data/test/app/helpers/users_helper.rb +2 -0
- data/test/app/models/account.rb +3 -0
- data/test/app/models/comment.rb +3 -0
- data/test/app/models/option.rb +3 -0
- data/test/app/models/photo.rb +4 -0
- data/test/app/models/post.rb +3 -0
- data/test/app/models/product.rb +3 -0
- data/test/app/models/project.rb +2 -0
- data/test/app/models/something.rb +2 -0
- data/test/app/models/tag.rb +3 -0
- data/test/app/views/cms/options/edit.rhtml +17 -0
- data/test/app/views/cms/options/index.rhtml +20 -0
- data/test/app/views/cms/options/new.rhtml +16 -0
- data/test/app/views/cms/options/show.rhtml +8 -0
- data/test/app/views/cms/products/edit.rhtml +17 -0
- data/test/app/views/cms/products/index.rhtml +20 -0
- data/test/app/views/cms/products/new.rhtml +16 -0
- data/test/app/views/cms/products/show.rhtml +8 -0
- data/test/app/views/comments/edit.rhtml +27 -0
- data/test/app/views/comments/index.rhtml +24 -0
- data/test/app/views/comments/new.rhtml +26 -0
- data/test/app/views/comments/show.rhtml +18 -0
- data/test/app/views/layouts/application.rhtml +17 -0
- data/test/app/views/layouts/comments.rhtml +17 -0
- data/test/app/views/layouts/options.rhtml +17 -0
- data/test/app/views/layouts/people.rhtml +17 -0
- data/test/app/views/layouts/photos.rhtml +17 -0
- data/test/app/views/layouts/projects.rhtml +17 -0
- data/test/app/views/layouts/somethings.rhtml +17 -0
- data/test/app/views/layouts/tags.rhtml +17 -0
- data/test/app/views/people/edit.rhtml +17 -0
- data/test/app/views/people/index.rhtml +20 -0
- data/test/app/views/people/new.rhtml +16 -0
- data/test/app/views/people/show.rhtml +8 -0
- data/test/app/views/photos/edit.rhtml +17 -0
- data/test/app/views/photos/index.rhtml +20 -0
- data/test/app/views/photos/new.rhtml +16 -0
- data/test/app/views/photos/show.rhtml +8 -0
- data/test/app/views/posts/edit.rhtml +22 -0
- data/test/app/views/posts/index.rhtml +22 -0
- data/test/app/views/posts/new.rhtml +21 -0
- data/test/app/views/posts/show.rhtml +13 -0
- data/test/app/views/projects/edit.rhtml +17 -0
- data/test/app/views/projects/index.rhtml +20 -0
- data/test/app/views/projects/new.rhtml +16 -0
- data/test/app/views/projects/show.rhtml +8 -0
- data/test/app/views/somethings/edit.rhtml +17 -0
- data/test/app/views/somethings/index.rhtml +20 -0
- data/test/app/views/somethings/new.rhtml +16 -0
- data/test/app/views/somethings/show.rhtml +8 -0
- data/test/app/views/tags/edit.rhtml +17 -0
- data/test/app/views/tags/index.rhtml +20 -0
- data/test/app/views/tags/index.rjs +0 -0
- data/test/app/views/tags/new.rhtml +16 -0
- data/test/app/views/tags/show.rhtml +8 -0
- data/test/app/views/users/edit.rhtml +17 -0
- data/test/app/views/users/index.rhtml +20 -0
- data/test/app/views/users/new.rhtml +16 -0
- data/test/app/views/users/show.rhtml +8 -0
- data/test/config/boot.rb +109 -0
- data/test/config/database.yml +16 -0
- data/test/config/environment.rb +64 -0
- data/test/config/environments/development.rb +21 -0
- data/test/config/environments/test.rb +19 -0
- data/test/config/routes.rb +51 -0
- data/test/db/migrate/001_create_posts.rb +12 -0
- data/test/db/migrate/002_create_products.rb +11 -0
- data/test/db/migrate/003_create_comments.rb +13 -0
- data/test/db/migrate/004_create_options.rb +12 -0
- data/test/db/migrate/005_create_photos.rb +11 -0
- data/test/db/migrate/006_create_tags.rb +17 -0
- data/test/db/migrate/007_create_somethings.rb +11 -0
- data/test/db/migrate/008_create_accounts.rb +11 -0
- data/test/db/migrate/009_add_account_id_to_photos.rb +9 -0
- data/test/db/migrate/010_create_projects.rb +11 -0
- data/test/db/schema.rb +65 -0
- data/test/log/development.log +2918 -0
- data/test/log/test.log +135619 -0
- data/test/log/thin.log +12 -0
- data/test/script/console +3 -0
- data/test/script/destroy +3 -0
- data/test/script/generate +3 -0
- data/test/script/server +3 -0
- data/test/test/fixtures/accounts.yml +7 -0
- data/test/test/fixtures/comments.yml +11 -0
- data/test/test/fixtures/options.yml +9 -0
- data/test/test/fixtures/photos.yml +9 -0
- data/test/test/fixtures/photos_tags.yml +3 -0
- data/test/test/fixtures/posts.yml +9 -0
- data/test/test/fixtures/products.yml +7 -0
- data/test/test/fixtures/projects.yml +7 -0
- data/test/test/fixtures/somethings.yml +7 -0
- data/test/test/fixtures/tags.yml +7 -0
- data/test/test/functional/cms/options_controller_test.rb +23 -0
- data/test/test/functional/cms/products_controller_test.rb +23 -0
- data/test/test/functional/comments_controller_test.rb +26 -0
- data/test/test/functional/people_controller_test.rb +34 -0
- data/test/test/functional/photos_controller_test.rb +130 -0
- data/test/test/functional/posts_controller_test.rb +34 -0
- data/test/test/functional/projects_controller_test.rb +18 -0
- data/test/test/functional/somethings_controller_test.rb +28 -0
- data/test/test/functional/tags_controller_test.rb +64 -0
- data/test/test/functional/users_controller_test.rb +24 -0
- data/test/test/test_helper.rb +12 -0
- data/test/test/unit/accessors_test.rb +110 -0
- data/test/test/unit/account_test.rb +7 -0
- data/test/test/unit/action_options_test.rb +109 -0
- data/test/test/unit/base_test.rb +11 -0
- data/test/test/unit/comment_test.rb +10 -0
- data/test/test/unit/failable_action_options_test.rb +77 -0
- data/test/test/unit/helpers/current_objects_test.rb +127 -0
- data/test/test/unit/helpers/internal_test.rb +106 -0
- data/test/test/unit/helpers/nested_test.rb +82 -0
- data/test/test/unit/helpers/urls_test.rb +71 -0
- data/test/test/unit/helpers_test.rb +25 -0
- data/test/test/unit/option_test.rb +10 -0
- data/test/test/unit/photo_test.rb +10 -0
- data/test/test/unit/post_test.rb +10 -0
- data/test/test/unit/project_test.rb +10 -0
- data/test/test/unit/response_collector_test.rb +49 -0
- data/test/test/unit/something_test.rb +10 -0
- data/test/test/unit/tag_test.rb +10 -0
- data/test/test/unit/urligence_test.rb +203 -0
- data/test/vendor/plugins/shoulda/Rakefile +32 -0
- data/test/vendor/plugins/shoulda/bin/convert_to_should_syntax +40 -0
- data/test/vendor/plugins/shoulda/init.rb +3 -0
- data/test/vendor/plugins/shoulda/lib/shoulda.rb +43 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/active_record_helpers.rb +580 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/color.rb +77 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/controller_tests.rb +467 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/formats/html.rb +201 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/formats/xml.rb +170 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/gem/proc_extensions.rb +14 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/gem/shoulda.rb +239 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/general.rb +118 -0
- data/test/vendor/plugins/shoulda/lib/shoulda/private_helpers.rb +22 -0
- metadata +312 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Thanks to Urligence, you get some free url helpers.
|
|
2
|
+
#
|
|
3
|
+
# No matter what your controller looks like...
|
|
4
|
+
#
|
|
5
|
+
# [edit_|new_]object_url # is the equivalent of saying [edit_|new_]post_url(@post)
|
|
6
|
+
# [edit_|new_]object_url(some_other_object) # allows you to specify an object, but still maintain any paths or namespaces that are present
|
|
7
|
+
#
|
|
8
|
+
# collection_url # is like saying posts_url
|
|
9
|
+
#
|
|
10
|
+
# Url helpers are especially useful when working with polymorphic controllers.
|
|
11
|
+
#
|
|
12
|
+
# # /posts/1/comments
|
|
13
|
+
# object_url #=> /posts/1/comments/#{@comment.to_param}
|
|
14
|
+
# object_url(comment) #=> /posts/1/comments/#{comment.to_param}
|
|
15
|
+
# edit_object_url #=> /posts/1/comments/#{@comment.to_param}/edit
|
|
16
|
+
# collection_url #=> /posts/1/comments
|
|
17
|
+
#
|
|
18
|
+
# # /products/1/comments
|
|
19
|
+
# object_url #=> /products/1/comments/#{@comment.to_param}
|
|
20
|
+
# object_url(comment) #=> /products/1/comments/#{comment.to_param}
|
|
21
|
+
# edit_object_url #=> /products/1/comments/#{@comment.to_param}/edit
|
|
22
|
+
# collection_url #=> /products/1/comments
|
|
23
|
+
#
|
|
24
|
+
# # /comments
|
|
25
|
+
# object_url #=> /comments/#{@comment.to_param}
|
|
26
|
+
# object_url(comment) #=> /comments/#{comment.to_param}
|
|
27
|
+
# edit_object_url #=> /comments/#{@comment.to_param}/edit
|
|
28
|
+
# collection_url #=> /comments
|
|
29
|
+
#
|
|
30
|
+
# Or with namespaced, nested controllers...
|
|
31
|
+
#
|
|
32
|
+
# # /admin/products/1/options
|
|
33
|
+
# object_url #=> /admin/products/1/options/#{@option.to_param}
|
|
34
|
+
# object_url(option) #=> /admin/products/1/options/#{option.to_param}
|
|
35
|
+
# edit_object_url #=> /admin/products/1/options/#{@option.to_param}/edit
|
|
36
|
+
# collection_url #=> /admin/products/1/options
|
|
37
|
+
#
|
|
38
|
+
# You get the idea. Everything is automagical! All parameters are inferred.
|
|
39
|
+
#
|
|
40
|
+
module ResourceController::Helpers::Urls
|
|
41
|
+
protected
|
|
42
|
+
['', 'edit_'].each do |type|
|
|
43
|
+
symbol = type.blank? ? nil : type.gsub(/_/, '').to_sym
|
|
44
|
+
|
|
45
|
+
define_method("#{type}object_url") do |*alternate_object|
|
|
46
|
+
smart_url *object_url_options(symbol, alternate_object.first)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
define_method("#{type}object_path") do |*alternate_object|
|
|
50
|
+
smart_path *object_url_options(symbol, alternate_object.first)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
define_method("hash_for_#{type}object_url") do |*alternate_object|
|
|
54
|
+
hash_for_smart_url *object_url_options(symbol, alternate_object.first)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
define_method("hash_for_#{type}object_path") do |*alternate_object|
|
|
58
|
+
hash_for_smart_path *object_url_options(symbol, alternate_object.first)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def new_object_url
|
|
63
|
+
smart_url *new_object_url_options
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def new_object_path
|
|
67
|
+
smart_path *new_object_url_options
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def hash_for_new_object_url
|
|
71
|
+
hash_for_smart_url *new_object_url_options
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def hash_for_new_object_path
|
|
75
|
+
hash_for_smart_path *new_object_url_options
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def collection_url
|
|
79
|
+
smart_url *collection_url_options
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def collection_path
|
|
83
|
+
smart_path *collection_url_options
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def hash_for_collection_url
|
|
87
|
+
hash_for_smart_url *collection_url_options
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def hash_for_collection_path
|
|
91
|
+
hash_for_smart_path *collection_url_options
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Used internally to provide the options to smart_url from Urligence.
|
|
95
|
+
#
|
|
96
|
+
def collection_url_options
|
|
97
|
+
namespaces + [parent_url_options, route_name.to_s.pluralize.to_sym]
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Used internally to provide the options to smart_url from Urligence.
|
|
101
|
+
#
|
|
102
|
+
def object_url_options(action_prefix = nil, alternate_object = nil)
|
|
103
|
+
[action_prefix] + namespaces + [parent_url_options, [route_name.to_sym, alternate_object || object]]
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Used internally to provide the options to smart_url from Urligence.
|
|
107
|
+
#
|
|
108
|
+
def new_object_url_options
|
|
109
|
+
[:new] + namespaces + [parent_url_options, route_name.to_sym]
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def parent_url_options
|
|
113
|
+
parent? ? [parent_type.to_sym, parent_object] : nil
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Returns all of the current namespaces of the current controller, symbolized, in array form.
|
|
117
|
+
#
|
|
118
|
+
def namespaces
|
|
119
|
+
names = self.class.name.split("::")
|
|
120
|
+
names.pop
|
|
121
|
+
|
|
122
|
+
names.map(&:underscore).map(&:to_sym)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module ResourceController
|
|
2
|
+
class ResponseCollector
|
|
3
|
+
|
|
4
|
+
attr_reader :responses
|
|
5
|
+
|
|
6
|
+
delegate :clear, :to => :responses
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
@responses = []
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def method_missing(method_name, &block)
|
|
13
|
+
@responses.delete self[method_name]
|
|
14
|
+
@responses << [method_name, block || nil]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def [](symbol)
|
|
18
|
+
@responses.find { |method, block| method == symbol }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def dup
|
|
22
|
+
returning ResponseCollector.new do |duplicate|
|
|
23
|
+
duplicate.instance_variable_set(:@responses, responses.dup)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/lib/tasks/gem.rake
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require 'rake/gempackagetask'
|
|
2
|
+
require 'yaml'
|
|
3
|
+
|
|
4
|
+
task :clean => :clobber_package
|
|
5
|
+
|
|
6
|
+
spec = Gem::Specification.new do |s|
|
|
7
|
+
s.name = 'resource_controller'
|
|
8
|
+
s.version = ResourceController::VERSION::STRING
|
|
9
|
+
s.summary = "resource_controller makes RESTful controllers easier, more maintainable, and super readable. With the RESTful controller pattern hidden away, you can focus on what makes your controller special."
|
|
10
|
+
s.rubyforge_project = "giraffesoft"
|
|
11
|
+
s.description = "Rails RESTful controller abstraction plugin."
|
|
12
|
+
s.author = "James Golick"
|
|
13
|
+
s.email = "james@giraffesoft.ca"
|
|
14
|
+
s.homepage = "http://jamesgolick.com/resource_controller"
|
|
15
|
+
s.has_rdoc = true
|
|
16
|
+
|
|
17
|
+
s.required_ruby_version = '>= 1.8.5'
|
|
18
|
+
|
|
19
|
+
s.files = %w(README.rdoc README LICENSE init.rb Rakefile) +
|
|
20
|
+
Dir.glob("{lib,test,generators,rails}/**/*")
|
|
21
|
+
|
|
22
|
+
s.require_path = "lib"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
Rake::GemPackageTask.new(spec) do |p|
|
|
26
|
+
p.gem_spec = spec
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
task :tag_warn do
|
|
30
|
+
puts "*" * 40
|
|
31
|
+
puts "Don't forget to tag the release:"
|
|
32
|
+
puts
|
|
33
|
+
puts " git tag -a v#{ResourceController::VERSION::STRING}"
|
|
34
|
+
puts
|
|
35
|
+
puts "or run rake tag"
|
|
36
|
+
puts "*" * 40
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
task :tag do
|
|
40
|
+
sh "git tag -a v#{ResourceController::VERSION::STRING}"
|
|
41
|
+
end
|
|
42
|
+
task :gem => :tag_warn
|
|
43
|
+
|
|
44
|
+
namespace :gem do
|
|
45
|
+
desc 'Upload gems to rubyforge.org'
|
|
46
|
+
task :rubyforge => :gem do
|
|
47
|
+
sh 'rubyforge login'
|
|
48
|
+
sh "rubyforge add_release giraffesoft resource_controller #{ResourceController::VERSION::STRING} pkg/#{spec.full_name}.gem"
|
|
49
|
+
sh "rubyforge add_file giraffesoft resource_controller #{ResourceController::VERSION::STRING} pkg/#{spec.full_name}.gem"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
desc "Update the gemspec for GitHub's gem server"
|
|
53
|
+
task :github do
|
|
54
|
+
File.open("resource_controller.gemspec", 'w'){|f| f.puts YAML::dump(spec) }
|
|
55
|
+
puts "gemspec generated here: resource_controller.gemspec"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
desc "Build and install the gem locally."
|
|
59
|
+
task :install => [:clobber, :package] do
|
|
60
|
+
sh "sudo gem install pkg/#{spec.full_name}.gem"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
desc "Remove the gem."
|
|
64
|
+
task :uninstall => :clean do
|
|
65
|
+
sh "sudo gem uninstall -v #{ResourceController::VERSION::STRING} -x #{ResourceController::NAME}"
|
|
66
|
+
end
|
|
67
|
+
end
|
data/lib/urligence.rb
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module Urligence
|
|
2
|
+
def smart_url(*objects)
|
|
3
|
+
urligence(*objects.push(:url))
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def smart_path(*objects)
|
|
7
|
+
urligence(*objects.push(:path))
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def hash_for_smart_url(*objects)
|
|
11
|
+
urligence(*objects.unshift(:hash_for).push(:url).push({:type => :hash}))
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def hash_for_smart_path(*objects)
|
|
15
|
+
urligence(*objects.unshift(:hash_for).push(:path).push({:type => :hash}))
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def urligence(*objects)
|
|
19
|
+
config = {}
|
|
20
|
+
config.merge!(objects.pop) if objects.last.is_a?(Hash)
|
|
21
|
+
|
|
22
|
+
objects.reject! { |object| object.nil? }
|
|
23
|
+
|
|
24
|
+
url_fragments = objects.collect do |obj|
|
|
25
|
+
if obj.is_a? Symbol
|
|
26
|
+
obj
|
|
27
|
+
elsif obj.is_a? Array
|
|
28
|
+
obj.first
|
|
29
|
+
else
|
|
30
|
+
obj.class.name.underscore.to_sym
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
unless config[:type] == :hash
|
|
35
|
+
send url_fragments.join("_"), *objects.flatten.select { |obj| !obj.is_a? Symbol }
|
|
36
|
+
else
|
|
37
|
+
params = {}
|
|
38
|
+
unparsed_params = objects.select { |obj| !obj.is_a? Symbol }
|
|
39
|
+
unparsed_params.each_with_index do |obj, i|
|
|
40
|
+
unless i == (unparsed_params.length-1)
|
|
41
|
+
params.merge!((obj.is_a? Array) ? {"#{obj.first}_id".to_sym => obj[1].to_param} : {"#{obj.class.name.underscore}_id".to_sym => obj.to_param})
|
|
42
|
+
else
|
|
43
|
+
params.merge!((obj.is_a? Array) ? {:id => obj[1].to_param} : {:id => obj.to_param})
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
send url_fragments.join("_"), params
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
data/rails/init.rb
ADDED
data/test/Rakefile
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
|
2
|
+
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
|
3
|
+
|
|
4
|
+
require(File.join(File.dirname(__FILE__), 'config', 'boot'))
|
|
5
|
+
|
|
6
|
+
require 'rake'
|
|
7
|
+
require 'rake/testtask'
|
|
8
|
+
require 'rake/rdoctask'
|
|
9
|
+
|
|
10
|
+
require 'tasks/rails'
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Filters added to this controller apply to all controllers in the application.
|
|
2
|
+
# Likewise, all the methods added will be available for all controllers.
|
|
3
|
+
|
|
4
|
+
class ApplicationController < ActionController::Base
|
|
5
|
+
# Pick a unique cookie name to distinguish our session data from others'
|
|
6
|
+
session :session_key => '_myapp_session'
|
|
7
|
+
end
|