common_core_js 0.1.1 → 0.3.4

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/.generators +8 -0
  3. data/.gitignore +16 -0
  4. data/.rakeTasks +7 -0
  5. data/Gemfile +15 -0
  6. data/Gemfile.lock +175 -0
  7. data/LICENSE +2 -2
  8. data/README.md +147 -34
  9. data/app/assets/images/common_core_js/.keep +0 -0
  10. data/app/assets/stylesheets/common_core_js/common_core.scss +43 -0
  11. data/app/helpers/common_core_js/application_helper.rb +76 -0
  12. data/app/views/common/_common_create.js.erb +1 -1
  13. data/bin/rails +14 -0
  14. data/common_core_js.gemspec +70 -0
  15. data/lib/common_core_js.rb +20 -0
  16. data/lib/common_core_js/engine.rb +3 -1
  17. data/lib/common_core_js/version.rb +1 -1
  18. data/lib/generators/common_core/USAGE +2 -4
  19. data/lib/generators/common_core/install_generator.rb +22 -0
  20. data/lib/generators/common_core/scaffold_generator.rb +329 -30
  21. data/lib/generators/common_core/templates/_edit.haml +1 -1
  22. data/lib/generators/common_core/templates/_errors.haml +5 -0
  23. data/lib/generators/common_core/templates/_flash_notices.haml +7 -0
  24. data/lib/generators/common_core/templates/_form.haml +1 -0
  25. data/lib/generators/common_core/templates/_line.haml +5 -0
  26. data/lib/generators/common_core/templates/_list.haml +1 -1
  27. data/lib/generators/common_core/templates/_new.haml +1 -1
  28. data/lib/generators/common_core/templates/all.haml +5 -0
  29. data/lib/generators/common_core/templates/common_core.js +52 -0
  30. data/lib/generators/common_core/templates/common_core.scss +5 -0
  31. data/lib/generators/common_core/templates/controller.rb +6 -7
  32. data/lib/generators/common_core/templates/controller_spec.rb +110 -0
  33. data/lib/generators/common_core/templates/edit.js.erb +1 -1
  34. data/lib/generators/common_core/templates/update.js.erb +1 -1
  35. data/lib/tasks/common_core_js_tasks.rake +7 -4
  36. metadata +102 -41
@@ -1 +1 @@
1
- = render partial: "common/common_edit_form", locals: {singular: '<%= @singular %>', object: <%= @singular %>, url: <%= path_helper %>(<%= path_arity %>), colspan: colspan}
1
+ = render partial: "common/common_edit_form", locals: {singular: '<%= @singular %>', object: <%= @singular %>, url: <%= path_helper_singular %>(<%= path_arity %>), colspan: colspan}
@@ -0,0 +1,5 @@
1
+ - if resource.errors.any?
2
+ #error_explanation
3
+ - resource.errors.full_messages.each do |message|
4
+ %div.alert.alert-danger
5
+ = message
@@ -0,0 +1,7 @@
1
+ - unless notice.nil?
2
+ %div.alert.alert-notice.alert-dismissible
3
+ = notice
4
+
5
+ - unless alert.nil?
6
+ %div.alert.alert-danger.alert-dismissible
7
+ = alert
@@ -0,0 +1 @@
1
+ <%= all_form_fields %>
@@ -0,0 +1,5 @@
1
+ <%= all_line_fields %>
2
+ %td
3
+ = link_to "Delete <i class='fa fa-1x fa-remove'></i>".html_safe, <%= path_helper_singular %>(<%= singular %>), remote: true ,method: :delete, disable_with: "Loading...", class: "delete-<%= singular %>-button btn btn-primary "
4
+ &nbsp;
5
+ = link_to "Edit <i class='fa fa-1x fa-list-alt'></i>".html_safe, edit_<%= path_helper_singular %>(<%= singular %>), remote: true , disable_with: "Loading...", class: "edit-<%= singular %>-button btn btn-primary "
@@ -1,5 +1,5 @@
1
1
 
2
- = link_to "New <%= singular.gsub('_',' ') %>", new_<%= path_helper %>(<%= nested_arity_for_path %>), disable_with: "Loading...", remote: true, class: "new-<%= singular %>-button btn btn-primary pull-right"
2
+ = link_to "New <%= singular.gsub('_',' ') %>", new_<%= path_helper_singular %>(<%= nested_arity_for_path %>), disable_with: "Loading...", remote: true, class: "new-<%= singular %>-button btn btn-primary pull-right"
3
3
 
4
4
  .clearfix
5
5
  .new-<%= singular %>-form{style: "display: none; position: relative;"}
@@ -1,3 +1,3 @@
1
- = render partial: "common/common_new_form", locals: {singular: '<%= singular %>', plural: "<%= plural %>", object: @<%= singular %>, url: new_<%= path_helper %>(<%= nested_objects_arity %>)}
1
+ = render partial: "common/common_new_form", locals: {singular: '<%= singular %>', plural: "<%= plural %>", object: @<%= singular %>, url: <%= path_helper_plural %>(<%= nested_objects_arity %>)}
2
2
 
3
3
 
@@ -0,0 +1,5 @@
1
+ .container-fluid
2
+ .row
3
+ .col-md-12
4
+ .<%= singular %>-list
5
+ = render partial: "<%= namespace_with_trailing_dash %><%= plural %>/list", locals: {<%= plural %>: <%= all_objects_root %>.order("created_at DESC").page(1)}
@@ -0,0 +1,52 @@
1
+
2
+ require("jquery")
3
+ // console.log("loading common core...")
4
+
5
+ // require("jstimezonedetect/dist/jstz.min")
6
+ // var JSTZ = require('jstimezonedetect');
7
+
8
+
9
+
10
+
11
+ $(document).on('turbolinks:load', function() {
12
+
13
+ $(document).ready(() => {
14
+ var user_timezone = '';
15
+ try {user_timezone = JSTZ.determine().name();} catch(e){}
16
+ // always pass csrf tokens on ajax calls
17
+
18
+
19
+ // $.ajaxSetup({
20
+ // beforeSend: (xhr) => {
21
+ //
22
+ // xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))
23
+ // xhr.setRequestHeader( 'X-User-Timezone', user_timezone)
24
+ //
25
+ //
26
+ // }
27
+ // })
28
+
29
+ $("body").on("click", "[data-role='close-button']", (event) => {
30
+ var form_name;
31
+ form_name = $(event.currentTarget).data("name");
32
+ row_id = $(event.currentTarget).data("row-id");
33
+
34
+ if (row_id) {
35
+ $("table." + form_name + "-table tr[data-id=" + row_id + "][data-edit='true']").remove()
36
+ $("table." + form_name + "-table tr[data-id=" + row_id + "]:not([data-edit='true'])").fadeIn()
37
+ $("table." + form_name + "-table tr[data-id=" + row_id + "]:not([data-edit='true']) .show-area").show()
38
+ } else {
39
+ if ($(".new-" + form_name + "-form").length == 0) {
40
+ throw("ERROR: not found" + " .new-" + form_name + "-form")
41
+ }
42
+ var $form = $(event.currentTarget).closest(".new-" + form_name + "-form")
43
+ $form.slideUp()
44
+ $form.siblings(".new-" + form_name + "-button").fadeIn()
45
+ $form.find("i").remove()
46
+ }
47
+ })
48
+ });
49
+ });
50
+
51
+
52
+
@@ -0,0 +1,5 @@
1
+ [data-role='close-button'] {
2
+ position: absolute;
3
+ top: 0;
4
+ right: 0;
5
+ }
@@ -22,13 +22,14 @@ class <%= controller_class_name %> < ApplicationController
22
22
  def load_<%= singular_name %>
23
23
  @<%= singular_name %> = <%= object_scope %>.find(params[:id])
24
24
  end
25
+ include CommonCoreJs::ControllerHelpers
25
26
 
26
27
  def index
27
28
  @<%= plural_name %> = <%= object_scope %><% if model_has_strings? %>.where(<%=class_name %>.arel_table[:email].matches("%#{@__general_string}%"))<% end %>.page(params[:page])
28
29
 
29
30
  respond_to do |format|
30
31
  format.js<% if @with_index %>
31
- format.html {render 'all_<%=plural_name %>.haml'}<% end %>
32
+ format.html {render 'all.haml'}<% end %>
32
33
  end
33
34
  end
34
35
 
@@ -40,14 +41,14 @@ class <%= controller_class_name %> < ApplicationController
40
41
  end
41
42
 
42
43
  def create
43
- @<%=singular_name %> = <%=class_name %>.create(<%=singular_name %>_params<% if !create_merge_params.empty? %>.merge!(<%= create_merge_params %>)<%end%>)
44
+ modified_params = modify_date_inputs_on_params(<%=singular_name %>_params.dup<% if !create_merge_params.empty? %>.merge!(<%= create_merge_params %><%end%> ), <%=@auth%>)
45
+ @<%=singular_name %> = <%=class_name %>.create(modified_params)
44
46
  respond_to do |format|
45
47
  if @<%= singular_name %>.save
46
- format.js
47
48
  else
48
49
  flash[:alert] = "Oops, your <%=singular_name %> could not be saved."
49
- format.js
50
50
  end
51
+ format.js
51
52
  end
52
53
  end
53
54
 
@@ -58,16 +59,14 @@ class <%= controller_class_name %> < ApplicationController
58
59
  end
59
60
 
60
61
  def edit
61
-
62
62
  respond_to do |format|
63
63
  format.js
64
64
  end
65
65
  end
66
66
 
67
67
  def update
68
-
69
68
  respond_to do |format|
70
- if !@<%=singular_name %>.save
69
+ if !@<%=singular_name %>.update(modify_date_inputs_on_params(<%= singular %>_params, <%=@auth%> ))
71
70
  flash[:alert] = "<%=singular_name.titlecase %> could not be saved"
72
71
  end
73
72
  format.js {}
@@ -0,0 +1,110 @@
1
+ require 'rails_helper'
2
+
3
+ describe <%= controller_class_name %> do
4
+ render_views
5
+ <% unless @auth.nil? %> let(:<%= @auth %>) {create(:<%= @auth.gsub('current_', '') %>)}<%end%>
6
+ let(:<%= singular %>) {create(:<%= singular %><%= object_parent_mapping_as_argument_for_specs %> )}
7
+
8
+ <%= objest_nest_factory_setup %>
9
+
10
+ before(:each) do
11
+ @request.env["devise.mapping"] = Devise.mappings[:account]
12
+
13
+ sign_in <%= @auth %>, scope: :<%= @auth_identifier %>
14
+ end
15
+
16
+ describe "index" do
17
+ it "should respond" do
18
+ get :index, xhr: true, format: 'js', params: {
19
+ <%= objest_nest_params_by_id_for_specs %>
20
+ }
21
+ end
22
+ end
23
+
24
+ describe "new" do
25
+ it "should show form" do
26
+ get :new, xhr: true, format: 'js', params: {
27
+ <%= objest_nest_params_by_id_for_specs %>
28
+ }
29
+ end
30
+ end
31
+
32
+ describe "create" do
33
+ it "should create a new <%= singular %>" do
34
+ expect {
35
+ post :create, xhr: true, format: 'js', params: {
36
+ <%= (@nested_args.empty? ? "" : objest_nest_params_by_id_for_specs + ",") %>
37
+ <%= singular %>: {
38
+ <%= columns_spec_with_sample_data %>
39
+ }}
40
+ }.to change { <%= @singular_class %>.all.count }.by(1)
41
+ assert_response :ok
42
+ end
43
+
44
+ # it "should not create if there are errors" do
45
+ # post :create, xhr: true, format: 'js', params: {id: <%= singular %>.id,
46
+ # <%= singular %>: {skin_id: nil}}
47
+ #
48
+ # expect(controller).to set_flash.now[:alert].to(/Oops, your <%= singular %> could not be saved/)
49
+ # end
50
+ end
51
+
52
+ describe "edit" do
53
+ it "should return an editable form" do
54
+ get :edit, xhr: true, format: 'js', params: {
55
+ <%= (@nested_args.empty? ? "" : objest_nest_params_by_id_for_specs + ",") %>
56
+ id: <%= singular %>.id
57
+ }
58
+ assert_response :ok
59
+ end
60
+ end
61
+
62
+ describe "show" do
63
+ it "should return a view form" do
64
+ get :show, xhr: true, format: 'js', params: {
65
+ <%= (@nested_args.empty? ? "" : objest_nest_params_by_id_for_specs + ",") %>
66
+ id: <%= singular %>.id
67
+ }
68
+ assert_response :ok
69
+ end
70
+ end
71
+
72
+ describe "update" do
73
+ it "should update" do
74
+ put :update, xhr: true, format: 'js',
75
+ params: {
76
+ <%= (@nested_args.empty? ? "" : objest_nest_params_by_id_for_specs + ",") %>
77
+ id: <%= singular %>.id,
78
+ <%= singular %>: {
79
+ <%= columns_spec_with_sample_data %>
80
+ }}
81
+
82
+ assert_response :ok
83
+ end
84
+
85
+ # it "should not update if invalid" do
86
+ # put :update, xhr: true, format: 'js',
87
+ # params: {
88
+ # id: <%= singular %>.id,
89
+ # <%= singular %>: {
90
+ # <%= columns_spec_with_sample_data %>
91
+ # }}
92
+ #
93
+ # assert_response :ok
94
+ #
95
+ # expect(controller).to set_flash.now[:alert].to(/Oops, your <%= singular %> could not be saved/)
96
+ # end
97
+ end
98
+
99
+ describe "#destroy" do
100
+ it "should destroy" do
101
+ post :destroy, format: 'js', params: {
102
+ <%= (@nested_args.empty? ? "" : objest_nest_params_by_id_for_specs + ",") %>
103
+ id: <%= singular %>.id
104
+ }
105
+ assert_response :ok
106
+ expect(<%= @singular_class %>.count).to be(0)
107
+ end
108
+ end
109
+ end
110
+
@@ -1 +1 @@
1
- <%%= render partial: 'common/common_edit', locals: {object: @<%= singular_name %>, singular: "<%= singular_name %>", plural: "<%= plural_name %>", url: <%= path_helper %>(<%= path_arity %>)} %>
1
+ <%%= render partial: 'common/common_edit', locals: {object: @<%= singular_name %>, singular: "<%= singular_name %>", plural: "<%= plural_name %>", url: <%= path_helper_singular %>(<%= path_arity %>)} %>
@@ -1,6 +1,6 @@
1
1
  <%%= render partial: 'common/common_update', locals: {object: @<%= singular %>, singular: "<%= singular %>",
2
2
  plural: "<%= plural %>",
3
- url: <%= path_helper %>(<%= path_arity %>),
3
+ url: <%= path_helper_singular %>(<%= path_arity %>),
4
4
  pass_through_locals: {
5
5
  <%= nested_assignments %>
6
6
  }} %>
@@ -1,4 +1,7 @@
1
- # desc "Explaining what the task does"
2
- # task :common_core_js do
3
- # # Task goes here
4
- # end
1
+ namespace :common_core do
2
+ desc "install"
3
+
4
+ task install: :environment do
5
+ puts "please run rails generate common_core:install"
6
+ end
7
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: common_core_js
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Fleetwood-Boldt
@@ -14,93 +14,133 @@ dependencies:
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 6.0.3
20
17
  - - ">="
21
18
  - !ruby/object:Gem::Version
22
- version: 6.0.3.2
19
+ version: '0'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: 6.0.3
30
24
  - - ">="
31
25
  - !ruby/object:Gem::Version
32
- version: 6.0.3.2
26
+ version: '0'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: kaminari
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
- - - ">"
38
- - !ruby/object:Gem::Version
39
- version: '1'
40
31
  - - ">="
41
32
  - !ruby/object:Gem::Version
42
- version: 1.2.1
33
+ version: '0'
43
34
  type: :runtime
44
35
  prerelease: false
45
36
  version_requirements: !ruby/object:Gem::Requirement
46
37
  requirements:
47
- - - ">"
48
- - !ruby/object:Gem::Version
49
- version: '1'
50
38
  - - ">="
51
39
  - !ruby/object:Gem::Version
52
- version: 1.2.1
40
+ version: '0'
53
41
  - !ruby/object:Gem::Dependency
54
42
  name: haml-rails
55
43
  requirement: !ruby/object:Gem::Requirement
56
44
  requirements:
57
- - - ">"
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
58
53
  - !ruby/object:Gem::Version
59
- version: '2'
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sass-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
60
59
  - - ">="
61
60
  - !ruby/object:Gem::Version
62
- version: 2.0.1
61
+ version: '0'
63
62
  type: :runtime
64
63
  prerelease: false
65
64
  version_requirements: !ruby/object:Gem::Requirement
66
65
  requirements:
67
- - - ">"
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bootsnap
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
68
74
  - !ruby/object:Gem::Version
69
- version: '2'
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
70
80
  - - ">="
71
81
  - !ruby/object:Gem::Version
72
- version: 2.0.1
82
+ version: '0'
73
83
  - !ruby/object:Gem::Dependency
74
- name: simplecov
84
+ name: bootstrap
75
85
  requirement: !ruby/object:Gem::Requirement
76
86
  requirements:
77
- - - ">"
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
78
95
  - !ruby/object:Gem::Version
79
- version: '0.17'
80
- - - "~>"
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: font-awesome-rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
81
102
  - !ruby/object:Gem::Version
82
- version: '0.17'
83
- type: :development
103
+ version: '0'
104
+ type: :runtime
84
105
  prerelease: false
85
106
  version_requirements: !ruby/object:Gem::Requirement
86
107
  requirements:
87
- - - ">"
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: ffaker
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
88
116
  - !ruby/object:Gem::Version
89
- version: '0.17'
90
- - - "~>"
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
91
123
  - !ruby/object:Gem::Version
92
- version: '0.17'
124
+ version: '0'
93
125
  description: Simple, plug & play Rails scaffolding with really simple Javascript
94
126
  email: jason.fb@datatravels.com
95
127
  executables: []
96
128
  extensions: []
97
129
  extra_rdoc_files: []
98
130
  files:
131
+ - ".generators"
132
+ - ".gitignore"
133
+ - ".rakeTasks"
134
+ - Gemfile
135
+ - Gemfile.lock
99
136
  - LICENSE
100
137
  - README.md
101
138
  - Rakefile
139
+ - app/.DS_Store
102
140
  - app/assets/config/common_core_js_manifest.js
141
+ - app/assets/images/common_core_js/.keep
103
142
  - app/assets/stylesheets/common_core_js/application.css
143
+ - app/assets/stylesheets/common_core_js/common_core.scss
104
144
  - app/controllers/common_core_js/application_controller.rb
105
145
  - app/helpers/common_core_js/application_helper.rb
106
146
  - app/jobs/common_core_js/application_job.rb
@@ -116,19 +156,30 @@ files:
116
156
  - app/views/common/_common_show_form.haml
117
157
  - app/views/common/_common_update.js.erb
118
158
  - app/views/layouts/common_core_js/application.html.erb
159
+ - bin/rails
160
+ - common_core_js.gemspec
119
161
  - config/routes.rb
162
+ - lib/.DS_Store
120
163
  - lib/common_core_js.rb
121
164
  - lib/common_core_js/engine.rb
122
165
  - lib/common_core_js/version.rb
166
+ - lib/generators/.DS_Store
123
167
  - lib/generators/common_core/USAGE
124
168
  - lib/generators/common_core/erb/scaffold/common_core_scaffold_generator.rb
169
+ - lib/generators/common_core/install_generator.rb
125
170
  - lib/generators/common_core/scaffold_generator.rb
126
171
  - lib/generators/common_core/templates/_edit.haml
172
+ - lib/generators/common_core/templates/_errors.haml
173
+ - lib/generators/common_core/templates/_flash_notices.haml
127
174
  - lib/generators/common_core/templates/_form.haml
128
175
  - lib/generators/common_core/templates/_line.haml
129
176
  - lib/generators/common_core/templates/_list.haml
130
177
  - lib/generators/common_core/templates/_new.haml
178
+ - lib/generators/common_core/templates/all.haml
179
+ - lib/generators/common_core/templates/common_core.js
180
+ - lib/generators/common_core/templates/common_core.scss
131
181
  - lib/generators/common_core/templates/controller.rb
182
+ - lib/generators/common_core/templates/controller_spec.rb
132
183
  - lib/generators/common_core/templates/create.js.erb
133
184
  - lib/generators/common_core/templates/destroy.js.erb
134
185
  - lib/generators/common_core/templates/edit.js.erb
@@ -143,14 +194,24 @@ metadata:
143
194
  source_code_uri: https://github.com/jasonfb/common_core_js
144
195
  documentation_uri: https://github.com/jasonfb/common_core_js
145
196
  homepage_uri: https://blog.jasonfleetwoodboldt.com/common-core-js/
146
- mailing_list_uri: https://blog.jasonfleetwoodboldt.com
147
- post_install_message: "---------------------------------------------\nWelcome to Common
148
- Core\n\nrails generate common_score:scaffold Thing\n\n * Build plug-and-play
149
- scaffolding mixing HAML with jQuery-based Javascript\n * Automatically Reads
150
- Your Models (make them first!)\n * Excellent for CRUD, lists with pagination,
151
- searching, sorting.\n * Wonderful for prototyping\n * Plays with Devise, Kaminari,
152
- Haml-Rails\n * Nest your routes model-by-model for built-in poor man's authentication\n
153
- \ * Throw it away when you're done. \n\nsee README for complete instructions.\n---------------------------------------------\n"
197
+ mailing_list_uri: https://blog.jasonfleetwoodboldt.com/#sfba-form2-container
198
+ post_install_message: |
199
+ ---------------------------------------------
200
+ Welcome to Common Core
201
+
202
+ rails generate common_score:scaffold Thing
203
+
204
+ * Build plug-and-play scaffolding mixing HAML with jQuery-based Javascript
205
+ * Automatically Reads Your Models (make them before building your scaffolding!)
206
+ * Excellent for CRUD, lists with pagination, searching, sorting.
207
+ * Wonderful for prototyping.
208
+ * Plays nicely with Devise, Kaminari, Haml-Rails, Rspec.
209
+ * Create specs autoamatically along with the controllers.
210
+ * Nest your routes model-by-model for built-in poor man's authentication
211
+ * Throw the scaffolding away when your app is ready to graduate to its next phase.
212
+
213
+ see README for complete instructions.
214
+ ---------------------------------------------
154
215
  rdoc_options: []
155
216
  require_paths:
156
217
  - lib