jt_tools 0.0.4 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,17 +10,17 @@ linters:
10
10
  - .rubocop.yml
11
11
  Layout/InitialIndentation:
12
12
  Enabled: false
13
+ Layout/LineLength:
14
+ Enabled: false
13
15
  Layout/TrailingEmptyLines:
14
16
  Enabled: false
15
17
  Layout/TrailingWhitespace:
16
18
  Enabled: false
17
- Naming/FileName:
18
- Enabled: false
19
- Style/FrozenStringLiteralComment:
20
- Enabled: false
21
- Layout/LineLength:
22
- Enabled: false
23
19
  Lint/UselessAssignment:
24
20
  Enabled: false
21
+ Naming/FileName:
22
+ Enabled: false
25
23
  Rails/OutputSafety:
26
24
  Enabled: false
25
+ Style/FrozenStringLiteralComment:
26
+ Enabled: false
@@ -2,26 +2,21 @@
2
2
  detectors:
3
3
  IrresponsibleModule:
4
4
  enabled: false
5
+ DuplicateMethodCall:
6
+ max_calls: 4
7
+ FeatureEnvy:
8
+ enabled: false
5
9
  UncommunicativeVariableName:
6
10
  accept:
7
11
  - e
12
+ - i
13
+ - v
8
14
  UnusedPrivateMethod:
9
15
  enabled: false
10
- DuplicateMethodCall:
11
- max_calls: 4
16
+ UtilityFunction:
17
+ enabled: false
12
18
 
13
19
  directories:
14
20
  "**/app/controllers/**":
15
21
  InstanceVariableAssumption:
16
22
  enabled: false
17
- UtilityFunction:
18
- enabled: false
19
- "**/app/jobs/**":
20
- UtilityFunction:
21
- enabled: false
22
- "**/app/helpers/**":
23
- UtilityFunction:
24
- enabled: false
25
- "**/spec/**":
26
- UtilityFunction:
27
- enabled: false
@@ -4,11 +4,18 @@ require:
4
4
  - rubocop-rails
5
5
 
6
6
  AllCops:
7
- TargetRubyVersion: 2.6
7
+ TargetRubyVersion: 2.7
8
8
  Exclude:
9
9
  - 'db/migrate/**/*'
10
10
  - 'db/schema.rb'
11
11
 
12
+ Layout/DotPosition:
13
+ Enabled: true
14
+ EnforcedStyle: leading
15
+
16
+ Layout/EmptyLinesAroundAttributeAccessor:
17
+ Enabled: true
18
+
12
19
  Layout/EmptyLinesAroundBlockBody:
13
20
  Exclude:
14
21
  - 'db/schema.rb'
@@ -39,9 +46,21 @@ Layout/MultilineOperationIndentation:
39
46
  Layout/ParameterAlignment:
40
47
  EnforcedStyle: with_fixed_indentation
41
48
 
49
+ Layout/SpaceAroundMethodCallOperator:
50
+ Enabled: true
51
+
42
52
  Layout/SpaceInLambdaLiteral:
43
53
  EnforcedStyle: require_space
44
54
 
55
+ Lint/DeprecatedOpenSSLConstant:
56
+ Enabled: true
57
+
58
+ Lint/RaiseException:
59
+ Enabled: true
60
+
61
+ Lint/StructNewOverride:
62
+ Enabled: true
63
+
45
64
  Metrics/AbcSize:
46
65
  Exclude:
47
66
  - 'test/**/*.rb'
@@ -75,16 +94,33 @@ Style/ClassAndModuleChildren:
75
94
  Style/Documentation:
76
95
  Enabled: false
77
96
 
97
+ Style/ExponentialNotation:
98
+ Enabled: true
99
+
78
100
  Style/FrozenStringLiteralComment:
79
101
  Enabled: true
80
102
 
103
+ Style/HashEachMethods:
104
+ Enabled: true
105
+
106
+ Style/HashTransformKeys:
107
+ Enabled: true
108
+
109
+ Style/HashTransformValues:
110
+ Enabled: true
111
+
81
112
  Style/SafeNavigation:
82
113
  Enabled: false
83
114
 
115
+ Style/SlicingWithRange:
116
+ Enabled: true
117
+
84
118
  Style/StabbyLambdaParentheses:
85
119
  EnforcedStyle: require_no_parentheses
86
120
 
87
121
  Style/StringLiterals:
122
+ Enabled: true
123
+ EnforcedStyle: double_quotes
88
124
  Exclude:
89
125
  - 'db/schema.rb'
90
126
 
@@ -1,17 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- if defined?(Spring) && ENV['DISABLE_SPRING'].nil?
4
- puts '**** NO COVERAGE FOR YOU! ****'
5
- puts 'Please disable Spring to get COVERAGE by `DISABLE_SPRING=1 COVERAGE=1 bin/rspec`'
3
+ if defined?(Spring) && ENV["DISABLE_SPRING"].nil?
4
+ puts "**** NO COVERAGE FOR YOU! ****"
5
+ puts "Please disable Spring to get COVERAGE by `DISABLE_SPRING=1 COVERAGE=1 bin/rspec`"
6
6
  else
7
- SimpleCov.start 'rails' do
7
+ SimpleCov.start "rails" do
8
8
  add_filter %w[app/views bin spec test]
9
9
 
10
10
  maximum_coverage_drop 0.5
11
11
  end
12
12
 
13
- # if ENV['CODECOV_TOKEN']
14
- # require 'codecov'
15
- # SimpleCov.formatter = SimpleCov::Formatter::Codecov
16
- # end
13
+ if ENV["CODECOV_TOKEN"]
14
+ require "codecov"
15
+ SimpleCov.formatter = SimpleCov::Formatter::Codecov
16
+ end
17
17
  end
@@ -1,16 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- tap 'caskroom/cask'
4
- cask_args appdir: '/Applications'
3
+ tap "caskroom/cask"
4
+ cask_args appdir: "/Applications"
5
5
 
6
- tap 'heroku/brew'
6
+ tap "heroku/brew"
7
7
 
8
- # brew 'circleci'
9
- brew 'graphicsmagick'
10
- brew 'heroku'
11
- brew 'hub'
12
- brew 'rbenv'
13
- brew 'ruby-build'
14
- brew 'vips'
15
- brew 'yamllint'
16
- brew 'yarn'
8
+ brew "circleci"
9
+ brew "graphicsmagick" # For ActiveStorage
10
+ brew "heroku"
11
+ brew "hub" # For creating Pull Request from CLI
12
+ brew "postgresql"
13
+ brew "rbenv"
14
+ brew "ruby-build"
15
+ brew "vips" # For ActiveStorage
16
+ brew "yamllint" # For Linters
17
+ brew "yarn"
@@ -20,6 +20,8 @@ group :tools do
20
20
  gem 'pronto-rubocop', require: false
21
21
  gem 'pronto-yamllint', require: false
22
22
 
23
+ # gem 'rubocop-minitest', require: false
23
24
  gem 'rubocop-performance', require: false
24
25
  gem 'rubocop-rails', require: false
26
+ # gem 'rubocop-rspec', require: false
25
27
  end
@@ -1,33 +1,33 @@
1
1
  {
2
- "name": "APP NAME",
3
2
  "scripts": {
4
3
  "postdeploy": "bin/heroku-postdeploy"
5
4
  },
6
5
  "env": {
7
- "RAILS_MASTER_KEY": {
8
- "required": true
9
- },
10
- "ROLLBAR_ACCESS_TOKEN": {
11
- "required": true
12
- },
13
- "ROLLBAR_ENDPOINT": {
14
- "required": true
15
- },
16
- "SECRET_KEY_BASE": {
17
- "generator": "secret"
18
- },
19
6
  "BUNDLE_WITHOUT": "development:test:production",
20
7
  "DISABLE_DATABASE_ENVIRONMENT_CHECK": "1",
8
+ "JEMALLOC_ENABLED": "true",
21
9
  "LANG": "en_US.UTF-8",
22
10
  "MALLOC_ARENA_MAX": "2",
23
11
  "NODE_ENV": "production",
24
12
  "RACK_ENV": "staging",
25
13
  "RAILS_ENV": "staging",
26
14
  "RAILS_LOG_TO_STDOUT": "enabled",
15
+ "RAILS_MASTER_KEY": {
16
+ "required": true
17
+ },
27
18
  "RAILS_MAX_THREADS": "5",
28
19
  "RAILS_SERVE_STATIC_FILES": "enabled",
29
20
  "REDIS_PROVIDER": "REDISTOGO_URL",
21
+ "ROLLBAR_ACCESS_TOKEN": {
22
+ "required": true
23
+ },
24
+ "ROLLBAR_ENDPOINT": {
25
+ "required": true
26
+ },
30
27
  "ROLLBAR_ENV": "staging",
28
+ "SECRET_KEY_BASE": {
29
+ "generator": "secret"
30
+ },
31
31
  "SIDEKIQ_CONCURRENCY": "5",
32
32
  "WEB_CONCURRENCY": "2"
33
33
  },
@@ -38,6 +38,12 @@
38
38
  "redistogo:nano"
39
39
  ],
40
40
  "buildpacks": [
41
+ {
42
+ "url": "https://github.com/gaffneyc/heroku-buildpack-jemalloc.git"
43
+ },
44
+ {
45
+ "url": "heroku/nodejs"
46
+ },
41
47
  {
42
48
  "url": "heroku/ruby"
43
49
  }
@@ -4,7 +4,7 @@ set -e
4
4
 
5
5
  echo "-----Create and switch to new branch-----"
6
6
 
7
- current_date=`date +"%Y%m%d%H%M"`
7
+ current_date=$(date +"%Y%m%d%H%M")
8
8
  new_branch_name="auto-upgrade-tools-dependencies-${current_date}"
9
9
  git checkout -b $new_branch_name
10
10
 
@@ -17,11 +17,11 @@ if bin/tools-upgrade; then
17
17
  git config user.email "circleci.bot@example.com"
18
18
 
19
19
  git commit -am "Upgrades Gemfile.tools dependencies"
20
- git push https://$GITHUB_TOKEN@github.com/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME.git -f
20
+ git push "https://$GITHUB_TOKEN@github.com/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME.git" -f
21
21
 
22
22
  curl -X POST \
23
23
  -H "Authorization: token ${GITHUB_TOKEN}" \
24
- -d '{"title":"Upgrade tools dependencies","base":"master","head":"'$CIRCLE_PROJECT_USERNAME':'$new_branch_name'"}' \
24
+ -d '{"title":"Upgrades tools dependencies","base":"master","head":"'$CIRCLE_PROJECT_USERNAME':'$new_branch_name'"}' \
25
25
  https://api.github.com/repos/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/pulls
26
26
  exit 0
27
27
  else
@@ -12,7 +12,11 @@ if [[ $reflog_message =~ "merge" ]]; then
12
12
  fi
13
13
 
14
14
  if [[ $branch_name == "master" ]]; then
15
- bin/update
15
+ bin/spring stop; pkill "spring";
16
+ rm -rf tmp/cache
17
+
18
+ bin/setup
19
+
16
20
  bin/rake db:reset
17
21
 
18
22
  echo "Removing merged branches..."
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
3
  echo "== Preparing database =="
4
- bin/rails db:prepare db:seed
4
+ bin/rails db:prepare
@@ -4,7 +4,7 @@ set -eo pipefail
4
4
 
5
5
  reporters_opt=""
6
6
 
7
- if [[ "$CIRCLECI" == "true" ]]
7
+ if [[ -n "$PRONTO_GITHUB_ACCESS_TOKEN" && "$CIRCLECI" == "true" ]]
8
8
  then
9
9
  git fetch origin master
10
10
  reporters_opt="-f github_status github_pr_review"
@@ -1,6 +1,9 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
- set -e
3
+ set -eo pipefail
4
+
5
+ ([[ (-x "$(command -v brew)") ]] && brew bundle check || brew bundle --no-lock) \
6
+ || (echo "*** Please install manually system dependencies: ***" && cat Brewfile)
4
7
 
5
8
  export BUNDLE_GEMFILE=Gemfile.tools
6
9
 
@@ -1,9 +1,12 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
- set -e
3
+ set -eo pipefail
4
+
5
+ ([[ (-x "$(command -v brew)") ]] && brew bundle check || brew bundle --no-lock) \
6
+ || (echo "*** Please upgrade manually system dependencies: ***" && cat Brewfile)
4
7
 
5
8
  export BUNDLE_GEMFILE=Gemfile.tools
6
9
 
7
10
  bundle update --jobs=4 --retry=3
8
11
 
9
- yarn check || yarn install
12
+ bin/yarn check || bin/yarn install
@@ -11,11 +11,11 @@ KeepFindersOnTheirOwnModelCheck: {}
11
11
  LawOfDemeterCheck: {}
12
12
  # LongLineCheck: { max_line_length: 80 }
13
13
  MoveCodeIntoControllerCheck: {}
14
- MoveCodeIntoHelperCheck: { array_count: 3 }
15
- MoveCodeIntoModelCheck: { use_count: 2 }
14
+ MoveCodeIntoHelperCheck: { array_count: 10 }
15
+ MoveCodeIntoModelCheck: { use_count: 10 }
16
16
  MoveFinderToNamedScopeCheck: {}
17
- MoveModelLogicIntoModelCheck: { use_count: 4 }
18
- NeedlessDeepNestingCheck: { nested_count: 2 }
17
+ MoveModelLogicIntoModelCheck: { use_count: 10 }
18
+ NeedlessDeepNestingCheck: { nested_count: 5 }
19
19
  NotRescueExceptionCheck: {}
20
20
  NotUseDefaultRouteCheck: {}
21
21
  NotUseTimeAgoInWordsCheck: {}
@@ -27,7 +27,7 @@ RemoveTrailingWhitespaceCheck: {}
27
27
  # RemoveUnusedMethodsInControllersCheck: { except_methods: [] }
28
28
  # RemoveUnusedMethodsInHelpersCheck: { except_methods: [] }
29
29
  # RemoveUnusedMethodsInModelsCheck: { except_methods: [] }
30
- ReplaceComplexCreationWithFactoryMethodCheck: { attribute_assignment_count: 2 }
30
+ ReplaceComplexCreationWithFactoryMethodCheck: { attribute_assignment_count: 5 }
31
31
  ReplaceInstanceVariableWithLocalVariableCheck: {}
32
32
  RestrictAutoGeneratedRoutesCheck: {}
33
33
  SimplifyRenderInControllersCheck: {}
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'jt_tools/version'
3
+ require "jt_tools/version"
4
4
 
5
- require 'jt_tools/railtie' if defined?(Rails)
5
+ require "jt_tools/railtie" if defined?(Rails)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rails/railtie'
3
+ require "rails/railtie"
4
4
 
5
5
  class JtToolsRailtie < Rails::Railtie
6
6
  rake_tasks do
7
- load 'tasks/install.rake'
7
+ load "tasks/install.rake"
8
8
  end
9
9
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JtTools
4
- VERSION = '0.0.4'
4
+ VERSION = "0.0.9"
5
5
  end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- install_template_path = File.expand_path('../../template.rb', __dir__).freeze
4
- bin_path = ENV['BUNDLE_BIN'] || './bin'
3
+ install_template_path = File.expand_path("../../template.rb", __dir__).freeze
4
+ bin_path = ENV["BUNDLE_BIN"] || "./bin"
5
5
 
6
6
  namespace :jt_tools do
7
- desc 'Install jt-tools in this application'
7
+ desc "Install jt-tools in this application"
8
8
  task install: :environment do
9
9
  exec "#{RbConfig.ruby} #{bin_path}/rails app:template LOCATION=#{install_template_path}"
10
10
  end
@@ -1,18 +1,17 @@
1
-
2
- require 'json'
1
+ require "json"
3
2
 
4
3
  EXTRACT_DEPENDENCY_NAME = /"?(.+?)@.+?"?(?:,\s+|\Z)/.freeze
5
4
  EXTRACT_DEPENDENCY_DETAILS = /(^((?!= ).*?):\n.*?(?:\n\n|\Z))/m.freeze
6
5
 
7
6
  def direct_dependencies_names
8
- package_json = JSON.parse(File.open('package.json').read)
9
- direct_dependencies = package_json.fetch_values('dependencies', 'devDependencies', 'peerDependencies') { }
7
+ package_json = JSON.parse(File.open("package.json").read)
8
+ direct_dependencies = package_json.fetch_values("dependencies", "devDependencies", "peerDependencies") {}
10
9
  direct_dependencies.compact.inject([]) { |memo, v| memo.concat(v.keys) }
11
10
  end
12
11
 
13
12
  @dependencies = direct_dependencies_names
14
13
 
15
- yarn_lock_content = File.open('yarn.lock').read
14
+ yarn_lock_content = File.open("yarn.lock").read
16
15
  yarn_lock_content.scan(EXTRACT_DEPENDENCY_DETAILS).each do |dependency_block|
17
16
  direct_dep = @dependencies.include?(dependency_block[1].match(EXTRACT_DEPENDENCY_NAME).to_a[1])
18
17
  puts dependency_block[0] if direct_dep
@@ -7,17 +7,17 @@
7
7
  # In that case, use `git clone` to download them to a local temporary dir.
8
8
  def add_template_repository_to_source_path
9
9
  if __FILE__.match?(%r{\Ahttps?://})
10
- require 'shellwords'
11
- require 'tmpdir'
10
+ require "shellwords"
11
+ require "tmpdir"
12
12
 
13
- source_paths.unshift(temp_dir = Dir.mktmpdir('jt_tools-'))
13
+ source_paths.unshift(temp_dir = Dir.mktmpdir("jt_tools-"))
14
14
  at_exit { FileUtils.remove_entry(temp_dir) }
15
15
  git clone: [
16
- '--quiet',
17
- 'https://github.com/jetthoughts/jt_tools.git',
16
+ "--quiet",
17
+ "https://github.com/jetthoughts/jt_tools.git",
18
18
  temp_dir
19
19
  ].map { |args| Shellwords.escape(args) }
20
- .join(' ')
20
+ .join(" ")
21
21
 
22
22
  if (branch = __FILE__[%r{jt_tools/(.+)/template.rb}, 1])
23
23
  Dir.chdir(temp_dir) { git checkout: branch }
@@ -29,120 +29,179 @@ end
29
29
 
30
30
  add_template_repository_to_source_path
31
31
 
32
- say '=> Copying binstubs'
33
- directory 'lib/install/bin', 'bin'
32
+ say "=> Copying binstubs"
33
+ directory "lib/install/bin", "bin"
34
34
 
35
- chmod 'bin', 0o755 & ~File.umask, verbose: false
35
+ chmod "bin", 0o755 & ~File.umask, verbose: false
36
36
 
37
- say '=> Copying tools gemfile'
38
- copy_file 'lib/install/Gemfile.tools', 'Gemfile.tools'
37
+ say "=> Copying tools gemfile"
38
+ copy_file "lib/install/Gemfile.tools", "Gemfile.tools"
39
39
 
40
- run 'yarn add -D eslint'
40
+ run "yarn add -D eslint jest-junit"
41
41
 
42
- say 'Copying lint configurations'
43
- copy_file 'lib/install/.better-html.yml', '.better-html.yml'
44
- copy_file 'lib/install/.erb-lint.yml', '.erb-lint.yml'
45
- copy_file 'lib/install/.eslintrc.js', '.eslintrc.js'
46
- copy_file 'lib/install/.pronto.yml', '.pronto.yml'
47
- copy_file 'lib/install/.pronto_eslint_npm.yml', '.pronto_eslint_npm.yml'
48
- copy_file 'lib/install/.rubocop.yml', '.rubocop.yml'
49
- copy_file 'lib/install/.yamllint.yml', '.yamllint.yml'
50
- copy_file 'lib/install/.reek.yml', '.reek.yml'
51
- copy_file 'lib/install/config/rails_best_practices.yml', 'config/rails_best_practices.yml'
52
- copy_file 'lib/install/.editorconfig', '.editorconfig'
42
+ say "Copying lint configurations"
43
+ copy_file "lib/install/.better-html.yml", ".better-html.yml"
44
+ copy_file "lib/install/.erb-lint.yml", ".erb-lint.yml"
45
+ copy_file "lib/install/.eslintrc.js", ".eslintrc.js"
46
+ copy_file "lib/install/.pronto.yml", ".pronto.yml"
47
+ copy_file "lib/install/.pronto_eslint_npm.yml", ".pronto_eslint_npm.yml"
48
+ copy_file "lib/install/.rubocop.yml", ".rubocop.yml"
49
+ copy_file "lib/install/.yamllint.yml", ".yamllint.yml"
50
+ copy_file "lib/install/.reek.yml", ".reek.yml"
51
+ copy_file "lib/install/config/rails_best_practices.yml", "config/rails_best_practices.yml"
52
+ copy_file "lib/install/.editorconfig", ".editorconfig"
53
53
 
54
- say '=> Copying services configuration'
55
- copy_file 'lib/install/.simplecov', '.simplecov'
56
- copy_file 'lib/install/codecov.yml', 'codecov.yml'
54
+ say "=> Copying services configuration"
55
+ copy_file "lib/install/.simplecov", ".simplecov"
56
+ copy_file "lib/install/codecov.yml", "codecov.yml"
57
57
 
58
-
59
- say '=> Adds service client API gems'
58
+ say "=> Adds service client API gems"
60
59
 
61
60
  gem_group :test do
62
- gem 'simplecov', require: false, group: :test
63
- gem 'codecov', require: false, group: :test
61
+ gem "simplecov", require: false, group: :test
62
+ gem "codecov", require: false, group: :test
64
63
  end
65
64
 
66
- gem 'oj'
65
+ gem "oj"
67
66
 
68
67
  gem_group :production, :staging do
69
- gem 'rollbar'
70
- gem 'le'
68
+ gem "dalli"
69
+ gem "r7insight"
70
+ gem "rollbar"
71
71
  end
72
72
 
73
- directory 'lib/install/.circleci', '.circleci'
73
+ directory "lib/install/.circleci", ".circleci"
74
74
 
75
- if File.read('Gemfile').include? 'rspec'
76
- gem 'rspec_junit_formatter', require: false, group: :test
75
+ if File.read("Gemfile").include? "rspec"
76
+ gem "rspec_junit_formatter", require: false, group: :test
77
77
  insert_into_file(
78
- 'spec/spec_helper.rb',
78
+ "spec/spec_helper.rb",
79
79
  "require 'simplecov' if ENV['COVERAGE']\n",
80
80
  after: /\A/
81
81
  )
82
+ insert_into_file(
83
+ ".circleci/config.yml",
84
+ "\n" + " - run: bin/rspec --format RspecJunitFormatter --out tmp/reports/rspec-results.xml --format progress",
85
+ after: "# rails test"
86
+ )
82
87
  else
83
- gem 'minitest-ci', require: false, group: :test
88
+ gem "minitest-ci", require: false, group: :test
84
89
  insert_into_file(
85
- 'test/test_helper.rb',
90
+ "test/test_helper.rb",
86
91
  "require 'simplecov' if ENV['COVERAGE']\n",
87
92
  after: /\A/
88
93
  )
94
+ insert_into_file(
95
+ ".circleci/config.yml",
96
+ "\n" + ' - run: bin/rails test "test/**/*_test.rb"',
97
+ after: "# rails test"
98
+ )
99
+
100
+ gsub_file "test/test_helper.rb",
101
+ "parallelize(workers: :number_of_processors)",
102
+ "parallelize(workers: :number_of_processors) unless ENV['COVERAGE']"
89
103
  end
90
104
 
91
- directory 'lib/install/.dependabot', '.dependabot'
105
+ directory "lib/install/.dependabot", ".dependabot"
92
106
 
93
- say '=> Copying heroku configuration'
94
- copy_file 'lib/install/app.json', 'app.json'
95
- copy_file 'lib/install/Procfile', 'Procfile'
107
+ say "=> Copying heroku configuration"
108
+ copy_file "lib/install/app.json", "app.json"
109
+ copy_file "lib/install/Procfile", "Procfile"
96
110
 
97
- say '=> Install Brew dependencies'
98
- copy_file 'lib/install/Brewfile', 'Brewfile'
111
+ say "=> Install Brew dependencies"
112
+ copy_file "lib/install/Brewfile", "Brewfile"
99
113
 
100
- say 'Setup git hooks'
101
- directory 'lib/install/bin/git-hooks', 'bin/git-hooks'
114
+ say "Setup git hooks"
115
+ directory "lib/install/bin/git-hooks", "bin/git-hooks"
102
116
 
103
- require 'bundler'
117
+ require "bundler"
104
118
  Bundler.with_original_env do
105
- say '=> Install tools'
106
- run 'bin/tools-setup'
119
+ say "=> Install tools"
120
+ run "bin/tools-setup"
107
121
 
108
- say '=> Generate binstubs for linters'
109
- run 'BUNDLE_GEMFILE=Gemfile.tools bundle binstub --force pronto'
110
- run 'BUNDLE_GEMFILE=Gemfile.tools bundle binstub --force rubocop'
122
+ say "=> Generate binstubs for linters"
123
+ run "BUNDLE_GEMFILE=Gemfile.tools bundle binstub --force pronto"
124
+ run "BUNDLE_GEMFILE=Gemfile.tools bundle binstub --force rubocop"
111
125
  end
112
126
 
113
- say '=> Set git hooks'
114
- run 'git config core.hooksPath ./bin/git-hooks'
127
+ say "=> Set git hooks"
128
+ run "git config core.hooksPath ./bin/git-hooks"
129
+ say "=> Install all new dependencies"
115
130
 
116
- say '=> Install all new dependencies'
117
131
  run <<~BREW_INSTALL
118
132
  hash brew 2> /dev/null \
119
- && (brew bundle check || brew bundle install) \
133
+ && (brew bundle check || brew bundle install --no-lock) \
120
134
  || echo "Please install Homebrew: https://brew.sh/"
121
135
  BREW_INSTALL
122
136
 
123
- say '=> Update development config'
124
- uncomment_lines 'config/environments/development.rb', /config\.file_watcher = ActiveSupport::EventedFileUpdateChecker/
137
+ say "=> Update development config"
138
+ uncomment_lines "config/environments/development.rb", /config\.file_watcher = ActiveSupport::EventedFileUpdateChecker/
139
+
140
+ say "=> Set up R7Insight"
141
+ r7insight_config = <<-CODE
142
+ if ENV['R7INSIGHT_TOKEN'].present?
143
+ Rails.logger = R7Insight.new(ENV['R7INSIGHT_TOKEN'], ENV['R7INSIGHT_REGION'])
144
+ end
145
+ CODE
146
+ insert_into_file "config/environments/production.rb",
147
+ "require 'r7_insight.rb'" + "\n\n",
148
+ before: "Rails.application.configure do"
149
+ environment(r7insight_config, env: "production")
150
+ if File.exist?("config/environments/staging.rb")
151
+ insert_into_file "config/environments/staging.rb",
152
+ "require 'r7_insight.rb'" + "\n\n",
153
+ before: "Rails.application.configure do"
154
+ environment(r7insight_config, env: "staging")
155
+ end
156
+
157
+ gem "connection_pool"
158
+
159
+ say "=> Set up Memcachier"
160
+ memcachier_config = <<-CODE
161
+ if ENV["MEMCACHIER_SERVERS"]
162
+ config.cache_store = :mem_cache_store,
163
+ ENV["MEMCACHIER_SERVERS"].split(","), {
164
+ username: ENV["MEMCACHIER_USERNAME"], password: ENV["MEMCACHIER_PASSWORD"],
165
+ failover: true, socket_timeout: 1.5, socket_failure_delay: 0.2, down_retry_delay: 60,
166
+ pool_size: ENV.fetch("RAILS_MAX_THREADS") { 5 },
167
+ }
168
+ end
169
+
170
+ CODE
171
+ environment(memcachier_config, env: "production")
172
+ if File.exist?("config/environments/staging.rb")
173
+ environment(memcachier_config, env: "staging")
174
+ end
175
+
176
+ Bundler.with_original_env do
177
+ say "=> Setup default bundle config"
178
+ run "bundle config jobs 4"
179
+ run "bundle config retry 3"
125
180
 
126
- after_bundle do
127
- say '=> Setup default bundle config'
128
- run 'bundle config jobs 4'
129
- run 'bundle config retry 3'
181
+ run "bundle"
130
182
  end
131
183
 
132
- say '**************************************************************************'
133
- say '**************************************************************************'
134
- say ''
135
- say '1. Recommended Heroku Addons: Mailtrap, Rollbar, Cloudinary'
136
- say ''
137
- say '2. Setup Git Hooks to auto-check code and cleanup staled branches'
138
- say '$ `cp bin/git-hooks/pre-push.sample bin/git-hooks/pre-push`'
139
- say '$ `cp bin/git-hooks/post-merge.sample bin/git-hooks/post-merge`'
140
- say ''
141
- say '3. Please, set CODECOV_TOKEN, GITHUB_TOKEN and PRONTO_GITHUB_ACCESS_TOKEN'
142
- say 'environment variables in CircleCI and your local env'
143
- say ''
144
- say ' For code coverage report aggregator, running code static analysis'
145
- say 'and auto-update of the tools.'
146
- say ''
147
- say '**************************************************************************'
148
- say '**************************************************************************'
184
+ uncomment_lines 'bin/setup', /system\(.*?\\byarn\b/
185
+
186
+ insert_into_file(
187
+ "bin/setup",
188
+ "system!('bin/tools-setup')\n",
189
+ after: "system('bundle check') || system!('bundle install')\n"
190
+ )
191
+
192
+ say "**************************************************************************"
193
+ say "**************************************************************************"
194
+ say ""
195
+ say "1. Recommended Heroku Addons: Mailtrap, Rollbar, Cloudinary"
196
+ say ""
197
+ say "2. Setup Git Hooks to auto-check code and cleanup staled branches:"
198
+ say "$ `git config core.hooksPath bin/git-hooks`"
199
+ say ""
200
+ say "3. Please, set CODECOV_TOKEN, GITHUB_TOKEN and PRONTO_GITHUB_ACCESS_TOKEN"
201
+ say "environment variables in CircleCI and your local env"
202
+ say ""
203
+ say " For code coverage report aggregator, running code static analysis"
204
+ say "and auto-update of the tools."
205
+ say ""
206
+ say "**************************************************************************"
207
+ say "**************************************************************************"