rails_product 0.5
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/CHANGELOG +619 -0
- data/MIT-LICENSE +21 -0
- data/README +195 -0
- data/Rakefile +413 -0
- data/bin/benchmarker +19 -0
- data/bin/breakpointer +3 -0
- data/bin/breakpointer_for_gem +4 -0
- data/bin/console +23 -0
- data/bin/console_sandbox +0 -0
- data/bin/destroy +7 -0
- data/bin/generate +7 -0
- data/bin/listener +86 -0
- data/bin/process/reaper +123 -0
- data/bin/process/spawner +54 -0
- data/bin/process/spinner +60 -0
- data/bin/profiler +34 -0
- data/bin/rails +17 -0
- data/bin/rails_product +17 -0
- data/bin/runner +28 -0
- data/bin/server +125 -0
- data/bin/tracker +69 -0
- data/bin/update +5 -0
- data/configs/apache/vhost.example.conf +42 -0
- data/configs/apache.conf +40 -0
- data/configs/database.yml +23 -0
- data/configs/empty.log +0 -0
- data/configs/routes.rb +19 -0
- data/dispatches/dispatch.fcgi +24 -0
- data/dispatches/dispatch.rb +10 -0
- data/dispatches/gateway.cgi +97 -0
- data/doc/README_FOR_APP +2 -0
- data/environments/development.rb +14 -0
- data/environments/environment.rb +101 -0
- data/environments/production.rb +8 -0
- data/environments/test.rb +17 -0
- data/fresh_rakefile +223 -0
- data/helpers/application.rb +4 -0
- data/helpers/application_helper.rb +3 -0
- data/helpers/test_helper.rb +26 -0
- data/html/404.html +8 -0
- data/html/500.html +8 -0
- data/html/favicon.ico +0 -0
- data/html/index.html +78 -0
- data/html/javascripts/controls.js +446 -0
- data/html/javascripts/dragdrop.js +537 -0
- data/html/javascripts/effects.js +612 -0
- data/html/javascripts/prototype.js +1038 -0
- data/html/robots.txt +1 -0
- data/lib/binding_of_caller.rb +83 -0
- data/lib/breakpoint.rb +523 -0
- data/lib/breakpoint_client.rb +196 -0
- data/lib/code_statistics.rb +104 -0
- data/lib/console_sandbox.rb +6 -0
- data/lib/dispatcher.rb +59 -0
- data/lib/fcgi_handler.rb +156 -0
- data/lib/productize.rb +116 -0
- data/lib/rails_generator/base.rb +203 -0
- data/lib/rails_generator/commands.rb +409 -0
- data/lib/rails_generator/generators/applications/app/USAGE +16 -0
- data/lib/rails_generator/generators/applications/app/app_generator.rb +126 -0
- data/lib/rails_generator/generators/applications/productized_app/USAGE +16 -0
- data/lib/rails_generator/generators/applications/productized_app/productized_app_generator.rb +133 -0
- data/lib/rails_generator/generators/components/controller/USAGE +30 -0
- data/lib/rails_generator/generators/components/controller/controller_generator.rb +38 -0
- data/lib/rails_generator/generators/components/controller/templates/controller.rb +10 -0
- data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +18 -0
- data/lib/rails_generator/generators/components/controller/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/controller/templates/view.rhtml +2 -0
- data/lib/rails_generator/generators/components/mailer/USAGE +19 -0
- data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +32 -0
- data/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +3 -0
- data/lib/rails_generator/generators/components/mailer/templates/mailer.rb +13 -0
- data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +37 -0
- data/lib/rails_generator/generators/components/mailer/templates/view.rhtml +3 -0
- data/lib/rails_generator/generators/components/migration/USAGE +14 -0
- data/lib/rails_generator/generators/components/migration/migration_generator.rb +9 -0
- data/lib/rails_generator/generators/components/migration/templates/migration.rb +7 -0
- data/lib/rails_generator/generators/components/model/USAGE +17 -0
- data/lib/rails_generator/generators/components/model/model_generator.rb +18 -0
- data/lib/rails_generator/generators/components/model/templates/fixtures.yml +5 -0
- data/lib/rails_generator/generators/components/model/templates/model.rb +2 -0
- data/lib/rails_generator/generators/components/model/templates/unit_test.rb +14 -0
- data/lib/rails_generator/generators/components/scaffold/USAGE +32 -0
- data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +178 -0
- data/lib/rails_generator/generators/components/scaffold/templates/controller.rb +54 -0
- data/lib/rails_generator/generators/components/scaffold/templates/form.rhtml +3 -0
- data/lib/rails_generator/generators/components/scaffold/templates/form_scaffolding.rhtml +1 -0
- data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +98 -0
- data/lib/rails_generator/generators/components/scaffold/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/scaffold/templates/layout.rhtml +13 -0
- data/lib/rails_generator/generators/components/scaffold/templates/style.css +74 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_edit.rhtml +9 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_list.rhtml +27 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_new.rhtml +8 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_show.rhtml +8 -0
- data/lib/rails_generator/generators/components/web_service/USAGE +28 -0
- data/lib/rails_generator/generators/components/web_service/templates/api_definition.rb +5 -0
- data/lib/rails_generator/generators/components/web_service/templates/controller.rb +8 -0
- data/lib/rails_generator/generators/components/web_service/templates/functional_test.rb +19 -0
- data/lib/rails_generator/generators/components/web_service/web_service_generator.rb +29 -0
- data/lib/rails_generator/lookup.rb +206 -0
- data/lib/rails_generator/manifest.rb +53 -0
- data/lib/rails_generator/options.rb +134 -0
- data/lib/rails_generator/scripts/destroy.rb +7 -0
- data/lib/rails_generator/scripts/generate.rb +7 -0
- data/lib/rails_generator/scripts/update.rb +12 -0
- data/lib/rails_generator/scripts.rb +83 -0
- data/lib/rails_generator/simple_logger.rb +46 -0
- data/lib/rails_generator/spec.rb +44 -0
- data/lib/rails_generator.rb +43 -0
- data/lib/rubyprof_ext.rb +35 -0
- data/lib/webrick_server.rb +148 -0
- data/sites/fresh_rakefile +176 -0
- metadata +250 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
class ScaffoldingSandbox
|
|
2
|
+
include ActionView::Helpers::ActiveRecordHelper
|
|
3
|
+
|
|
4
|
+
attr_accessor :form_action, :singular_name, :suffix, :model_instance
|
|
5
|
+
|
|
6
|
+
def sandbox_binding
|
|
7
|
+
binding
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def default_input_block
|
|
11
|
+
Proc.new { |record, column| "<p><label for=\"#{record}_#{column.name}\">#{column.human_name}</label><br/>\n#{input(record, column.name)}</p>\n" }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class ActionView::Helpers::InstanceTag
|
|
17
|
+
def to_input_field_tag(field_type, options={})
|
|
18
|
+
field_meth = "#{field_type}_field"
|
|
19
|
+
"<%= #{field_meth} '#{@object_name}', '#{@method_name}' #{options.empty? ? '' : ', '+options.inspect} %>"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def to_text_area_tag(options = {})
|
|
23
|
+
"<%= text_area '#{@object_name}', '#{@method_name}' #{options.empty? ? '' : ', '+ options.inspect} %>"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def to_date_select_tag(options = {})
|
|
27
|
+
"<%= date_select '#{@object_name}', '#{@method_name}' #{options.empty? ? '' : ', '+ options.inspect} %>"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def to_datetime_select_tag(options = {})
|
|
31
|
+
"<%= datetime_select '#{@object_name}', '#{@method_name}' #{options.empty? ? '' : ', '+ options.inspect} %>"
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class ScaffoldGenerator < Rails::Generator::NamedBase
|
|
36
|
+
attr_reader :controller_name,
|
|
37
|
+
:controller_class_path,
|
|
38
|
+
:controller_file_path,
|
|
39
|
+
:controller_class_nesting,
|
|
40
|
+
:controller_class_nesting_depth,
|
|
41
|
+
:controller_class_name,
|
|
42
|
+
:controller_singular_name,
|
|
43
|
+
:controller_plural_name
|
|
44
|
+
alias_method :controller_file_name, :controller_singular_name
|
|
45
|
+
alias_method :controller_table_name, :controller_plural_name
|
|
46
|
+
|
|
47
|
+
def initialize(runtime_args, runtime_options = {})
|
|
48
|
+
super
|
|
49
|
+
@controller_name = args.shift || @name.pluralize
|
|
50
|
+
base_name, @controller_class_path, @controller_file_path, @controller_class_nesting, @controller_class_nesting_depth = extract_modules(@controller_name)
|
|
51
|
+
@controller_class_name_without_nesting, @controller_singular_name, @controller_plural_name = inflect_names(base_name)
|
|
52
|
+
if @controller_class_nesting.empty?
|
|
53
|
+
@controller_class_name = @controller_class_name_without_nesting
|
|
54
|
+
else
|
|
55
|
+
@controller_class_name = "#{@controller_class_nesting}::#{@controller_class_name_without_nesting}"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def manifest
|
|
60
|
+
record do |m|
|
|
61
|
+
# Depend on model generator but skip if the model exists.
|
|
62
|
+
m.dependency 'model', [singular_name], :collision => :skip
|
|
63
|
+
|
|
64
|
+
# Check for class naming collisions.
|
|
65
|
+
m.class_collisions controller_class_path, "#{controller_class_name}Controller", "#{controller_class_name}ControllerTest", "#{controller_class_name}Helper"
|
|
66
|
+
|
|
67
|
+
# Controller, helper, views, and test directories.
|
|
68
|
+
m.directory File.join('app/controllers', controller_class_path)
|
|
69
|
+
m.directory File.join('app/helpers', controller_class_path)
|
|
70
|
+
m.directory File.join('app/views', controller_class_path, controller_file_name)
|
|
71
|
+
m.directory File.join('test/functional', controller_class_path)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
# Controller class, functional test, helper, and views.
|
|
75
|
+
m.template 'controller.rb',
|
|
76
|
+
File.join('app/controllers',
|
|
77
|
+
controller_class_path,
|
|
78
|
+
"#{controller_file_name}_controller.rb")
|
|
79
|
+
|
|
80
|
+
m.template 'functional_test.rb',
|
|
81
|
+
File.join('test/functional',
|
|
82
|
+
controller_class_path,
|
|
83
|
+
"#{controller_file_name}_controller_test.rb")
|
|
84
|
+
|
|
85
|
+
m.template 'helper.rb',
|
|
86
|
+
File.join('app/helpers',
|
|
87
|
+
controller_class_path,
|
|
88
|
+
"#{controller_file_name}_helper.rb")
|
|
89
|
+
|
|
90
|
+
# Layout and stylesheet.
|
|
91
|
+
m.template 'layout.rhtml', "app/views/layouts/#{controller_file_name}.rhtml"
|
|
92
|
+
m.template 'style.css', 'public/stylesheets/scaffold.css'
|
|
93
|
+
|
|
94
|
+
# Scaffolded views.
|
|
95
|
+
scaffold_views.each do |action|
|
|
96
|
+
m.template "view_#{action}.rhtml",
|
|
97
|
+
File.join('app/views',
|
|
98
|
+
controller_class_path,
|
|
99
|
+
controller_file_name,
|
|
100
|
+
"#{action}.rhtml"),
|
|
101
|
+
:assigns => { :action => action }
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Scaffolded forms.
|
|
105
|
+
m.complex_template "form.rhtml",
|
|
106
|
+
File.join('app/views',
|
|
107
|
+
controller_class_path,
|
|
108
|
+
controller_file_name,
|
|
109
|
+
"_form.rhtml"),
|
|
110
|
+
:insert => 'form_scaffolding.rhtml',
|
|
111
|
+
:sandbox => lambda { create_sandbox },
|
|
112
|
+
:begin_mark => 'form',
|
|
113
|
+
:end_mark => 'eoform',
|
|
114
|
+
:mark_id => singular_name
|
|
115
|
+
|
|
116
|
+
# Unscaffolded views.
|
|
117
|
+
unscaffolded_actions.each do |action|
|
|
118
|
+
path = File.join('app/views',
|
|
119
|
+
controller_class_path,
|
|
120
|
+
controller_file_name,
|
|
121
|
+
"#{action}.rhtml")
|
|
122
|
+
m.template "controller:view.rhtml", path,
|
|
123
|
+
:assigns => { :action => action, :path => path}
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
protected
|
|
129
|
+
# Override with your own usage banner.
|
|
130
|
+
def banner
|
|
131
|
+
"Usage: #{$0} scaffold ModelName [ControllerName] [action, ...]"
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def scaffold_views
|
|
135
|
+
%w(list show new edit)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def scaffold_actions
|
|
139
|
+
scaffold_views + %w(index create update destroy)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def model_name
|
|
143
|
+
class_name.demodulize
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def unscaffolded_actions
|
|
147
|
+
args - scaffold_actions
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def suffix
|
|
151
|
+
"_#{singular_name}" if options[:suffix]
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def create_sandbox
|
|
155
|
+
sandbox = ScaffoldingSandbox.new
|
|
156
|
+
sandbox.singular_name = singular_name
|
|
157
|
+
begin
|
|
158
|
+
sandbox.model_instance = model_instance
|
|
159
|
+
sandbox.instance_variable_set("@#{singular_name}", sandbox.model_instance)
|
|
160
|
+
rescue ActiveRecord::StatementInvalid => e
|
|
161
|
+
logger.error "Before updating scaffolding from new DB schema, try creating a table for your model (#{class_name})"
|
|
162
|
+
raise SystemExit
|
|
163
|
+
end
|
|
164
|
+
sandbox.suffix = suffix
|
|
165
|
+
sandbox
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def model_instance
|
|
169
|
+
base = class_nesting.split('::').inject(Object) do |base, nested|
|
|
170
|
+
break base.const_get(nested) if base.const_defined?(nested)
|
|
171
|
+
base.const_set(nested, Module.new)
|
|
172
|
+
end
|
|
173
|
+
unless base.const_defined?(@class_name_without_nesting)
|
|
174
|
+
base.const_set(@class_name_without_nesting, Class.new(ActiveRecord::Base))
|
|
175
|
+
end
|
|
176
|
+
class_name.constantize.new
|
|
177
|
+
end
|
|
178
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
class <%= controller_class_name %>Controller < ApplicationController
|
|
2
|
+
<% unless suffix -%>
|
|
3
|
+
def index
|
|
4
|
+
list
|
|
5
|
+
render :action => 'list'
|
|
6
|
+
end
|
|
7
|
+
<% end -%>
|
|
8
|
+
|
|
9
|
+
<% for action in unscaffolded_actions -%>
|
|
10
|
+
def <%= action %><%= suffix %>
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
<% end -%>
|
|
14
|
+
def list<%= suffix %>
|
|
15
|
+
@<%= singular_name %>_pages, @<%= plural_name %> = paginate :<%= singular_name %>, :per_page => 10
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def show<%= suffix %>
|
|
19
|
+
@<%= singular_name %> = <%= model_name %>.find(params[:id])
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def new<%= suffix %>
|
|
23
|
+
@<%= singular_name %> = <%= model_name %>.new
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def create<%= suffix %>
|
|
27
|
+
@<%= singular_name %> = <%= model_name %>.new(params[:<%= singular_name %>])
|
|
28
|
+
if @<%= singular_name %>.save
|
|
29
|
+
flash[:notice] = '<%= model_name %> was successfully created.'
|
|
30
|
+
redirect_to :action => 'list<%= suffix %>'
|
|
31
|
+
else
|
|
32
|
+
render :action => 'new<%= suffix %>'
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def edit<%= suffix %>
|
|
37
|
+
@<%= singular_name %> = <%= model_name %>.find(params[:id])
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def update
|
|
41
|
+
@<%= singular_name %> = <%= model_name %>.find(params[:id])
|
|
42
|
+
if @<%= singular_name %>.update_attributes(params[:<%= singular_name %>])
|
|
43
|
+
flash[:notice] = '<%= model_name %> was successfully updated.'
|
|
44
|
+
redirect_to :action => 'show<%= suffix %>', :id => @<%= singular_name %>
|
|
45
|
+
else
|
|
46
|
+
render :action => 'edit<%= suffix %>'
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def destroy<%= suffix %>
|
|
51
|
+
<%= model_name %>.find(params[:id]).destroy
|
|
52
|
+
redirect_to :action => 'list<%= suffix %>'
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= all_input_tags(@model_instance, @singular_name, {}) %>
|
|
@@ -0,0 +1,98 @@
|
|
|
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
|
+
<% for action in unscaffolded_actions -%>
|
|
17
|
+
def test_<%= action %>
|
|
18
|
+
get :<%= action %>
|
|
19
|
+
assert_response :success
|
|
20
|
+
assert_template '<%= action %>'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
<% end -%>
|
|
24
|
+
<% unless suffix -%>
|
|
25
|
+
def test_index
|
|
26
|
+
get :index
|
|
27
|
+
assert_response :success
|
|
28
|
+
assert_template 'list'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
<% end -%>
|
|
32
|
+
def test_list<%= suffix %>
|
|
33
|
+
get :list<%= suffix %>
|
|
34
|
+
|
|
35
|
+
assert_response :success
|
|
36
|
+
assert_template 'list<%= suffix %>'
|
|
37
|
+
|
|
38
|
+
assert_not_nil assigns(:<%= plural_name %>)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_show<%= suffix %>
|
|
42
|
+
get :show<%= suffix %>, :id => 1
|
|
43
|
+
|
|
44
|
+
assert_response :success
|
|
45
|
+
assert_template 'show'
|
|
46
|
+
|
|
47
|
+
assert_not_nil assigns(:<%= singular_name %>)
|
|
48
|
+
assert assigns(:<%= singular_name %>).valid?
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_new<%= suffix %>
|
|
52
|
+
get :new<%= suffix %>
|
|
53
|
+
|
|
54
|
+
assert_response :success
|
|
55
|
+
assert_template 'new<%= suffix %>'
|
|
56
|
+
|
|
57
|
+
assert_not_nil assigns(:<%= singular_name %>)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_create
|
|
61
|
+
num_<%= plural_name %> = <%= model_name %>.count
|
|
62
|
+
|
|
63
|
+
post :create<%= suffix %>, :<%= singular_name %> => {}
|
|
64
|
+
|
|
65
|
+
assert_response :redirect
|
|
66
|
+
assert_redirected_to :action => 'list<%= suffix %>'
|
|
67
|
+
|
|
68
|
+
assert_equal num_<%= plural_name %> + 1, <%= model_name %>.count
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def test_edit<%= suffix %>
|
|
72
|
+
get :edit<%= suffix %>, :id => 1
|
|
73
|
+
|
|
74
|
+
assert_response :success
|
|
75
|
+
assert_template 'edit<%= suffix %>'
|
|
76
|
+
|
|
77
|
+
assert_not_nil assigns(:<%= singular_name %>)
|
|
78
|
+
assert assigns(:<%= singular_name %>).valid?
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_update<%= suffix %>
|
|
82
|
+
post :update<%= suffix %>, :id => 1
|
|
83
|
+
assert_response :redirect
|
|
84
|
+
assert_redirected_to :action => 'show<%= suffix %>', :id => 1
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def test_destroy<%= suffix %>
|
|
88
|
+
assert_not_nil <%= model_name %>.find(1)
|
|
89
|
+
|
|
90
|
+
post :destroy, :id => 1
|
|
91
|
+
assert_response :redirect
|
|
92
|
+
assert_redirected_to :action => 'list<%= suffix %>'
|
|
93
|
+
|
|
94
|
+
assert_raise(ActiveRecord::RecordNotFound) {
|
|
95
|
+
<%= model_name %>.find(1)
|
|
96
|
+
}
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<html>
|
|
2
|
+
<head>
|
|
3
|
+
<title><%= controller_class_name %>: <%%= controller.action_name %></title>
|
|
4
|
+
<%%= stylesheet_link_tag 'scaffold' %>
|
|
5
|
+
</head>
|
|
6
|
+
<body>
|
|
7
|
+
|
|
8
|
+
<p style="color: green"><%%= flash[:notice] %></p>
|
|
9
|
+
|
|
10
|
+
<%%= @content_for_layout %>
|
|
11
|
+
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
body { background-color: #fff; color: #333; }
|
|
2
|
+
|
|
3
|
+
body, p, ol, ul, td {
|
|
4
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
|
5
|
+
font-size: 13px;
|
|
6
|
+
line-height: 18px;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
pre {
|
|
10
|
+
background-color: #eee;
|
|
11
|
+
padding: 10px;
|
|
12
|
+
font-size: 11px;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
a { color: #000; }
|
|
16
|
+
a:visited { color: #666; }
|
|
17
|
+
a:hover { color: #fff; background-color:#000; }
|
|
18
|
+
|
|
19
|
+
.fieldWithErrors {
|
|
20
|
+
padding: 2px;
|
|
21
|
+
background-color: red;
|
|
22
|
+
display: table;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
#ErrorExplanation {
|
|
26
|
+
width: 400px;
|
|
27
|
+
border: 2px solid 'red';
|
|
28
|
+
padding: 7px;
|
|
29
|
+
padding-bottom: 12px;
|
|
30
|
+
margin-bottom: 20px;
|
|
31
|
+
background-color: #f0f0f0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
#ErrorExplanation h2 {
|
|
35
|
+
text-align: left;
|
|
36
|
+
font-weight: bold;
|
|
37
|
+
padding: 5px 5px 5px 15px;
|
|
38
|
+
font-size: 12px;
|
|
39
|
+
margin: -7px;
|
|
40
|
+
background-color: #c00;
|
|
41
|
+
color: #fff;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
#ErrorExplanation p {
|
|
45
|
+
color: #333;
|
|
46
|
+
margin-bottom: 0;
|
|
47
|
+
padding: 5px;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
#ErrorExplanation ul li {
|
|
51
|
+
font-size: 12px;
|
|
52
|
+
list-style: square;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
div.uploadStatus {
|
|
56
|
+
margin: 5px;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
div.progressBar {
|
|
60
|
+
margin: 5px;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
div.progressBar div.border {
|
|
64
|
+
background-color: #fff;
|
|
65
|
+
border: 1px solid grey;
|
|
66
|
+
width: 100%;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
div.progressBar div.background {
|
|
70
|
+
background-color: #333;
|
|
71
|
+
height: 18px;
|
|
72
|
+
width: 0%;
|
|
73
|
+
}
|
|
74
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<h1>Editing <%= singular_name %></h1>
|
|
2
|
+
|
|
3
|
+
<%%= start_form_tag :action => 'update<%= @suffix %>', :id => @<%= singular_name %> %>
|
|
4
|
+
<%%= render_partial 'form' %>
|
|
5
|
+
<%%= submit_tag 'Edit' %>
|
|
6
|
+
<%%= end_form_tag %>
|
|
7
|
+
|
|
8
|
+
<%%= link_to 'Show', :action => 'show<%= suffix %>', :id => @<%= singular_name %> %> |
|
|
9
|
+
<%%= link_to 'Back', :action => 'list<%= suffix %>' %>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<h1>Listing <%= plural_name %></h1>
|
|
2
|
+
|
|
3
|
+
<table>
|
|
4
|
+
<tr>
|
|
5
|
+
<%% for column in <%= model_name %>.content_columns %>
|
|
6
|
+
<th><%%= column.human_name %></th>
|
|
7
|
+
<%% end %>
|
|
8
|
+
</tr>
|
|
9
|
+
|
|
10
|
+
<%% for <%= singular_name %> in @<%= plural_name %> %>
|
|
11
|
+
<tr>
|
|
12
|
+
<%% for column in <%= model_name %>.content_columns %>
|
|
13
|
+
<td><%%=h <%= singular_name %>.send(column.name) %></td>
|
|
14
|
+
<%% end %>
|
|
15
|
+
<td><%%= link_to 'Show', :action => 'show<%= suffix %>', :id => <%= singular_name %> %></td>
|
|
16
|
+
<td><%%= link_to 'Edit', :action => 'edit<%= suffix %>', :id => <%= singular_name %> %></td>
|
|
17
|
+
<td><%%= link_to 'Destroy', {:action => 'destroy<%= suffix %>', :id => <%= singular_name %>}, :confirm => 'Are you sure?' %></td>
|
|
18
|
+
</tr>
|
|
19
|
+
<%% end %>
|
|
20
|
+
</table>
|
|
21
|
+
|
|
22
|
+
<%%= link_to 'Previous page', { :page => @<%= singular_name %>_pages.current.previous } if @<%= singular_name %>_pages.current.previous %>
|
|
23
|
+
<%%= link_to 'Next page', { :page => @<%= singular_name %>_pages.current.next } if @<%= singular_name %>_pages.current.next %>
|
|
24
|
+
|
|
25
|
+
<br />
|
|
26
|
+
|
|
27
|
+
<%%= link_to 'New <%= singular_name %>', :action => 'new<%= suffix %>' %>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<%% for column in <%= model_name %>.content_columns %>
|
|
2
|
+
<p>
|
|
3
|
+
<b><%%= column.human_name %>:</b> <%%=h @<%= singular_name %>.send(column.name) %>
|
|
4
|
+
</p>
|
|
5
|
+
<%% end %>
|
|
6
|
+
|
|
7
|
+
<%%= link_to 'Edit', :action => 'edit<%= suffix %>', :id => @<%= singular_name %> %> |
|
|
8
|
+
<%%= link_to 'Back', :action => 'list<%= suffix %>' %>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
Description:
|
|
2
|
+
The web service generator creates the controller and API definition for
|
|
3
|
+
a web service.
|
|
4
|
+
|
|
5
|
+
The generator takes a web service name and a list of API methods as arguments.
|
|
6
|
+
The web service name may be given in CamelCase or under_score and should
|
|
7
|
+
contain no extra suffixes. To create a web service within a
|
|
8
|
+
module, specify the web service name as 'module/webservice'.
|
|
9
|
+
|
|
10
|
+
The generator creates a controller class in app/controllers, an API definition
|
|
11
|
+
in app/apis, and a functional test suite in test/functional.
|
|
12
|
+
|
|
13
|
+
Example:
|
|
14
|
+
./script/generate web_service User add edit list remove
|
|
15
|
+
|
|
16
|
+
User web service.
|
|
17
|
+
Controller: app/controllers/user_controller.rb
|
|
18
|
+
API: app/apis/user_api.rb
|
|
19
|
+
Test: test/functional/user_api_test.rb
|
|
20
|
+
|
|
21
|
+
Modules Example:
|
|
22
|
+
./script/generate web_service 'api/registration' register renew
|
|
23
|
+
|
|
24
|
+
Registration web service.
|
|
25
|
+
Controller: app/controllers/api/registration_controller.rb
|
|
26
|
+
API: app/apis/api/registration_api.rb
|
|
27
|
+
Test: test/functional/api/registration_api_test.rb
|
|
28
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../test_helper'
|
|
2
|
+
require '<%= file_path %>_controller'
|
|
3
|
+
|
|
4
|
+
class <%= class_name %>Controller; def rescue_action(e) raise e end; end
|
|
5
|
+
|
|
6
|
+
class <%= class_name %>ControllerApiTest < Test::Unit::TestCase
|
|
7
|
+
def setup
|
|
8
|
+
@controller = <%= class_name %>Controller.new
|
|
9
|
+
@request = ActionController::TestRequest.new
|
|
10
|
+
@response = ActionController::TestResponse.new
|
|
11
|
+
end
|
|
12
|
+
<% for method_name in args -%>
|
|
13
|
+
|
|
14
|
+
def test_<%= method_name %>
|
|
15
|
+
result = invoke :<%= method_name %>
|
|
16
|
+
assert_equal nil, result
|
|
17
|
+
end
|
|
18
|
+
<% end -%>
|
|
19
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
class WebServiceGenerator < Rails::Generator::NamedBase
|
|
2
|
+
def manifest
|
|
3
|
+
record do |m|
|
|
4
|
+
# Check for class naming collisions.
|
|
5
|
+
m.class_collisions class_path, "#{class_name}Api", "#{class_name}Controller", "#{class_name}ApiTest"
|
|
6
|
+
|
|
7
|
+
# API and test directories.
|
|
8
|
+
m.directory File.join('app/apis', class_path)
|
|
9
|
+
m.directory File.join('app/controllers', class_path)
|
|
10
|
+
m.directory File.join('test/functional', class_path)
|
|
11
|
+
|
|
12
|
+
# API definition, controller, and functional test.
|
|
13
|
+
m.template 'api_definition.rb',
|
|
14
|
+
File.join('app/apis',
|
|
15
|
+
class_path,
|
|
16
|
+
"#{file_name}_api.rb")
|
|
17
|
+
|
|
18
|
+
m.template 'controller.rb',
|
|
19
|
+
File.join('app/controllers',
|
|
20
|
+
class_path,
|
|
21
|
+
"#{file_name}_controller.rb")
|
|
22
|
+
|
|
23
|
+
m.template 'functional_test.rb',
|
|
24
|
+
File.join('test/functional',
|
|
25
|
+
class_path,
|
|
26
|
+
"#{file_name}_api_test.rb")
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|