thredded_create_app 0.1.28 → 0.2.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/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
|