solidus_dev_support 2.0.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.