solidus_dev_support 2.0.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/.mergify.yml +2 -0
  3. data/.rubocop.yml +1 -1
  4. data/CHANGELOG.md +70 -5
  5. data/Gemfile +0 -1
  6. data/README.md +10 -3
  7. data/Rakefile +10 -8
  8. data/lib/solidus_dev_support/extension.rb +32 -23
  9. data/lib/solidus_dev_support/rake_tasks.rb +16 -4
  10. data/lib/solidus_dev_support/rspec/capybara.rb +2 -0
  11. data/lib/solidus_dev_support/rspec/rails_helper.rb +1 -3
  12. data/lib/solidus_dev_support/rubocop/config.yml +1 -1
  13. data/lib/solidus_dev_support/solidus_command.rb +8 -0
  14. data/lib/solidus_dev_support/templates/extension/CHANGELOG.md +1 -0
  15. data/lib/solidus_dev_support/templates/extension/README.md +5 -17
  16. data/lib/solidus_dev_support/templates/extension/bin/sandbox.tt +1 -1
  17. data/lib/solidus_dev_support/templates/extension/extension.gemspec.tt +3 -3
  18. data/lib/solidus_dev_support/templates/extension/github_changelog_generator +2 -0
  19. data/lib/solidus_dev_support/templates/extension/lib/%file_name%.rb.tt +1 -3
  20. data/lib/solidus_dev_support/templates/extension/lib/%file_name%/configuration.rb.tt +21 -0
  21. data/lib/solidus_dev_support/templates/extension/lib/%file_name%/engine.rb.tt +2 -2
  22. data/lib/solidus_dev_support/templates/extension/lib/%file_name%/{factories.rb.tt → testing_support/factories.rb.tt} +0 -0
  23. data/lib/solidus_dev_support/templates/extension/lib/generators/%file_name%/install/install_generator.rb.tt +5 -0
  24. data/lib/solidus_dev_support/templates/extension/lib/generators/%file_name%/install/templates/initializer.rb.tt +6 -0
  25. data/lib/solidus_dev_support/templates/extension/rubocop.yml +3 -0
  26. data/lib/solidus_dev_support/templates/extension/spec/spec_helper.rb.tt +2 -2
  27. data/lib/solidus_dev_support/testing_support/factories.rb +27 -0
  28. data/lib/solidus_dev_support/version.rb +1 -1
  29. data/solidus_dev_support.gemspec +4 -3
  30. data/spec/features/create_extension_spec.rb +25 -4
  31. data/spec/lib/extension_spec.rb +56 -20
  32. metadata +30 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ca90c2de99b0e00b59747e9aaf0cc9149adcdbd0568311d4fbc7a921fa61b9e0
4
- data.tar.gz: c0063153a36c95f8b3fa8f406b46b412242bfef54055857b3f109de682966e6c
3
+ metadata.gz: 74ab2edd76151f60e52665d3c8afbc84d0e375c6ab477110861a9e726e170e25
4
+ data.tar.gz: a2620208442a87b76478a0280da69fc762b5bb71b297af15ec8bd29bceb377a0
5
5
  SHA512:
6
- metadata.gz: 4e59dc8c12d5fde03a58a67102e72194a34a7dd19df88b79b4e59ba9d77900fcdeb6b3216c31618a429ada33bb8558548e3854105e2a17e7b126b4f651a7d4dc
7
- data.tar.gz: 3c6f158eb5ed20f1eec861a7fc971a7bbdd296bd8529afa61f434ba23933d7843456714cbb3c657cffecee90c0d8ff642a6920c31d89dd464c42684342c02079
6
+ metadata.gz: 0abc59073c06ce56cc8e673e157d474f8a55e2423a733bfb960f4fff9084ad06415bfcb133e867c761e97c0508c98ed9c4ad2e9686a0e3b0fa36be4428302f32
7
+ data.tar.gz: 6c069a4c5e6bca0401114cebf205bd869be8890862c55f53b8fc0c003ad3906637b438a540739ba822ff4ca4ae07838e995c8274a9a5d4527fbc09e427873792
data/.mergify.yml CHANGED
@@ -34,6 +34,8 @@ pull_request_rules:
34
34
  - base=master
35
35
  - -label="needs changelog label"
36
36
  - -label=blocked
37
+ - "#approved-reviews-by>=1"
38
+ - -draft
37
39
  actions:
38
40
  merge:
39
41
  method: merge
data/.rubocop.yml CHANGED
@@ -36,7 +36,6 @@ Style/RedundantRegexpEscape:
36
36
  Style/SlicingWithRange:
37
37
  Enabled: true
38
38
 
39
-
40
39
  AllCops:
41
40
  TargetRubyVersion: 2.5
42
41
  Exclude:
@@ -44,6 +43,7 @@ AllCops:
44
43
  - "vendor/**/*"
45
44
  # Generated binstubs
46
45
  - bin/rake
46
+ NewCops: enable
47
47
 
48
48
  Style/FrozenStringLiteralComment:
49
49
  Exclude:
data/CHANGELOG.md CHANGED
@@ -1,8 +1,63 @@
1
1
  # Changelog
2
2
 
3
- ## [Unreleased](https://github.com/solidusio/solidus_dev_support/tree/HEAD)
3
+ ## [2.3.0](https://github.com/solidusio/solidus_dev_support/tree/2.3.0) (2021-01-14)
4
4
 
5
- [Full Changelog](https://github.com/solidusio/solidus_dev_support/compare/v1.5.0...HEAD)
5
+ [Full Changelog](https://github.com/solidusio/solidus_dev_support/compare/v2.2.0...2.3.0)
6
+
7
+ **Implemented enhancements:**
8
+
9
+ - Do not raise if source\_code\_uri is missing in the gemspec [\#163](https://github.com/solidusio/solidus_dev_support/pull/163) ([kennyadsl](https://github.com/kennyadsl))
10
+ - Factory bot fixes for latest Solidus 2.11 release [\#162](https://github.com/solidusio/solidus_dev_support/pull/162) ([elia](https://github.com/elia))
11
+
12
+ **Fixed bugs:**
13
+
14
+ - use rubocop-rspec 2.x [\#161](https://github.com/solidusio/solidus_dev_support/pull/161) ([ccarruitero](https://github.com/ccarruitero))
15
+
16
+ ## [v2.2.0](https://github.com/solidusio/solidus_dev_support/tree/v2.2.0) (2020-11-27)
17
+
18
+ [Full Changelog](https://github.com/solidusio/solidus_dev_support/compare/v2.1.0...v2.2.0)
19
+
20
+ **Implemented enhancements:**
21
+
22
+ - Improve the URL generation for the gemspec and Readme \(defaulting to the solidusio-contrib organization\), consistently use a file-based Changelog [\#159](https://github.com/solidusio/solidus_dev_support/pull/159) ([elia](https://github.com/elia))
23
+ - Configuration Cleanup [\#158](https://github.com/solidusio/solidus_dev_support/pull/158) ([elia](https://github.com/elia))
24
+ - Refer to Solidus wiki page for gem release info [\#157](https://github.com/solidusio/solidus_dev_support/pull/157) ([spaghetticode](https://github.com/spaghetticode))
25
+ - Upgrade to RuboCop 1.0 [\#156](https://github.com/solidusio/solidus_dev_support/pull/156) ([aldesantis](https://github.com/aldesantis))
26
+ - Add a command to display gem's version [\#154](https://github.com/solidusio/solidus_dev_support/pull/154) ([igorbp](https://github.com/igorbp))
27
+
28
+ **Fixed bugs:**
29
+
30
+ - Require "webdrivers" before using it as the default javascript driver [\#152](https://github.com/solidusio/solidus_dev_support/pull/152) ([ccarruitero](https://github.com/ccarruitero))
31
+
32
+ **Merged pull requests:**
33
+
34
+ - Don't let mergify mark a PR as red because it's missing a review [\#153](https://github.com/solidusio/solidus_dev_support/pull/153) ([elia](https://github.com/elia))
35
+
36
+ ## [v2.1.0](https://github.com/solidusio/solidus_dev_support/tree/v2.1.0) (2020-10-02)
37
+
38
+ [Full Changelog](https://github.com/solidusio/solidus_dev_support/compare/v2.0.1...v2.1.0)
39
+
40
+ **Implemented enhancements:**
41
+
42
+ - Add standard github\_changelog\_generator configuration [\#151](https://github.com/solidusio/solidus_dev_support/pull/151) ([aldesantis](https://github.com/aldesantis))
43
+ - Move generated factories to `testing\_support/` [\#150](https://github.com/solidusio/solidus_dev_support/pull/150) ([aldesantis](https://github.com/aldesantis))
44
+ - Add extension configuration boilerplate [\#149](https://github.com/solidusio/solidus_dev_support/pull/149) ([aldesantis](https://github.com/aldesantis))
45
+
46
+ **Fixed bugs:**
47
+
48
+ - Fix `NewCops: Enable` option for RuboCop [\#148](https://github.com/solidusio/solidus_dev_support/pull/148) ([aldesantis](https://github.com/aldesantis))
49
+
50
+ ## [v2.0.1](https://github.com/solidusio/solidus_dev_support/tree/v2.0.1) (2020-09-22)
51
+
52
+ [Full Changelog](https://github.com/solidusio/solidus_dev_support/compare/v2.0.0...v2.0.1)
53
+
54
+ **Fixed bugs:**
55
+
56
+ - Fix gem\_version not being found during extension generation [\#144](https://github.com/solidusio/solidus_dev_support/pull/144) ([aldesantis](https://github.com/aldesantis))
57
+
58
+ ## [v2.0.0](https://github.com/solidusio/solidus_dev_support/tree/v2.0.0) (2020-09-22)
59
+
60
+ [Full Changelog](https://github.com/solidusio/solidus_dev_support/compare/v1.6.0...v2.0.0)
6
61
 
7
62
  **Breaking changes:**
8
63
 
@@ -13,6 +68,19 @@
13
68
  - Enable new RuboCop cops automatically [\#143](https://github.com/solidusio/solidus_dev_support/pull/143) ([aldesantis](https://github.com/aldesantis))
14
69
  - Don't forcefully close issues via stale-bot [\#139](https://github.com/solidusio/solidus_dev_support/pull/139) ([elia](https://github.com/elia))
15
70
  - Add the approximate recommendation for dev-support to the gemspec [\#137](https://github.com/solidusio/solidus_dev_support/pull/137) ([elia](https://github.com/elia))
71
+
72
+ **Fixed bugs:**
73
+
74
+ - fix capybara driver declaration [\#141](https://github.com/solidusio/solidus_dev_support/pull/141) ([ccarruitero](https://github.com/ccarruitero))
75
+ - Bump RuboCop to latest 0.90.0 version [\#138](https://github.com/solidusio/solidus_dev_support/pull/138) ([peterberkenbosch](https://github.com/peterberkenbosch))
76
+ - Fix missing backslash in solidus install command [\#135](https://github.com/solidusio/solidus_dev_support/pull/135) ([nirebu](https://github.com/nirebu))
77
+
78
+ ## [v1.6.0](https://github.com/solidusio/solidus_dev_support/tree/v1.6.0) (2020-08-26)
79
+
80
+ [Full Changelog](https://github.com/solidusio/solidus_dev_support/compare/v1.5.0...v1.6.0)
81
+
82
+ **Implemented enhancements:**
83
+
16
84
  - Let the extension name include spaces [\#133](https://github.com/solidusio/solidus_dev_support/pull/133) ([elia](https://github.com/elia))
17
85
  - Add precompiled badges fro CI and coverage [\#132](https://github.com/solidusio/solidus_dev_support/pull/132) ([elia](https://github.com/elia))
18
86
  - Add Changelog Rake task [\#128](https://github.com/solidusio/solidus_dev_support/pull/128) ([tvdeyen](https://github.com/tvdeyen))
@@ -20,9 +88,6 @@
20
88
 
21
89
  **Fixed bugs:**
22
90
 
23
- - fix capybara driver declaration [\#141](https://github.com/solidusio/solidus_dev_support/pull/141) ([ccarruitero](https://github.com/ccarruitero))
24
- - Bump RuboCop to latest 0.90.0 version [\#138](https://github.com/solidusio/solidus_dev_support/pull/138) ([peterberkenbosch](https://github.com/peterberkenbosch))
25
- - Fix missing backslash in solidus install command [\#135](https://github.com/solidusio/solidus_dev_support/pull/135) ([nirebu](https://github.com/nirebu))
26
91
  - Don't install a payment-method in the sandbox [\#131](https://github.com/solidusio/solidus_dev_support/pull/131) ([elia](https://github.com/elia))
27
92
  - Run extension generator in sandbox [\#127](https://github.com/solidusio/solidus_dev_support/pull/127) ([elia](https://github.com/elia))
28
93
 
data/Gemfile CHANGED
@@ -15,7 +15,6 @@ gem 'rails', '>0.a'
15
15
 
16
16
  # These gems will be used by the temporary extensions generated by tests
17
17
  group :test do
18
- gem 'factory_bot', '> 4.10.0'
19
18
  gem 'mysql2'
20
19
  gem 'pg'
21
20
  gem 'solidus_auth_devise'
data/README.md CHANGED
@@ -232,9 +232,16 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
232
232
  the tests. You can also run `bin/console` for an interactive prompt that will allow you to
233
233
  experiment.
234
234
 
235
- To install this gem onto your local machine, run `bin/rake install`. To release a new
236
- version, update the version number in `version.rb`, and then run `bin/rake release`, which
237
- will create a git tag for the version, push git commits and tags, and push the `.gem` file to
235
+ To install this gem onto your local machine, run `bin/rake install`.
236
+
237
+ To release a new version:
238
+
239
+ 1. update the version number in `version.rb`
240
+ 2. update the changelog with `bin/rake changelog`
241
+ 3. commit the changes using `Bump SolidusDevSupport to 1.2.3` as the message
242
+ 3. run `bin/rake release`
243
+
244
+ The last command will create a git tag for the version, push git commits and tags, and push the `.gem` file to
238
245
  [rubygems.org](https://rubygems.org).
239
246
 
240
247
  ## Contributing
data/Rakefile CHANGED
@@ -2,14 +2,16 @@
2
2
 
3
3
  require "bundler/gem_tasks"
4
4
 
5
- require 'github_changelog_generator/task'
6
- GitHubChangelogGenerator::RakeTask.new :changelog do |config|
7
- config.user = 'solidusio'
8
- config.project = 'solidus_dev_support'
9
- config.exclude_labels = %w[infrastructure]
10
- config.issues = false
11
- config.base = "#{__dir__}/OLD_CHANGELOG.md"
12
- config.since_tag = 'v1.4.0'
5
+ desc "Update the changelog, specify the version for the unreleased changes appending VERSION=1.2.3 to the command"
6
+ task :changelog do
7
+ require_relative "lib/solidus_dev_support/version"
8
+
9
+ future_release = ENV.fetch("VERSION") {
10
+ warn "Using current version (#{SolidusDevSupport::VERSION}) for unreleased changes, use VERSION=1.2.3 to select a different one."
11
+ SolidusDevSupport::VERSION
12
+ }
13
+
14
+ sh "bundle exec github_changelog_generator --project solidus_dev_support --user solidusio --future-release #{future_release}"
13
15
  end
14
16
 
15
17
  require "rspec/core/rake_task"
@@ -3,6 +3,8 @@
3
3
  require 'thor'
4
4
  require 'pathname'
5
5
 
6
+ require 'solidus_dev_support/version'
7
+
6
8
  module SolidusDevSupport
7
9
  class Extension < Thor
8
10
  include Thor::Actions
@@ -26,6 +28,7 @@ module SolidusDevSupport
26
28
  make_executable bin
27
29
  end
28
30
 
31
+ template 'CHANGELOG.md', "#{path}/CHANGELOG.md"
29
32
  template 'extension.gemspec', "#{path}/#{file_name}.gemspec"
30
33
  template 'Gemfile', "#{path}/Gemfile"
31
34
  template 'gitignore', "#{path}/.gitignore"
@@ -38,6 +41,7 @@ module SolidusDevSupport
38
41
  template 'rspec', "#{path}/.rspec"
39
42
  template 'spec/spec_helper.rb.tt', "#{path}/spec/spec_helper.rb"
40
43
  template 'rubocop.yml', "#{path}/.rubocop.yml"
44
+ template 'github_changelog_generator', "#{path}/.github_changelog_generator"
41
45
  end
42
46
 
43
47
  no_tasks do
@@ -47,27 +51,36 @@ module SolidusDevSupport
47
51
  @file_name = Thor::Util.snake_case(File.basename(path))
48
52
  @file_name = PREFIX + @file_name unless @file_name.start_with?(PREFIX)
49
53
 
50
- @class_name = Thor::Util.camel_case @file_name
54
+ @class_name = Thor::Util.camel_case file_name
51
55
 
52
56
  @root = File.dirname(path)
53
- @path = File.join(@root, @file_name)
57
+ @path = File.join(root, file_name)
58
+
59
+ @repo = existing_repo || default_repo
54
60
 
55
61
  @gemspec = existing_gemspec || default_gemspec
56
62
  end
57
63
 
64
+ attr_reader :root, :path, :file_name, :class_name, :gemspec, :repo
65
+
66
+ private
67
+
58
68
  def gemspec_path
59
69
  @gemspec_path ||= File.join(path, "#{file_name}.gemspec")
60
70
  end
61
71
 
62
72
  def default_gemspec
63
- @default_gemspec ||= Gem::Specification.new(@file_name, '0.0.1') do |gem|
73
+ @default_gemspec ||= Gem::Specification.new(file_name, '0.0.1') do |gem|
64
74
  gem.author = git('config user.name', 'TODO: Write your name')
65
- gem.description = 'TODO: Write a longer description or delete this line.'
66
75
  gem.email = git('config user.email', 'TODO: Write your email address')
67
- gem.homepage = default_homepage
68
- gem.license = 'BSD-3-Clause'
69
- gem.metadata['changelog_uri'] = default_homepage + '/releases'
76
+
70
77
  gem.summary = 'TODO: Write a short summary, because RubyGems requires one.'
78
+ gem.description = 'TODO: Write a longer description or delete this line.'
79
+ gem.license = 'BSD-3-Clause'
80
+
81
+ gem.metadata['homepage_uri'] = gem.homepage = "https://github.com/#{repo}#readme"
82
+ gem.metadata['changelog_uri'] = "https://github.com/#{repo}/blob/master/CHANGELOG.md"
83
+ gem.metadata['source_code_uri'] = "https://github.com/#{repo}"
71
84
  end
72
85
  end
73
86
 
@@ -77,28 +90,26 @@ module SolidusDevSupport
77
90
  @existing_gemspec ||= Gem::Specification.load(gemspec_path).tap do |spec|
78
91
  spec.author ||= default_gemspec.author
79
92
  spec.email ||= default_gemspec.email
80
- spec.homepage ||= default_gemspec.homepage
81
- spec.license ||= default_gemspec.license
82
- spec.metadata['changelog_uri'] ||= default_gemspec.metadata[:changelog_uri]
93
+
83
94
  spec.summary ||= default_gemspec.summary
95
+ spec.license ||= default_gemspec.license
96
+
97
+ spec.homepage ||= default_gemspec.homepage
98
+ spec.metadata['source_code_uri'] ||= default_gemspec.metadata['source_code_uri']
99
+ spec.metadata['changelog_uri'] ||= default_gemspec.metadata['changelog_uri']
100
+ spec.metadata['source_code_uri'] ||= default_gemspec.metadata['source_code_uri']
84
101
  end
85
102
  end
86
103
 
87
- def default_homepage
88
- @default_homepage ||= git(
89
- 'remote get-url origin',
90
- "git@github.com:#{github_user}/#{file_name}.git"
91
- ).sub(
92
- %r{^.*github\.com.([^/]+)/([^/.]+).*$},
93
- 'https://github.com/\1/\2'
94
- )
104
+ def default_repo
105
+ "solidusio-contrib/#{file_name}"
95
106
  end
96
107
 
97
- def github_user
98
- @github_user ||= git('config github.user', '[USERNAME]')
108
+ def existing_repo
109
+ git('remote get-url origin')&.sub(%r{^.*github\.com.([^/]+)/([^/.]+).*$}, '\1/\2')
99
110
  end
100
111
 
101
- def git(command, default)
112
+ def git(command, default = nil)
102
113
  result = `git #{command} 2> /dev/null`.strip
103
114
  result.empty? ? default : result
104
115
  end
@@ -108,8 +119,6 @@ module SolidusDevSupport
108
119
  executable = (path.stat.mode | 0o111)
109
120
  path.chmod(executable)
110
121
  end
111
-
112
- attr_reader :root, :path, :file_name, :class_name, :gemspec
113
122
  end
114
123
 
115
124
  def self.source_root
@@ -76,11 +76,23 @@ module SolidusDevSupport
76
76
  def install_changelog_task
77
77
  require 'github_changelog_generator/task'
78
78
 
79
- user, project = gemspec.homepage.split("/")[3..5]
80
79
  GitHubChangelogGenerator::RakeTask.new(:changelog) do |config|
81
- config.user = user || 'solidus-contrib'
82
- config.project = project || gemspec.name
83
- config.future_release = "v#{gemspec.version}"
80
+ require 'octokit'
81
+ repo = Octokit::Repository.from_url(gemspec.metadata['source_code_uri'] || gemspec.homepage)
82
+
83
+ config.user = repo.owner
84
+ config.project = repo.name
85
+ config.future_release = "v#{ENV['UNRELEASED_VERSION'] || gemspec.version}"
86
+
87
+ rescue Octokit::InvalidRepository
88
+ warn <<~WARN
89
+ It won't be possible to automatically generate the CHANGELOG for this extension because the
90
+ gemspec is missing the `source_code_uri` metadata. Please add this line to the gemspec to
91
+ enable automatic CHANGELOG generation:
92
+
93
+ s.metadata["source_code_uri"] = 'https://github.com/org/repo'
94
+
95
+ WARN
84
96
  end
85
97
  end
86
98
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'webdrivers/chromedriver'
4
+
3
5
  # Allow to override the initial windows size
4
6
  CAPYBARA_WINDOW_SIZE = (ENV['CAPYBARA_WINDOW_SIZE'] || '1920x1080').split('x', 2).map(&:to_i)
5
7
 
@@ -16,14 +16,12 @@ require 'factory_bot'
16
16
  require 'ffaker'
17
17
 
18
18
  require 'spree/testing_support/authorization_helpers'
19
- require 'spree/testing_support/factories'
20
19
  require 'spree/testing_support/url_helpers'
21
20
  require 'spree/testing_support/preferences'
22
21
  require 'spree/testing_support/controller_requests'
22
+ require 'solidus_dev_support/testing_support/factories'
23
23
  require 'solidus_dev_support/testing_support/preferences'
24
24
 
25
- FactoryBot.find_definitions
26
-
27
25
  RSpec.configure do |config|
28
26
  config.infer_spec_type_from_file_location!
29
27
 
@@ -1,6 +1,6 @@
1
1
  require: ["rubocop-rspec", "rubocop-rails", "rubocop-performance"]
2
2
 
3
- AllCops: {TargetRubyVersion: 2.5, Exclude: ["spec/dummy/**/*", "sandbox/**/*", "vendor/**/*"], NewCops: enable}
3
+ AllCops: {TargetRubyVersion: 2.5, Exclude: ["spec/dummy/**/*", "sandbox/**/*", "vendor/**/*"]}
4
4
 
5
5
  Layout/ArgumentAlignment: {EnforcedStyle: with_fixed_indentation}
6
6
  Layout/DotPosition: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#layoutdotposition"}
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'thor'
4
4
  require 'solidus_dev_support/extension'
5
+ require 'spree/core/version'
5
6
 
6
7
  module SolidusDevSupport
7
8
  class SolidusCommand < Thor
@@ -13,6 +14,13 @@ module SolidusDevSupport
13
14
  desc 'e', 'Manage solidus extensions (shortcut for "extension")'
14
15
  subcommand 'e', Extension
15
16
 
17
+ desc 'version', 'Displays solidus_dev_support version'
18
+ def version
19
+ puts "Solidus version #{Spree.solidus_gem_version}"
20
+ puts "Solidus Dev Support version #{SolidusDevSupport::VERSION}"
21
+ end
22
+ map ['-v', '--version'] => :version
23
+
16
24
  def self.exit_on_failure?
17
25
  true
18
26
  end
@@ -1,13 +1,9 @@
1
1
  # <%= class_name.gsub(/(?<=[^A-Z])([A-Z])/, ' \1') %>
2
2
 
3
- <!-- Replace REPO_ORG and uncomment the following to show badges for CI and coverage. -->
3
+ [![CircleCI](https://circleci.com/gh/<%= repo %>.svg?style=shield)](https://circleci.com/gh/<%= repo %>)
4
+ [![codecov](https://codecov.io/gh/<%= repo %>/branch/master/graph/badge.svg)](https://codecov.io/gh/<%= repo %>)
4
5
 
5
- <!--
6
- [![CircleCI](https://circleci.com/gh/REPO_ORG/<%= file_name %>.svg?style=shield)](https://circleci.com/gh/REPO_ORG/<%= file_name %>)
7
- [![codecov](https://codecov.io/gh/REPO_ORG/<%= file_name %>/branch/master/graph/badge.svg)](https://codecov.io/gh/REPO_ORG/<%= file_name %>)
8
- -->
9
-
10
- [Explain what your extension does.]
6
+ <!-- Explain what your extension does. -->
11
7
 
12
8
  ## Installation
13
9
 
@@ -25,7 +21,7 @@ bin/rails generate <%= file_name %>:install
25
21
 
26
22
  ## Usage
27
23
 
28
- [Explain how to use your extension once it's been installed.]
24
+ <!-- Explain how to use your extension once it's been installed. -->
29
25
 
30
26
  ## Development
31
27
 
@@ -81,15 +77,7 @@ git commit -m "Update the changelog"
81
77
 
82
78
  ### Releasing new versions
83
79
 
84
- Your new extension version can be released using `gem-release` like this:
85
-
86
- ```shell
87
- bundle exec gem bump -v 1.6.0
88
- bin/rake changelog
89
- git commit -a --amend
90
- git push
91
- bundle exec gem release
92
- ```
80
+ Please refer to the dedicated [page](https://github.com/solidusio/solidus/wiki/How-to-release-extensions) on Solidus wiki.
93
81
 
94
82
  ## License
95
83
 
@@ -67,7 +67,7 @@ unbundled bundle install --gemfile Gemfile
67
67
 
68
68
  unbundled bundle exec rake db:drop db:create
69
69
 
70
- unbundled bundle exec rails generate spree:install \
70
+ unbundled bundle exec rails generate solidus:install \
71
71
  --auto-accept \
72
72
  --user_class=Spree::User \
73
73
  --enforce_available_locales=true \
@@ -9,12 +9,12 @@ Gem::Specification.new do |spec|
9
9
  spec.email = '<%= gemspec.email %>'
10
10
 
11
11
  spec.summary = '<%= gemspec.summary %>'
12
- spec.description = '<%= gemspec.description %>'
13
- spec.homepage = '<%= gemspec.homepage %>'
12
+ <% if gemspec.description %>spec.description = '<%= gemspec.description %>'
13
+ <% end %>spec.homepage = '<%= gemspec.homepage %>'
14
14
  spec.license = '<%= gemspec.license %>'
15
15
 
16
16
  spec.metadata['homepage_uri'] = spec.homepage
17
- spec.metadata['source_code_uri'] = '<%= gemspec.homepage %>'
17
+ spec.metadata['source_code_uri'] = '<%= gemspec.metadata["source_code_uri"] %>'
18
18
  spec.metadata['changelog_uri'] = '<%= gemspec.metadata["changelog_uri"] %>'
19
19
 
20
20
  spec.required_ruby_version = Gem::Requirement.new('~> 2.5')
@@ -0,0 +1,2 @@
1
+ issues=false
2
+ exclude-labels=infrastructure
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'solidus_core'
4
- require 'solidus_support'
5
-
3
+ require '<%=file_name%>/configuration'
6
4
  require '<%=file_name%>/version'
7
5
  require '<%=file_name%>/engine'
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module <%= class_name %>
4
+ class Configuration
5
+ # Define here the settings for this extension, e.g.:
6
+ #
7
+ # attr_accessor :my_setting
8
+ end
9
+
10
+ class << self
11
+ def configuration
12
+ @configuration ||= Configuration.new
13
+ end
14
+
15
+ alias config configuration
16
+
17
+ def configure
18
+ yield configuration
19
+ end
20
+ end
21
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/core'
4
- require '<%= file_name %>'
3
+ require 'solidus_core'
4
+ require 'solidus_support'
5
5
 
6
6
  module <%= class_name %>
7
7
  class Engine < Rails::Engine
@@ -4,6 +4,11 @@ module <%= class_name %>
4
4
  module Generators
5
5
  class InstallGenerator < Rails::Generators::Base
6
6
  class_option :auto_run_migrations, type: :boolean, default: false
7
+ source_root File.expand_path('templates', __dir__)
8
+
9
+ def copy_initializer
10
+ template 'initializer.rb', 'config/initializers/<%= file_name %>.rb'
11
+ end
7
12
 
8
13
  def add_javascripts
9
14
  append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/<%= file_name %>\n"
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ <%= class_name %>.configure do |config|
4
+ # TODO: Remember to change this with the actual preferences you have implemented!
5
+ # config.sample_preference = 'sample_value'
6
+ end
@@ -1,2 +1,5 @@
1
1
  require:
2
2
  - solidus_dev_support/rubocop
3
+
4
+ AllCops:
5
+ NewCops: disable
@@ -18,8 +18,8 @@ require 'solidus_dev_support/rspec/feature_helper'
18
18
  # in spec/support/ and its subdirectories.
19
19
  Dir["#{__dir__}/support/**/*.rb"].sort.each { |f| require f }
20
20
 
21
- # Requires factories defined in lib/<%= file_name %>/factories.rb
22
- require '<%= file_name %>/factories'
21
+ # Requires factories defined in lib/<%= file_name %>/testing_support/factories.rb
22
+ SolidusDevSupport::TestingSupport::Factories.load_for(<%= class_name %>::Engine)
23
23
 
24
24
  RSpec.configure do |config|
25
25
  config.infer_spec_type_from_file_location!
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spree/testing_support/factories'
4
+ require 'factory_bot'
5
+
6
+ module SolidusDevSupport
7
+ module TestingSupport
8
+ module Factories
9
+ def self.load_for(*engines)
10
+ paths = engines.flat_map do |engine|
11
+ engine.root.glob('lib/**/factories.rb')
12
+ end
13
+
14
+ if Spree::TestingSupport.respond_to? :load_all_factories
15
+ FactoryBot.definition_file_paths.concat(
16
+ paths.map { |path| path.sub(/.rb\z/, '').to_s }
17
+ )
18
+ FactoryBot.reload
19
+ else
20
+ FactoryBot.find_definitions
21
+
22
+ paths.each { |path| require path }
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SolidusDevSupport
4
- VERSION = "2.0.0"
4
+ VERSION = "2.4.0"
5
5
 
6
6
  def self.gem_version
7
7
  Gem::Version.new(VERSION)
@@ -32,17 +32,18 @@ Gem::Specification.new do |spec|
32
32
  spec.add_dependency 'capybara-screenshot', '~> 1.0'
33
33
  spec.add_dependency 'codecov', '~> 0.2'
34
34
  spec.add_dependency 'database_cleaner', '~> 1.7'
35
- spec.add_dependency 'factory_bot_rails', '~> 5.1'
35
+ spec.add_dependency 'factory_bot', '~> 4.8'
36
+ spec.add_dependency 'factory_bot_rails'
36
37
  spec.add_dependency 'ffaker', '~> 2.13'
37
38
  spec.add_dependency 'gem-release', '~> 2.1'
38
39
  spec.add_dependency 'github_changelog_generator', '~> 1.15'
39
40
  spec.add_dependency 'puma', '~> 4.3'
40
41
  spec.add_dependency 'rspec_junit_formatter'
41
42
  spec.add_dependency 'rspec-rails', '~> 4.0.0.beta3'
42
- spec.add_dependency 'rubocop', '~> 0.90'
43
+ spec.add_dependency 'rubocop', '~> 1.0'
43
44
  spec.add_dependency 'rubocop-performance', '~> 1.5'
44
45
  spec.add_dependency 'rubocop-rails', '~> 2.3'
45
- spec.add_dependency 'rubocop-rspec', '~> 1.36'
46
+ spec.add_dependency 'rubocop-rspec', '~> 2.0'
46
47
  spec.add_dependency 'solidus_core', ['>= 2.0', '< 3']
47
48
  spec.add_dependency 'webdrivers', '~> 4.4'
48
49
 
@@ -3,6 +3,7 @@
3
3
  require 'fileutils'
4
4
  require 'open3'
5
5
  require 'spec_helper'
6
+ require 'spree/core/version'
6
7
 
7
8
  RSpec.describe 'Create extension' do
8
9
  include FileUtils
@@ -13,8 +14,7 @@ RSpec.describe 'Create extension' do
13
14
  let(:gemspec_name) { "solidus_#{extension_name}.gemspec" }
14
15
  let(:tmp_path) { Pathname.new(gem_root).join('tmp') }
15
16
  let(:install_path) { tmp_path.join("solidus_#{extension_name}") }
16
-
17
- class CommandFailed < StandardError; end
17
+ let(:command_failed_error) { Class.new(StandardError) }
18
18
 
19
19
  before do
20
20
  rm_rf(install_path)
@@ -28,6 +28,7 @@ RSpec.describe 'Create extension' do
28
28
 
29
29
  it 'checks the create extension process' do
30
30
  step :check_solidus_cmd
31
+ step :check_gem_version
31
32
  step :check_create_extension
32
33
  step :check_bundle_install
33
34
  step :check_default_task
@@ -45,6 +46,21 @@ RSpec.describe 'Create extension' do
45
46
  end
46
47
  end
47
48
 
49
+ def check_gem_version
50
+ gem_version_commands = ['version', '--version', '-v']
51
+ gem_version = SolidusDevSupport::VERSION
52
+ solidus_version = Spree.solidus_gem_version
53
+
54
+ cd(tmp_path) do
55
+ gem_version_commands.each do |gem_version_cmd|
56
+ output = `#{solidus_cmd} #{gem_version_cmd}`
57
+ expect($?).to be_success
58
+ expect(output).to include("Solidus version #{solidus_version}")
59
+ expect(output).to include("Solidus Dev Support version #{gem_version}")
60
+ end
61
+ end
62
+ end
63
+
48
64
  def check_create_extension
49
65
  cd(tmp_path) do
50
66
  output = `#{solidus_cmd} extension #{extension_name}`
@@ -83,7 +99,7 @@ RSpec.describe 'Create extension' do
83
99
  open('Gemfile', 'a') { |f| f.puts "gem 'solidus_dev_support', path: '../../..'" }
84
100
  end
85
101
 
86
- expect { bundle_install }.to raise_error(CommandFailed, /invalid gemspec/)
102
+ expect { bundle_install }.to raise_error(command_failed_error, /invalid gemspec/)
87
103
 
88
104
  # Update gemspec with the required fields
89
105
  gemspec_path = install_path.join(gemspec_name)
@@ -106,11 +122,16 @@ RSpec.describe 'Create extension' do
106
122
  end
107
123
 
108
124
  def check_run_specs
125
+ install_path.join('lib', 'solidus_test_extension', 'testing_support', 'factories.rb').open('a') do |factories_file|
126
+ factories_file.write "\n puts 'loading test_extension factories'"
127
+ end
128
+
109
129
  install_path.join('spec', 'some_spec.rb').write(
110
130
  "require 'spec_helper'\nRSpec.describe 'Some test' do it { expect(true).to be_truthy } end\n"
111
131
  )
112
132
  cd(install_path) do
113
133
  output = sh('bundle exec rspec')
134
+ expect(output).to include('loading test_extension factories')
114
135
  expect(output).to include('1 example, 0 failures')
115
136
  expect(output).to include(ENV['CODECOV_TOKEN'] ? 'Coverage reports upload successfully' : 'Provide a CODECOV_TOKEN environment variable to enable Codecov uploads')
116
137
  end
@@ -144,7 +165,7 @@ RSpec.describe 'Create extension' do
144
165
  warn "$ #{command}"
145
166
  warn output.to_s
146
167
  end
147
- raise(CommandFailed, "command failed: #{command}\n#{output}")
168
+ raise(command_failed_error, "command failed: #{command}\n#{output}")
148
169
  end
149
170
  end
150
171
 
@@ -1,33 +1,69 @@
1
1
  require 'solidus_dev_support/extension'
2
2
 
3
3
  RSpec.describe SolidusDevSupport::Extension do
4
- describe '#default_homepage' do
5
- before do
6
- expect(subject).to receive(:git).with('remote get-url origin', any_args).and_return(remote)
7
- expect(subject).to receive(:github_user).and_return('[USERNAME]')
8
- expect(subject).to receive(:file_name).and_return('solidus_foo_bar')
9
- end
4
+ describe '#path=' do
5
+ specify 'with an existing extension' do
6
+ allow(subject).to receive(:git).with('remote get-url origin', any_args).and_return('git@github.com:some_user/solidus_my_ext.git')
7
+ allow(subject).to receive(:git).with('config user.name', any_args).and_return('John Doe')
8
+ allow(subject).to receive(:git).with('config user.email', any_args).and_return('john.doe@example.com')
10
9
 
11
- context 'with a git ssh-style remote' do
12
- let(:remote) { 'git@github.com:solidusio-contrib/solidus_extension_dev_tools.git' }
10
+ allow(File).to receive(:exist?).with('/foo/bar/solidus_my_ext/solidus_my_ext.gemspec').and_return(true)
11
+ allow(Gem::Specification).to receive(:load).with('/foo/bar/solidus_my_ext/solidus_my_ext.gemspec').and_return(
12
+ Gem::Specification.new('solidus_my_ext', '0.1.1') do |gem|
13
+ gem.author = "Jane Doe"
14
+ gem.email = "jane.doe@example.com"
13
15
 
14
- it 'generates a github home page value' do
15
- expect(subject.default_homepage).to eq('https://github.com/solidusio-contrib/solidus_extension_dev_tools')
16
- end
17
- end
16
+ gem.summary = 'This extension is awesome!'
17
+ gem.license = 'MIT'
18
18
 
19
- context 'with a git https remote' do
20
- let(:remote) { 'https://github.com/solidusio-contrib/solidus_extension_dev_tools.git' }
19
+ gem.homepage = "some_user.github.io/solidus_my_ext"
20
+ gem.metadata['changelog_uri'] = "https://github.com/some_user/solidus_my_ext/releases"
21
+ gem.metadata['source_code_uri'] = "https://github.com/some_user/solidus_my_ext"
22
+ end
23
+ )
21
24
 
22
- it 'generates a github home page value' do
23
- expect(subject.default_homepage).to eq('https://github.com/solidusio-contrib/solidus_extension_dev_tools')
25
+ subject.path = '/foo/bar/solidus_my_ext'
26
+
27
+ aggregate_failures do
28
+ expect(subject.file_name).to eq("solidus_my_ext")
29
+ expect(subject.class_name).to eq("SolidusMyExt")
30
+ expect(subject.root).to eq("/foo/bar")
31
+ expect(subject.path).to eq("/foo/bar/solidus_my_ext")
32
+ expect(subject.repo).to eq("some_user/solidus_my_ext")
33
+ expect(subject.gemspec.author).to eq('Jane Doe')
34
+ expect(subject.gemspec.email).to eq('jane.doe@example.com')
35
+ expect(subject.gemspec.summary).to eq('This extension is awesome!')
36
+ expect(subject.gemspec.license).to eq('MIT')
37
+ expect(subject.gemspec.homepage).to eq("some_user.github.io/solidus_my_ext")
38
+ expect(subject.gemspec.metadata['changelog_uri']).to eq("https://github.com/some_user/solidus_my_ext/releases")
39
+ expect(subject.gemspec.metadata['source_code_uri']).to eq("https://github.com/some_user/solidus_my_ext")
24
40
  end
25
41
  end
26
- end
27
42
 
28
- describe '#default_gemspec' do
29
- it 'has a changelog_uri' do
30
- expect(subject.default_gemspec.metadata['changelog_uri']).to end_with('/releases')
43
+ specify 'when creating a new extension' do
44
+ allow(subject).to receive(:git).with('remote get-url origin', any_args) { |_, default| default }
45
+ allow(subject).to receive(:git).with('config user.name', any_args).and_return('John Doe')
46
+ allow(subject).to receive(:git).with('config user.email', any_args).and_return('john.doe@example.com')
47
+
48
+ allow(Dir).to receive(:pwd).and_return('/foo/bar')
49
+
50
+ subject.path = '/foo/bar/solidus_my_ext'
51
+
52
+ aggregate_failures do
53
+ expect(subject.file_name).to eq("solidus_my_ext")
54
+ expect(subject.class_name).to eq("SolidusMyExt")
55
+ expect(subject.root).to eq("/foo/bar")
56
+ expect(subject.path).to eq("/foo/bar/solidus_my_ext")
57
+ expect(subject.repo).to eq("solidusio-contrib/solidus_my_ext")
58
+ expect(subject.gemspec.author).to eq('John Doe')
59
+ expect(subject.gemspec.email).to eq('john.doe@example.com')
60
+ expect(subject.gemspec.summary).to eq('TODO: Write a short summary, because RubyGems requires one.')
61
+ expect(subject.gemspec.description).to eq('TODO: Write a longer description or delete this line.')
62
+ expect(subject.gemspec.license).to eq('BSD-3-Clause')
63
+ expect(subject.gemspec.homepage).to eq("https://github.com/solidusio-contrib/solidus_my_ext#readme")
64
+ expect(subject.gemspec.metadata['changelog_uri']).to eq("https://github.com/solidusio-contrib/solidus_my_ext/blob/master/CHANGELOG.md")
65
+ expect(subject.gemspec.metadata['source_code_uri']).to eq("https://github.com/solidusio-contrib/solidus_my_ext")
66
+ end
31
67
  end
32
68
  end
33
69
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solidus_dev_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alessandro Desantis
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-22 00:00:00.000000000 Z
11
+ date: 2021-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capybara
@@ -67,19 +67,33 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.7'
69
69
  - !ruby/object:Gem::Dependency
70
- name: factory_bot_rails
70
+ name: factory_bot
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '5.1'
75
+ version: '4.8'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '5.1'
82
+ version: '4.8'
83
+ - !ruby/object:Gem::Dependency
84
+ name: factory_bot_rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: ffaker
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -170,14 +184,14 @@ dependencies:
170
184
  requirements:
171
185
  - - "~>"
172
186
  - !ruby/object:Gem::Version
173
- version: '0.90'
187
+ version: '1.0'
174
188
  type: :runtime
175
189
  prerelease: false
176
190
  version_requirements: !ruby/object:Gem::Requirement
177
191
  requirements:
178
192
  - - "~>"
179
193
  - !ruby/object:Gem::Version
180
- version: '0.90'
194
+ version: '1.0'
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: rubocop-performance
183
197
  requirement: !ruby/object:Gem::Requirement
@@ -212,14 +226,14 @@ dependencies:
212
226
  requirements:
213
227
  - - "~>"
214
228
  - !ruby/object:Gem::Version
215
- version: '1.36'
229
+ version: '2.0'
216
230
  type: :runtime
217
231
  prerelease: false
218
232
  version_requirements: !ruby/object:Gem::Requirement
219
233
  requirements:
220
234
  - - "~>"
221
235
  - !ruby/object:Gem::Version
222
- version: '1.36'
236
+ version: '2.0'
223
237
  - !ruby/object:Gem::Dependency
224
238
  name: solidus_core
225
239
  requirement: !ruby/object:Gem::Requirement
@@ -323,6 +337,7 @@ files:
323
337
  - lib/solidus_dev_support/solidus_command.rb
324
338
  - lib/solidus_dev_support/templates/extension/.circleci/config.yml
325
339
  - lib/solidus_dev_support/templates/extension/.github/stale.yml
340
+ - lib/solidus_dev_support/templates/extension/CHANGELOG.md
326
341
  - lib/solidus_dev_support/templates/extension/CONTRIBUTING.md
327
342
  - lib/solidus_dev_support/templates/extension/Gemfile
328
343
  - lib/solidus_dev_support/templates/extension/LICENSE
@@ -343,15 +358,19 @@ files:
343
358
  - lib/solidus_dev_support/templates/extension/config/routes.rb
344
359
  - lib/solidus_dev_support/templates/extension/extension.gemspec.tt
345
360
  - lib/solidus_dev_support/templates/extension/gem_release.yml.tt
361
+ - lib/solidus_dev_support/templates/extension/github_changelog_generator
346
362
  - lib/solidus_dev_support/templates/extension/gitignore
347
363
  - lib/solidus_dev_support/templates/extension/lib/%file_name%.rb.tt
364
+ - lib/solidus_dev_support/templates/extension/lib/%file_name%/configuration.rb.tt
348
365
  - lib/solidus_dev_support/templates/extension/lib/%file_name%/engine.rb.tt
349
- - lib/solidus_dev_support/templates/extension/lib/%file_name%/factories.rb.tt
366
+ - lib/solidus_dev_support/templates/extension/lib/%file_name%/testing_support/factories.rb.tt
350
367
  - lib/solidus_dev_support/templates/extension/lib/%file_name%/version.rb.tt
351
368
  - lib/solidus_dev_support/templates/extension/lib/generators/%file_name%/install/install_generator.rb.tt
369
+ - lib/solidus_dev_support/templates/extension/lib/generators/%file_name%/install/templates/initializer.rb.tt
352
370
  - lib/solidus_dev_support/templates/extension/rspec
353
371
  - lib/solidus_dev_support/templates/extension/rubocop.yml
354
372
  - lib/solidus_dev_support/templates/extension/spec/spec_helper.rb.tt
373
+ - lib/solidus_dev_support/testing_support/factories.rb
355
374
  - lib/solidus_dev_support/testing_support/preferences.rb
356
375
  - lib/solidus_dev_support/version.rb
357
376
  - solidus_dev_support.gemspec
@@ -380,7 +399,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
380
399
  - !ruby/object:Gem::Version
381
400
  version: '0'
382
401
  requirements: []
383
- rubygems_version: 3.1.2
402
+ rubygems_version: 3.1.4
384
403
  signing_key:
385
404
  specification_version: 4
386
405
  summary: Development tools for Solidus extensions.