gnarails 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +227 -0
  3. data/.gitignore +5 -0
  4. data/.pronto.yml +2 -0
  5. data/.railsrc +2 -0
  6. data/.rspec +2 -0
  7. data/.rubocop.yml +3 -0
  8. data/.ruby-version +1 -0
  9. data/Brewfile +3 -0
  10. data/CHANGELOG.md +63 -0
  11. data/CODE_OF_CONDUCT.md +74 -0
  12. data/CONTRIBUTING.md +48 -0
  13. data/Gemfile +11 -0
  14. data/Gemfile.lock +213 -0
  15. data/LICENSE +21 -0
  16. data/README.md +136 -0
  17. data/Rakefile +6 -0
  18. data/bin/ci_pronto +6 -0
  19. data/bin/console +14 -0
  20. data/bin/generate-react-test-app.sh +2 -0
  21. data/bin/generate-test-app.sh +22 -0
  22. data/bin/setup +8 -0
  23. data/bin/test-setup.sh +8 -0
  24. data/exe/gnarails +4 -0
  25. data/gnarails.gemspec +34 -0
  26. data/gnarly.rb +395 -0
  27. data/lib/gnarails/cli/application.rb +192 -0
  28. data/lib/gnarails/version.rb +3 -0
  29. data/lib/gnarails.rb +8 -0
  30. data/templates/.circleci/config.yml +66 -0
  31. data/templates/.env.development +5 -0
  32. data/templates/.env.docker/.env.docker-standard +1 -0
  33. data/templates/.env.docker/.env.docker-webpack +2 -0
  34. data/templates/.env.docker-assets +1 -0
  35. data/templates/.env.test +5 -0
  36. data/templates/.gitignore +20 -0
  37. data/templates/.pronto.yml +2 -0
  38. data/templates/.rspec +3 -0
  39. data/templates/.rubocop.yml +3 -0
  40. data/templates/.ruby-version +1 -0
  41. data/templates/.scss-lint.yml +33 -0
  42. data/templates/Dockerfile +20 -0
  43. data/templates/Dockerfile-assets +24 -0
  44. data/templates/README.md +83 -0
  45. data/templates/database.yml +20 -0
  46. data/templates/docker-compose.yml/docker-compose-standard.yml +15 -0
  47. data/templates/docker-compose.yml/docker-compose-webpack.yml +26 -0
  48. data/templates/react/.babelrc +18 -0
  49. data/templates/react/.eslintrc.js +45 -0
  50. data/templates/react/controllers/home_controller.rb +4 -0
  51. data/templates/react/js/Router/Router.jsx +22 -0
  52. data/templates/react/js/Router/index.js +3 -0
  53. data/templates/react/js/api/index.js +17 -0
  54. data/templates/react/js/api/sessions.js +8 -0
  55. data/templates/react/js/app_constants/index.js +6 -0
  56. data/templates/react/js/components/App/App.jsx +15 -0
  57. data/templates/react/js/components/App/App.tests.jsx +15 -0
  58. data/templates/react/js/components/App/_styles.scss +3 -0
  59. data/templates/react/js/components/App/index.js +3 -0
  60. data/templates/react/js/index.scss +2 -0
  61. data/templates/react/js/packs/main.jsx +13 -0
  62. data/templates/react/js/redux/entity_getter.js +7 -0
  63. data/templates/react/js/redux/history.js +5 -0
  64. data/templates/react/js/redux/initial_state.js +5 -0
  65. data/templates/react/js/redux/middlewares/authentication_middleware/authentication_middleware.tests.js +109 -0
  66. data/templates/react/js/redux/middlewares/authentication_middleware/helpers.js +21 -0
  67. data/templates/react/js/redux/middlewares/authentication_middleware/helpers.tests.js +84 -0
  68. data/templates/react/js/redux/middlewares/authentication_middleware/index.js +20 -0
  69. data/templates/react/js/redux/middlewares/index.js +11 -0
  70. data/templates/react/js/redux/nodes/app/actions.js +36 -0
  71. data/templates/react/js/redux/nodes/app/config.js +12 -0
  72. data/templates/react/js/redux/nodes/app/reducer.js +35 -0
  73. data/templates/react/js/redux/nodes/app/reducer.tests.js +78 -0
  74. data/templates/react/js/redux/reducers.js +11 -0
  75. data/templates/react/js/redux/store.js +14 -0
  76. data/templates/react/js/storage.js +15 -0
  77. data/templates/react/js/styles/_variables.scss +1 -0
  78. data/templates/react/js/test/.setup.js +51 -0
  79. data/templates/react/js/test/connect_wrapper.jsx +28 -0
  80. data/templates/react/js/test/create_request_mock.js +29 -0
  81. data/templates/react/js/test/mock_store.js +12 -0
  82. data/templates/react/layout.html.erb +16 -0
  83. data/templates/react/rails_routes.rb +5 -0
  84. data/templates/react/views/home/default.html.erb +1 -0
  85. data/templates/script/brakeman +15 -0
  86. data/templates/script/ci_pronto +6 -0
  87. data/templates/spec/support/factory_bot.rb +5 -0
  88. data/templates/spec/support/system_test_configuration.rb +13 -0
  89. data/test-app/app/controllers/job_postings_controller.rb +5 -0
  90. data/test-app/app/models/comment.rb +3 -0
  91. data/test-app/app/models/job_posting.rb +20 -0
  92. data/test-app/app/views/job_postings/index.html.erb +23 -0
  93. data/test-app/app/views/layouts/application.html.erb +14 -0
  94. data/test-app/config/routes.rb +5 -0
  95. data/test-app/db/migrate/20170918002433_create_job_postings.rb +12 -0
  96. data/test-app/db/migrate/20170918002455_create_comments.rb +10 -0
  97. data/test-app/spec/factories/job_postings.rb +5 -0
  98. data/test-app/spec/models/job_posting_spec.rb +21 -0
  99. data/test-app/spec/requests/status_spec.rb +11 -0
  100. data/test-app/spec/system/viewing_all_job_postings_spec.rb +36 -0
  101. metadata +270 -0
@@ -0,0 +1,12 @@
1
+ import configureStore from 'redux-mock-store';
2
+ import thunkMiddleware from 'redux-thunk';
3
+
4
+ import authenticationMiddleware from 'redux/middlewares/authentication_middleware';
5
+
6
+ export const middlewares = [thunkMiddleware, authenticationMiddleware];
7
+
8
+ export default (store) => {
9
+ const mockStore = configureStore(middlewares);
10
+
11
+ return mockStore(store);
12
+ };
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>placeholder_application_title</title>
5
+ <%= csrf_meta_tags %>
6
+
7
+ <%= stylesheet_link_tag 'application', media: 'all' %>
8
+ <%= javascript_include_tag 'application' %>
9
+ <%= javascript_pack_tag 'main' %>
10
+ <%= stylesheet_pack_tag 'main' %>
11
+ </head>
12
+
13
+ <body>
14
+ <div id="react"></div>
15
+ </body>
16
+ </html>
@@ -0,0 +1,5 @@
1
+ Rails.application.routes.draw do
2
+ root to: "home#default"
3
+
4
+ get "/*path", to: "home#default"
5
+ end
@@ -0,0 +1 @@
1
+ <div></div>
@@ -0,0 +1,15 @@
1
+ #!/bin/bash
2
+ #
3
+ # Script for running Brakeman tests
4
+ # Brakeman is a security scanner https://github.com/presidentbeef/brakeman.
5
+ gem install --no-rdoc --no-ri brakeman
6
+
7
+ brakeman --exit-on-warn --separate-models -o tmp/brakeman.html -o tmp/brakeman.text .
8
+ brakeman_exit_code=$?
9
+ cat tmp/brakeman.text
10
+
11
+ if [ $CIRCLE_ARTIFACTS ]; then
12
+ mv tmp/brakeman.html $CIRCLE_ARTIFACTS
13
+ fi
14
+
15
+ exit $brakeman_exit_code
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+ #
3
+ # Script for running pronto on CI
4
+ export PRONTO_PULL_REQUEST_ID=${CI_PULL_REQUEST##*/}
5
+
6
+ bundle exec pronto run -f text github_pr github_status -c origin/master
@@ -0,0 +1,5 @@
1
+ RSpec.configure do |config|
2
+ config.include FactoryBot::Syntax::Methods
3
+ end
4
+
5
+ FactoryBot.use_parent_strategy = true
@@ -0,0 +1,13 @@
1
+ RSpec.configure do |config|
2
+ config.before(:each, type: :system) do
3
+ driven_by :rack_test
4
+ end
5
+
6
+ config.before(:each, type: :system, js: true) do
7
+ # If you don't want headless (for troubleshooting), use :selenium_chrome
8
+ # driven_by :selenium_chrome
9
+ #
10
+ # Keep headless committed, only use alternatives for troubleshooting
11
+ driven_by :selenium_chrome_headless
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ class JobPostingsController < ApplicationController
2
+ def index
3
+ @job_postings = JobPosting.all
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ class Comment < ApplicationRecord
2
+ belongs_to :job_posting
3
+ end
@@ -0,0 +1,20 @@
1
+ class JobPosting < ApplicationRecord
2
+ has_many :comments
3
+
4
+ validates :title, presence: true
5
+
6
+ enum status: {
7
+ new_post: 0,
8
+ pending: 1,
9
+ complete: 2,
10
+ }
11
+
12
+ after_initialize :set_defaults
13
+
14
+ private
15
+
16
+ def set_defaults
17
+ self.posted_at ||= Time.zone.now
18
+ self.status ||= "new_post"
19
+ end
20
+ end
@@ -0,0 +1,23 @@
1
+ <div class="heading">
2
+ <h1>Job Postings</h1>
3
+ </div>
4
+
5
+ <table class="table">
6
+ <thead>
7
+ <tr>
8
+ <th>Posted At</th>
9
+ <th>Title</th>
10
+ <th>Status</th>
11
+ <th>Comments</th>
12
+ </thead>
13
+ <tbody>
14
+ <% @job_postings.each do |posting| %>
15
+ <tr class="job-posting-<%= posting.id %>">
16
+ <td class="posting-date"><%= posting.posted_at %></td>
17
+ <td class="posting-title"><%= posting.title %></td>
18
+ <td class="posting-status"><%= posting.status %></td>
19
+ <td><%= posting.comments.map(&:body) %></td>
20
+ </tr>
21
+ <% end %>
22
+ </tbody>
23
+ </table>
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" role="main">
3
+ <head>
4
+ <title>RailsTestApp</title>
5
+ <%= csrf_meta_tags %>
6
+
7
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
8
+ <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
9
+ </head>
10
+
11
+ <body>
12
+ <%= yield %>
13
+ </body>
14
+ </html>
@@ -0,0 +1,5 @@
1
+ Rails.application.routes.draw do
2
+ root to: "job_postings#index"
3
+
4
+ resources :job_postings, only: [:index]
5
+ end
@@ -0,0 +1,12 @@
1
+ class CreateJobPostings < ActiveRecord::Migration[5.1]
2
+ def change
3
+ create_table :job_postings do |t|
4
+ t.string :title, null: false
5
+ t.integer :status, null: false, default: 0
6
+ t.text :description
7
+ t.datetime :posted_at, null: false
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ class CreateComments < ActiveRecord::Migration[5.1]
2
+ def change
3
+ create_table :comments do |t|
4
+ t.string :body
5
+ t.references :job_posting, foreign_key: true
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ FactoryBot.define do
2
+ factory :job_posting do
3
+ title "Software Developer"
4
+ end
5
+ end
@@ -0,0 +1,21 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe JobPosting, type: :model do
4
+ include ActiveSupport::Testing::TimeHelpers
5
+
6
+ it { should have_many :comments }
7
+ it { should validate_presence_of(:title) }
8
+ it { should define_enum_for(:status).with([:new_post, :pending, :complete]) }
9
+
10
+ describe "defaults" do
11
+ subject(:posting) { build :job_posting }
12
+ let(:posted_time) { Time.zone.local(2017, 4, 21, 4, 44) }
13
+
14
+ before { travel_to(posted_time) }
15
+
16
+ after { travel_back }
17
+
18
+ its(:posted_at) { should eq posted_time }
19
+ its(:status) { should eq "new_post" }
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe "Status endpoint", type: :request do
4
+ describe "/okcomputer" do
5
+ it "reports that the application is up" do
6
+ get "/okcomputer"
7
+
8
+ expect(response).to be_ok
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,36 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.feature "Viewing all job postings", type: :system do
4
+ scenario "Accessibility", js: true do
5
+ create_list :job_posting, 1
6
+ visit job_postings_path
7
+
8
+ expect(page).to be_accessible
9
+ end
10
+
11
+ scenario "N+1 query proteection" do
12
+ job_posting = create :job_posting
13
+ job_posting.comments.create(body: "first comment")
14
+ job_posting.comments.create(body: "second comment")
15
+
16
+ another_posting = create :job_posting
17
+ another_posting.comments.create(body: "third comment")
18
+ another_posting.comments.create(body: "fourth comment")
19
+
20
+ expect { visit job_postings_path }
21
+ .to raise_error Bullet::Notification::UnoptimizedQueryError
22
+ end
23
+
24
+ scenario "Viewing a posting on the page" do
25
+ posting = create :job_posting
26
+ visit job_postings_path
27
+
28
+ expect(has_job_posting?(posting)).to be true
29
+ end
30
+
31
+ def has_job_posting?(posting)
32
+ within(".job-posting-#{posting.id}") do
33
+ expect(page).to have_css("td.posting-title", text: posting.title)
34
+ end
35
+ end
36
+ end
metadata ADDED
@@ -0,0 +1,270 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gnarails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - The Gnar Company
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-03-27 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: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec-rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: thor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
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
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.16'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.16'
69
+ - !ruby/object:Gem::Dependency
70
+ name: gnar-style
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
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: pronto
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pronto-rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '10.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '10.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3.0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3.0'
139
+ description:
140
+ email:
141
+ - hi@thegnar.co
142
+ executables:
143
+ - gnarails
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - ".circleci/config.yml"
148
+ - ".gitignore"
149
+ - ".pronto.yml"
150
+ - ".railsrc"
151
+ - ".rspec"
152
+ - ".rubocop.yml"
153
+ - ".ruby-version"
154
+ - Brewfile
155
+ - CHANGELOG.md
156
+ - CODE_OF_CONDUCT.md
157
+ - CONTRIBUTING.md
158
+ - Gemfile
159
+ - Gemfile.lock
160
+ - LICENSE
161
+ - README.md
162
+ - Rakefile
163
+ - bin/ci_pronto
164
+ - bin/console
165
+ - bin/generate-react-test-app.sh
166
+ - bin/generate-test-app.sh
167
+ - bin/setup
168
+ - bin/test-setup.sh
169
+ - exe/gnarails
170
+ - gnarails.gemspec
171
+ - gnarly.rb
172
+ - lib/gnarails.rb
173
+ - lib/gnarails/cli/application.rb
174
+ - lib/gnarails/version.rb
175
+ - templates/.circleci/config.yml
176
+ - templates/.env.development
177
+ - templates/.env.docker-assets
178
+ - templates/.env.docker/.env.docker-standard
179
+ - templates/.env.docker/.env.docker-webpack
180
+ - templates/.env.test
181
+ - templates/.gitignore
182
+ - templates/.pronto.yml
183
+ - templates/.rspec
184
+ - templates/.rubocop.yml
185
+ - templates/.ruby-version
186
+ - templates/.scss-lint.yml
187
+ - templates/Dockerfile
188
+ - templates/Dockerfile-assets
189
+ - templates/README.md
190
+ - templates/database.yml
191
+ - templates/docker-compose.yml/docker-compose-standard.yml
192
+ - templates/docker-compose.yml/docker-compose-webpack.yml
193
+ - templates/react/.babelrc
194
+ - templates/react/.eslintrc.js
195
+ - templates/react/controllers/home_controller.rb
196
+ - templates/react/js/Router/Router.jsx
197
+ - templates/react/js/Router/index.js
198
+ - templates/react/js/api/index.js
199
+ - templates/react/js/api/sessions.js
200
+ - templates/react/js/app_constants/index.js
201
+ - templates/react/js/components/App/App.jsx
202
+ - templates/react/js/components/App/App.tests.jsx
203
+ - templates/react/js/components/App/_styles.scss
204
+ - templates/react/js/components/App/index.js
205
+ - templates/react/js/index.scss
206
+ - templates/react/js/packs/main.jsx
207
+ - templates/react/js/redux/entity_getter.js
208
+ - templates/react/js/redux/history.js
209
+ - templates/react/js/redux/initial_state.js
210
+ - templates/react/js/redux/middlewares/authentication_middleware/authentication_middleware.tests.js
211
+ - templates/react/js/redux/middlewares/authentication_middleware/helpers.js
212
+ - templates/react/js/redux/middlewares/authentication_middleware/helpers.tests.js
213
+ - templates/react/js/redux/middlewares/authentication_middleware/index.js
214
+ - templates/react/js/redux/middlewares/index.js
215
+ - templates/react/js/redux/nodes/app/actions.js
216
+ - templates/react/js/redux/nodes/app/config.js
217
+ - templates/react/js/redux/nodes/app/reducer.js
218
+ - templates/react/js/redux/nodes/app/reducer.tests.js
219
+ - templates/react/js/redux/reducers.js
220
+ - templates/react/js/redux/store.js
221
+ - templates/react/js/storage.js
222
+ - templates/react/js/styles/_variables.scss
223
+ - templates/react/js/test/.setup.js
224
+ - templates/react/js/test/connect_wrapper.jsx
225
+ - templates/react/js/test/create_request_mock.js
226
+ - templates/react/js/test/mock_store.js
227
+ - templates/react/layout.html.erb
228
+ - templates/react/rails_routes.rb
229
+ - templates/react/views/home/default.html.erb
230
+ - templates/script/brakeman
231
+ - templates/script/ci_pronto
232
+ - templates/spec/support/factory_bot.rb
233
+ - templates/spec/support/system_test_configuration.rb
234
+ - test-app/app/controllers/job_postings_controller.rb
235
+ - test-app/app/models/comment.rb
236
+ - test-app/app/models/job_posting.rb
237
+ - test-app/app/views/job_postings/index.html.erb
238
+ - test-app/app/views/layouts/application.html.erb
239
+ - test-app/config/routes.rb
240
+ - test-app/db/migrate/20170918002433_create_job_postings.rb
241
+ - test-app/db/migrate/20170918002455_create_comments.rb
242
+ - test-app/spec/factories/job_postings.rb
243
+ - test-app/spec/models/job_posting_spec.rb
244
+ - test-app/spec/requests/status_spec.rb
245
+ - test-app/spec/system/viewing_all_job_postings_spec.rb
246
+ homepage: https://github.com/TheGnarCo/gnarails
247
+ licenses:
248
+ - MIT
249
+ metadata: {}
250
+ post_install_message:
251
+ rdoc_options: []
252
+ require_paths:
253
+ - lib
254
+ required_ruby_version: !ruby/object:Gem::Requirement
255
+ requirements:
256
+ - - ">="
257
+ - !ruby/object:Gem::Version
258
+ version: 2.5.0
259
+ required_rubygems_version: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - ">="
262
+ - !ruby/object:Gem::Version
263
+ version: '0'
264
+ requirements: []
265
+ rubyforge_project:
266
+ rubygems_version: 2.7.6
267
+ signing_key:
268
+ specification_version: 4
269
+ summary: Easily create a gnarly rails app.
270
+ test_files: []