common_core_js 0.1.0 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) 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 +327 -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 +3 -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 +4 -0
  29. data/lib/generators/common_core/templates/common_core.js +52 -0
  30. data/lib/generators/common_core/templates/common_core.scss +0 -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 +105 -42
  37. data/lib/version.rb +0 -4
@@ -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,3 @@
1
+ <%= all_line_fields %>
2
+ %td
3
+ = 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 pull-right "
@@ -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,4 @@
1
+ .container-fluid
2
+ .row
3
+ .col-md-12
4
+ = 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
+
@@ -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.0
4
+ version: 0.3.3
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
@@ -136,19 +187,31 @@ files:
136
187
  - lib/generators/common_core/templates/new.js.erb
137
188
  - lib/generators/common_core/templates/update.js.erb
138
189
  - lib/tasks/common_core_js_tasks.rake
139
- - lib/version.rb
140
- homepage: http://rubygems.org/gems/common-core-js
190
+ homepage: https://blog.jasonfleetwoodboldt.com/common-core-js/
141
191
  licenses:
142
192
  - MIT
143
193
  metadata:
144
194
  source_code_uri: https://github.com/jasonfb/common_core_js
145
- post_install_message: "---------------------------------------------\nWelcome to Common
146
- Core\n\nrails generate common_score:scaffold Thing\n\n * Build plug-and-play
147
- scaffolding mixing HAML with jQuery-based Javascript\n * Automatically Reads
148
- Your Models (make them first!)\n * Excellent for CRUD, lists with pagination,
149
- searching, sorting.\n * Wonderful for prototyping\n * Plays with Devise, Kaminari,
150
- Haml-Rails\n * Nest your routes model-by-model for built-in poor man's authentication\n
151
- \ * Throw it away when you're done. \n\nsee README for complete instructions.\n---------------------------------------------\n"
195
+ documentation_uri: https://github.com/jasonfb/common_core_js
196
+ homepage_uri: https://blog.jasonfleetwoodboldt.com/common-core-js/
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
+ ---------------------------------------------
152
215
  rdoc_options: []
153
216
  require_paths:
154
217
  - lib