thredded_create_app 0.1.28 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/thredded_create_app/cli.rb +7 -2
- data/lib/thredded_create_app/tasks/add_thredded.rb +12 -3
- data/lib/thredded_create_app/tasks/add_thredded/thredded_imports.js.erb +8 -0
- data/lib/thredded_create_app/tasks/base.rb +9 -3
- data/lib/thredded_create_app/tasks/create_rails_app.rb +3 -2
- data/lib/thredded_create_app/tasks/setup_app_skeleton.rb +47 -14
- data/lib/thredded_create_app/tasks/setup_app_skeleton/javascript_webpack/app/app.js +55 -0
- data/lib/thredded_create_app/tasks/setup_app_skeleton/javascript_webpack/app/index.js +3 -0
- data/lib/thredded_create_app/tasks/setup_app_skeleton/javascript_webpack/app/theme.js +14 -0
- data/lib/thredded_create_app/tasks/setup_app_skeleton/javascript_webpack/app/time_ago.js +13 -0
- data/lib/thredded_create_app/tasks/setup_app_skeleton/javascript_webpack/monkey-patch-turbolinks.js +30 -0
- data/lib/thredded_create_app/tasks/setup_app_skeleton/javascripts/app/monkey-patch-turbolinks.js +12 -0
- data/lib/thredded_create_app/version.rb +1 -1
- metadata +8 -3
- data/lib/thredded_create_app/tasks/setup_app_skeleton/manifest.js +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0232d103e459c18069f055aba4bb87d2d776148151a2519ceeae3450c0ddfd5
|
4
|
+
data.tar.gz: 970727679e31aad434d3e5dbe0e0aa1e4b75c668649bd7a60af63d71f3a8af68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 334b7ec1e5e6edf199f5dc1bb92f7162d7cdce08adf74d390ecf50d4230a4497351e52581fb31ef373be286aaf8c837beff60803ebd21474d7ea65d796535596
|
7
|
+
data.tar.gz: 83547babdc8755375d7f5ad6e6e86b29249301f83c745125feb71a6ce692b77bf271a8901d08b7c21c7d3dae4f2487f6d68737f4ee766ce57dc8125f48f797dc
|
@@ -15,6 +15,7 @@ module ThreddedCreateApp
|
|
15
15
|
verbose: false,
|
16
16
|
install_gem_bundler_rails: true,
|
17
17
|
start_server: true,
|
18
|
+
webpack_js: true,
|
18
19
|
simple_form: true,
|
19
20
|
database: :postgresql,
|
20
21
|
rails_version: nil
|
@@ -74,7 +75,8 @@ module ThreddedCreateApp
|
|
74
75
|
end
|
75
76
|
end
|
76
77
|
|
77
|
-
# rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
78
|
+
# rubocop:disable Metrics/AbcSize,Metrics/BlockLength,Metrics/MethodLength
|
79
|
+
|
78
80
|
def optparse
|
79
81
|
argv = @argv.dup
|
80
82
|
argv << '--help' if argv.empty?
|
@@ -96,6 +98,9 @@ module ThreddedCreateApp
|
|
96
98
|
options[:rails_version] = value
|
97
99
|
end
|
98
100
|
|
101
|
+
flags.bool :webpack_js,
|
102
|
+
'--[no-]webpack-js',
|
103
|
+
'Use webpack for JavaScript'
|
99
104
|
flags.bool :simple_form, '--[no-]simple-form', 'Use simple_form'
|
100
105
|
|
101
106
|
op.separator "\nOther options:"
|
@@ -128,7 +133,7 @@ module ThreddedCreateApp
|
|
128
133
|
options.update(app_path: argv[0])
|
129
134
|
options
|
130
135
|
end
|
131
|
-
# rubocop:enable Metrics/AbcSize,Metrics/MethodLength
|
136
|
+
# rubocop:enable Metrics/AbcSize,Metrics/BlockLength,Metrics/MethodLength
|
132
137
|
|
133
138
|
class Flags
|
134
139
|
def initialize(op, options)
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'thredded_create_app/tasks/base'
|
4
4
|
module ThreddedCreateApp
|
5
5
|
module Tasks
|
6
|
-
class AddThredded < Base
|
6
|
+
class AddThredded < Base # rubocop:disable Metrics/ClassLength
|
7
7
|
def summary
|
8
8
|
'Add and setup Thredded with a User model'
|
9
9
|
end
|
@@ -68,8 +68,17 @@ module ThreddedCreateApp
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def add_thredded_javascripts
|
71
|
-
|
72
|
-
|
71
|
+
if webpack_js?
|
72
|
+
run 'bundle exec rails webpacker:install:erb'
|
73
|
+
copy 'add_thredded/thredded_imports.js.erb',
|
74
|
+
'app/javascript/thredded_imports.js.erb'
|
75
|
+
append_to_file 'app/javascript/packs/application.js', <<~JS
|
76
|
+
require('thredded_imports.js');
|
77
|
+
JS
|
78
|
+
else
|
79
|
+
copy 'add_thredded/myapp_thredded.js',
|
80
|
+
"app/assets/javascripts/#{app_name}_thredded.js"
|
81
|
+
end
|
73
82
|
end
|
74
83
|
|
75
84
|
def add_admin_column_to_users
|
@@ -0,0 +1,8 @@
|
|
1
|
+
// To add additional timeago locales, uncomment the lines below:
|
2
|
+
/*
|
3
|
+
<% timeago_root = File.join(Gem.loaded_specs['timeago_js'].full_gem_path, 'assets', 'javascripts') %>
|
4
|
+
import "<%= File.join(timeago_root, 'timeago.js') %>";
|
5
|
+
<%= %w[de es fr it pl pt_BR ru].map { |locale| %(import "#{File.join(timeago_root, "timeago/locales/#{locale}.js")}";) } * "\n" %>
|
6
|
+
*/
|
7
|
+
|
8
|
+
<%= Thredded::WebpackAssets.javascripts %>
|
@@ -8,13 +8,14 @@ require 'thredded_create_app/command_error'
|
|
8
8
|
module ThreddedCreateApp
|
9
9
|
module Tasks
|
10
10
|
# @abstract
|
11
|
-
class Base
|
11
|
+
class Base # rubocop:disable Metrics/ClassLength
|
12
12
|
include ThreddedCreateApp::Logging
|
13
13
|
|
14
14
|
attr_reader :app_name, :app_hostname, :app_path, :gems
|
15
15
|
|
16
|
-
def initialize(
|
17
|
-
app_path:, verbose: false, database:,
|
16
|
+
def initialize( # rubocop:disable Metrics/ParameterLists
|
17
|
+
app_path:, verbose: false, database:, webpack_js: true,
|
18
|
+
simple_form: true, **_args
|
18
19
|
)
|
19
20
|
@app_path = app_path
|
20
21
|
@app_name = File.basename(File.expand_path(app_path))
|
@@ -23,6 +24,11 @@ module ThreddedCreateApp
|
|
23
24
|
@database_adapter_name = database.to_s
|
24
25
|
@gems = []
|
25
26
|
@simple_form = simple_form
|
27
|
+
@webpack_js = webpack_js
|
28
|
+
end
|
29
|
+
|
30
|
+
def webpack_js?
|
31
|
+
@webpack_js
|
26
32
|
end
|
27
33
|
|
28
34
|
def devise_form_fields_begin_pattern
|
@@ -20,7 +20,7 @@ module ThreddedCreateApp
|
|
20
20
|
" #{rails_database} and rspec"
|
21
21
|
end
|
22
22
|
|
23
|
-
def before_bundle
|
23
|
+
def before_bundle # rubocop:disable Metrics/AbcSize
|
24
24
|
if @install_gem_bundler_rails
|
25
25
|
run 'gem update --system --no-document --quiet' unless @user_install
|
26
26
|
install_gem 'bundler'
|
@@ -31,7 +31,8 @@ module ThreddedCreateApp
|
|
31
31
|
run "rails _#{@rails_version}_ new . --skip-bundle" \
|
32
32
|
" --database=#{rails_database} " \
|
33
33
|
" --skip-test#{verbose? ? ' --verbose' : ' --quiet'}" \
|
34
|
-
' --skip-javascript'
|
34
|
+
"#{' --skip-javascript' unless webpack_js?}"
|
35
|
+
run 'rm', 'Gemfile.lock' if File.exist?('Gemfile.lock')
|
35
36
|
replace 'Gemfile', /gem 'sass-rails'.*$/, "gem 'sassc-rails'"
|
36
37
|
add_gem 'rspec-rails', version: '>= 4.0.0.beta3', groups: %i[test]
|
37
38
|
add_gem 'capybara', groups: %i[test]
|
@@ -20,9 +20,11 @@ module ThreddedCreateApp
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def before_bundle
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
unless webpack_js?
|
24
|
+
add_gem 'babel-transpiler'
|
25
|
+
add_gem 'uglifier'
|
26
|
+
add_gem 'turbolinks'
|
27
|
+
end
|
26
28
|
add_gem 'rails-timeago'
|
27
29
|
end
|
28
30
|
|
@@ -30,9 +32,13 @@ module ThreddedCreateApp
|
|
30
32
|
add_config_vars
|
31
33
|
add_i18n
|
32
34
|
add_seeds
|
33
|
-
|
35
|
+
configure_sprockets
|
34
36
|
add_favicon_and_touch_icons
|
35
|
-
|
37
|
+
if webpack_js?
|
38
|
+
add_javascripts_webpack
|
39
|
+
else
|
40
|
+
add_javascripts_sprockets
|
41
|
+
end
|
36
42
|
add_styles
|
37
43
|
add_user_page
|
38
44
|
add_home_page
|
@@ -61,12 +67,25 @@ module ThreddedCreateApp
|
|
61
67
|
ERB
|
62
68
|
end
|
63
69
|
|
64
|
-
def
|
65
|
-
|
66
|
-
|
70
|
+
def add_javascripts_webpack
|
71
|
+
append_to_file 'app/javascript/packs/application.js', <<~JS
|
72
|
+
require('monkey-patch-turbolinks.js');
|
73
|
+
require('app');
|
74
|
+
JS
|
75
|
+
copy 'setup_app_skeleton/javascript_webpack/monkey-patch-turbolinks.js',
|
76
|
+
'app/javascript/monkey-patch-turbolinks.js'
|
77
|
+
%w[app index theme time_ago].each do |file|
|
78
|
+
copy "setup_app_skeleton/javascript_webpack/app/#{file}.js",
|
79
|
+
"app/javascript/app/#{file}.js"
|
80
|
+
end
|
81
|
+
git_commit 'Add app JavaScript'
|
82
|
+
end
|
67
83
|
|
84
|
+
def configure_sprockets
|
85
|
+
replace 'app/assets/config/manifest.js',
|
86
|
+
"//= link_directory ../stylesheets .css\n",
|
87
|
+
''
|
68
88
|
append_to_file 'config/initializers/assets.rb', <<~RUBY
|
69
|
-
|
70
89
|
# Work around https://github.com/rails/sprockets/issues/581
|
71
90
|
Rails.application.config.assets.configure do |env|
|
72
91
|
env.export_concurrent = false
|
@@ -74,7 +93,7 @@ module ThreddedCreateApp
|
|
74
93
|
RUBY
|
75
94
|
end
|
76
95
|
|
77
|
-
def
|
96
|
+
def add_javascripts_sprockets
|
78
97
|
inject_into_file 'config/environments/production.rb',
|
79
98
|
after: " # config.assets.css_compressor = :sass\n",
|
80
99
|
content: <<-RUBY
|
@@ -158,18 +177,32 @@ module ThreddedCreateApp
|
|
158
177
|
indent(4, <<~ERB)
|
159
178
|
<%= stylesheet_link_tag current_theme, media: 'all', 'data-turbolinks-track': 'reload' %>
|
160
179
|
ERB
|
161
|
-
|
162
|
-
|
163
|
-
|
180
|
+
if webpack_js?
|
181
|
+
replace 'app/views/layouts/application.html.erb',
|
182
|
+
<<-'ERB',
|
183
|
+
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
|
184
|
+
ERB
|
185
|
+
<<-'ERB'
|
186
|
+
<%= javascript_pack_tag 'application',
|
187
|
+
async: true,
|
188
|
+
defer: true,
|
189
|
+
'data-turbolinks-track': 'reload' %>
|
190
|
+
ERB
|
191
|
+
else
|
192
|
+
inject_into_file 'app/views/layouts/application.html.erb',
|
193
|
+
before: %r{\s*</head>},
|
194
|
+
content: <<-'ERB'
|
164
195
|
<%= javascript_include_tag 'application',
|
165
196
|
async: !Rails.application.config.assets.debug,
|
166
197
|
defer: true,
|
167
198
|
'data-turbolinks-track': 'reload' %>
|
168
|
-
|
199
|
+
ERB
|
200
|
+
end
|
169
201
|
|
170
202
|
inject_into_file 'app/views/layouts/application.html.erb',
|
171
203
|
before: %r{\s*</head>},
|
172
204
|
content: <<-'ERB'
|
205
|
+
|
173
206
|
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
174
207
|
ERB
|
175
208
|
|
@@ -0,0 +1,55 @@
|
|
1
|
+
let DOMContentLoadedFired = false;
|
2
|
+
|
3
|
+
const isTurbolinks = 'Turbolinks' in window && window.Turbolinks.supported;
|
4
|
+
const isTurbolinks5 = isTurbolinks && 'clearCache' in window.Turbolinks;
|
5
|
+
|
6
|
+
let onPageLoadFiredOnce = false;
|
7
|
+
const pageLoadCallbacks = [];
|
8
|
+
const triggerOnPageLoad = () => {
|
9
|
+
pageLoadCallbacks.forEach(function(callback) {
|
10
|
+
callback();
|
11
|
+
});
|
12
|
+
onPageLoadFiredOnce = true;
|
13
|
+
};
|
14
|
+
|
15
|
+
// Fires the callback on DOMContentLoaded or a Turbolinks page load.
|
16
|
+
// If called from an async script on the first page load, and the DOMContentLoad event
|
17
|
+
// has already fired, will execute the callback immediately.
|
18
|
+
export function onPageLoad(callback) {
|
19
|
+
pageLoadCallbacks.push(callback);
|
20
|
+
// With async script loading, a callback may be added after the DOMContentLoaded event has already triggered.
|
21
|
+
// This means we will receive neither a DOMContentLoaded event, nor a turbolinks:load event on Turbolinks 5.
|
22
|
+
if (!onPageLoadFiredOnce && DOMContentLoadedFired) {
|
23
|
+
callback();
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
export function isAppPage() {
|
28
|
+
return !!document.getElementById('app-page-container');
|
29
|
+
}
|
30
|
+
|
31
|
+
if (isTurbolinks5) {
|
32
|
+
// In Turbolinks 5.0.1, turbolinks:load may have already fired (before DOMContentLoaded).
|
33
|
+
// If so, add our own DOMContentLoaded listener:
|
34
|
+
// See: https://github.com/turbolinks/turbolinks/commit/69d353ea73d10ee6b25c2866fc5706879ba403e3
|
35
|
+
if (window.Turbolinks.controller.lastRenderedLocation) {
|
36
|
+
document.addEventListener('DOMContentLoaded', () => {
|
37
|
+
triggerOnPageLoad();
|
38
|
+
});
|
39
|
+
}
|
40
|
+
document.addEventListener('turbolinks:load', () => {
|
41
|
+
triggerOnPageLoad();
|
42
|
+
});
|
43
|
+
} else {
|
44
|
+
// Turbolinks Classic (with or without jQuery.Turbolinks), or no Turbolinks:
|
45
|
+
if (!DOMContentLoadedFired) {
|
46
|
+
document.addEventListener('DOMContentLoaded', () => {
|
47
|
+
triggerOnPageLoad();
|
48
|
+
});
|
49
|
+
}
|
50
|
+
if (isTurbolinks) {
|
51
|
+
document.addEventListener('page:load', () => {
|
52
|
+
triggerOnPageLoad();
|
53
|
+
});
|
54
|
+
}
|
55
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import {onPageLoad} from './app';
|
2
|
+
|
3
|
+
onPageLoad(() => {
|
4
|
+
Array.prototype.forEach.call(document.querySelectorAll('.app-nav-theme li button'), (button) => {
|
5
|
+
button.addEventListener('click', (evt) => {
|
6
|
+
const expiresAt = new Date();
|
7
|
+
expiresAt.setMonth(expiresAt.getMonth() + 12);
|
8
|
+
document.cookie = 'app-theme=' +
|
9
|
+
evt.currentTarget.parentNode.getAttribute('data-theme') +
|
10
|
+
';expires=' + expiresAt + ';path=/';
|
11
|
+
document.location.reload();
|
12
|
+
});
|
13
|
+
});
|
14
|
+
});
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import {isAppPage, onPageLoad} from "./app";
|
2
|
+
|
3
|
+
onPageLoad(() => {
|
4
|
+
if (!isAppPage()) return;
|
5
|
+
const COMPONENT_SELECTOR = '[data-time-ago]';
|
6
|
+
window.timeago().render(
|
7
|
+
document.querySelectorAll(COMPONENT_SELECTOR),
|
8
|
+
document.querySelector('#app-page-container')
|
9
|
+
.getAttribute('data-locale').replace('-', '_'));
|
10
|
+
});
|
11
|
+
document.addEventListener('turbolinks:before-cache', () => {
|
12
|
+
window.timeago.cancel();
|
13
|
+
});
|
data/lib/thredded_create_app/tasks/setup_app_skeleton/javascript_webpack/monkey-patch-turbolinks.js
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
const Turbolinks = require('turbolinks');
|
2
|
+
|
3
|
+
// Monkey patch Turbolinks to render 403, 404 & 500 normally
|
4
|
+
// See https://github.com/turbolinks/turbolinks/issues/179
|
5
|
+
Turbolinks.HttpRequest.prototype.requestLoaded = function() {
|
6
|
+
return this.endRequest(function() {
|
7
|
+
var code = this.xhr.status;
|
8
|
+
if (200 <= code && code < 300 ||
|
9
|
+
code === 403 || code === 404 || code === 500) {
|
10
|
+
this.delegate.requestCompletedWithResponse(
|
11
|
+
this.xhr.responseText,
|
12
|
+
this.xhr.getResponseHeader("Turbolinks-Location"));
|
13
|
+
} else {
|
14
|
+
this.failed = true;
|
15
|
+
this.delegate.requestFailedWithStatusCode(code, this.xhr.responseText);
|
16
|
+
}
|
17
|
+
}.bind(this));
|
18
|
+
};
|
19
|
+
|
20
|
+
// Turbolinks nonce CSP support.
|
21
|
+
// See https://github.com/turbolinks/turbolinks/issues/430
|
22
|
+
document.addEventListener('turbolinks:request-start', function(event) {
|
23
|
+
var nonceTag = document.querySelector("meta[name='csp-nonce']");
|
24
|
+
if (nonceTag) event.data.xhr.setRequestHeader('X-Turbolinks-Nonce', nonceTag.content);
|
25
|
+
});
|
26
|
+
document.addEventListener('turbolinks:before-cache', function() {
|
27
|
+
Array.prototype.forEach.call(document.querySelectorAll('script[nonce]'), function(element) {
|
28
|
+
if (element.nonce) element.setAttribute('nonce', element.nonce);
|
29
|
+
});
|
30
|
+
});
|
data/lib/thredded_create_app/tasks/setup_app_skeleton/javascripts/app/monkey-patch-turbolinks.js
CHANGED
@@ -14,3 +14,15 @@ window.Turbolinks.HttpRequest.prototype.requestLoaded = function() {
|
|
14
14
|
}
|
15
15
|
}.bind(this));
|
16
16
|
};
|
17
|
+
|
18
|
+
// Turbolinks nonce CSP support.
|
19
|
+
// See https://github.com/turbolinks/turbolinks/issues/430
|
20
|
+
document.addEventListener('turbolinks:request-start', function(event) {
|
21
|
+
var nonceTag = document.querySelector("meta[name='csp-nonce']");
|
22
|
+
if (nonceTag) event.data.xhr.setRequestHeader('X-Turbolinks-Nonce', nonceTag.content);
|
23
|
+
});
|
24
|
+
document.addEventListener('turbolinks:before-cache', function() {
|
25
|
+
Array.prototype.forEach.call(document.querySelectorAll('script[nonce]'), function(element) {
|
26
|
+
if (element.nonce) element.setAttribute('nonce', element.nonce);
|
27
|
+
});
|
28
|
+
});
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thredded_create_app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gleb Mazovetskiy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: highline
|
@@ -136,6 +136,7 @@ files:
|
|
136
136
|
- lib/thredded_create_app/tasks/add_thredded/myapp_thredded.js
|
137
137
|
- lib/thredded_create_app/tasks/add_thredded/spec/features/thredded_spec.rb
|
138
138
|
- lib/thredded_create_app/tasks/add_thredded/thredded.en.yml
|
139
|
+
- lib/thredded_create_app/tasks/add_thredded/thredded_imports.js.erb
|
139
140
|
- lib/thredded_create_app/tasks/add_thredded/thredded_initializer_controller.rb
|
140
141
|
- lib/thredded_create_app/tasks/base.rb
|
141
142
|
- lib/thredded_create_app/tasks/create_rails_app.rb
|
@@ -156,12 +157,16 @@ files:
|
|
156
157
|
- lib/thredded_create_app/tasks/setup_app_skeleton/home_show.html.erb.erb
|
157
158
|
- lib/thredded_create_app/tasks/setup_app_skeleton/images/brightness.svg
|
158
159
|
- lib/thredded_create_app/tasks/setup_app_skeleton/initializers/02_i18n.rb
|
160
|
+
- lib/thredded_create_app/tasks/setup_app_skeleton/javascript_webpack/app/app.js
|
161
|
+
- lib/thredded_create_app/tasks/setup_app_skeleton/javascript_webpack/app/index.js
|
162
|
+
- lib/thredded_create_app/tasks/setup_app_skeleton/javascript_webpack/app/theme.js
|
163
|
+
- lib/thredded_create_app/tasks/setup_app_skeleton/javascript_webpack/app/time_ago.js
|
164
|
+
- lib/thredded_create_app/tasks/setup_app_skeleton/javascript_webpack/monkey-patch-turbolinks.js
|
159
165
|
- lib/thredded_create_app/tasks/setup_app_skeleton/javascripts/app.js
|
160
166
|
- lib/thredded_create_app/tasks/setup_app_skeleton/javascripts/app/monkey-patch-turbolinks.js
|
161
167
|
- lib/thredded_create_app/tasks/setup_app_skeleton/javascripts/app/theme.js
|
162
168
|
- lib/thredded_create_app/tasks/setup_app_skeleton/javascripts/app/time_ago.js
|
163
169
|
- lib/thredded_create_app/tasks/setup_app_skeleton/javascripts/application.js
|
164
|
-
- lib/thredded_create_app/tasks/setup_app_skeleton/manifest.js
|
165
170
|
- lib/thredded_create_app/tasks/setup_app_skeleton/seeds.rb.erb
|
166
171
|
- lib/thredded_create_app/tasks/setup_app_skeleton/spec/controllers/users_controller_spec.rb
|
167
172
|
- lib/thredded_create_app/tasks/setup_app_skeleton/spec/features/homepage_spec.rb
|
@@ -1 +0,0 @@
|
|
1
|
-
//= link_tree ../images
|