make_it_so 0.0.9 → 0.1.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/lib/generators/rails_app_generator.rb +29 -2
- data/lib/make_it_so/rails/app_builder.rb +67 -7
- data/lib/make_it_so/version.rb +1 -1
- data/make_it_so.gemspec +1 -0
- data/snippets/rails/js_testing_deps.json +18 -0
- data/snippets/rails/react_dependencies.json +12 -0
- data/spec/features/user_generates_rails_spec.rb +50 -10
- data/spec/spec_helper.rb +1 -0
- data/spec/support/make_it_so_spec_helpers.rb +6 -0
- data/templates/rails/karma.conf.js +94 -0
- data/templates/rails/spec/javascript/exampleTest.js +5 -0
- data/templates/rails/spec/javascript/testHelper.js +29 -0
- metadata +21 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13620dc1e25ca2ec8c8ce9287aead4d7d9163761
|
4
|
+
data.tar.gz: ce95d6d68d4523f64088db6472f636f91c39a10b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23c4bcd4f977f73fc2b0e1504e228fa3c612403017950575bbd13669cb96138a0137e27c7fbadc20e881914813babc66f85d4f56fc954e621a70877a3fed91be
|
7
|
+
data.tar.gz: ef357898432dbf513c5f569af5ad6b5cbfd244accc53b77555d8bc80747c1c70684a96d35968226508363e7ab9b886b689e05e782bdadede8bb74128131d8b3a
|
data/.gitignore
CHANGED
@@ -24,7 +24,7 @@ module MakeItSo
|
|
24
24
|
class_option :foundation,
|
25
25
|
type: :boolean,
|
26
26
|
default: true,
|
27
|
-
desc: '
|
27
|
+
desc: 'Generate foundation support'
|
28
28
|
|
29
29
|
# turbolinks is the devil
|
30
30
|
class_option :skip_turbolinks,
|
@@ -32,6 +32,26 @@ module MakeItSo
|
|
32
32
|
default: true,
|
33
33
|
desc: 'Skip turbolinks gem'
|
34
34
|
|
35
|
+
class_option :skip_coffee,
|
36
|
+
type: :boolean,
|
37
|
+
default: true,
|
38
|
+
desc: 'Skip coffee gem'
|
39
|
+
|
40
|
+
class_option :skip_spring,
|
41
|
+
type: :boolean,
|
42
|
+
default: true,
|
43
|
+
desc: 'Skip spring gem'
|
44
|
+
|
45
|
+
class_option :react,
|
46
|
+
type: :boolean,
|
47
|
+
default: true,
|
48
|
+
desc: 'Generate React setup'
|
49
|
+
|
50
|
+
class_option :karma,
|
51
|
+
type: :boolean,
|
52
|
+
default: true,
|
53
|
+
desc: 'Generate karma testing setup'
|
54
|
+
|
35
55
|
def initialize(*args)
|
36
56
|
super
|
37
57
|
if @options[:rspec]
|
@@ -58,7 +78,6 @@ module MakeItSo
|
|
58
78
|
build 'factory_bot_rspec'
|
59
79
|
build 'valid_attribute_rspec'
|
60
80
|
build 'shoulda_rspec'
|
61
|
-
build 'teaspoon_jasmine'
|
62
81
|
end
|
63
82
|
|
64
83
|
if options[:devise]
|
@@ -68,6 +87,14 @@ module MakeItSo
|
|
68
87
|
if options[:foundation]
|
69
88
|
build 'foundation_dependency'
|
70
89
|
end
|
90
|
+
|
91
|
+
if options[:react]
|
92
|
+
build 'react'
|
93
|
+
end
|
94
|
+
|
95
|
+
if options[:karma]
|
96
|
+
build 'karma'
|
97
|
+
end
|
71
98
|
end
|
72
99
|
|
73
100
|
protected
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rails/generators/rails/app/app_generator'
|
2
|
+
require 'json'
|
2
3
|
|
3
4
|
module MakeItSo
|
4
5
|
module Rails
|
@@ -36,6 +37,49 @@ module MakeItSo
|
|
36
37
|
gsub_file 'Gemfile', both_lines, "\n"
|
37
38
|
end
|
38
39
|
|
40
|
+
def react
|
41
|
+
self.gem 'webpacker', '~> 3.0.2'
|
42
|
+
|
43
|
+
after_bundle do
|
44
|
+
rake 'webpacker:install'
|
45
|
+
rake 'webpacker:install:react'
|
46
|
+
|
47
|
+
unparsed_json = snippet('react_dependencies.json')
|
48
|
+
parsed_json = JSON.parse(unparsed_json)
|
49
|
+
|
50
|
+
modify_json(package_json_file) do |json|
|
51
|
+
["dependencies", "devDependencies"].each do |key|
|
52
|
+
json[key] ||= {}
|
53
|
+
json[key].merge!(parsed_json[key])
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
rake 'yarn:install'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def karma
|
62
|
+
after_bundle do
|
63
|
+
unparsed_json = snippet('js_testing_deps.json')
|
64
|
+
parsed_json = JSON.parse(unparsed_json)
|
65
|
+
|
66
|
+
modify_json(package_json_file) do |json|
|
67
|
+
json["devDependencies"] ||= {}
|
68
|
+
json["devDependencies"].merge!(parsed_json["devDependencies"])
|
69
|
+
json["scripts"] ||= {}
|
70
|
+
json["scripts"]["test"] = "node_modules/.bin/karma start karma.conf.js"
|
71
|
+
end
|
72
|
+
|
73
|
+
template 'karma.conf.js'
|
74
|
+
inside 'spec/javascript' do
|
75
|
+
template 'exampleTest.js'
|
76
|
+
template 'testHelper.js'
|
77
|
+
end
|
78
|
+
|
79
|
+
rake 'yarn:install'
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
39
83
|
def rspec_dependency
|
40
84
|
self.gem 'rspec-rails', group: [:development, :test]
|
41
85
|
self.gem 'capybara', group: [:development, :test]
|
@@ -105,13 +149,6 @@ module MakeItSo
|
|
105
149
|
end
|
106
150
|
end
|
107
151
|
|
108
|
-
def teaspoon_jasmine
|
109
|
-
self.gem 'teaspoon-jasmine'
|
110
|
-
after_bundle do
|
111
|
-
generate 'teaspoon:install'
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
152
|
def devise_dependency
|
116
153
|
self.gem 'devise'
|
117
154
|
|
@@ -152,6 +189,29 @@ module MakeItSo
|
|
152
189
|
end
|
153
190
|
|
154
191
|
protected
|
192
|
+
PACKAGE_PATH = 'package.json'
|
193
|
+
WEBCONFIG_PATH = 'webpack.config.js'
|
194
|
+
|
195
|
+
protected
|
196
|
+
def parsed_package_json
|
197
|
+
@package_json ||= parse_json_file(package_json_file)
|
198
|
+
end
|
199
|
+
|
200
|
+
def package_json_file
|
201
|
+
File.join(destination_root, PACKAGE_PATH)
|
202
|
+
end
|
203
|
+
|
204
|
+
def modify_json(file, &block)
|
205
|
+
json = parse_json_file(file)
|
206
|
+
block.call(json)
|
207
|
+
File.write(file, JSON.pretty_generate(json))
|
208
|
+
end
|
209
|
+
|
210
|
+
def parse_json_file(file)
|
211
|
+
contents = File.read(file)
|
212
|
+
JSON.parse(contents)
|
213
|
+
end
|
214
|
+
|
155
215
|
def rails_helper_insertion_hook
|
156
216
|
"require 'rspec/rails'\n"
|
157
217
|
end
|
data/lib/make_it_so/version.rb
CHANGED
data/make_it_so.gemspec
CHANGED
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"devDependencies": {
|
3
|
+
"enzyme": "~2.9.1",
|
4
|
+
"jasmine-ajax": "3.2.0",
|
5
|
+
"jasmine-core": "~2.4.1",
|
6
|
+
"jasmine-enzyme": "~3.4.0",
|
7
|
+
"karma": "~0.13.22",
|
8
|
+
"karma-coverage": "0.5.5",
|
9
|
+
"karma-jasmine": "~0.3.8",
|
10
|
+
"karma-phantomjs-launcher": "~1.0.4",
|
11
|
+
"karma-sourcemap-loader": "0.3.7",
|
12
|
+
"karma-spec-reporter": "0.0.26",
|
13
|
+
"karma-webpack": "2.0.1",
|
14
|
+
"phantomjs-prebuilt": "~2.1.14",
|
15
|
+
"react-addons-test-utils": "~15.6.2"
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
@@ -12,6 +12,7 @@ feature 'user generates rails app' do
|
|
12
12
|
let(:css_manifest_path) { join_paths(app_path, 'app/assets/stylesheets/application.css') }
|
13
13
|
|
14
14
|
let(:gemfile_path) { join_paths(app_path, 'Gemfile')}
|
15
|
+
let(:package_json_path) { join_paths(app_path, 'package.json')}
|
15
16
|
let(:rails_spec_helper) { join_paths(app_path, 'spec/rails_helper.rb')}
|
16
17
|
|
17
18
|
before(:all) do
|
@@ -130,16 +131,6 @@ feature 'user generates rails app' do
|
|
130
131
|
to include("require 'shoulda-matchers'")
|
131
132
|
end
|
132
133
|
end
|
133
|
-
|
134
|
-
context 'teaspoon' do
|
135
|
-
it 'includes teaspoon-jasmine in the Gemfile' do
|
136
|
-
expect(File.read(gemfile_path)).to include('teaspoon-jasmine')
|
137
|
-
end
|
138
|
-
|
139
|
-
it 'generates a spec/javascripts directory' do
|
140
|
-
expect(FileTest.exists?(join_paths(app_path, 'spec/javascripts'))).to eq(true)
|
141
|
-
end
|
142
|
-
end
|
143
134
|
end
|
144
135
|
|
145
136
|
context 'devise' do
|
@@ -187,4 +178,53 @@ feature 'user generates rails app' do
|
|
187
178
|
expect(File.read(File.join(app_path, 'app/views/layouts/application.html.erb'))).to include('modernizr')
|
188
179
|
end
|
189
180
|
end
|
181
|
+
|
182
|
+
context 'react' do
|
183
|
+
it 'generates a packs file' do
|
184
|
+
expect(FileTest.exists?(join_paths(app_path, 'app/javascript/packs/application.js'))).to eq(true)
|
185
|
+
end
|
186
|
+
|
187
|
+
it 'includes react in package.json' do
|
188
|
+
in_package_json?(File.join(app_path, 'package.json')) do |json|
|
189
|
+
expect(json["dependencies"]["react"]).to_not be_nil
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
it 'includes react-dom in package.json' do
|
194
|
+
in_package_json?(File.join(app_path, 'package.json')) do |json|
|
195
|
+
expect(json["dependencies"]["react-dom"]).to_not be_nil
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
context 'karma' do
|
201
|
+
it 'creates a karma.config' do
|
202
|
+
karma_config = File.join(app_path, 'karma.conf.js')
|
203
|
+
expect(FileTest.exists?(karma_config)).to eq(true)
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'creates a testHelper.js' do
|
207
|
+
test_helper = File.join(app_path, 'spec/javascript/testHelper.js')
|
208
|
+
expect(FileTest.exists?(test_helper)).to eq(true)
|
209
|
+
end
|
210
|
+
|
211
|
+
it 'includes karma in package.json' do
|
212
|
+
in_package_json?(File.join(app_path, 'package.json')) do |json|
|
213
|
+
expect(json["devDependencies"]["karma"]).to_not be_nil
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
it 'includes jasmine in package.json' do
|
218
|
+
in_package_json?(File.join(app_path, 'package.json')) do |json|
|
219
|
+
expect(json["devDependencies"]["jasmine-core"]).to_not be_nil
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
it 'includes react-addons-test-utils' do
|
224
|
+
in_package_json?(File.join(app_path, 'package.json')) do |json|
|
225
|
+
expect(json["devDependencies"]["react-addons-test-utils"]).to_not be_nil
|
226
|
+
end
|
227
|
+
|
228
|
+
end
|
229
|
+
end
|
190
230
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -44,6 +44,12 @@ module MakeItSoSpecHelpers
|
|
44
44
|
File.read(join_paths(app_path, 'Gemfile')).
|
45
45
|
match(/gem.*#{Regexp.escape(gem_name)}/).present?
|
46
46
|
end
|
47
|
+
|
48
|
+
def in_package_json?(path, &block)
|
49
|
+
contents = File.read(path)
|
50
|
+
json = JSON.parse(contents)
|
51
|
+
yield(json)
|
52
|
+
end
|
47
53
|
end
|
48
54
|
|
49
55
|
RSpec.configure do |config|
|
@@ -0,0 +1,94 @@
|
|
1
|
+
var path = require('path');
|
2
|
+
|
3
|
+
module.exports = function(config) {
|
4
|
+
config.set({
|
5
|
+
basePath: "",
|
6
|
+
// use the PhantomJS browser
|
7
|
+
browsers: ['PhantomJS'],
|
8
|
+
|
9
|
+
// use the Jasmine testing framework
|
10
|
+
frameworks: ['jasmine'],
|
11
|
+
|
12
|
+
// files that Karma will server to the browser
|
13
|
+
files: [
|
14
|
+
// use Babel polyfill to emulate a full ES6 environment in PhantomJS
|
15
|
+
'node_modules/babel-polyfill/dist/polyfill.js',
|
16
|
+
// entry file for Webpack
|
17
|
+
'spec/javascript/testHelper.js'
|
18
|
+
],
|
19
|
+
|
20
|
+
// before serving test/testHelper.js to the browser
|
21
|
+
preprocessors: {
|
22
|
+
'spec/javascript/testHelper.js': [
|
23
|
+
// use karma-webpack to preprocess the file via webpack
|
24
|
+
'webpack',
|
25
|
+
// use karma-sourcemap-loader to utilize sourcemaps generated by webpack
|
26
|
+
'sourcemap'
|
27
|
+
]
|
28
|
+
},
|
29
|
+
|
30
|
+
// webpack configuration used by karma-webpack
|
31
|
+
webpack: {
|
32
|
+
// generate sourcemaps
|
33
|
+
devtool: 'eval-source-map',
|
34
|
+
module: {
|
35
|
+
loaders: [
|
36
|
+
// use babel-loader to transpile the test and src folders
|
37
|
+
{
|
38
|
+
test: /\.jsx?$/,
|
39
|
+
exclude: /node_modules/,
|
40
|
+
loader: 'babel-loader'
|
41
|
+
},
|
42
|
+
{
|
43
|
+
test: /\.json$/,
|
44
|
+
include: [
|
45
|
+
/node_modules/,
|
46
|
+
path.resolve(__dirname, '..')
|
47
|
+
],
|
48
|
+
loader: 'json-loader'
|
49
|
+
}
|
50
|
+
]
|
51
|
+
},
|
52
|
+
resolve: {
|
53
|
+
modules: ['app/javascript', 'node_modules']
|
54
|
+
}
|
55
|
+
},
|
56
|
+
|
57
|
+
webpackMiddleware: {
|
58
|
+
// do not output webpack build information to the browser's console
|
59
|
+
noInfo: true
|
60
|
+
},
|
61
|
+
|
62
|
+
// test reporters that Karma should use
|
63
|
+
reporters: [
|
64
|
+
// use karma-spec-reporter to report results to the browser's console
|
65
|
+
'spec',
|
66
|
+
// use karma-coverage to report test coverage
|
67
|
+
'coverage'
|
68
|
+
],
|
69
|
+
|
70
|
+
// karma-spec-reporter configuration
|
71
|
+
specReporter: {
|
72
|
+
// remove meaningless stack trace when tests do not pass
|
73
|
+
maxLogLines: 1,
|
74
|
+
// do not print information about tests that are passing
|
75
|
+
suppressPassed: true
|
76
|
+
},
|
77
|
+
|
78
|
+
// karma-coverage configuration
|
79
|
+
coverageReporter: {
|
80
|
+
// output coverage results to the coverage folder in the project's root
|
81
|
+
dir: 'coverage',
|
82
|
+
subdir: '.',
|
83
|
+
// output coverage results as html
|
84
|
+
type: 'html'
|
85
|
+
},
|
86
|
+
externals: {
|
87
|
+
cheerio: 'window',
|
88
|
+
'react/addons': true,
|
89
|
+
'react/lib/ExecutionEnvironment': true,
|
90
|
+
'react/lib/ReactContext': true,
|
91
|
+
'react/addons': true
|
92
|
+
}
|
93
|
+
})
|
94
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import { shallow, mount } from 'enzyme';
|
2
|
+
import jasmineEnzyme from 'jasmine-enzyme';
|
3
|
+
import React from 'react';
|
4
|
+
import 'jasmine-ajax';
|
5
|
+
|
6
|
+
Object.assign(global, {
|
7
|
+
jasmineEnzyme,
|
8
|
+
mount,
|
9
|
+
React,
|
10
|
+
shallow,
|
11
|
+
});
|
12
|
+
|
13
|
+
beforeEach(() => {
|
14
|
+
jasmineEnzyme();
|
15
|
+
});
|
16
|
+
|
17
|
+
// function to require all modules for a given context
|
18
|
+
let requireAll = requireContext => {
|
19
|
+
requireContext.keys().forEach(requireContext);
|
20
|
+
};
|
21
|
+
|
22
|
+
// require all js files except testHelper.js in the test folder
|
23
|
+
requireAll(require.context('./', true, /^((?!testHelper).)*\.jsx?$/));
|
24
|
+
|
25
|
+
// require all js files except main.js in the src folder
|
26
|
+
requireAll(require.context('../../app/javascript', true, /^((?!application).)*\.jsx?$/));
|
27
|
+
|
28
|
+
// output to the browser's console when the tests run
|
29
|
+
console.info(`TESTS RAN AT ${new Date().toLocaleTimeString()}`);
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: make_it_so
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Pickett
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '5.1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: json
|
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'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: bundler
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -140,6 +154,8 @@ files:
|
|
140
154
|
- lib/make_it_so/version.rb
|
141
155
|
- make_it_so.gemspec
|
142
156
|
- snippets/rails/application_generator.rb
|
157
|
+
- snippets/rails/js_testing_deps.json
|
158
|
+
- snippets/rails/react_dependencies.json
|
143
159
|
- snippets/rails/user_factory.rb
|
144
160
|
- spec/features/user_generates_gosu_spec.rb
|
145
161
|
- spec/features/user_generates_rails_spec.rb
|
@@ -160,9 +176,12 @@ files:
|
|
160
176
|
- templates/rails/app/controllers/homes_controller.rb
|
161
177
|
- templates/rails/app/views/homes/index.html.erb
|
162
178
|
- templates/rails/app/views/layouts/application.html.erb.tt
|
179
|
+
- templates/rails/karma.conf.js
|
163
180
|
- templates/rails/spec/features/user_signs_in_spec.rb
|
164
181
|
- templates/rails/spec/features/user_signs_out_spec.rb
|
165
182
|
- templates/rails/spec/features/user_signs_up_spec.rb
|
183
|
+
- templates/rails/spec/javascript/exampleTest.js
|
184
|
+
- templates/rails/spec/javascript/testHelper.js
|
166
185
|
- templates/rails/spec/support/factory_bot.rb
|
167
186
|
- templates/rails/spec/support/valid_attribute.rb
|
168
187
|
- templates/sinatra/.gitignore
|