giraffesoft-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.
Files changed (208) hide show
  1. data/LICENSE +22 -0
  2. data/README +1 -0
  3. data/README.rdoc +282 -0
  4. data/Rakefile +35 -0
  5. data/generators/scaffold_resource/USAGE +29 -0
  6. data/generators/scaffold_resource/scaffold_resource_generator.rb +179 -0
  7. data/generators/scaffold_resource/templates/controller.rb +2 -0
  8. data/generators/scaffold_resource/templates/fixtures.yml +10 -0
  9. data/generators/scaffold_resource/templates/functional_test.rb +57 -0
  10. data/generators/scaffold_resource/templates/helper.rb +2 -0
  11. data/generators/scaffold_resource/templates/migration.rb +15 -0
  12. data/generators/scaffold_resource/templates/model.rb +2 -0
  13. data/generators/scaffold_resource/templates/old_migration.rb +13 -0
  14. data/generators/scaffold_resource/templates/rspec/functional_spec.rb +255 -0
  15. data/generators/scaffold_resource/templates/rspec/helper_spec.rb +11 -0
  16. data/generators/scaffold_resource/templates/rspec/routing_spec.rb +61 -0
  17. data/generators/scaffold_resource/templates/rspec/unit_spec.rb +11 -0
  18. data/generators/scaffold_resource/templates/rspec/views/edit_spec.rb +28 -0
  19. data/generators/scaffold_resource/templates/rspec/views/index_spec.rb +26 -0
  20. data/generators/scaffold_resource/templates/rspec/views/new_spec.rb +30 -0
  21. data/generators/scaffold_resource/templates/rspec/views/show_spec.rb +25 -0
  22. data/generators/scaffold_resource/templates/shoulda_functional_test.rb +19 -0
  23. data/generators/scaffold_resource/templates/unit_test.rb +7 -0
  24. data/generators/scaffold_resource/templates/view__form.erb +6 -0
  25. data/generators/scaffold_resource/templates/view__form.haml +5 -0
  26. data/generators/scaffold_resource/templates/view_edit.erb +16 -0
  27. data/generators/scaffold_resource/templates/view_edit.haml +11 -0
  28. data/generators/scaffold_resource/templates/view_index.erb +22 -0
  29. data/generators/scaffold_resource/templates/view_index.haml +19 -0
  30. data/generators/scaffold_resource/templates/view_new.erb +12 -0
  31. data/generators/scaffold_resource/templates/view_new.haml +9 -0
  32. data/generators/scaffold_resource/templates/view_show.erb +9 -0
  33. data/generators/scaffold_resource/templates/view_show.haml +9 -0
  34. data/init.rb +1 -0
  35. data/lib/resource_controller/accessors.rb +77 -0
  36. data/lib/resource_controller/action_options.rb +40 -0
  37. data/lib/resource_controller/actions.rb +75 -0
  38. data/lib/resource_controller/base.rb +15 -0
  39. data/lib/resource_controller/class_methods.rb +22 -0
  40. data/lib/resource_controller/controller.rb +63 -0
  41. data/lib/resource_controller/failable_action_options.rb +25 -0
  42. data/lib/resource_controller/helpers/current_objects.rb +69 -0
  43. data/lib/resource_controller/helpers/internal.rb +76 -0
  44. data/lib/resource_controller/helpers/nested.rb +45 -0
  45. data/lib/resource_controller/helpers/urls.rb +124 -0
  46. data/lib/resource_controller/helpers.rb +28 -0
  47. data/lib/resource_controller/response_collector.rb +27 -0
  48. data/lib/resource_controller/version.rb +9 -0
  49. data/lib/resource_controller.rb +15 -0
  50. data/lib/tasks/gem.rake +67 -0
  51. data/lib/urligence.rb +50 -0
  52. data/rails/init.rb +6 -0
  53. data/test/Rakefile +10 -0
  54. data/test/app/controllers/application.rb +7 -0
  55. data/test/app/controllers/cms/options_controller.rb +3 -0
  56. data/test/app/controllers/cms/products_controller.rb +3 -0
  57. data/test/app/controllers/comments_controller.rb +3 -0
  58. data/test/app/controllers/people_controller.rb +9 -0
  59. data/test/app/controllers/photos_controller.rb +11 -0
  60. data/test/app/controllers/posts_controller.rb +10 -0
  61. data/test/app/controllers/projects_controller.rb +3 -0
  62. data/test/app/controllers/somethings_controller.rb +3 -0
  63. data/test/app/controllers/tags_controller.rb +13 -0
  64. data/test/app/controllers/users_controller.rb +12 -0
  65. data/test/app/helpers/application_helper.rb +3 -0
  66. data/test/app/helpers/cms/products_helper.rb +2 -0
  67. data/test/app/helpers/comments_helper.rb +2 -0
  68. data/test/app/helpers/options_helper.rb +2 -0
  69. data/test/app/helpers/people_helper.rb +2 -0
  70. data/test/app/helpers/photos_helper.rb +2 -0
  71. data/test/app/helpers/posts_helper.rb +2 -0
  72. data/test/app/helpers/projects_helper.rb +2 -0
  73. data/test/app/helpers/somethings_helper.rb +2 -0
  74. data/test/app/helpers/tags_helper.rb +2 -0
  75. data/test/app/helpers/users_helper.rb +2 -0
  76. data/test/app/models/account.rb +3 -0
  77. data/test/app/models/comment.rb +3 -0
  78. data/test/app/models/option.rb +3 -0
  79. data/test/app/models/photo.rb +4 -0
  80. data/test/app/models/post.rb +3 -0
  81. data/test/app/models/product.rb +3 -0
  82. data/test/app/models/project.rb +2 -0
  83. data/test/app/models/something.rb +2 -0
  84. data/test/app/models/tag.rb +3 -0
  85. data/test/app/views/cms/options/edit.rhtml +17 -0
  86. data/test/app/views/cms/options/index.rhtml +20 -0
  87. data/test/app/views/cms/options/new.rhtml +16 -0
  88. data/test/app/views/cms/options/show.rhtml +8 -0
  89. data/test/app/views/cms/products/edit.rhtml +17 -0
  90. data/test/app/views/cms/products/index.rhtml +20 -0
  91. data/test/app/views/cms/products/new.rhtml +16 -0
  92. data/test/app/views/cms/products/show.rhtml +8 -0
  93. data/test/app/views/comments/edit.rhtml +27 -0
  94. data/test/app/views/comments/index.rhtml +24 -0
  95. data/test/app/views/comments/new.rhtml +26 -0
  96. data/test/app/views/comments/show.rhtml +18 -0
  97. data/test/app/views/layouts/application.rhtml +17 -0
  98. data/test/app/views/layouts/comments.rhtml +17 -0
  99. data/test/app/views/layouts/options.rhtml +17 -0
  100. data/test/app/views/layouts/people.rhtml +17 -0
  101. data/test/app/views/layouts/photos.rhtml +17 -0
  102. data/test/app/views/layouts/projects.rhtml +17 -0
  103. data/test/app/views/layouts/somethings.rhtml +17 -0
  104. data/test/app/views/layouts/tags.rhtml +17 -0
  105. data/test/app/views/people/edit.rhtml +17 -0
  106. data/test/app/views/people/index.rhtml +20 -0
  107. data/test/app/views/people/new.rhtml +16 -0
  108. data/test/app/views/people/show.rhtml +8 -0
  109. data/test/app/views/photos/edit.rhtml +17 -0
  110. data/test/app/views/photos/index.rhtml +20 -0
  111. data/test/app/views/photos/new.rhtml +16 -0
  112. data/test/app/views/photos/show.rhtml +8 -0
  113. data/test/app/views/posts/edit.rhtml +22 -0
  114. data/test/app/views/posts/index.rhtml +22 -0
  115. data/test/app/views/posts/new.rhtml +21 -0
  116. data/test/app/views/posts/show.rhtml +13 -0
  117. data/test/app/views/projects/edit.rhtml +17 -0
  118. data/test/app/views/projects/index.rhtml +20 -0
  119. data/test/app/views/projects/new.rhtml +16 -0
  120. data/test/app/views/projects/show.rhtml +8 -0
  121. data/test/app/views/somethings/edit.rhtml +17 -0
  122. data/test/app/views/somethings/index.rhtml +20 -0
  123. data/test/app/views/somethings/new.rhtml +16 -0
  124. data/test/app/views/somethings/show.rhtml +8 -0
  125. data/test/app/views/tags/edit.rhtml +17 -0
  126. data/test/app/views/tags/index.rhtml +20 -0
  127. data/test/app/views/tags/index.rjs +0 -0
  128. data/test/app/views/tags/new.rhtml +16 -0
  129. data/test/app/views/tags/show.rhtml +8 -0
  130. data/test/app/views/users/edit.rhtml +17 -0
  131. data/test/app/views/users/index.rhtml +20 -0
  132. data/test/app/views/users/new.rhtml +16 -0
  133. data/test/app/views/users/show.rhtml +8 -0
  134. data/test/config/boot.rb +109 -0
  135. data/test/config/database.yml +16 -0
  136. data/test/config/environment.rb +64 -0
  137. data/test/config/environments/development.rb +21 -0
  138. data/test/config/environments/test.rb +19 -0
  139. data/test/config/routes.rb +51 -0
  140. data/test/db/migrate/001_create_posts.rb +12 -0
  141. data/test/db/migrate/002_create_products.rb +11 -0
  142. data/test/db/migrate/003_create_comments.rb +13 -0
  143. data/test/db/migrate/004_create_options.rb +12 -0
  144. data/test/db/migrate/005_create_photos.rb +11 -0
  145. data/test/db/migrate/006_create_tags.rb +17 -0
  146. data/test/db/migrate/007_create_somethings.rb +11 -0
  147. data/test/db/migrate/008_create_accounts.rb +11 -0
  148. data/test/db/migrate/009_add_account_id_to_photos.rb +9 -0
  149. data/test/db/migrate/010_create_projects.rb +11 -0
  150. data/test/db/schema.rb +65 -0
  151. data/test/script/console +3 -0
  152. data/test/script/destroy +3 -0
  153. data/test/script/generate +3 -0
  154. data/test/script/server +3 -0
  155. data/test/test/fixtures/accounts.yml +7 -0
  156. data/test/test/fixtures/comments.yml +11 -0
  157. data/test/test/fixtures/options.yml +9 -0
  158. data/test/test/fixtures/photos.yml +9 -0
  159. data/test/test/fixtures/photos_tags.yml +3 -0
  160. data/test/test/fixtures/posts.yml +9 -0
  161. data/test/test/fixtures/products.yml +7 -0
  162. data/test/test/fixtures/projects.yml +7 -0
  163. data/test/test/fixtures/somethings.yml +7 -0
  164. data/test/test/fixtures/tags.yml +7 -0
  165. data/test/test/functional/cms/options_controller_test.rb +23 -0
  166. data/test/test/functional/cms/products_controller_test.rb +23 -0
  167. data/test/test/functional/comments_controller_test.rb +26 -0
  168. data/test/test/functional/people_controller_test.rb +34 -0
  169. data/test/test/functional/photos_controller_test.rb +130 -0
  170. data/test/test/functional/posts_controller_test.rb +34 -0
  171. data/test/test/functional/projects_controller_test.rb +18 -0
  172. data/test/test/functional/somethings_controller_test.rb +28 -0
  173. data/test/test/functional/tags_controller_test.rb +64 -0
  174. data/test/test/functional/users_controller_test.rb +24 -0
  175. data/test/test/test_helper.rb +12 -0
  176. data/test/test/unit/accessors_test.rb +110 -0
  177. data/test/test/unit/account_test.rb +7 -0
  178. data/test/test/unit/action_options_test.rb +109 -0
  179. data/test/test/unit/base_test.rb +11 -0
  180. data/test/test/unit/comment_test.rb +10 -0
  181. data/test/test/unit/failable_action_options_test.rb +77 -0
  182. data/test/test/unit/helpers/current_objects_test.rb +127 -0
  183. data/test/test/unit/helpers/internal_test.rb +106 -0
  184. data/test/test/unit/helpers/nested_test.rb +82 -0
  185. data/test/test/unit/helpers/urls_test.rb +71 -0
  186. data/test/test/unit/helpers_test.rb +25 -0
  187. data/test/test/unit/option_test.rb +10 -0
  188. data/test/test/unit/photo_test.rb +10 -0
  189. data/test/test/unit/post_test.rb +10 -0
  190. data/test/test/unit/project_test.rb +10 -0
  191. data/test/test/unit/response_collector_test.rb +49 -0
  192. data/test/test/unit/something_test.rb +10 -0
  193. data/test/test/unit/tag_test.rb +10 -0
  194. data/test/test/unit/urligence_test.rb +203 -0
  195. data/test/vendor/plugins/shoulda/Rakefile +32 -0
  196. data/test/vendor/plugins/shoulda/bin/convert_to_should_syntax +40 -0
  197. data/test/vendor/plugins/shoulda/init.rb +3 -0
  198. data/test/vendor/plugins/shoulda/lib/shoulda/active_record_helpers.rb +580 -0
  199. data/test/vendor/plugins/shoulda/lib/shoulda/color.rb +77 -0
  200. data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/controller_tests.rb +467 -0
  201. data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/formats/html.rb +201 -0
  202. data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/formats/xml.rb +170 -0
  203. data/test/vendor/plugins/shoulda/lib/shoulda/gem/proc_extensions.rb +14 -0
  204. data/test/vendor/plugins/shoulda/lib/shoulda/gem/shoulda.rb +239 -0
  205. data/test/vendor/plugins/shoulda/lib/shoulda/general.rb +118 -0
  206. data/test/vendor/plugins/shoulda/lib/shoulda/private_helpers.rb +22 -0
  207. data/test/vendor/plugins/shoulda/lib/shoulda.rb +43 -0
  208. metadata +312 -0
@@ -0,0 +1,9 @@
1
+ module ResourceController
2
+ module VERSION
3
+ MAJOR = 0
4
+ MINOR = 4
5
+ TINY = 9
6
+
7
+ STRING = [MAJOR, MINOR, TINY].join('.')
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ module ResourceController
2
+ ACTIONS = [:index, :show, :new_action, :create, :edit, :update, :destroy].freeze
3
+ FAILABLE_ACTIONS = ACTIONS - [:index, :new_action, :edit].freeze
4
+ NAME_ACCESSORS = [:model_name, :route_name, :object_name]
5
+
6
+ module ActionControllerExtension
7
+ unloadable
8
+
9
+ def resource_controller
10
+ include ResourceController::Controller
11
+ end
12
+ end
13
+ end
14
+
15
+ require File.dirname(__FILE__)+'/../rails/init.rb' unless ActionController::Base.include?(Urligence)
@@ -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 :release => :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
@@ -0,0 +1,6 @@
1
+ ActionController::Base.class_eval do
2
+ include Urligence
3
+ helper_method :smart_url
4
+
5
+ extend ResourceController::ActionControllerExtension
6
+ end
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
@@ -0,0 +1,3 @@
1
+ class Cms::OptionsController < ResourceController::Base
2
+ belongs_to :product
3
+ end
@@ -0,0 +1,3 @@
1
+ class Cms::ProductsController < ResourceController::Base
2
+ create.flash_now 'something'
3
+ end
@@ -0,0 +1,3 @@
1
+ class CommentsController < ResourceController::Base
2
+ belongs_to :post
3
+ end
@@ -0,0 +1,9 @@
1
+ class PeopleController < ResourceController::Base
2
+ create.before :name_person
3
+ model_name :account
4
+
5
+ private
6
+ def name_person
7
+ @person.name = "Bob Loblaw"
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ class PhotosController < ResourceController::Base
2
+ actions :all, :except => :update
3
+
4
+ belongs_to :user
5
+ create.flash { "#{@photo.title} was created!" }
6
+
7
+ private
8
+ def parent_model
9
+ Account
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ class PostsController < ResourceController::Base
2
+ actions :all
3
+
4
+ create.before(:name_post) { @post.body = '...' }
5
+
6
+ private
7
+ def name_post
8
+ @post.title = 'a great post'
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ class ProjectsController < ApplicationController
2
+ resource_controller
3
+ end
@@ -0,0 +1,3 @@
1
+ class SomethingsController < ResourceController::Base
2
+ actions :index, :show
3
+ end
@@ -0,0 +1,13 @@
1
+ class TagsController < ResourceController::Base
2
+ belongs_to :photo
3
+
4
+ index.wants.js
5
+
6
+ index do
7
+ before { @products = Product.find :all }
8
+ end
9
+
10
+ create.after do
11
+ @photo.tags << @tag if parent_type == :photo
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ class UsersController < ResourceController::Base
2
+ object_name :dude
3
+ route_name :dude
4
+ private
5
+ def route_name
6
+ 'dude'
7
+ end
8
+
9
+ def model_name
10
+ 'account'
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ # Methods added to this helper will be available to all templates in the application.
2
+ module ApplicationHelper
3
+ end
@@ -0,0 +1,2 @@
1
+ module Cms::ProductsHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module CommentsHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module OptionsHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module PeopleHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module PhotosHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module PostsHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module ProjectsHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module SomethingsHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module TagsHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module UsersHelper
2
+ end
@@ -0,0 +1,3 @@
1
+ class Account < ActiveRecord::Base
2
+ has_many :photos
3
+ end
@@ -0,0 +1,3 @@
1
+ class Comment < ActiveRecord::Base
2
+ belongs_to :post
3
+ end
@@ -0,0 +1,3 @@
1
+ class Option < ActiveRecord::Base
2
+ belongs_to :product
3
+ end
@@ -0,0 +1,4 @@
1
+ class Photo < ActiveRecord::Base
2
+ has_and_belongs_to_many :tags
3
+ belongs_to :user, :class_name => "Account", :foreign_key => "account_id"
4
+ end
@@ -0,0 +1,3 @@
1
+ class Post < ActiveRecord::Base
2
+ has_many :comments
3
+ end
@@ -0,0 +1,3 @@
1
+ class Product < ActiveRecord::Base
2
+ has_many :options
3
+ end
@@ -0,0 +1,2 @@
1
+ class Project < ActiveRecord::Base
2
+ end
@@ -0,0 +1,2 @@
1
+ class Something < ActiveRecord::Base
2
+ end
@@ -0,0 +1,3 @@
1
+ class Tag < ActiveRecord::Base
2
+ has_and_belongs_to_many :photos
3
+ end
@@ -0,0 +1,17 @@
1
+ <h1>Editing option</h1>
2
+
3
+ <%= error_messages_for :option %>
4
+
5
+ <% form_for(:option, :url => object_url, :html => { :method => :put }) do |f| %>
6
+ <p>
7
+ <b>Title</b><br />
8
+ <%= f.text_field :title %>
9
+ </p>
10
+
11
+ <p>
12
+ <%= submit_tag "Update" %>
13
+ </p>
14
+ <% end %>
15
+
16
+ <%= link_to 'Show', object_url %> |
17
+ <%= link_to 'Back', collection_url %>
@@ -0,0 +1,20 @@
1
+ <h1>Listing options</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>Title</th>
6
+ </tr>
7
+
8
+ <% for option in @options %>
9
+ <tr>
10
+ <td><%=h option.title %></td>
11
+ <td><%= link_to 'Show', object_url(option) %></td>
12
+ <td><%= link_to 'Edit', edit_object_url(option) %></td>
13
+ <td><%= link_to 'Destroy', object_url(option), :confirm => 'Are you sure?', :method => :delete %></td>
14
+ </tr>
15
+ <% end %>
16
+ </table>
17
+
18
+ <br />
19
+
20
+ <%= link_to 'New option', new_object_url %>
@@ -0,0 +1,16 @@
1
+ <h1>New option</h1>
2
+
3
+ <%= error_messages_for :option %>
4
+
5
+ <% form_for(:option, :url => collection_url) do |f| %>
6
+ <p>
7
+ <b>Title</b><br />
8
+ <%= f.text_field :title %>
9
+ </p>
10
+
11
+ <p>
12
+ <%= submit_tag "Create" %>
13
+ </p>
14
+ <% end %>
15
+
16
+ <%= link_to 'Back', collection_url %>
@@ -0,0 +1,8 @@
1
+ <p>
2
+ <b>Title:</b>
3
+ <%=h @option.title %>
4
+ </p>
5
+
6
+
7
+ <%= link_to 'Edit', edit_object_url %> |
8
+ <%= link_to 'Back', collection_url %>
@@ -0,0 +1,17 @@
1
+ <h1>Editing product</h1>
2
+
3
+ <%= error_messages_for :product %>
4
+
5
+ <% form_for(:product, :url => object_url, :html => { :method => :put }) do |f| %>
6
+ <p>
7
+ <b>Name</b><br />
8
+ <%= f.text_field :name %>
9
+ </p>
10
+
11
+ <p>
12
+ <%= submit_tag "Update" %>
13
+ </p>
14
+ <% end %>
15
+
16
+ <%= link_to 'Show', object_url %> |
17
+ <%= link_to 'Back', collection_url %>
@@ -0,0 +1,20 @@
1
+ <h1>Listing products</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>Name</th>
6
+ </tr>
7
+
8
+ <% for product in @products %>
9
+ <tr>
10
+ <td><%=h product.name %></td>
11
+ <td><%= link_to 'Show', object_url(product) %></td>
12
+ <td><%= link_to 'Edit', edit_object_url(product) %></td>
13
+ <td><%= link_to 'Destroy', object_url(product), :confirm => 'Are you sure?', :method => :delete %></td>
14
+ </tr>
15
+ <% end %>
16
+ </table>
17
+
18
+ <br />
19
+
20
+ <%= link_to 'New product', new_object_url %>
@@ -0,0 +1,16 @@
1
+ <h1>New product</h1>
2
+
3
+ <%= error_messages_for :product %>
4
+
5
+ <% form_for(:product, :url => collection_url) do |f| %>
6
+ <p>
7
+ <b>Name</b><br />
8
+ <%= f.text_field :name %>
9
+ </p>
10
+
11
+ <p>
12
+ <%= submit_tag "Create" %>
13
+ </p>
14
+ <% end %>
15
+
16
+ <%= link_to 'Back', collection_url %>
@@ -0,0 +1,8 @@
1
+ <p>
2
+ <b>Name:</b>
3
+ <%=h @product.name %>
4
+ </p>
5
+
6
+
7
+ <%= link_to 'Edit', edit_object_url %> |
8
+ <%= link_to 'Back', collection_url %>
@@ -0,0 +1,27 @@
1
+ <h1>Editing comment</h1>
2
+
3
+ <%= error_messages_for :comment %>
4
+
5
+ <% form_for(:comment, :url => object_url, :html => { :method => :put }) do |f| %>
6
+ <p>
7
+ <b>Post</b><br />
8
+ <%= f.text_field :post_id %>
9
+ </p>
10
+
11
+ <p>
12
+ <b>Author</b><br />
13
+ <%= f.text_field :author %>
14
+ </p>
15
+
16
+ <p>
17
+ <b>Body</b><br />
18
+ <%= f.text_area :body %>
19
+ </p>
20
+
21
+ <p>
22
+ <%= submit_tag "Update" %>
23
+ </p>
24
+ <% end %>
25
+
26
+ <%= link_to 'Show', object_url %> |
27
+ <%= link_to 'Back', collection_url %>
@@ -0,0 +1,24 @@
1
+ <h1>Listing comments</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>Post</th>
6
+ <th>Author</th>
7
+ <th>Body</th>
8
+ </tr>
9
+
10
+ <% for comment in @comments %>
11
+ <tr>
12
+ <td><%=h comment.post_id %></td>
13
+ <td><%=h comment.author %></td>
14
+ <td><%=h comment.body %></td>
15
+ <td><%= link_to 'Show', object_url(comment) %></td>
16
+ <td><%= link_to 'Edit', edit_object_url(comment) %></td>
17
+ <td><%= link_to 'Destroy', object_url(comment), :confirm => 'Are you sure?', :method => :delete %></td>
18
+ </tr>
19
+ <% end %>
20
+ </table>
21
+
22
+ <br />
23
+
24
+ <%= link_to 'New comment', new_object_url%>
@@ -0,0 +1,26 @@
1
+ <h1>New comment</h1>
2
+
3
+ <%= error_messages_for :comment %>
4
+
5
+ <% form_for(:comment, :url => collection_url) do |f| %>
6
+ <p>
7
+ <b>Post</b><br />
8
+ <%= f.text_field :post_id %>
9
+ </p>
10
+
11
+ <p>
12
+ <b>Author</b><br />
13
+ <%= f.text_field :author %>
14
+ </p>
15
+
16
+ <p>
17
+ <b>Body</b><br />
18
+ <%= f.text_area :body %>
19
+ </p>
20
+
21
+ <p>
22
+ <%= submit_tag "Create" %>
23
+ </p>
24
+ <% end %>
25
+
26
+ <%= link_to 'Back', collection_url %>
@@ -0,0 +1,18 @@
1
+ <p>
2
+ <b>Post:</b>
3
+ <%=h @comment.post_id %>
4
+ </p>
5
+
6
+ <p>
7
+ <b>Author:</b>
8
+ <%=h @comment.author %>
9
+ </p>
10
+
11
+ <p>
12
+ <b>Body:</b>
13
+ <%=h @comment.body %>
14
+ </p>
15
+
16
+
17
+ <%= link_to 'Edit', edit_object_url %> |
18
+ <%= link_to 'Back', collection_url %>
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
7
+ <title>Posts: <%= controller.action_name %></title>
8
+ <%= stylesheet_link_tag 'scaffold' %>
9
+ </head>
10
+ <body>
11
+
12
+ <p style="color: green"><%= flash[:notice] %></p>
13
+
14
+ <%= yield %>
15
+
16
+ </body>
17
+ </html>
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
7
+ <title>Comments: <%= controller.action_name %></title>
8
+ <%= stylesheet_link_tag 'scaffold' %>
9
+ </head>
10
+ <body>
11
+
12
+ <p style="color: green"><%= flash[:notice] %></p>
13
+
14
+ <%= yield %>
15
+
16
+ </body>
17
+ </html>
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
7
+ <title>Options: <%= controller.action_name %></title>
8
+ <%= stylesheet_link_tag 'scaffold' %>
9
+ </head>
10
+ <body>
11
+
12
+ <p style="color: green"><%= flash[:notice] %></p>
13
+
14
+ <%= yield %>
15
+
16
+ </body>
17
+ </html>