thredded_create_app 0.1.27 → 0.1.28

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f102c2efa1d8aa3c0bb522c850945a2b601d526e4ae2bdd6e4b34660382e3ab5
4
- data.tar.gz: fd1c3a2c01fcb7ece4f0ab288a93dde768a7377ac9f43632029af5a94499595d
3
+ metadata.gz: db282a04338266835a3d22a51412fe231eb8199464d001ba7d1169ce3ef6ee74
4
+ data.tar.gz: d2a4a3a9d2004b6501ac35db551f77838612b95e090e6acb2e5b334d275f0640
5
5
  SHA512:
6
- metadata.gz: f0832d96199468229058952ee68bd6dc64432fca78f0309fea6c52a68a1e9ab576153ac011728fdca97c6449fc49348d7e2b93e13ad43e785be6ed65bb60b558
7
- data.tar.gz: 1c7558e3c1b4a87efe2891dbc4a415a1c86e59adca2fc589a24152ab3628788ab33e7aaef7559116245dcf7edc4809eee3a52993377e677847c663c1020c6c5c
6
+ metadata.gz: ed068b67a37c9133825d4f5ad0a7a6828f86cca729180fb6af257997e95b014f99f4b766f0aac7c76b6cb6e23288e045c9de7b334ab10abc05dd9083a23d05c4
7
+ data.tar.gz: 8cce0de75ec5f90b5d0f8cf0ab129531339c12df819af7d94dd2366c2f302f3520d4a4446dda88674643739bf471ba10fb322642e658c6b78c8b422de7baadf3
@@ -30,19 +30,17 @@ module ThreddedCreateApp
30
30
 
31
31
  def start
32
32
  auto_output_coloring do
33
+ run
34
+ rescue OptionParser::ParseError, ArgvError => e
35
+ error e.message, 64
36
+ rescue ThreddedCreateApp::CommandError => e
33
37
  begin
34
- run
35
- rescue OptionParser::ParseError, ArgvError => e
36
- error e.message, 64
37
- rescue ThreddedCreateApp::CommandError => e
38
- begin
39
- error e.message, 78
40
- ensure
41
- log_verbose e.backtrace * "\n"
42
- end
43
- rescue Errno::EPIPE
44
- exit 1
38
+ error e.message, 78
39
+ ensure
40
+ log_verbose e.backtrace * "\n"
45
41
  end
42
+ rescue Errno::EPIPE
43
+ exit 1
46
44
  end
47
45
  rescue ExecutionError => e
48
46
  exit e.exit_code
@@ -121,7 +119,7 @@ module ThreddedCreateApp
121
119
  For more information, see the readme at:
122
120
  #{File.expand_path('../../README.md', File.dirname(__FILE__))}
123
121
  https://github.com/thredded/thredded_create_app
124
- TEXT
122
+ TEXT
125
123
  end.parse!(argv)
126
124
  if positional_args.length != 1
127
125
  fail ArgvError, 'Expected 1 positional argument, ' \
@@ -100,10 +100,11 @@ module ThreddedCreateApp
100
100
 
101
101
  def add_gems_to_gemfile(gems)
102
102
  File.open('Gemfile', 'a') do |f|
103
- gems.each do |(name, version, groups, path)|
103
+ gems.each do |(name, version, require, groups, path)|
104
104
  f.puts ["gem '#{name}'",
105
- (version if version),
106
- ("groups: %i(#{groups * ' '})" if groups),
105
+ ("'#{version}'" if version),
106
+ ("require: '#{require}'" if require),
107
+ ("groups: %i[#{groups * ' '}]" if groups),
107
108
  ("path: '#{path}'" if path)].compact.join(', ')
108
109
  end
109
110
  end
@@ -115,7 +116,7 @@ module ThreddedCreateApp
115
116
  FileUtils.mkdir_p cache_path
116
117
  run 'ln', '-s', cache_path, 'vendor/cache'
117
118
  end
118
- run 'bundle', 'install',
119
+ run 'bundle', 'install', '--with=test',
119
120
  *('--quiet' unless verbose?),
120
121
  *(%w[--path .bundle] unless File.writable?(Gem.dir))
121
122
  run 'bundle', 'package', *('--quiet' unless verbose?) if cache_path
@@ -5,6 +5,7 @@ module ThreddedCreateApp
5
5
  module Logging
6
6
  def log_verbose(message = nil)
7
7
  return unless verbose?
8
+
8
9
  log_stderr Rainbow(message || yield).magenta.bright
9
10
  end
10
11
 
@@ -38,7 +38,7 @@ module ThreddedCreateApp
38
38
 
39
39
  def setup_after_sign_in_behaviour
40
40
  inject_into_file 'app/controllers/application_controller.rb',
41
- after: /::Base\n( protect_from_forgery.*\n)?/,
41
+ after: /::Base\n( protect_from_forgery.*\n)?/,
42
42
  content: <<-'RUBY'
43
43
 
44
44
  before_action :store_current_location, unless: :devise_controller?
@@ -57,11 +57,12 @@ module ThreddedCreateApp
57
57
  def back_url
58
58
  session[:user_return_to] || (respond_to?(:root_path) ? root_path : thredded.root_path)
59
59
  end
60
- RUBY
60
+ RUBY
61
61
  end
62
62
 
63
63
  def fix_migration_indices_limit_on_mysql
64
64
  return unless database_adapter_name =~ /mysql|maria/i
65
+
65
66
  migration_file = Dir['db/migrate/*_devise_create_users.rb'][0]
66
67
  replace migration_file,
67
68
  /add_index :users, :(?:email|\w+_token), +unique: true/,
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'rails_helper'
4
4
 
5
- RSpec.feature 'Devise', type: :feature do
5
+ RSpec.describe 'Devise', type: :feature do
6
6
  it 'sign in path responds with 200' do
7
7
  visit new_user_session_path
8
8
  expect(page.status_code).to be 200
@@ -27,31 +27,29 @@ module ThreddedCreateApp
27
27
  'add_display_name_to_users.rb.erb'
28
28
  model_path = 'app/models/user.rb'
29
29
  inject_into_file model_path,
30
- after: "ApplicationRecord\n",
30
+ after: "ApplicationRecord\n",
31
31
  content: display_name_model_rb
32
32
  inject_into_file model_path,
33
- before: /end\n\z/,
33
+ before: /end\n\z/,
34
34
  content: uniq_display_name_method_rb
35
35
  git_commit 'Add a unique display_name User attribute'
36
36
  end
37
37
 
38
38
  def configure_devise
39
39
  inject_into_file 'app/controllers/application_controller.rb',
40
- after: /::Base\n( protect_from_forgery.*\n)?/,
40
+ after: /::Base\n( protect_from_forgery.*\n)?/,
41
41
  content: devise_permitted_params_rb
42
42
  %w[app/views/devise/registrations/new.html.erb
43
43
  app/views/devise/registrations/edit.html.erb].each do |path|
44
44
  autofocus = File.read(path).include?(', autofocus: true')
45
45
  replace path, ', autofocus: true', '' if autofocus
46
- if @simple_form
47
- inject_into_file path,
48
- after: %(<div class="form-inputs">\n),
49
- content: simple_form_input_html(autofocus)
50
- else
51
- inject_into_file path,
52
- after: /error_messages! %>\n\n/,
53
- content: actionview_input_html(autofocus)
54
- end
46
+ inject_into_file path,
47
+ after: devise_form_fields_begin_pattern,
48
+ content: if @simple_form
49
+ simple_form_input_html(autofocus)
50
+ else
51
+ actionview_input_html(autofocus)
52
+ end
55
53
  end
56
54
  git_commit 'Configure Devise to support display_name in forms'
57
55
  end
@@ -22,19 +22,17 @@ module ThreddedCreateApp
22
22
  after: "::Devise::RegistrationsController\n",
23
23
  content: <<-RUBY
24
24
  invisible_captcha only: %i[create], honeypot: :name
25
- RUBY
25
+ RUBY
26
26
 
27
27
  form_view_path = 'app/views/devise/registrations/new.html.erb'
28
28
  form_view_captcha = '<%= invisible_captcha :name %>'
29
- if @simple_form
30
- inject_into_file form_view_path,
31
- after: %(<div class="form-inputs">\n),
32
- content: " #{form_view_captcha}\n"
33
- else
34
- inject_into_file form_view_path,
35
- after: %(error_messages! %>\n\n),
36
- content: " #{form_view_captcha}\n\n"
37
- end
29
+ inject_into_file form_view_path,
30
+ after: devise_form_fields_begin_pattern,
31
+ content: if @simple_form
32
+ " #{form_view_captcha}\n"
33
+ else
34
+ " #{form_view_captcha}\n\n"
35
+ end
38
36
  inject_into_file form_view_path,
39
37
  before: ') do |f|',
40
38
  content: ", html: {autocomplete: 'off'}"
@@ -15,7 +15,7 @@ module ThreddedCreateApp
15
15
 
16
16
  def after_bundle
17
17
  inject_into_file 'config/environments/production.rb',
18
- before: /end\n\z/,
18
+ before: /end\n\z/,
19
19
  content: dalli_config
20
20
  end
21
21
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'rails_helper'
4
4
 
5
- RSpec.feature 'Thredded', type: :feature do
5
+ RSpec.describe 'Thredded', type: :feature do
6
6
  it 'root path responds with 200' do
7
7
  visit thredded.root_path
8
8
  expect(page.status_code).to be 200
@@ -13,13 +13,24 @@ module ThreddedCreateApp
13
13
 
14
14
  attr_reader :app_name, :app_hostname, :app_path, :gems
15
15
 
16
- def initialize(app_path:, verbose: false, database:, **_args)
16
+ def initialize(
17
+ app_path:, verbose: false, database:, simple_form: true, **_args
18
+ )
17
19
  @app_path = app_path
18
20
  @app_name = File.basename(File.expand_path(app_path))
19
21
  @app_hostname = "#{@app_name.tr(' ', '_').downcase}.com"
20
22
  @verbose = verbose
21
23
  @database_adapter_name = database.to_s
22
24
  @gems = []
25
+ @simple_form = simple_form
26
+ end
27
+
28
+ def devise_form_fields_begin_pattern
29
+ if @simple_form
30
+ %(<div class="form-inputs">\n)
31
+ else
32
+ %r{render "devise/shared/error_messages", resource: resource %>\n\n}
33
+ end
23
34
  end
24
35
 
25
36
  def summary
@@ -34,9 +45,9 @@ module ThreddedCreateApp
34
45
 
35
46
  attr_reader :database_adapter_name
36
47
 
37
- def add_gem(gem_name, version: nil, groups: nil, path: nil)
48
+ def add_gem(gem_name, version: nil, require: nil, groups: nil, path: nil)
38
49
  log_verbose "+ gem #{gem_name}"
39
- @gems << [gem_name, version, groups, path]
50
+ @gems << [gem_name, version, require, groups, path]
40
51
  end
41
52
 
42
53
  def git_commit(message)
@@ -59,6 +70,7 @@ module ThreddedCreateApp
59
70
  if File.directory?(expanded_src_path)
60
71
  fail "Only 'w' mode is supported for directories" if mode != 'w'
61
72
  fail 'ERB processing not supported for directories' if process_erb
73
+
62
74
  FileUtils.cp_r expanded_src_path, target_path
63
75
  return
64
76
  end
@@ -92,17 +104,8 @@ module ThreddedCreateApp
92
104
  end
93
105
 
94
106
  def add_precompile_asset(asset)
95
- log_verbose "Add precompile asset: #{asset}"
96
- assets_conf = File.read('config/initializers/assets.rb')
97
- if assets_conf.include?('# Rails.application.config.assets.precompile')
98
- replace 'config/initializers/assets.rb',
99
- /# Rails\.application\.config\.assets\.precompile.*/,
100
- "Rails.application.config.assets.precompile += %w(#{asset})"
101
- else
102
- replace 'config/initializers/assets.rb',
103
- /config\.assets\.precompile \+= %w\((.*?)\)/,
104
- "config.assets.precompile += %w(\\1 #{asset})"
105
- end
107
+ log_verbose "Add asset to manifest: #{asset}"
108
+ append_to_file 'app/assets/config/manifest.js', "//= link #{asset}\n"
106
109
  end
107
110
 
108
111
  def add_route(route_str, prepend: false)
@@ -124,6 +127,10 @@ module ThreddedCreateApp
124
127
  eval_template(File.read(expand_src_path(template))))
125
128
  end
126
129
 
130
+ def append_to_file(path, content)
131
+ File.write(path, File.read(path) + content)
132
+ end
133
+
127
134
  def inject_into_file(path, content:, after: nil, before: nil)
128
135
  replace path, (after || before), after ? '\0' + content : content + '\0'
129
136
  end
@@ -140,7 +147,13 @@ module ThreddedCreateApp
140
147
  if log
141
148
  log_command args.length == 1 ? args[0] : Shellwords.shelljoin(args)
142
149
  end
143
- exit 1 unless system(*args)
150
+ ok =
151
+ if Bundler.respond_to?(:with_unbundled_env)
152
+ Bundler.with_unbundled_env { system(*args) }
153
+ else
154
+ Bundler.with_clean_env { system(*args) }
155
+ end
156
+ exit 1 unless ok
144
157
  end
145
158
 
146
159
  def verbose?
@@ -28,13 +28,12 @@ module ThreddedCreateApp
28
28
  end
29
29
  @rails_version ||= latest_installed_rails_version
30
30
 
31
- # I have no idea why this bundle exec is necessary on Travis.
32
- run "#{'bundle exec ' if ENV['TRAVIS']}" \
33
- "rails _#{@rails_version}_ new . --skip-bundle" \
31
+ run "rails _#{@rails_version}_ new . --skip-bundle" \
34
32
  " --database=#{rails_database} " \
35
- " --skip-test#{verbose? ? ' --verbose' : ' --quiet'}"
33
+ " --skip-test#{verbose? ? ' --verbose' : ' --quiet'}" \
34
+ ' --skip-javascript'
36
35
  replace 'Gemfile', /gem 'sass-rails'.*$/, "gem 'sassc-rails'"
37
- add_gem 'rspec-rails', groups: %i[test]
36
+ add_gem 'rspec-rails', version: '>= 4.0.0.beta3', groups: %i[test]
38
37
  add_gem 'capybara', groups: %i[test]
39
38
  git_commit summary
40
39
  end
@@ -12,7 +12,7 @@ module ThreddedCreateApp
12
12
  '#0288D1', # light blue
13
13
  '#0097A7', # cyan
14
14
  '#00796B', # teal
15
- '#F57C00', # orange
15
+ '#F57C00' # orange
16
16
  ].freeze
17
17
 
18
18
  def summary
@@ -20,6 +20,9 @@ module ThreddedCreateApp
20
20
  end
21
21
 
22
22
  def before_bundle
23
+ add_gem 'babel-transpiler'
24
+ add_gem 'uglifier'
25
+ add_gem 'turbolinks'
23
26
  add_gem 'rails-timeago'
24
27
  end
25
28
 
@@ -27,6 +30,7 @@ module ThreddedCreateApp
27
30
  add_config_vars
28
31
  add_i18n
29
32
  add_seeds
33
+ configure_assets
30
34
  add_favicon_and_touch_icons
31
35
  add_javascripts
32
36
  add_styles
@@ -54,14 +58,36 @@ module ThreddedCreateApp
54
58
  <%= favicon_link_tag 'favicon.ico' %>
55
59
  <%= favicon_link_tag 'apple-touch-icon.png',
56
60
  rel: 'apple-touch-icon', type: 'image/png' %>
57
- ERB
61
+ ERB
62
+ end
63
+
64
+ def configure_assets
65
+ copy 'setup_app_skeleton/manifest.js',
66
+ 'app/assets/config/manifest.js'
67
+
68
+ append_to_file 'config/initializers/assets.rb', <<~RUBY
69
+
70
+ # Work around https://github.com/rails/sprockets/issues/581
71
+ Rails.application.config.assets.configure do |env|
72
+ env.export_concurrent = false
73
+ end
74
+ RUBY
58
75
  end
59
76
 
60
77
  def add_javascripts
78
+ inject_into_file 'config/environments/production.rb',
79
+ after: " # config.assets.css_compressor = :sass\n",
80
+ content: <<-RUBY
81
+ config.assets.js_compressor = Uglifier.new(harmony: true)
82
+ RUBY
83
+
84
+ copy 'setup_app_skeleton/javascripts/application.js',
85
+ 'app/assets/javascripts/application.js'
61
86
  copy 'setup_app_skeleton/javascripts/app.js',
62
87
  'app/assets/javascripts/app.js'
63
88
  copy 'setup_app_skeleton/javascripts/app/',
64
89
  'app/assets/javascripts/app/'
90
+ add_precompile_asset 'application.js'
65
91
  git_commit 'Add app JavaScript'
66
92
  end
67
93
 
@@ -120,7 +146,7 @@ module ThreddedCreateApp
120
146
  expand_src_path('setup_app_skeleton/application_helper_methods.rb')
121
147
  )
122
148
  inject_into_file 'app/helpers/application_helper.rb',
123
- before: /end\n\z/,
149
+ before: /end\n\z/,
124
150
  content: indent(2, app_helper_src)
125
151
  copy 'setup_app_skeleton/themes_helper.rb',
126
152
  'app/helpers/themes_helper.rb'
@@ -132,20 +158,20 @@ module ThreddedCreateApp
132
158
  indent(4, <<~ERB)
133
159
  <%= stylesheet_link_tag current_theme, media: 'all', 'data-turbolinks-track': 'reload' %>
134
160
  ERB
135
- replace 'app/views/layouts/application.html.erb',
136
- /[ ]*<%= javascript_include_tag 'application', .*? %>/,
137
- <<-'ERB'
161
+ inject_into_file 'app/views/layouts/application.html.erb',
162
+ before: %r{\s*</head>},
163
+ content: <<-'ERB'
138
164
  <%= javascript_include_tag 'application',
139
165
  async: !Rails.application.config.assets.debug,
140
166
  defer: true,
141
167
  'data-turbolinks-track': 'reload' %>
142
- ERB
168
+ ERB
143
169
 
144
170
  inject_into_file 'app/views/layouts/application.html.erb',
145
- before: '</head>',
171
+ before: %r{\s*</head>},
146
172
  content: <<-'ERB'
147
173
  <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
148
- ERB
174
+ ERB
149
175
 
150
176
  body = File.read(
151
177
  expand_src_path('setup_app_skeleton/application.body.html.erb')
@@ -173,7 +199,7 @@ module ThreddedCreateApp
173
199
  before: /^\s*mount Thredded::Engine/,
174
200
  content: indent(2, <<~'RUBY')
175
201
  resources :users, only: [:show]
176
- RUBY
202
+ RUBY
177
203
  end
178
204
 
179
205
  def add_home_page
@@ -0,0 +1,2 @@
1
+ //= require turbolinks
2
+ //= require_tree .
@@ -0,0 +1 @@
1
+ //= link_tree ../images
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'rails_helper'
4
4
 
5
- RSpec.feature 'Homepage', type: :feature do
5
+ RSpec.describe 'Homepage', type: :feature do
6
6
  it 'responds with 200' do
7
7
  visit root_path
8
8
  expect(page.status_code).to be 200
@@ -30,6 +30,7 @@ module ThreddedCreateApp
30
30
 
31
31
  def create_db_user
32
32
  return if @db_adapter == :sqlite3
33
+
33
34
  log_info "Creating #{dev_user} local database user"
34
35
  run 'bash',
35
36
  File.join(File.dirname(__FILE__), 'setup_database',
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ThreddedCreateApp
4
- VERSION = '0.1.27'
4
+ VERSION = '0.1.28'
5
5
  end
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.1.27
4
+ version: 0.1.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gleb Mazovetskiy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-19 00:00:00.000000000 Z
11
+ date: 2019-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -50,14 +50,14 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '1.13'
53
+ version: '2.0'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '1.13'
60
+ version: '2.0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rake
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -78,28 +78,14 @@ dependencies:
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '3.5'
81
+ version: '3.9'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '3.5'
89
- - !ruby/object:Gem::Dependency
90
- name: rubocop
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: 0.53.0
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: 0.53.0
88
+ version: '3.9'
103
89
  - !ruby/object:Gem::Dependency
104
90
  name: simplecov
105
91
  requirement: !ruby/object:Gem::Requirement
@@ -174,6 +160,8 @@ files:
174
160
  - lib/thredded_create_app/tasks/setup_app_skeleton/javascripts/app/monkey-patch-turbolinks.js
175
161
  - lib/thredded_create_app/tasks/setup_app_skeleton/javascripts/app/theme.js
176
162
  - lib/thredded_create_app/tasks/setup_app_skeleton/javascripts/app/time_ago.js
163
+ - lib/thredded_create_app/tasks/setup_app_skeleton/javascripts/application.js
164
+ - lib/thredded_create_app/tasks/setup_app_skeleton/manifest.js
177
165
  - lib/thredded_create_app/tasks/setup_app_skeleton/seeds.rb.erb
178
166
  - lib/thredded_create_app/tasks/setup_app_skeleton/spec/controllers/users_controller_spec.rb
179
167
  - lib/thredded_create_app/tasks/setup_app_skeleton/spec/features/homepage_spec.rb
@@ -207,15 +195,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
207
195
  requirements:
208
196
  - - "~>"
209
197
  - !ruby/object:Gem::Version
210
- version: '2.3'
198
+ version: '2.5'
211
199
  required_rubygems_version: !ruby/object:Gem::Requirement
212
200
  requirements:
213
201
  - - ">="
214
202
  - !ruby/object:Gem::Version
215
203
  version: '0'
216
204
  requirements: []
217
- rubyforge_project:
218
- rubygems_version: 2.7.8
205
+ rubygems_version: 3.0.6
219
206
  signing_key:
220
207
  specification_version: 4
221
208
  summary: Rails app generator for Thredded.