nileshtrivedi-lp_resource_builder 0.5.1
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 +326 -0
- data/Rakefile +35 -0
- data/generators/scaffold_resource/USAGE +29 -0
- data/generators/scaffold_resource/scaffold_resource_generator.rb +183 -0
- data/generators/scaffold_resource/templates/controller.rb +69 -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 +22 -0
- data/generators/scaffold_resource/templates/migration.rb +15 -0
- data/generators/scaffold_resource/templates/model.rb +60 -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 +2 -0
- data/generators/scaffold_resource/templates/view_edit.haml +11 -0
- data/generators/scaffold_resource/templates/view_index.erb +2 -0
- data/generators/scaffold_resource/templates/view_index.haml +19 -0
- data/generators/scaffold_resource/templates/view_new.erb +2 -0
- data/generators/scaffold_resource/templates/view_new.haml +9 -0
- data/generators/scaffold_resource/templates/view_partial_edit.html.erb +18 -0
- data/generators/scaffold_resource/templates/view_partial_index.html.erb +28 -0
- data/generators/scaffold_resource/templates/view_partial_new.html.erb +13 -0
- data/generators/scaffold_resource/templates/view_partial_show.html.erb +9 -0
- data/generators/scaffold_resource/templates/view_show.erb +2 -0
- data/generators/scaffold_resource/templates/view_show.haml +9 -0
- data/init.rb +1 -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 +24 -0
- data/lib/resource_controller/controller.rb +69 -0
- data/lib/resource_controller/failable_action_options.rb +25 -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 +63 -0
- data/lib/resource_controller/helpers/singleton_customizations.rb +60 -0
- data/lib/resource_controller/helpers/urls.rb +128 -0
- data/lib/resource_controller/helpers.rb +28 -0
- data/lib/resource_controller/response_collector.rb +27 -0
- data/lib/resource_controller/singleton.rb +15 -0
- data/lib/resource_controller/version.rb +9 -0
- data/lib/resource_controller.rb +20 -0
- data/lib/urligence.rb +50 -0
- data/rails/init.rb +6 -0
- data/test/Rakefile +10 -0
- data/test/app/controllers/accounts_controller.rb +6 -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/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 +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/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/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/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/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/boot.rb +109 -0
- data/test/config/database.yml +13 -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 +58 -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/schema.rb +72 -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/images.yml +6 -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/fixtures/users.yml +5 -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/images_controller_test.rb +37 -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 +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 +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/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
- data/test/vendor/plugins/shoulda/lib/shoulda.rb +43 -0
- metadata +342 -0
@@ -0,0 +1,57 @@
|
|
1
|
+
require File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../test_helper'
|
2
|
+
require '<%= controller_file_path %>_controller'
|
3
|
+
|
4
|
+
# Re-raise errors caught by the controller.
|
5
|
+
class <%= controller_class_name %>Controller; def rescue_action(e) raise e end; end
|
6
|
+
|
7
|
+
class <%= controller_class_name %>ControllerTest < Test::Unit::TestCase
|
8
|
+
fixtures :<%= table_name %>
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@controller = <%= controller_class_name %>Controller.new
|
12
|
+
@request = ActionController::TestRequest.new
|
13
|
+
@response = ActionController::TestResponse.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_get_index
|
17
|
+
get :index
|
18
|
+
assert_response :success
|
19
|
+
assert assigns(:<%= table_name %>)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_get_new
|
23
|
+
get :new
|
24
|
+
assert_response :success
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_should_create_<%= file_name %>
|
28
|
+
old_count = <%= class_name %>.count
|
29
|
+
post :create, :<%= file_name %> => { }
|
30
|
+
assert_equal old_count+1, <%= class_name %>.count
|
31
|
+
|
32
|
+
assert_redirected_to <%= file_name %>_path(assigns(:<%= file_name %>))
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_should_show_<%= file_name %>
|
36
|
+
get :show, :id => 1
|
37
|
+
assert_response :success
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_should_get_edit
|
41
|
+
get :edit, :id => 1
|
42
|
+
assert_response :success
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_should_update_<%= file_name %>
|
46
|
+
put :update, :id => 1, :<%= file_name %> => { }
|
47
|
+
assert_redirected_to <%= file_name %>_path(assigns(:<%= file_name %>))
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_destroy_<%= file_name %>
|
51
|
+
old_count = <%= class_name %>.count
|
52
|
+
delete :destroy, :id => 1
|
53
|
+
assert_equal old_count-1, <%= class_name %>.count
|
54
|
+
|
55
|
+
assert_redirected_to <%= table_name %>_path
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module <%= controller_class_name %>Helper
|
2
|
+
def safe_create_link
|
3
|
+
return link_to('New <%= singular_name.titleize %>', new_object_url) if <%= class_name %>.new.creatable_by?(current_user)
|
4
|
+
end
|
5
|
+
|
6
|
+
def safe_show_link(<%= singular_name %>)
|
7
|
+
return link_to('Show', object_url(<%= singular_name %>)) if <%= singular_name %>.viewable_by?(current_user,"id")
|
8
|
+
end
|
9
|
+
|
10
|
+
def safe_edit_link(<%= singular_name %>)
|
11
|
+
return link_to('Edit', edit_object_url(<%= singular_name %>)) if <%= singular_name %>.editable_by?(current_user)
|
12
|
+
end
|
13
|
+
|
14
|
+
def safe_delete_link(<%= singular_name %>)
|
15
|
+
return link_to('Delete', object_url(<%= singular_name %>), :confirm => 'Are you sure?', :method => :delete) if <%= singular_name %>.deletable_by?(current_user)
|
16
|
+
end
|
17
|
+
|
18
|
+
def safe_field_value(<%= singular_name %>, field)
|
19
|
+
return h(<%= singular_name %>.read_attribute(field)) if <%= singular_name %>.viewable_by?(current_user,field)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class <%= migration_name %> < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :<%= table_name %>, :force => true do |t|
|
4
|
+
<% for attribute in attributes -%>
|
5
|
+
t.<%= attribute.type %> :<%= attribute.name %>
|
6
|
+
<% end -%>
|
7
|
+
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.down
|
13
|
+
drop_table :<%= table_name %>
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
class <%= class_name %> < ActiveRecord::Base
|
2
|
+
|
3
|
+
<% for attribute in attributes -%>
|
4
|
+
validates_presence_of :<%= attribute.name %>
|
5
|
+
<% end -%>
|
6
|
+
|
7
|
+
attr_accessible #Enable mass assignment for allowed fields manually in order to avoid security issues
|
8
|
+
|
9
|
+
# --- Hobo Permissions --- #
|
10
|
+
|
11
|
+
def creatable_by?(creator)
|
12
|
+
true
|
13
|
+
end
|
14
|
+
|
15
|
+
def updatable_by?(updater, new)
|
16
|
+
true
|
17
|
+
end
|
18
|
+
|
19
|
+
def deletable_by?(deleter)
|
20
|
+
true
|
21
|
+
end
|
22
|
+
|
23
|
+
def viewable_by?(viewer, field)
|
24
|
+
true
|
25
|
+
end
|
26
|
+
|
27
|
+
def editable_by?(editor)
|
28
|
+
#whether the edit link should be made visible to 'editor' user
|
29
|
+
#this is different from updatable_by? because user may have the permission to change some of the fields.
|
30
|
+
#TODO: investigate how Hobo determines whether to show edit link or not -> Hobo fakes an edit to use updatable_by? by setting the field to 'Hobo:Undefined'
|
31
|
+
true
|
32
|
+
end
|
33
|
+
|
34
|
+
def same_fields?(other, *fields)
|
35
|
+
return true if other.nil?
|
36
|
+
|
37
|
+
fields = fields.flatten
|
38
|
+
fields.all?{|f| self.send(f) == other.send(f)}
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def only_changed_fields?(other, *changed_fields)
|
43
|
+
return true if other.nil?
|
44
|
+
|
45
|
+
changed_fields = changed_fields.flatten.*.to_s
|
46
|
+
all_cols = self.class.columns.*.name - []
|
47
|
+
all_cols.all?{|c| c.in?(changed_fields) || self.send(c) == other.send(c) }
|
48
|
+
end
|
49
|
+
|
50
|
+
protected
|
51
|
+
def validate
|
52
|
+
<% for attribute in attributes.select {|v| (v.name =~ /email$/ )} -%>
|
53
|
+
errors.add(:<%= attribute.name %>, "is not valid (use abc@abc.com)") unless <%= attribute.name %> =~ /\A([-a-z0-9]+[\w\.\-\+]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
|
54
|
+
<% end -%>
|
55
|
+
|
56
|
+
<% for attribute in attributes.select {|v| (v.name =~ /(website|url)$/ )} -%>
|
57
|
+
errors.add(:<%= attribute.name %>, "is not valid (use http://www.abc.com)") unless <%= attribute.name %> =~ /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
|
58
|
+
<% end -%>
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class <%= migration_name %> < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :<%= table_name %>, :force => true do |t|
|
4
|
+
<% for attribute in attributes -%>
|
5
|
+
t.column :<%= attribute.name %>, :<%= attribute.type %>
|
6
|
+
<% end -%>
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.down
|
11
|
+
drop_table :<%= table_name %>
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,255 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../spec_helper')
|
2
|
+
|
3
|
+
describe <%= controller_class_name %>Controller do
|
4
|
+
describe "handling GET /<%= table_name %>" do
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
@<%= file_name %> = mock_model(<%= controller_class_name.singularize %>)
|
8
|
+
<%= controller_class_name.singularize %>.stub!(:find).and_return([@<%= file_name %>])
|
9
|
+
end
|
10
|
+
|
11
|
+
def do_get
|
12
|
+
get :index
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be successful" do
|
16
|
+
do_get
|
17
|
+
response.should be_success
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should render index template" do
|
21
|
+
do_get
|
22
|
+
response.should render_template('index')
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should find all <%= table_name %>" do
|
26
|
+
<%= controller_class_name.singularize %>.should_receive(:find).with(:all).and_return([@<%= file_name %>])
|
27
|
+
do_get
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should assign the found <%= table_name %> for the view" do
|
31
|
+
do_get
|
32
|
+
assigns[:<%= table_name %>].should == [@<%= file_name %>]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "handling GET /<%= table_name %>/1" do
|
37
|
+
|
38
|
+
before(:each) do
|
39
|
+
@<%= file_name %> = mock_model(<%= controller_class_name.singularize %>)
|
40
|
+
<%= controller_class_name.singularize %>.stub!(:find).and_return(@<%= file_name %>)
|
41
|
+
end
|
42
|
+
|
43
|
+
def do_get
|
44
|
+
get :show, :id => "1"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should be successful" do
|
48
|
+
do_get
|
49
|
+
response.should be_success
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should render show template" do
|
53
|
+
do_get
|
54
|
+
response.should render_template('show')
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should find the <%= file_name %> requested" do
|
58
|
+
<%= controller_class_name.singularize %>.should_receive(:find).with("1").and_return(@<%= file_name %>)
|
59
|
+
do_get
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should assign the found <%= file_name %> for the view" do
|
63
|
+
do_get
|
64
|
+
assigns[:<%= file_name %>].should equal(@<%= file_name %>)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "handling GET /<%= table_name %>/new" do
|
69
|
+
|
70
|
+
before(:each) do
|
71
|
+
@<%= file_name %> = mock_model(<%= controller_class_name.singularize %>)
|
72
|
+
<%= controller_class_name.singularize %>.stub!(:new).and_return(@<%= file_name %>)
|
73
|
+
end
|
74
|
+
|
75
|
+
def do_get
|
76
|
+
get :new
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should be successful" do
|
80
|
+
do_get
|
81
|
+
response.should be_success
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should render new template" do
|
85
|
+
do_get
|
86
|
+
response.should render_template('new')
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should create an new <%= file_name %>" do
|
90
|
+
<%= controller_class_name.singularize %>.should_receive(:new).and_return(@<%= file_name %>)
|
91
|
+
do_get
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should not save the new <%= file_name %>" do
|
95
|
+
@<%= file_name %>.should_not_receive(:save)
|
96
|
+
do_get
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should assign the new <%= file_name %> for the view" do
|
100
|
+
do_get
|
101
|
+
assigns[:<%= file_name %>].should equal(@<%= file_name %>)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "handling GET /<%= table_name %>/1/edit" do
|
106
|
+
|
107
|
+
before(:each) do
|
108
|
+
@<%= file_name %> = mock_model(<%= controller_class_name.singularize %>)
|
109
|
+
<%= controller_class_name.singularize %>.stub!(:find).and_return(@<%= file_name %>)
|
110
|
+
end
|
111
|
+
|
112
|
+
def do_get
|
113
|
+
get :edit, :id => "1"
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should be successful" do
|
117
|
+
do_get
|
118
|
+
response.should be_success
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should render edit template" do
|
122
|
+
do_get
|
123
|
+
response.should render_template('edit')
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should find the <%= file_name %> requested" do
|
127
|
+
<%= controller_class_name.singularize %>.should_receive(:find).and_return(@<%= file_name %>)
|
128
|
+
do_get
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should assign the found <%= controller_class_name %> for the view" do
|
132
|
+
do_get
|
133
|
+
assigns[:<%= file_name %>].should equal(@<%= file_name %>)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
describe "handling POST /<%= table_name %>" do
|
138
|
+
|
139
|
+
before(:each) do
|
140
|
+
@<%= file_name %> = mock_model(<%= controller_class_name.singularize %>, :to_param => "1")
|
141
|
+
<%= controller_class_name.singularize %>.stub!(:new).and_return(@<%= file_name %>)
|
142
|
+
end
|
143
|
+
|
144
|
+
describe "with successful save" do
|
145
|
+
|
146
|
+
def do_post
|
147
|
+
@<%= file_name %>.should_receive(:save).and_return(true)
|
148
|
+
post :create, :<%= file_name %> => {}
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should create a new <%= file_name %>" do
|
152
|
+
<%= controller_class_name.singularize %>.should_receive(:new).with({}).and_return(@<%= file_name %>)
|
153
|
+
do_post
|
154
|
+
end
|
155
|
+
|
156
|
+
it "should redirect to the new <%= file_name %>" do
|
157
|
+
do_post
|
158
|
+
response.should redirect_to(<%= table_name.singularize %>_url("1"))
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
describe "with failed save" do
|
164
|
+
|
165
|
+
def do_post
|
166
|
+
@<%= file_name %>.should_receive(:save).and_return(false)
|
167
|
+
post :create, :<%= file_name %> => {}
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should re-render 'new'" do
|
171
|
+
do_post
|
172
|
+
response.should render_template('new')
|
173
|
+
end
|
174
|
+
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
describe "handling PUT /<%= table_name %>/1" do
|
179
|
+
|
180
|
+
before(:each) do
|
181
|
+
@<%= file_name %> = mock_model(<%= controller_class_name.singularize %>, :to_param => "1")
|
182
|
+
<%= controller_class_name.singularize %>.stub!(:find).and_return(@<%= file_name %>)
|
183
|
+
end
|
184
|
+
|
185
|
+
describe "with successful update" do
|
186
|
+
|
187
|
+
def do_put
|
188
|
+
@<%= file_name %>.should_receive(:update_attributes).and_return(true)
|
189
|
+
put :update, :id => "1"
|
190
|
+
end
|
191
|
+
|
192
|
+
it "should find the <%= file_name %> requested" do
|
193
|
+
<%= controller_class_name.singularize %>.should_receive(:find).with("1").and_return(@<%= file_name %>)
|
194
|
+
do_put
|
195
|
+
end
|
196
|
+
|
197
|
+
it "should update the found <%= file_name %>" do
|
198
|
+
do_put
|
199
|
+
assigns(:<%= file_name %>).should equal(@<%= file_name %>)
|
200
|
+
end
|
201
|
+
|
202
|
+
it "should assign the found <%= file_name %> for the view" do
|
203
|
+
do_put
|
204
|
+
assigns(:<%= file_name %>).should equal(@<%= file_name %>)
|
205
|
+
end
|
206
|
+
|
207
|
+
it "should redirect to the <%= file_name %>" do
|
208
|
+
do_put
|
209
|
+
response.should redirect_to(<%= table_name.singularize %>_url("1"))
|
210
|
+
end
|
211
|
+
|
212
|
+
end
|
213
|
+
|
214
|
+
describe "with failed update" do
|
215
|
+
|
216
|
+
def do_put
|
217
|
+
@<%= file_name %>.should_receive(:update_attributes).and_return(false)
|
218
|
+
put :update, :id => "1"
|
219
|
+
end
|
220
|
+
|
221
|
+
it "should re-render 'edit'" do
|
222
|
+
do_put
|
223
|
+
response.should render_template('edit')
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
describe "handling DELETE /<%= table_name %>/1" do
|
230
|
+
|
231
|
+
before(:each) do
|
232
|
+
@<%= file_name %> = mock_model(<%= controller_class_name.singularize %>, :destroy => true)
|
233
|
+
<%= controller_class_name.singularize %>.stub!(:find).and_return(@<%= file_name %>)
|
234
|
+
end
|
235
|
+
|
236
|
+
def do_delete
|
237
|
+
delete :destroy, :id => "1"
|
238
|
+
end
|
239
|
+
|
240
|
+
it "should find the <%= file_name %> requested" do
|
241
|
+
<%= controller_class_name.singularize %>.should_receive(:find).with("1").and_return(@<%= file_name %>)
|
242
|
+
do_delete
|
243
|
+
end
|
244
|
+
|
245
|
+
it "should call destroy on the found <%= file_name %>" do
|
246
|
+
@<%= file_name %>.should_receive(:destroy).and_return(true)
|
247
|
+
do_delete
|
248
|
+
end
|
249
|
+
|
250
|
+
it "should redirect to the <%= table_name %> list" do
|
251
|
+
do_delete
|
252
|
+
response.should redirect_to(<%= table_name %>_url)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../spec_helper')
|
2
|
+
|
3
|
+
describe <%= controller_class_name %>Helper do
|
4
|
+
|
5
|
+
#Delete this example and add some real ones or delete this file
|
6
|
+
it "should be included in the object returned by #helper" do
|
7
|
+
included_modules = (class << helper; self; end).send :included_modules
|
8
|
+
included_modules.should include(<%= controller_class_name %>Helper)
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../spec_helper')
|
2
|
+
|
3
|
+
describe <%= controller_class_name %>Controller do
|
4
|
+
describe "route generation" do
|
5
|
+
|
6
|
+
it "should map { :controller => '<%= table_name %>', :action => 'index' } to /<%= table_name %>" do
|
7
|
+
route_for(:controller => "<%= table_name %>", :action => "index").should == "/<%= table_name %>"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should map { :controller => '<%= table_name %>', :action => 'new' } to /<%= table_name %>/new" do
|
11
|
+
route_for(:controller => "<%= table_name %>", :action => "new").should == "/<%= table_name %>/new"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should map { :controller => '<%= table_name %>', :action => 'show', :id => 1 } to /<%= table_name %>/1" do
|
15
|
+
route_for(:controller => "<%= table_name %>", :action => "show", :id => 1).should == "/<%= table_name %>/1"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should map { :controller => '<%= table_name %>', :action => 'edit', :id => 1 } to /<%= table_name %>/1<%= resource_edit_path %>" do
|
19
|
+
route_for(:controller => "<%= table_name %>", :action => "edit", :id => 1).should == "/<%= table_name %>/1<%= resource_edit_path %>"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should map { :controller => '<%= table_name %>', :action => 'update', :id => 1} to /<%= table_name %>/1" do
|
23
|
+
route_for(:controller => "<%= table_name %>", :action => "update", :id => 1).should == "/<%= table_name %>/1"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should map { :controller => '<%= table_name %>', :action => 'destroy', :id => 1} to /<%= table_name %>/1" do
|
27
|
+
route_for(:controller => "<%= table_name %>", :action => "destroy", :id => 1).should == "/<%= table_name %>/1"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "route recognition" do
|
32
|
+
|
33
|
+
it "should generate params { :controller => '<%= table_name %>', action => 'index' } from GET /<%= table_name %>" do
|
34
|
+
params_from(:get, "/<%= table_name %>").should == {:controller => "<%= table_name %>", :action => "index"}
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should generate params { :controller => '<%= table_name %>', action => 'new' } from GET /<%= table_name %>/new" do
|
38
|
+
params_from(:get, "/<%= table_name %>/new").should == {:controller => "<%= table_name %>", :action => "new"}
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should generate params { :controller => '<%= table_name %>', action => 'create' } from POST /<%= table_name %>" do
|
42
|
+
params_from(:post, "/<%= table_name %>").should == {:controller => "<%= table_name %>", :action => "create"}
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should generate params { :controller => '<%= table_name %>', action => 'show', id => '1' } from GET /<%= table_name %>/1" do
|
46
|
+
params_from(:get, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "show", :id => "1"}
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should generate params { :controller => '<%= table_name %>', action => 'edit', id => '1' } from GET /<%= table_name %>/1;edit" do
|
50
|
+
params_from(:get, "/<%= table_name %>/1<%= resource_edit_path %>").should == {:controller => "<%= table_name %>", :action => "edit", :id => "1"}
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should generate params { :controller => '<%= table_name %>', action => 'update', id => '1' } from PUT /<%= table_name %>/1" do
|
54
|
+
params_from(:put, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "update", :id => "1"}
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should generate params { :controller => '<%= table_name %>', action => 'destroy', id => '1' } from DELETE /<%= table_name %>/1" do
|
58
|
+
params_from(:delete, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "destroy", :id => "1"}
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../spec_helper')
|
2
|
+
|
3
|
+
describe <%= class_name %> do
|
4
|
+
before(:each) do
|
5
|
+
@<%= file_name %> = <%= class_name %>.new
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should be valid" do
|
9
|
+
@<%= file_name %>.should be_valid
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../../spec_helper')
|
2
|
+
|
3
|
+
describe "/<%= table_name %>/edit.<%= default_file_extension %>" do
|
4
|
+
include <%= controller_class_name %>Helper
|
5
|
+
|
6
|
+
before do
|
7
|
+
@<%= file_name %> = mock_model(<%= class_name %>)
|
8
|
+
<% for attribute in attributes -%>
|
9
|
+
@<%= file_name %>.stub!(:<%= attribute.name %>).and_return(<%= attribute.default_value %>)
|
10
|
+
<% end -%>
|
11
|
+
assigns[:<%= file_name %>] = @<%= file_name %>
|
12
|
+
|
13
|
+
template.should_receive(:object_url).twice.and_return(<%= file_name %>_path(@<%= file_name %>))
|
14
|
+
template.should_receive(:collection_url).and_return(<%= file_name.pluralize %>_path)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should render edit form" do
|
18
|
+
render "/<%= table_name %>/edit.<%= default_file_extension %>"
|
19
|
+
|
20
|
+
response.should have_tag("form[action=#{<%= file_name %>_path(@<%= file_name %>)}][method=post]") do
|
21
|
+
<% for attribute in attributes -%><% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%>
|
22
|
+
with_tag('<%= attribute.input_type -%>#<%= file_name %>_<%= attribute.name %>[name=?]', "<%= file_name %>[<%= attribute.name %>]")
|
23
|
+
<% end -%><% end -%>
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../../spec_helper')
|
2
|
+
|
3
|
+
describe "/<%= table_name %>/index.<%= default_file_extension %>" do
|
4
|
+
include <%= controller_class_name %>Helper
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
<% [98,99].each do |id| -%>
|
8
|
+
<%= file_name %>_<%= id %> = mock_model(<%= class_name %>)
|
9
|
+
<% for attribute in attributes -%>
|
10
|
+
<%= file_name %>_<%= id %>.should_receive(:<%= attribute.name %>).and_return(<%= attribute.default_value %>)
|
11
|
+
<% end -%><% end %>
|
12
|
+
assigns[:<%= table_name %>] = [<%= file_name %>_98, <%= file_name %>_99]
|
13
|
+
|
14
|
+
template.stub!(:object_url).and_return(<%= file_name %>_path(@<%= file_name %>))
|
15
|
+
template.stub!(:new_object_url).and_return(new_<%= file_name %>_path)
|
16
|
+
template.stub!(:edit_object_url).and_return(edit_<%= file_name %>_path(@<%= file_name %>))
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should render list of <%= table_name %>" do
|
20
|
+
render "/<%= table_name %>/index.<%= default_file_extension %>"
|
21
|
+
<% for attribute in attributes -%><% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%>
|
22
|
+
response.should have_tag("tr>td", <%= attribute.default_value %>, 2)
|
23
|
+
<% end -%><% end -%>
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../../spec_helper')
|
2
|
+
|
3
|
+
describe "/<%= table_name %>/new.<%= default_file_extension %>" do
|
4
|
+
include <%= controller_class_name %>Helper
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
@<%= file_name %> = mock_model(<%= class_name %>)
|
8
|
+
@<%= file_name %>.stub!(:new_record?).and_return(true)
|
9
|
+
<% for attribute in attributes -%>
|
10
|
+
@<%= file_name %>.stub!(:<%= attribute.name %>).and_return(<%= attribute.default_value %>)
|
11
|
+
<% end -%>
|
12
|
+
assigns[:<%= file_name %>] = @<%= file_name %>
|
13
|
+
|
14
|
+
|
15
|
+
template.stub!(:object_url).and_return(<%= file_name %>_path(@<%= file_name %>))
|
16
|
+
template.stub!(:collection_url).and_return(<%= file_name.pluralize %>_path)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should render new form" do
|
20
|
+
render "/<%= table_name %>/new.<%= default_file_extension %>"
|
21
|
+
|
22
|
+
response.should have_tag("form[action=?][method=post]", <%= table_name %>_path) do
|
23
|
+
<% for attribute in attributes -%><% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%>
|
24
|
+
with_tag("<%= attribute.input_type -%>#<%= file_name %>_<%= attribute.name %>[name=?]", "<%= file_name %>[<%= attribute.name %>]")
|
25
|
+
<% end -%><% end -%>
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../../spec_helper')
|
2
|
+
|
3
|
+
describe "/<%= table_name %>/show.<%= default_file_extension %>" do
|
4
|
+
include <%= controller_class_name %>Helper
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
@<%= file_name %> = mock_model(<%= class_name %>)
|
8
|
+
<% for attribute in attributes -%>
|
9
|
+
@<%= file_name %>.stub!(:<%= attribute.name %>).and_return(<%= attribute.default_value %>)
|
10
|
+
<% end -%>
|
11
|
+
|
12
|
+
assigns[:<%= file_name %>] = @<%= file_name %>
|
13
|
+
|
14
|
+
template.stub!(:edit_object_url).and_return(edit_<%= file_name %>_path(@<%= file_name %>))
|
15
|
+
template.stub!(:collection_url).and_return(<%= file_name.pluralize %>_path)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should render attributes in <p>" do
|
19
|
+
render "/<%= table_name %>/show.<%= default_file_extension %>"
|
20
|
+
<% for attribute in attributes -%><% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%>
|
21
|
+
response.should have_text(/<%= Regexp.escape(attribute.default_value)[1..-2]%>/)
|
22
|
+
<% end -%><% end -%>
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../test_helper'
|
2
|
+
require '<%= controller_file_path %>_controller'
|
3
|
+
|
4
|
+
# Re-raise errors caught by the controller.
|
5
|
+
class <%= controller_class_name %>Controller; def rescue_action(e) raise e end; end
|
6
|
+
|
7
|
+
class <%= controller_class_name %>ControllerTest < Test::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
@controller = <%= controller_class_name %>Controller.new
|
10
|
+
@request = ActionController::TestRequest.new
|
11
|
+
@response = ActionController::TestResponse.new
|
12
|
+
@<%= singular_name %> = <%= plural_name %> :one
|
13
|
+
end
|
14
|
+
|
15
|
+
should_be_restful do |resource|
|
16
|
+
resource.formats = [:html]
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|