thredded_create_app 0.1.27 → 0.1.28

Sign up to get free protection for your applications and to get access to all the features.
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.