makandra_resource_controller 0.7.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/LICENSE +22 -0
- data/README.rdoc +343 -0
- data/TODO +0 -0
- data/VERSION.yml +5 -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/lib/resource_controller.rb +37 -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 +25 -0
- data/lib/resource_controller/controller.rb +69 -0
- data/lib/resource_controller/failable_action_options.rb +25 -0
- data/lib/resource_controller/helpers.rb +34 -0
- data/lib/resource_controller/helpers/current_objects.rb +73 -0
- data/lib/resource_controller/helpers/internal.rb +80 -0
- data/lib/resource_controller/helpers/nested.rb +67 -0
- data/lib/resource_controller/helpers/singleton_customizations.rb +64 -0
- data/lib/resource_controller/helpers/urls.rb +132 -0
- data/lib/resource_controller/response_collector.rb +27 -0
- data/lib/resource_controller/singleton.rb +15 -0
- data/lib/urligence.rb +52 -0
- data/rails/init.rb +6 -0
- data/test/Gemfile +13 -0
- data/test/Gemfile.lock +95 -0
- data/test/Rakefile +10 -0
- data/test/app/controllers/accounts_controller.rb +6 -0
- data/test/app/controllers/application_controller.rb +5 -0
- data/test/app/controllers/cms/options_controller.rb +3 -0
- data/test/app/controllers/cms/personnel_controller.rb +2 -0
- data/test/app/controllers/cms/photos_controller.rb +6 -0
- data/test/app/controllers/cms/products_controller.rb +3 -0
- data/test/app/controllers/comments_controller.rb +3 -0
- data/test/app/controllers/images_controller.rb +4 -0
- data/test/app/controllers/options_controller.rb +8 -0
- data/test/app/controllers/people_controller.rb +9 -0
- data/test/app/controllers/photos_controller.rb +12 -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/accounts_helper.rb +2 -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/images_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 +4 -0
- data/test/app/models/comment.rb +3 -0
- data/test/app/models/image.rb +3 -0
- data/test/app/models/option.rb +3 -0
- data/test/app/models/personnel.rb +3 -0
- data/test/app/models/photo.rb +5 -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/models/user.rb +3 -0
- data/test/app/views/accounts/_form.html.erb +4 -0
- data/test/app/views/accounts/edit.html.erb +14 -0
- data/test/app/views/accounts/new.html.erb +12 -0
- data/test/app/views/accounts/show.html.erb +5 -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/photos/edit.rhtml +17 -0
- data/test/app/views/cms/photos/index.rhtml +20 -0
- data/test/app/views/cms/photos/new.rhtml +16 -0
- data/test/app/views/cms/photos/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/images/_form.html.erb +4 -0
- data/test/app/views/images/edit.html.erb +14 -0
- data/test/app/views/images/new.html.erb +12 -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/options/_form.html.erb +8 -0
- data/test/app/views/options/edit.html.erb +16 -0
- data/test/app/views/options/index.html.erb +21 -0
- data/test/app/views/options/new.html.erb +12 -0
- data/test/app/views/options/show.html.erb +10 -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.ru +4 -0
- data/test/config/application.rb +41 -0
- data/test/config/boot.rb +6 -0
- data/test/config/database.yml +9 -0
- data/test/config/environment.rb +5 -0
- data/test/config/environments/development.rb +19 -0
- data/test/config/environments/test.rb +34 -0
- data/test/config/initializers/inflections.rb +14 -0
- data/test/config/initializers/secret_token.rb +7 -0
- data/test/config/initializers/session_store.rb +8 -0
- data/test/config/routes.rb +35 -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 +13 -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/migrate/011_create_images.rb +12 -0
- data/test/db/migrate/012_create_users.rb +11 -0
- data/test/db/migrate/013_create_personnel.rb +11 -0
- data/test/db/migrate/014_add_personnel_id_to_photos.rb +9 -0
- data/test/db/schema.rb +79 -0
- data/test/script/console +3 -0
- data/test/script/destroy +3 -0
- data/test/script/generate +3 -0
- data/test/script/rails +6 -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/images.yml +6 -0
- data/test/test/fixtures/options.yml +9 -0
- data/test/test/fixtures/personnel.yml +5 -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/fixtures/users.yml +5 -0
- data/test/test/functional/cms/options_controller_test.rb +140 -0
- data/test/test/functional/cms/photos_controller_test.rb +37 -0
- data/test/test/functional/cms/products_controller_test.rb +37 -0
- data/test/test/functional/comments_controller_test.rb +140 -0
- data/test/test/functional/images_controller_test.rb +30 -0
- data/test/test/functional/people_controller_test.rb +147 -0
- data/test/test/functional/photos_controller_test.rb +199 -0
- data/test/test/functional/posts_controller_test.rb +21 -0
- data/test/test/functional/projects_controller_test.rb +137 -0
- data/test/test/functional/somethings_controller_test.rb +15 -0
- data/test/test/functional/tags_controller_test.rb +53 -0
- data/test/test/functional/users_controller_test.rb +137 -0
- data/test/test/test_helper.rb +14 -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 +133 -0
- data/test/test/unit/helpers/internal_test.rb +106 -0
- data/test/test/unit/helpers/nested_test.rb +86 -0
- data/test/test/unit/helpers/singleton_current_objects_test.rb +68 -0
- data/test/test/unit/helpers/singleton_nested_test.rb +77 -0
- data/test/test/unit/helpers/singleton_urls_test.rb +67 -0
- data/test/test/unit/helpers/urls_test.rb +75 -0
- data/test/test/unit/helpers_test.rb +25 -0
- data/test/test/unit/image_test.rb +7 -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 +205 -0
- data/test/vendor/plugins/d +1 -0
- data/test/vendor/plugins/dynamic_form/MIT-LICENSE +20 -0
- data/test/vendor/plugins/dynamic_form/README +13 -0
- data/test/vendor/plugins/dynamic_form/Rakefile +10 -0
- data/test/vendor/plugins/dynamic_form/init.rb +5 -0
- data/test/vendor/plugins/dynamic_form/lib/action_view/helpers/dynamic_form.rb +300 -0
- data/test/vendor/plugins/dynamic_form/lib/action_view/locale/en.yml +8 -0
- data/test/vendor/plugins/dynamic_form/test/dynamic_form_i18n_test.rb +42 -0
- data/test/vendor/plugins/dynamic_form/test/dynamic_form_test.rb +370 -0
- data/test/vendor/plugins/dynamic_form/test/test_helper.rb +9 -0
- metadata +427 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
require File.dirname(__FILE__)+'/../../test_helper'
|
|
2
|
+
|
|
3
|
+
class UsersControllerMock
|
|
4
|
+
include ResourceController::Helpers
|
|
5
|
+
extend ResourceController::Accessors
|
|
6
|
+
class_reader_writer :belongs_to
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class ImagesControllerMock
|
|
10
|
+
include ResourceController::Helpers
|
|
11
|
+
extend ResourceController::Accessors
|
|
12
|
+
include ResourceController::Helpers::SingletonCustomizations
|
|
13
|
+
class_reader_writer :belongs_to
|
|
14
|
+
belongs_to :user
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class ResourceController::Helpers::SingletonNestedTest < Test::Unit::TestCase
|
|
18
|
+
def setup
|
|
19
|
+
@controller = UsersControllerMock.new
|
|
20
|
+
@params = stub :[] => "1"
|
|
21
|
+
@controller.stubs(:params).returns(@params)
|
|
22
|
+
@request = stub :path => ""
|
|
23
|
+
@controller.stubs(:request).returns(@request)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context "singleton parent_type helper" do
|
|
27
|
+
setup do
|
|
28
|
+
@image_controller = ImagesControllerMock.new
|
|
29
|
+
@image_params = stub()
|
|
30
|
+
@image_params.stubs(:[]).with(:user_id).returns 2
|
|
31
|
+
@image_controller.stubs(:params).returns(@image_params)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
should "get the params for the current parent" do
|
|
35
|
+
assert_equal :user, @image_controller.send(:parent_type)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
context "with multiple possible parents" do
|
|
39
|
+
setup do
|
|
40
|
+
ImagesControllerMock.class_eval do
|
|
41
|
+
belongs_to :user, :group
|
|
42
|
+
end
|
|
43
|
+
@image_params = stub()
|
|
44
|
+
@image_params.stubs(:[]).with(:group_id).returns 5
|
|
45
|
+
@image_params.stubs(:[]).with(:user_id).returns nil
|
|
46
|
+
@image_controller.stubs(:params).returns(@image_params)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
should "get the params for whatever models are available" do
|
|
50
|
+
assert_equal :group, @image_controller.send(:parent_type)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
context "with no possible parent" do
|
|
55
|
+
should "return nil" do
|
|
56
|
+
assert_nil @controller.send(:parent_type)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context "singleton parent_object helper" do
|
|
62
|
+
setup do
|
|
63
|
+
@image_controller = ImagesControllerMock.new
|
|
64
|
+
@request = stub :path => ""
|
|
65
|
+
@image_controller.stubs(:request).returns(@request)
|
|
66
|
+
@image_params = stub()
|
|
67
|
+
@image_params.stubs(:[]).with(:user_id).returns 2
|
|
68
|
+
@image_controller.stubs(:params).returns(@image_params)
|
|
69
|
+
@user = User.new
|
|
70
|
+
User.stubs(:find).with(2).returns @user
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
should "return image with id 2" do
|
|
74
|
+
assert_equal @user, @image_controller.send(:parent_object)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require File.dirname(__FILE__)+'/../../test_helper'
|
|
2
|
+
|
|
3
|
+
class ResourceController::Helpers::SingletonUrlsTest < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
context "*_url_options helpers" do
|
|
6
|
+
setup do
|
|
7
|
+
@account_controller = AccountsController.new
|
|
8
|
+
@params = stub :[] => ""
|
|
9
|
+
@account_controller.stubs(:params).returns(@params)
|
|
10
|
+
@request = stub :path => ""
|
|
11
|
+
@account_controller.stubs(:request).returns(@request)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
should "return the correct object options" do
|
|
15
|
+
assert_equal [nil, nil, :account], @account_controller.send(:object_url_options)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "with parent" do
|
|
19
|
+
setup do
|
|
20
|
+
@user = mock
|
|
21
|
+
@image = stub()
|
|
22
|
+
@image_controller = ImagesController.new
|
|
23
|
+
@image_params = stub()
|
|
24
|
+
@image_params.stubs(:[]).with(:user_id).returns 2
|
|
25
|
+
@image_controller.stubs(:params).returns(@image_params)
|
|
26
|
+
@image_controller.expects(:parent_object).returns @user
|
|
27
|
+
@image_request = stub :path => ""
|
|
28
|
+
@image_controller.stubs(:request).returns(@image_request)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
should "return the correct object options" do
|
|
32
|
+
assert_equal [:edit, [:user, @user], :image], @image_controller.send(:object_url_options, :edit)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
context "with singleton parent" do
|
|
37
|
+
setup do
|
|
38
|
+
@options_controller = OptionsController.new
|
|
39
|
+
@options_params = stub()
|
|
40
|
+
@options_params.stubs(:[]).with('option').returns ""
|
|
41
|
+
@options_params.stubs(:[]).with(:id).returns 1
|
|
42
|
+
@options_params.stubs(:[]).with(:account_id).returns nil
|
|
43
|
+
@options_controller.stubs(:params).returns(@options_params)
|
|
44
|
+
|
|
45
|
+
@option = Option.new
|
|
46
|
+
|
|
47
|
+
@account = Account.new
|
|
48
|
+
@options_controller.stubs(:parent_object).returns(@account)
|
|
49
|
+
|
|
50
|
+
@request = stub :path => "account/options/1"
|
|
51
|
+
@options_controller.stubs(:request).returns(@request)
|
|
52
|
+
|
|
53
|
+
@options = stub()
|
|
54
|
+
Account.any_instance.stubs(:options).returns(@options)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
should "return the correct object options" do
|
|
58
|
+
@options.expects(:find).with(1).returns(@option)
|
|
59
|
+
assert_equal [:edit, :account, [:option, @option]], @options_controller.send(:object_url_options, :edit)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
should "return the correct object options for collection" do
|
|
63
|
+
assert_equal [:account, :options], @options_controller.send(:collection_url_options)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
require File.dirname(__FILE__)+'/../../test_helper'
|
|
2
|
+
|
|
3
|
+
class ResourceController::Helpers::UrlsTest < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@controller = PostsController.new
|
|
6
|
+
|
|
7
|
+
@params = stub :[] => "1"
|
|
8
|
+
@controller.stubs(:params).returns(@params)
|
|
9
|
+
|
|
10
|
+
@request = stub :path => ""
|
|
11
|
+
@controller.stubs(:request).returns(@request)
|
|
12
|
+
|
|
13
|
+
@object = Post.new
|
|
14
|
+
Post.stubs(:find).with("1").returns(@object)
|
|
15
|
+
|
|
16
|
+
@collection = mock()
|
|
17
|
+
Post.stubs(:find).with(:all).returns(@collection)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
context "*_url_options helpers" do
|
|
21
|
+
setup do
|
|
22
|
+
@products_controller = ::Cms::ProductsController.new
|
|
23
|
+
|
|
24
|
+
@products_controller.stubs(:params).returns(@params)
|
|
25
|
+
@request = stub :path => ""
|
|
26
|
+
@products_controller.stubs(:request).returns(@request)
|
|
27
|
+
@product = Product.new
|
|
28
|
+
Product.stubs(:find).with("1").returns(@product)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
should "return the correct collection options" do
|
|
32
|
+
assert_equal [nil, :posts], @controller.send(:collection_url_options)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
should "return the correct object options" do
|
|
36
|
+
assert_equal [nil, nil, [:post, @object]], @controller.send(:object_url_options)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
should "return the correct collection options for a namespaced controller" do
|
|
40
|
+
assert_equal [:cms, nil, :products], @products_controller.send(:collection_url_options)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
should "return the correct object options for a namespaced controller" do
|
|
44
|
+
assert_equal [nil, :cms, nil, [:product, @product]], @products_controller.send(:object_url_options)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
should "return the correct object options when passed an action" do
|
|
48
|
+
assert_equal [:edit, :cms, nil, [:product, @product]], @products_controller.send(:object_url_options, :edit)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
should "accept an alternate object when passed one" do
|
|
52
|
+
p = Product.new
|
|
53
|
+
assert_equal [nil, :cms, nil, [:product, p]], @products_controller.send(:object_url_options, nil, p)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context "with parent" do
|
|
57
|
+
setup do
|
|
58
|
+
@params = stub :parent_type => 'user'
|
|
59
|
+
@user = mock
|
|
60
|
+
@controller.expects(:parent_object).returns @user
|
|
61
|
+
@controller.expects(:parent?).returns(true)
|
|
62
|
+
@controller.expects(:parent_type).returns "user"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
should "return the correct object options for object_url_options" do
|
|
66
|
+
@controller.expects(:object).returns @object
|
|
67
|
+
assert_equal [:edit, [:user, @user], [:post, @object]], @controller.send(:object_url_options, :edit)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
should "return the correct object options for collection" do
|
|
71
|
+
assert_equal [[:user, @user], :posts], @controller.send(:collection_url_options)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require File.dirname(__FILE__)+'/../test_helper'
|
|
2
|
+
|
|
3
|
+
class HelpersTest < ActiveSupport::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@controller = PostsController.new
|
|
7
|
+
|
|
8
|
+
@params = stub :[] => "1"
|
|
9
|
+
@controller.stubs(:params).returns(@params)
|
|
10
|
+
|
|
11
|
+
@object = Post.new
|
|
12
|
+
Post.stubs(:find).with("1").returns(@object)
|
|
13
|
+
|
|
14
|
+
@collection = mock()
|
|
15
|
+
Post.stubs(:find).with(:all).returns(@collection)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
ResourceController::NAME_ACCESSORS.each do |accessor|
|
|
19
|
+
context "#{accessor} accessor" do
|
|
20
|
+
should "default to returning the singular name of the controller" do
|
|
21
|
+
assert_equal "post", @controller.send(accessor)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require File.dirname(__FILE__)+'/../test_helper'
|
|
2
|
+
|
|
3
|
+
class ResponseCollectorTest < ActiveSupport::TestCase
|
|
4
|
+
context "yielding a block to a collector object" do
|
|
5
|
+
setup do
|
|
6
|
+
@collector = ResourceController::ResponseCollector.new
|
|
7
|
+
block = lambda do |wants|
|
|
8
|
+
wants.html {}
|
|
9
|
+
wants.js {}
|
|
10
|
+
wants.xml
|
|
11
|
+
end
|
|
12
|
+
block.call(@collector)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
should "collect responses" do
|
|
16
|
+
assert_equal Proc, @collector[:html][1].class, @collector[:html].inspect
|
|
17
|
+
assert_equal Proc, @collector[:js][1].class, @collector[:js].inspect
|
|
18
|
+
assert @collector[:xml][1].nil?, @collector[:xml].inspect
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
should "clear responses with clear method" do
|
|
22
|
+
@collector.clear
|
|
23
|
+
assert @collector.responses.empty?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
should "destroy methods before readding them, if they're already there" do
|
|
27
|
+
@collector.html
|
|
28
|
+
assert @collector[:html][1].nil?
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context "duplicating a response collector" do
|
|
33
|
+
setup do
|
|
34
|
+
@collector = ResourceController::ResponseCollector.new
|
|
35
|
+
@collector.js
|
|
36
|
+
@duplicate = @collector.dup
|
|
37
|
+
@collector.css
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
should "not bleed in to the original" do
|
|
41
|
+
assert @duplicate[:css].nil?
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
should "duplicate existing responses at the time of duplication" do
|
|
45
|
+
assert_equal :js, @duplicate[:js].first
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'urligence'
|
|
3
|
+
|
|
4
|
+
class PhotosController
|
|
5
|
+
include ResourceController::Urligence
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class UrligenceTest < ActiveSupport::TestCase
|
|
9
|
+
def setup
|
|
10
|
+
@controller = PhotosController.new
|
|
11
|
+
@tag = Tag.new
|
|
12
|
+
@tag.stubs(:to_param).returns('awesomestuff')
|
|
13
|
+
@photo = Photo.new
|
|
14
|
+
@photo.stubs(:to_param).returns(1)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
context "with one object" do
|
|
18
|
+
setup do
|
|
19
|
+
setup_mocks "/photos/#{@photo.to_param}", :photo, @photo
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context "urligence" do
|
|
23
|
+
should "return the correct path" do
|
|
24
|
+
assert_equal @expected_path, @controller.urligence(@photo, :path)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
context "smart_url" do
|
|
29
|
+
should "return the correct url" do
|
|
30
|
+
assert_equal @expected_url, @controller.smart_url(@photo)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context "smart_path" do
|
|
35
|
+
should "return the correct path" do
|
|
36
|
+
assert_equal @expected_path, @controller.smart_path(@photo)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
context "with two objects" do
|
|
42
|
+
setup do
|
|
43
|
+
setup_mocks "/tags/#{@tag.to_param}/photos/#{@photo.to_param}", :tag_photo, @tag, @photo
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
should "return the correct path" do
|
|
47
|
+
assert_equal @expected_path, @controller.urligence(@tag, @photo, :path)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
context "with a namespace as first param" do
|
|
52
|
+
setup do
|
|
53
|
+
setup_mocks "/admin/tags/#{@tag.to_param}/photos/#{@photo.to_param}", :admin_tag_photo, @tag, @photo
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
should "return the correct path" do
|
|
57
|
+
assert_equal @expected_path, @controller.urligence(:admin, @tag, @photo, :path)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context "with many nil options anywhere in the arguments" do
|
|
62
|
+
setup do
|
|
63
|
+
setup_mocks "/tags/#{@tag.to_param}/photos/#{@photo.to_param}", :tag_photo, @tag, @photo
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
should "return the correct path" do
|
|
67
|
+
assert_equal @expected_path, @controller.urligence(nil, nil, nil, @tag, nil, @photo, nil, :path)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
context "with a symbol as the last parameter" do
|
|
72
|
+
setup do
|
|
73
|
+
setup_mocks "/tags/#{@tag.to_param}/photos", :tag_photos, @tag
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
should "use that as the last fragment of the url" do
|
|
77
|
+
assert_equal @expected_path, @controller.urligence(@tag, :photos, :path)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
context "with a symbol as the only parameter" do
|
|
82
|
+
setup do
|
|
83
|
+
setup_mocks "/photos", :photos
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
should "use that as the only url fragment" do
|
|
87
|
+
assert_equal @expected_path, @controller.urligence(nil, :photos, :path)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
context "with a namespace, and a plural symbol" do
|
|
92
|
+
setup do
|
|
93
|
+
setup_mocks "/admin/products", :admin_products
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
should "call the correct url handler" do
|
|
97
|
+
assert_equal @expected_path, @controller.urligence(:admin, :products, :path)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
context "with only symbols" do
|
|
102
|
+
setup do
|
|
103
|
+
setup_mocks '/admin/products/new', :new_admin_products
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
should "return the correct path" do
|
|
107
|
+
assert_equal @expected_path, @controller.urligence(:new, :admin, :products, :path)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
context "with array parameters for specifying the names of routes that don't match the class name of the object" do
|
|
112
|
+
setup do
|
|
113
|
+
setup_mocks '/something_tags/1', :something_tag, @tag
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
context "urligence" do
|
|
117
|
+
should "use the name of the symbol as the url fragment" do
|
|
118
|
+
assert_equal @expected_path, @controller.urligence([:something_tag, @tag], :path)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
context "smart_url" do
|
|
123
|
+
should "return the correct path" do
|
|
124
|
+
assert_equal @expected_url, @controller.smart_url([:something_tag, @tag])
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
context "smart_path" do
|
|
129
|
+
should "return the correct path" do
|
|
130
|
+
assert_equal @expected_path, @controller.smart_path([:something_tag, @tag])
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
context "with array parameters and a namespace" do
|
|
136
|
+
setup do
|
|
137
|
+
setup_mocks '/admin/something_tags/1', :admin_something_tag, @tag
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
should "return the correct url" do
|
|
141
|
+
assert_equal @expected_path, @controller.urligence(:admin, [:something_tag, @tag], :path)
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
context "with array parameters, a namespace, and an ending symbol" do
|
|
146
|
+
setup do
|
|
147
|
+
setup_mocks '/admin/something_tags/1/photos', :admin_something_tag_photos, @tag
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
should "return the correct url" do
|
|
151
|
+
assert_equal @expected_path, @controller.urligence(:admin, [:something_tag, @tag], :photos, :path)
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
context "with array parameters, a symbol namespace, and normal model parameters" do
|
|
156
|
+
setup do
|
|
157
|
+
setup_mocks '/admin/something_tags/1/photos/1', :admin_something_tag_photo, @tag, @photo
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
should "return the correct url" do
|
|
161
|
+
assert_equal @expected_path, @controller.urligence(:admin, [:something_tag, @tag], @photo, :path)
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
context "hash_for" do
|
|
166
|
+
context "url" do
|
|
167
|
+
setup do
|
|
168
|
+
@controller.stubs(:hash_for_photo_tag_url).with(:id => @tag.to_param, :photo_id => @photo.to_param).returns("something")
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
should "return the correct hash" do
|
|
172
|
+
assert_equal "something", @controller.hash_for_smart_url(@photo, @tag)
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
context "path" do
|
|
177
|
+
setup do
|
|
178
|
+
@photo_tag = stub(:class => stub(:name => "PhotoTag"), :to_param => 'awesomestuff')
|
|
179
|
+
@controller.stubs(:hash_for_photo_tag_path).with(:id => @tag.to_param, :photo_id => @photo.to_param).returns("something")
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
should "return the correct hash" do
|
|
183
|
+
assert_equal "something", @controller.hash_for_smart_path(@photo, [:tag, @photo_tag])
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
context "collection path" do
|
|
188
|
+
setup do
|
|
189
|
+
@controller.stubs(:hash_for_photos_path).with({}).returns('something')
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
should "call the correct methods" do
|
|
193
|
+
assert_equal 'something', @controller.hash_for_smart_path(:photos)
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
private
|
|
199
|
+
def setup_mocks(expected_path, method, *params)
|
|
200
|
+
@expected_path = expected_path
|
|
201
|
+
@controller.stubs("#{method}_path".to_sym).with(*params).returns(@expected_path)
|
|
202
|
+
@controller.stubs("#{method}_url".to_sym).with(*params).returns(@expected_url = "http://localhost#{@expected_path}")
|
|
203
|
+
@controller.stubs("hash_for_#{method}_url".to_sym).with(*params).returns(@expected_hash = @expected_url)
|
|
204
|
+
end
|
|
205
|
+
end
|