freeform 0.0.4 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. data/.gitignore +8 -17
  2. data/Gemfile +1 -1
  3. data/Gemfile.lock +150 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.md +31 -43
  6. data/Rakefile +32 -1
  7. data/freeform.gemspec +22 -15
  8. data/lib/freeform/builder/builder_mixin.rb +111 -0
  9. data/lib/freeform/builder/builders.rb +32 -0
  10. data/lib/freeform/builder/engine.rb +14 -0
  11. data/lib/freeform/builder/view_helper.rb +56 -0
  12. data/lib/freeform/form/form_input_key.rb +1 -1
  13. data/lib/freeform/form/nested.rb +17 -55
  14. data/lib/freeform/form/property.rb +82 -42
  15. data/lib/freeform/form/validation.rb +38 -11
  16. data/lib/freeform/form.rb +24 -27
  17. data/lib/freeform/version.rb +1 -1
  18. data/lib/freeform.rb +4 -0
  19. data/lib/generators/freeform/install_generator.rb +17 -0
  20. data/lib/tasks/freeform_tasks.rake +4 -0
  21. data/spec/acceptance_spec.rb +261 -155
  22. data/spec/builder/builder_spec.rb +215 -0
  23. data/spec/builder/view_helper_spec.rb +97 -0
  24. data/spec/dummy/README.rdoc +28 -0
  25. data/spec/dummy/Rakefile +6 -0
  26. data/spec/dummy/app/assets/images/.keep +0 -0
  27. data/spec/dummy/app/assets/javascripts/application.js +5 -0
  28. data/spec/dummy/app/assets/javascripts/jquery.js +9404 -0
  29. data/spec/dummy/app/assets/javascripts/jquery_events_test.js +19 -0
  30. data/spec/dummy/app/assets/javascripts/projects.js +2 -0
  31. data/spec/dummy/app/assets/javascripts/prototype.js +6082 -0
  32. data/spec/dummy/app/assets/javascripts/prototype_events_test.js +20 -0
  33. data/spec/dummy/app/assets/stylesheets/application.css +7 -0
  34. data/spec/dummy/app/assets/stylesheets/companies.css +4 -0
  35. data/spec/dummy/app/assets/stylesheets/projects.css +4 -0
  36. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  37. data/spec/dummy/app/controllers/companies_controller.rb +5 -0
  38. data/spec/dummy/app/controllers/projects_controller.rb +11 -0
  39. data/spec/dummy/app/forms/milestone_form.rb +4 -0
  40. data/spec/dummy/app/forms/project_form.rb +11 -0
  41. data/spec/dummy/app/forms/task_form.rb +10 -0
  42. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  43. data/spec/dummy/app/mailers/.keep +0 -0
  44. data/spec/dummy/app/models/.keep +0 -0
  45. data/spec/dummy/app/models/company.rb +5 -0
  46. data/spec/dummy/app/models/milestone.rb +6 -0
  47. data/spec/dummy/app/models/project.rb +9 -0
  48. data/spec/dummy/app/models/project_task.rb +3 -0
  49. data/spec/dummy/app/models/task.rb +7 -0
  50. data/spec/dummy/app/views/companies/new.html.erb +16 -0
  51. data/spec/dummy/app/views/layouts/application.html.erb +19 -0
  52. data/spec/dummy/app/views/projects/new.html.erb +13 -0
  53. data/spec/dummy/app/views/projects/without_intermediate_inputs.html.erb +11 -0
  54. data/spec/dummy/bin/bundle +3 -0
  55. data/spec/dummy/bin/rails +4 -0
  56. data/spec/dummy/bin/rake +4 -0
  57. data/spec/dummy/config/application.rb +35 -0
  58. data/spec/dummy/config/boot.rb +5 -0
  59. data/spec/dummy/config/database.yml +25 -0
  60. data/spec/dummy/config/environment.rb +5 -0
  61. data/spec/dummy/config/environments/development.rb +29 -0
  62. data/spec/dummy/config/environments/production.rb +80 -0
  63. data/spec/dummy/config/environments/test.rb +36 -0
  64. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  65. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  66. data/spec/dummy/config/initializers/inflections.rb +16 -0
  67. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  68. data/spec/dummy/config/initializers/secret_token.rb +13 -0
  69. data/spec/dummy/config/initializers/session_store.rb +3 -0
  70. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  71. data/spec/dummy/config/locales/en.yml +23 -0
  72. data/spec/dummy/config/routes.rb +5 -0
  73. data/spec/dummy/config.ru +4 -0
  74. data/spec/dummy/db/migrate/20110710143903_initial_tables.rb +38 -0
  75. data/spec/dummy/db/schema.rb +43 -0
  76. data/spec/dummy/db/test.sqlite3 +0 -0
  77. data/spec/dummy/lib/assets/.keep +0 -0
  78. data/spec/dummy/log/.keep +0 -0
  79. data/spec/dummy/log/development.log +0 -0
  80. data/spec/dummy/log/test.log +39736 -0
  81. data/spec/dummy/public/404.html +58 -0
  82. data/spec/dummy/public/422.html +58 -0
  83. data/spec/dummy/public/500.html +57 -0
  84. data/spec/dummy/public/favicon.ico +0 -0
  85. data/spec/dummy/tmp/cache/assets/C54/850/sprockets%2Fd484f47085686f151320ff7248bb5105 +0 -0
  86. data/spec/dummy/tmp/cache/assets/C76/160/sprockets%2F49c594d143212b346d11f1ecf9358103 +0 -0
  87. data/spec/dummy/tmp/cache/assets/C99/4D0/sprockets%2F5e30a6b911437f1428dc32c3ae182123 +0 -0
  88. data/spec/dummy/tmp/cache/assets/C99/7D0/sprockets%2F79513e6956e0ee8624976e041fd5636d +0 -0
  89. data/spec/dummy/tmp/cache/assets/CAA/C90/sprockets%2F1e6c8ee1258009385ccf5b84015424b3 +0 -0
  90. data/spec/dummy/tmp/cache/assets/CB2/CB0/sprockets%2F11cc8d161d71a716dd36f16849d90870 +0 -0
  91. data/spec/dummy/tmp/cache/assets/CB7/7F0/sprockets%2Fac97b043470f6fcc925c352f16956643 +0 -0
  92. data/spec/dummy/tmp/cache/assets/CBA/680/sprockets%2F912d84e091e5f2190b1ab7926de19679 +0 -0
  93. data/spec/dummy/tmp/cache/assets/CC7/430/sprockets%2F48e99a3e16ba3e65749e009d82546f94 +0 -0
  94. data/spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  95. data/spec/dummy/tmp/cache/assets/CDB/8A0/sprockets%2Faed2a2575c376263c26e93b56b57051d +0 -0
  96. data/spec/dummy/tmp/cache/assets/CF1/E80/sprockets%2F7735295e1e3085f2e1dc29d59a45e8e6 +0 -0
  97. data/spec/dummy/tmp/cache/assets/D0F/E60/sprockets%2F1123d9a479fdf5c2b8415087e2a43ec6 +0 -0
  98. data/spec/dummy/tmp/cache/assets/D1F/A10/sprockets%2F60317e62cb324bfd9987e8da9636fd06 +0 -0
  99. data/spec/dummy/tmp/cache/assets/D25/E20/sprockets%2F29ba1a4a2b611731334f54abb9e5b5d1 +0 -0
  100. data/spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  101. data/spec/dummy/tmp/cache/assets/D35/760/sprockets%2F49e26620c5c743ac4cdab7703f54db06 +0 -0
  102. data/spec/dummy/tmp/cache/assets/D49/870/sprockets%2F90896142645585acc8baf56ad57e3afb +0 -0
  103. data/spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  104. data/spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  105. data/spec/dummy/tmp/cache/assets/D62/F00/sprockets%2F6ac03a007f26b1c18ed3d53498ad3eb8 +0 -0
  106. data/spec/dummy/tmp/cache/assets/D79/BC0/sprockets%2F85a1db977361cc5130fcefb4637ff67e +0 -0
  107. data/spec/dummy/tmp/cache/assets/D87/1F0/sprockets%2F61c9ceafb877fb740c67416ff6f782a9 +0 -0
  108. data/spec/dummy/tmp/cache/assets/DA8/900/sprockets%2Fde7a2b3987b89b9d9afb268ce4204a4a +0 -0
  109. data/spec/dummy/tmp/cache/assets/DAD/4F0/sprockets%2F765acd1bf68dc90f7d3e61da78b1e659 +0 -0
  110. data/spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  111. data/spec/dummy/tmp/cache/assets/E03/3F0/sprockets%2F82b37ae9eccec44c1ef44cfdd07d8534 +0 -0
  112. data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  113. data/spec/dummy/tmp/cache/assets/E0A/CA0/sprockets%2F7fe72ac1c0db1a7e8e7f59cf25e8a39e +0 -0
  114. data/spec/dummy/tmp/cache/assets/E20/9B0/sprockets%2F2fa6cd86b1af7bda41f5b7921cdadf10 +0 -0
  115. data/spec/dummy/tmp/cache/assets/E3A/A60/sprockets%2F7c72c96cfc66454caf5fc8ca0fedd4f3 +0 -0
  116. data/spec/dummy/tmp/cache/assets/E54/400/sprockets%2Fd0cbc16cc37efcf9dc41f242b5dbbf81 +0 -0
  117. data/spec/dummy/tmp/cache/assets/EB7/AB0/sprockets%2F801d29a5debdbfbfb4eef14d70d9bcdb +0 -0
  118. data/spec/dummy/tmp/cache/assets/F48/5E0/sprockets%2F26cd6ffcffbebbe2fd6cd1a8f0c2debc +0 -0
  119. data/spec/form/nested_spec.rb +75 -61
  120. data/spec/form/property_spec.rb +167 -14
  121. data/spec/form/validation_spec.rb +46 -23
  122. data/spec/javascript_spec.rb +60 -0
  123. data/spec/persistence_spec.rb +608 -0
  124. data/spec/spec_helper.rb +18 -2
  125. data/vendor/assets/javascripts/jquery_freeform.js +120 -0
  126. data/vendor/assets/javascripts/jquery_nested_form.js +0 -0
  127. data/vendor/assets/javascripts/prototype_freeform.js +69 -0
  128. data/vendor/assets/javascripts/prototype_nested_form.js +0 -0
  129. metadata +341 -3
@@ -0,0 +1,215 @@
1
+ require "spec_helper"
2
+
3
+ [FreeForm::Builder, FreeForm::SimpleBuilder, defined?(FreeForm::FormtasticBuilder) ? FreeForm::FormtasticBuilder : nil].compact.each do |builder|
4
+ describe builder do
5
+ let!(:milestone_form_class) do
6
+ klass = Class.new(FreeForm::Form) do
7
+ form_input_key :milestone
8
+ form_models :milestone
9
+ allow_destroy_on_save
10
+
11
+ property :name, :on => :milestone
12
+ end
13
+ # This wrapper just avoids CONST warnings
14
+ v, $VERBOSE = $VERBOSE, nil
15
+ Module.const_set("MilestoneForm", klass)
16
+ $VERBOSE = v
17
+ klass
18
+ end
19
+
20
+ let!(:task_form_class) do
21
+ klass = Class.new(FreeForm::Form) do
22
+ form_input_key :task
23
+ form_models :task
24
+ allow_destroy_on_save
25
+
26
+ property :name, :on => :task
27
+
28
+ has_many :milestones, :class => Module::MilestoneForm, :default_initializer => :milestone_initializer
29
+
30
+ def milestone_initializer
31
+ {:milestone => Milestone.new}
32
+ end
33
+ end
34
+ # This wrapper just avoids CONST warnings
35
+ v, $VERBOSE = $VERBOSE, nil
36
+ Module.const_set("TaskForm", klass)
37
+ $VERBOSE = v
38
+ klass
39
+ end
40
+
41
+ let(:form_class) do
42
+ klass = Class.new(FreeForm::Form) do
43
+ form_input_key :project
44
+ form_models :project
45
+ allow_destroy_on_save
46
+
47
+ property :name, :on => :project
48
+
49
+ has_many :tasks, :class => Module::TaskForm, :default_initializer => :task_initializer
50
+
51
+ def task_initializer
52
+ {:task => Task.new}
53
+ end
54
+ end
55
+ # This wrapper just avoids CONST warnings
56
+ v, $VERBOSE = $VERBOSE, nil
57
+ Module.const_set("ViewForm", klass)
58
+ $VERBOSE = v
59
+ klass
60
+ end
61
+
62
+ let(:form) { form_class.new(:project => Project.new) }
63
+
64
+ let(:template) do
65
+ template = ActionView::Base.new
66
+ template.output_buffer = ""
67
+ template
68
+ end
69
+
70
+ context "with no options", :no_options => true do
71
+ subject do
72
+ builder.new(:item, form, template, {}, proc {})
73
+ end
74
+
75
+ describe '#link_to_add', :link_to_add => true do
76
+ it "behaves similar to a Rails link_to" do
77
+ subject.link_to_add("Add", :tasks).should eq('<a href="javascript:void(0)" class="add_nested_form" data-association="tasks" data-blueprint-id="tasks_fields_blueprint">Add</a>')
78
+ subject.link_to_add("Add", :tasks, :class => "foo", :href => "url").should eq('<a href="url" class="foo add_nested_form" data-association="tasks" data-blueprint-id="tasks_fields_blueprint">Add</a>')
79
+ subject.link_to_add(:tasks) { "Add" }.should eq('<a href="javascript:void(0)" class="add_nested_form" data-association="tasks" data-blueprint-id="tasks_fields_blueprint">Add</a>')
80
+ end
81
+
82
+ it 'raises ArgumentError when missing association is provided' do
83
+ expect {
84
+ subject.link_to_add('Add', :bugs)
85
+ }.to raise_error(ArgumentError)
86
+ end
87
+
88
+ it 'raises ArgumentError when accepts_nested_attributes_for is missing' do
89
+ expect {
90
+ subject.link_to_add('Add', :not_nested_tasks)
91
+ }.to raise_error(ArgumentError)
92
+ end
93
+ end
94
+
95
+ describe '#link_to_remove', :link_to_remove => true do
96
+ it "behaves similar to a Rails link_to" do
97
+ subject.link_to_remove("Remove").should eq('<input id="item__destroy" name="item[_destroy]" type="hidden" value="0" /><a href="javascript:void(0)" class="remove_nested_form">Remove</a>')
98
+ subject.link_to_remove("Remove", :class => "foo", :href => "url").should eq('<input id="item__destroy" name="item[_destroy]" type="hidden" value="0" /><a href="url" class="foo remove_nested_form">Remove</a>')
99
+ subject.link_to_remove { "Remove" }.should eq('<input id="item__destroy" name="item[_destroy]" type="hidden" value="0" /><a href="javascript:void(0)" class="remove_nested_form">Remove</a>')
100
+ end
101
+
102
+ it 'has data-association attribute' do
103
+ form.build_task
104
+ subject.fields_for(:tasks, :builder => builder) do |tf|
105
+ tf.link_to_remove 'Remove'
106
+ end.should match '<a.+data-association="tasks">Remove</a>'
107
+ end
108
+
109
+ context 'when there is more than one nested level' do
110
+ it 'properly detects association name' do
111
+ task = form.build_task
112
+ task.build_milestone
113
+ subject.fields_for(:tasks, :builder => builder) do |tf|
114
+ tf.fields_for(:milestones, :builder => builder) do |mf|
115
+ mf.link_to_remove 'Remove'
116
+ end
117
+ end.should match '<a.+data-association="milestones">Remove</a>'
118
+ end
119
+ end
120
+ end
121
+
122
+ describe '#fields_for' do
123
+ it "wraps nested fields each in a div with class" do
124
+ 2.times { form.build_task }
125
+
126
+ fields = if subject.is_a?(FreeForm::SimpleBuilder)
127
+ subject.simple_fields_for(:tasks) { "Task" }
128
+ else
129
+ subject.fields_for(:tasks) { "Task" }
130
+ end
131
+
132
+ fields.should == '<div class="fields">Task</div><div class="fields">Task</div>'
133
+ end
134
+ end
135
+
136
+ it "wraps nested fields marked for destruction with an additional class" do
137
+ task = form.build_task
138
+ task.mark_for_destruction
139
+ fields = subject.fields_for(:tasks) { 'Task' }
140
+ fields.should eq('<div class="fields marked_for_destruction">Task</div>')
141
+ end
142
+
143
+ it "puts blueprint into data-blueprint attribute" do
144
+ task = form.build_task
145
+ task.mark_for_destruction
146
+ subject.fields_for(:tasks) { 'Task' }
147
+ subject.link_to_add('Add', :tasks)
148
+ output = template.send(:after_freeform_callbacks)
149
+ expected = ERB::Util.html_escape '<div class="fields">Task</div>'
150
+ output.should match(/div.+data-blueprint="#{expected}"/)
151
+ end
152
+
153
+ it "adds parent association name to the blueprint div id" do
154
+ task = form.build_task
155
+ task.build_milestone
156
+ subject.fields_for(:tasks, :builder => builder) do |tf|
157
+ tf.fields_for(:milestones, :builder => builder) { 'Milestone' }
158
+ tf.link_to_add('Add', :milestones)
159
+ end
160
+ output = template.send(:after_freeform_callbacks)
161
+ output.should match(/div.+id="tasks_milestones_fields_blueprint"/)
162
+ end
163
+
164
+ it "doesn't render wrapper div" do
165
+ task = form.build_task
166
+ fields = subject.fields_for(:tasks, :wrapper => false) { 'Task' }
167
+
168
+ fields.should eq('Task')
169
+
170
+ subject.link_to_add 'Add', :tasks
171
+ output = template.send(:after_freeform_callbacks)
172
+
173
+ output.should match(/div.+data-blueprint="Task"/)
174
+ end
175
+
176
+ it "doesn't render wrapper div when collection is passed" do
177
+ task = form.build_task
178
+ fields = subject.fields_for(:tasks, form.tasks, :wrapper => false) { 'Task' }
179
+
180
+ fields.should eq('Task')
181
+
182
+ subject.link_to_add 'Add', :tasks
183
+ output = template.send(:after_freeform_callbacks)
184
+
185
+ output.should match(/div.+data-blueprint="Task"/)
186
+ end
187
+
188
+ it "doesn't render wrapper with nested_wrapper option" do
189
+ task = form.build_task
190
+ fields = subject.fields_for(:tasks, :nested_wrapper => false) { 'Task' }
191
+
192
+ fields.should eq('Task')
193
+
194
+ subject.link_to_add 'Add', :tasks
195
+ output = template.send(:after_freeform_callbacks)
196
+
197
+ output.should match(/div.+data-blueprint="Task"/)
198
+ end
199
+ end
200
+
201
+ context "with options", :with_options => true do
202
+ subject { builder.new(:item, form, template, {}, proc {}) }
203
+
204
+ context "when model_object given" do
205
+ it "should use it instead of new generated" do
206
+ subject.fields_for(:tasks) {|f| f.object.name }
207
+ subject.link_to_add("Add", :tasks, :model_object => Task.new(:name => 'for check'))
208
+ output = template.send(:after_freeform_callbacks)
209
+ expected = ERB::Util.html_escape '<div class="fields">for check</div>'
210
+ output.should match(/div.+data-blueprint="#{expected}"/)
211
+ end
212
+ end
213
+ end
214
+ end
215
+ end
@@ -0,0 +1,97 @@
1
+ require "spec_helper"
2
+
3
+ describe FreeForm::ViewHelper do
4
+ include RSpec::Rails::HelperExampleGroup
5
+
6
+ before(:each) do
7
+ _routes.draw do
8
+ resources :projects
9
+ end
10
+ end
11
+
12
+ let!(:task_form_class) do
13
+ klass = Class.new(FreeForm::Form) do
14
+ form_input_key :task
15
+ form_model :task
16
+ allow_destroy_on_save
17
+
18
+ property :name, :on => :task
19
+ end
20
+ # This wrapper just avoids CONST warnings
21
+ v, $VERBOSE = $VERBOSE, nil
22
+ Module.const_set("TaskForm", klass)
23
+ $VERBOSE = v
24
+ klass
25
+ end
26
+
27
+ let(:form_class) do
28
+ klass = Class.new(FreeForm::Form) do
29
+ form_input_key :project
30
+ form_models :project
31
+ allow_destroy_on_save
32
+
33
+ property :name, :on => :project
34
+
35
+ has_many :tasks, :class => Module::TaskForm, :default_initializer => :task_initializer
36
+
37
+ def task_initializer
38
+ {:task => Task.new}
39
+ end
40
+ end
41
+ # This wrapper just avoids CONST warnings
42
+ v, $VERBOSE = $VERBOSE, nil
43
+ Module.const_set("ViewForm", klass)
44
+ $VERBOSE = v
45
+ klass
46
+ end
47
+
48
+ let(:project) { Project.new }
49
+
50
+ let(:test_form) { form_class.new(:project => project) }
51
+
52
+ it "should pass instance of FreeForm::Builder to freeform_for block" do
53
+ _view.freeform_for(test_form) do |f|
54
+ f.should be_instance_of(FreeForm::Builder)
55
+ end
56
+ end
57
+
58
+ it "should pass instance of FreeForm::SimpleBuilder to simple_freeform_for block" do
59
+ _view.simple_freeform_for(test_form) do |f|
60
+ f.should be_instance_of(FreeForm::SimpleBuilder)
61
+ end
62
+ end
63
+
64
+ if defined?(FreeForm::FormtasticBuilder)
65
+ it "should pass instance of FreeForm::FormtasticBuilder to semantic_freeform_for block" do
66
+ _view.semantic_freeform_for(test_form) do |f|
67
+ f.should be_instance_of(FreeForm::FormtasticBuilder)
68
+ end
69
+ end
70
+ end
71
+
72
+ if defined?(FreeForm::FormtasticBootstrapBuilder)
73
+ it "should pass instance of FreeForm::FormtasticBootstrapBuilder to semantic_bootstrap_freeform_for block" do
74
+ _view.semantic_bootstrap_freeform_for(test_form) do |f|
75
+ f.should be_instance_of(FreeForm::FormtasticBootstrapBuilder)
76
+ end
77
+ end
78
+ end
79
+
80
+ it "should append content to end of freeform" do
81
+ _view.after_freeform(:tasks) { _view.concat("123") }
82
+ _view.after_freeform(:milestones) { _view.concat("456") }
83
+ result = _view.freeform_for(test_form) {}
84
+ result.should include("123456")
85
+ end
86
+
87
+ if Rails.version >= "3.1.0"
88
+ it "should set multipart when there's a file field" do
89
+ _view.freeform_for(test_form) do |f|
90
+ f.fields_for(:tasks) do |t|
91
+ t.file_field :file
92
+ end
93
+ f.link_to_add "Add", :tasks
94
+ end.should include(" enctype=\"multipart/form-data\" ")
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,28 @@
1
+ == README
2
+
3
+ This README would normally document whatever steps are necessary to get the
4
+ application up and running.
5
+
6
+ Things you may want to cover:
7
+
8
+ * Ruby version
9
+
10
+ * System dependencies
11
+
12
+ * Configuration
13
+
14
+ * Database creation
15
+
16
+ * Database initialization
17
+
18
+ * How to run the test suite
19
+
20
+ * Services (job queues, cache servers, search engines, etc.)
21
+
22
+ * Deployment instructions
23
+
24
+ * ...
25
+
26
+
27
+ Please feel free to use a different markup language if you do not plan to run
28
+ <tt>rake doc:app</tt>.
@@ -0,0 +1,6 @@
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.expand_path('../config/application', __FILE__)
5
+
6
+ Dummy::Application.load_tasks
File without changes
@@ -0,0 +1,5 @@
1
+ // This is a manifest file that'll be compiled into including all the files listed below.
2
+ // Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
3
+ // be included in the compiled file accessible from http://example.com/assets/application.js
4
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
5
+ // the compiled file.