hot-glue 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +7 -0
  2. data/.github/FUNDING.yml +2 -0
  3. data/.gitignore +16 -0
  4. data/Gemfile +15 -0
  5. data/Gemfile.lock +196 -0
  6. data/LICENCE +13 -0
  7. data/README.md +262 -0
  8. data/Rakefile +32 -0
  9. data/app/helpers/hot_glue/controller_helper.rb +105 -0
  10. data/app/helpers/hot_glue_helper.rb +4 -0
  11. data/bin/rails +14 -0
  12. data/lib/generators/hot_glue/install_generator.rb +21 -0
  13. data/lib/generators/hot_glue/scaffold_generator.rb +674 -0
  14. data/lib/generators/hot_glue/templates/_errors.haml +5 -0
  15. data/lib/generators/hot_glue/templates/_flash_notices.haml +7 -0
  16. data/lib/generators/hot_glue/templates/_form.haml +4 -0
  17. data/lib/generators/hot_glue/templates/_line.haml +6 -0
  18. data/lib/generators/hot_glue/templates/_list.haml +9 -0
  19. data/lib/generators/hot_glue/templates/_new_button.haml +2 -0
  20. data/lib/generators/hot_glue/templates/_show.haml +7 -0
  21. data/lib/generators/hot_glue/templates/base_controller.rb +3 -0
  22. data/lib/generators/hot_glue/templates/controller.rb +125 -0
  23. data/lib/generators/hot_glue/templates/controller_spec.rb +110 -0
  24. data/lib/generators/hot_glue/templates/create.turbo_stream.haml +5 -0
  25. data/lib/generators/hot_glue/templates/destroy.turbo_stream.haml +2 -0
  26. data/lib/generators/hot_glue/templates/edit.haml +19 -0
  27. data/lib/generators/hot_glue/templates/edit.turbo_stream.haml +4 -0
  28. data/lib/generators/hot_glue/templates/index.haml +9 -0
  29. data/lib/generators/hot_glue/templates/new.haml +10 -0
  30. data/lib/generators/hot_glue/templates/update.turbo_stream.haml +5 -0
  31. data/lib/hot-glue.rb +28 -0
  32. data/lib/hotglue/engine.rb +6 -0
  33. data/lib/hotglue/version.rb +3 -0
  34. metadata +178 -0
@@ -0,0 +1,4 @@
1
+ .row
2
+ <%= all_form_fields %>
3
+ .col
4
+ = f.submit "Save", class: "btn btn-primary pull-right"
@@ -0,0 +1,6 @@
1
+ = turbo_frame_tag "<%= singular %>__#{<%= singular %>.id}" do
2
+ .row{'data-id': <%= singular %>.id, 'data-edit': 'false'}
3
+ = render partial: "show", locals: {<%= singular %>: <%= singular %>}
4
+
5
+
6
+
@@ -0,0 +1,9 @@
1
+ = turbo_frame_tag "<%= plural %>-list" do
2
+ .container.<%= singular %>-table
3
+ .row
4
+ <%= list_column_headings %>
5
+ %div.tbody
6
+ - if <%= plural %>.empty?
7
+ None
8
+ - <%= plural %>.each do |<%= singular %>|
9
+ = render partial: '<%= line_path_partial %>', locals: {<%= singular %>: <%= singular %> <%= nested_assignments_with_leading_comma %> }
@@ -0,0 +1,2 @@
1
+ = turbo_frame_tag "<%= singular %>-new" do
2
+ = link_to "New <%= singular.titleize %>", new_<%= singular %>_path(), disable_with: "Loading...", class: "new-<%= singular %>-button btn btn-primary pull-right"
@@ -0,0 +1,7 @@
1
+ <%= all_line_fields %>
2
+ .col
3
+ <% if destroy_action %>
4
+ = link_to "Delete <i class='fa fa-1x fa-remove'></i>".html_safe, <%= path_helper_full %>(<%= path_helper_args %>), method: :delete, data: {confirm: 'Are you sure?'}, disable_with: "Loading...", class: "delete-<%= singular %>-button btn btn-primary "
5
+ <% end %>
6
+ &nbsp;
7
+ = link_to "Edit <i class='fa fa-1x fa-list-alt'></i>".html_safe, edit_<%= path_helper_full %>(<%= path_helper_args %>), disable_with: "Loading...", class: "edit-<%= singular %>-button btn btn-primary "
@@ -0,0 +1,3 @@
1
+ class <%= controller_descends_from %> < ApplicationController
2
+ end
3
+
@@ -0,0 +1,125 @@
1
+ class <%= controller_class_name %> < <%= controller_descends_from %>
2
+ <% unless @auth_identifier == '' || @auth.nil? %>before_action :authenticate_<%= auth_identifier %>!<% end %>
3
+ <% if any_nested? %> <% @nested_args.each do |arg| %>
4
+ before_action :load_<%= arg %><% end %> <% end %>
5
+ before_action :load_<%= singular_name %>, only: [:show, :edit, :update, :destroy]
6
+ helper :hot_glue
7
+ include HotGlue::ControllerHelper
8
+
9
+ <% if no_devise_installed %>
10
+ # TODO: implement current_user or use Devise
11
+ <% end %>
12
+
13
+ <% if any_nested? %><% nest_chain = [] %> <% @nested_args.each { |arg|
14
+ this_scope = nest_chain.empty? ? "#{@auth ? auth_object : class_name}.#{arg}s" : "@#{nest_chain.last}.#{arg}s"
15
+ nest_chain << arg %>def load_<%= arg %>
16
+ @<%= arg %> = <%= this_scope %>.find(params[:<%= arg %>_id])
17
+ end<% } %><% end %>
18
+
19
+ <% if !@self_auth %>
20
+ def load_<%= singular_name %>
21
+ @<%= singular_name %> = <%= object_scope %>.find(params[:id])
22
+ end
23
+ <% else %>
24
+ def load_<%= singular_name %>
25
+ @<%= singular_name %> = <%= auth_object %>
26
+ end<% end %>
27
+
28
+ def load_all_<%= plural %>
29
+ <% if !@self_auth %>@<%= plural_name %> = <%= object_scope %><% if model_has_strings? %>.where(<%=class_name %>.arel_table[:email].matches("%#{@__general_string}%"))<% end %>.page(params[:page])
30
+ <% else %>@<%= plural_name %> = [<%= auth_object %>]<% end %>
31
+ end
32
+
33
+ def index
34
+ load_all_<%= plural %>
35
+ respond_to do |format|
36
+ format.html
37
+ end
38
+ end
39
+
40
+ <% if create_action %> def new <% if !@auth.nil? %>
41
+ @<%= singular_name %> = <%= class_name %>.new(<%= @object_owner_sym %>: <%= @object_owner_eval %>)
42
+ <% else %>
43
+ @<%= singular_name %> = <%= class_name %>.new
44
+ <% end %>
45
+ respond_to do |format|
46
+ format.html
47
+ end
48
+ end
49
+
50
+ def create
51
+ modified_params = modify_date_inputs_on_params(<%=singular_name %>_params.dup<% if !@object_owner_sym.empty? %>.merge!(<%= @object_owner_sym %>: <%= @object_owner_eval %> )<% end %> <%= @auth ? ', ' + @auth : '' %>)
52
+ @<%=singular_name %> = <%=class_name %>.create(modified_params)
53
+
54
+ if @<%= singular_name %>.save
55
+
56
+ else
57
+ flash[:alert] = "Oops, your <%= singular_name %> could not be created."
58
+ end
59
+ load_all_<%= plural %>
60
+ respond_to do |format|
61
+ format.turbo_stream
62
+ format.html { redirect_to <%= plural %>_path }
63
+ end
64
+ end<% end %>
65
+
66
+ def show
67
+ respond_to do |format|
68
+ format.html
69
+ end
70
+ end
71
+
72
+ def edit
73
+ respond_to do |format|
74
+ format.turbo_stream
75
+ format.html
76
+ end
77
+ end
78
+
79
+ def update
80
+ if !@<%= singular_name %>.update(modify_date_inputs_on_params(<%= singular %>_params<%= @auth ? ', ' + @auth : '' %>))
81
+ flash[:alert] = "<%= singular_name.titlecase %> could not be saved"
82
+ end
83
+ respond_to do |format|
84
+ format.turbo_stream
85
+ format.html
86
+ end
87
+ end
88
+
89
+ <% if destroy_action %> def destroy
90
+ begin
91
+ @<%=singular_name%>.destroy
92
+ rescue StandardError => e
93
+ flash[:alert] = "<%= singular_name.titlecase %> could not be deleted"
94
+ end
95
+ load_all_<%= plural %>
96
+ respond_to do |format|
97
+ format.turbo_stream
98
+ format.html { redirect_to <%= plural %>_path }
99
+ end
100
+ end<% end %>
101
+
102
+ def <%=singular_name%>_params
103
+ params.require(:<%=singular_name%>).permit( <%= @columns %> )
104
+ end
105
+
106
+ def default_colspan
107
+ <%= @default_colspan %>
108
+ end
109
+
110
+ def namespace
111
+ <% if @namespace %>
112
+ "<%= @namespace %>/"
113
+ <% else %>
114
+ ""
115
+ <% end %>
116
+ end
117
+
118
+
119
+ def common_scope
120
+ @nested_args
121
+ end
122
+
123
+ end
124
+
125
+
@@ -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 %>
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
+
@@ -0,0 +1,5 @@
1
+ = turbo_stream.replace "<%= plural %>-list" do
2
+ = render partial: "list", locals: {<%= plural %>: @<%= plural %>}
3
+
4
+ = turbo_stream.replace "<%= singular %>-new" do
5
+ = render partial: "new_button"
@@ -0,0 +1,2 @@
1
+ = turbo_stream.replace "<%=plural%>-list" do
2
+ = render partial: "list", locals: {<%=plural%>: @<%=plural%>}
@@ -0,0 +1,19 @@
1
+ = turbo_frame_tag "<%= singular %>__#{<%= "@" + singular %>.id}" do
2
+ .cell.editable{style: "position: relative;"}
3
+ - if <%="@" + singular%>.errors.any?
4
+ = render(partial: "#{controller.namespace}errors", locals: {resource: <%="@" + singular%>})
5
+
6
+
7
+ Editing
8
+ - if <%="@" + singular%>.try(:to_label)
9
+ = <%="@" + singular%>.to_label
10
+ - elsif <%="@" + singular%>.try(:name)
11
+ = <%="@" + singular%>.name
12
+ - else
13
+ (no name)
14
+
15
+ = form_with model: <%= "@" + singular%>, url: <%= path_helper_singular %>(<%= path_arity %>) do |f|
16
+ = render partial: "form", locals: {:<%= singular %> => <%= "@" + singular%>, f: f}
17
+
18
+ %i.fa.fa-times-circle.fa-2x{ 'data-name' => 'close-invoice__#{@invoice.id}', 'data-row-id' => <%= "@" + singular %>.id, 'data-role' => 'close-button'}
19
+
@@ -0,0 +1,4 @@
1
+
2
+ = turbo_stream.replace "<%= singular%>__#{@<%= singular %>.id}" do
3
+ = render 'edit'
4
+
@@ -0,0 +1,9 @@
1
+ .container-fluid
2
+ .row
3
+ .col-md-12
4
+ = render partial: "new_button"
5
+ .clearfix
6
+ = render partial: "<%= plural %>/list", locals: {<%= plural %>: @<%= plural %>}
7
+
8
+
9
+
@@ -0,0 +1,10 @@
1
+ = turbo_frame_tag "<%= singular %>-new" do
2
+ %h3
3
+ New <%= singular.titlecase %>
4
+
5
+ = form_with model: @invoice, url: <%= path_helper_plural %>(<%= nested_objects_arity %>), method: "post" do |f|
6
+ = render partial: "<%=namespace_with_slash%><%= @plural %>/form", locals: {<%= singular %>: @<%= singular %>, f: f}
7
+
8
+ .row
9
+ .col-md-12
10
+ = f.submit "Save", class: "btn btn-primary pull-right"
@@ -0,0 +1,5 @@
1
+
2
+ = turbo_stream.replace "<%= singular%>__#{@<%= singular %>.id}" do
3
+ = render partial: 'line', locals: {<%= singular %>: @<%= singular %> <%= nested_assignments_with_leading_comma %> }
4
+
5
+
data/lib/hot-glue.rb ADDED
@@ -0,0 +1,28 @@
1
+ require "hotglue/engine"
2
+
3
+ require 'kaminari'
4
+ require 'haml-rails'
5
+
6
+
7
+ module HotGlue
8
+
9
+ # module ControllerHelpers
10
+ # def modify_date_inputs_on_params(modified_params, authenticated_user = nil)
11
+ # use_timezone = authenticated_user.timezone || Time.now.strftime("%z")
12
+ #
13
+ # modified_params = modified_params.tap do |params|
14
+ # params.keys.each{|k|
15
+ # if k.ends_with?("_at") || k.ends_with?("_date")
16
+ #
17
+ # begin
18
+ # params[k] = DateTime.strptime("#{params[k]} #{use_timezone}", '%Y-%m-%dT%H:%M %z')
19
+ # rescue StandardError
20
+ #
21
+ # end
22
+ # end
23
+ # }
24
+ # end
25
+ # modified_params
26
+ # end
27
+ # end
28
+ end
@@ -0,0 +1,6 @@
1
+ module HotGlue
2
+ class Engine < ::Rails::Engine
3
+
4
+ config.autoload_paths << File.expand_path("lib/helpers/hot_glue_helper.rb", __dir__)
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ module HotGlue
2
+ VERSION = '0.0.2'
3
+ end
metadata ADDED
@@ -0,0 +1,178 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hot-glue
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Jason Fleetwood-Boldt
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-02-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '6.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '6.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: kaminari
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: haml-rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: turbo-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.5'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.5'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sass-rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: ffaker
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.16'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.16'
97
+ description: Simple, plug & play Rails scaffold building companion for Turbo-Rails
98
+ and Hotwire
99
+ email: tech@datatravels.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".github/FUNDING.yml"
105
+ - ".gitignore"
106
+ - Gemfile
107
+ - Gemfile.lock
108
+ - LICENCE
109
+ - README.md
110
+ - Rakefile
111
+ - app/helpers/hot_glue/controller_helper.rb
112
+ - app/helpers/hot_glue_helper.rb
113
+ - bin/rails
114
+ - lib/generators/hot_glue/install_generator.rb
115
+ - lib/generators/hot_glue/scaffold_generator.rb
116
+ - lib/generators/hot_glue/templates/_errors.haml
117
+ - lib/generators/hot_glue/templates/_flash_notices.haml
118
+ - lib/generators/hot_glue/templates/_form.haml
119
+ - lib/generators/hot_glue/templates/_line.haml
120
+ - lib/generators/hot_glue/templates/_list.haml
121
+ - lib/generators/hot_glue/templates/_new_button.haml
122
+ - lib/generators/hot_glue/templates/_show.haml
123
+ - lib/generators/hot_glue/templates/base_controller.rb
124
+ - lib/generators/hot_glue/templates/controller.rb
125
+ - lib/generators/hot_glue/templates/controller_spec.rb
126
+ - lib/generators/hot_glue/templates/create.turbo_stream.haml
127
+ - lib/generators/hot_glue/templates/destroy.turbo_stream.haml
128
+ - lib/generators/hot_glue/templates/edit.haml
129
+ - lib/generators/hot_glue/templates/edit.turbo_stream.haml
130
+ - lib/generators/hot_glue/templates/index.haml
131
+ - lib/generators/hot_glue/templates/new.haml
132
+ - lib/generators/hot_glue/templates/update.turbo_stream.haml
133
+ - lib/hot-glue.rb
134
+ - lib/hotglue/engine.rb
135
+ - lib/hotglue/version.rb
136
+ homepage: https://blog.jasonfleetwoodboldt.com/hot-glue/
137
+ licenses:
138
+ - Nonstandard
139
+ metadata:
140
+ source_code_uri: https://github.com/jasonfb/hot-glue
141
+ documentation_uri: https://jfb.teachable.com/p/gems-by-jason
142
+ homepage_uri: https://blog.jasonfleetwoodboldt.com/hot-glue/
143
+ post_install_message: |
144
+ ---------------------------------------------
145
+ Welcome to Hot Glue - A Scaffold Building Companion for Hotwire + Turbo-Rails
146
+
147
+ rails generate hot_glue:scaffold Thing
148
+
149
+ * Build plug-and-play scaffolding mixing HAML with the power of Hotwire and Turbo-Rails
150
+ * Automatically Reads Your Models (make them before building your scaffolding!)
151
+ * Excellent for CRUD, lists with pagination, searching, sorting.
152
+ * Great for prototyping very.
153
+ * Plays nicely with Devise, Kaminari, Haml-Rails, Rspec.
154
+ * Create specs automatically along with the controllers.
155
+ * Nest your routes model-by-model for built-in poor man's authentication
156
+ * Throw the scaffolding away when your app is ready to graduate to its next phase.
157
+
158
+ see README for complete instructions.
159
+ ---------------------------------------------
160
+ rdoc_options: []
161
+ require_paths:
162
+ - lib
163
+ required_ruby_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ requirements: []
174
+ rubygems_version: 3.0.8
175
+ signing_key:
176
+ specification_version: 4
177
+ summary: A gem build scaffolding.
178
+ test_files: []