rsgem 0.1.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.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +84 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/exe/rsgem +7 -0
- data/lib/rsgem/ci_providers/base.rb +34 -0
- data/lib/rsgem/ci_providers/github_actions.rb +12 -0
- data/lib/rsgem/ci_providers/travis.rb +10 -0
- data/lib/rsgem/cli/commands/new.rb +31 -0
- data/lib/rsgem/cli/commands/version.rb +15 -0
- data/lib/rsgem/cli/commands.rb +12 -0
- data/lib/rsgem/constants.rb +11 -0
- data/lib/rsgem/context.rb +47 -0
- data/lib/rsgem/dependencies/base.rb +34 -0
- data/lib/rsgem/dependencies/rake.rb +7 -0
- data/lib/rsgem/dependencies/reek.rb +11 -0
- data/lib/rsgem/dependencies/rspec.rb +7 -0
- data/lib/rsgem/dependencies/rubocop.rb +11 -0
- data/lib/rsgem/dependencies/simplecov.rb +9 -0
- data/lib/rsgem/errors/missing_gem_name_error.rb +6 -0
- data/lib/rsgem/gem.rb +70 -0
- data/lib/rsgem/support/Rakefile +6 -0
- data/lib/rsgem/support/github_actions.yml +36 -0
- data/lib/rsgem/support/reek.yml +127 -0
- data/lib/rsgem/support/rubocop.yml +81 -0
- data/lib/rsgem/support/travis.yml +28 -0
- data/lib/rsgem/tasks/add_code_analysis.rb +25 -0
- data/lib/rsgem/tasks/add_dependency.rb +48 -0
- data/lib/rsgem/tasks/clean_gemfile.rb +43 -0
- data/lib/rsgem/tasks/clean_gemspec.rb +43 -0
- data/lib/rsgem/tasks/ignore_gemfile_lock.rb +36 -0
- data/lib/rsgem/tasks/run_rubocop.rb +25 -0
- data/lib/rsgem/tasks/set_bundled_files.rb +48 -0
- data/lib/rsgem/version.rb +8 -0
- data/lib/rsgem.rb +30 -0
- metadata +179 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f0622fb3d78fdde2291dddba96eb5ec6dbebc8be9bf32187a6c76374c48a4428
|
4
|
+
data.tar.gz: 926cbc4d4003bb8c214a4894def1325b596487e0e73c21a0247df10bbf8ad0dd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5b429ae00a6454f4f110576467bb556913db2b0c870075bff02d1bb7ad0c41ed0eb8e8158727b31c1bac8e1abc90fdf13a1ead4b8ce858b8d154cf1bfa0a67f3
|
7
|
+
data.tar.gz: 8b41cbcf3c7e1ef59db574885631201fd85ee745b986b9e4bba2b7aacc55d71edfb2ee2422d66a2faf5c93d22c9ab53932e9fe743e6b950c45d8fbc7a6cbee3c
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2020 Juan Manuel Ramallo
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
# `rsgem` - Rootstrap's gem generator
|
2
|
+
|
3
|
+

|
4
|
+
[](https://codeclimate.com/github/rootstrap/rsgem/maintainability)
|
5
|
+
[](https://codeclimate.com/github/rootstrap/rsgem/test_coverage)
|
6
|
+
|
7
|
+
`rsgem` is a tool to help you start developing gems with the defaults we use at Rootstrap.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
$ gem install rsgem
|
12
|
+
|
13
|
+
We highly suggest to not include `rsgem` in your Gemfile.
|
14
|
+
`rsgem` is not a library, and should not affect the dependency tree of your application.
|
15
|
+
|
16
|
+
## Usage
|
17
|
+
|
18
|
+
```
|
19
|
+
rsgem new NAME [CI_PROVIDER]
|
20
|
+
```
|
21
|
+
|
22
|
+
RSGem will solve the following tasks for you:
|
23
|
+
|
24
|
+
1. Create a folder for your gem leveraging bundler's defaults. (You need bundler in your system)
|
25
|
+
1. Add the following dependencies:
|
26
|
+
- [Rake](https://github.com/ruby/rake)
|
27
|
+
- [Reek](https://github.com/troessner/reek)
|
28
|
+
- [RSpec](https://github.com/rspec/rspec)
|
29
|
+
- [Rubocop](https://github.com/rubocop-hq/rubocop)
|
30
|
+
- [Simplecov](https://github.com/colszowka/simplecov)
|
31
|
+
- We use Simplecov at 0.17.1 because that's the latest compatible version with CodeClimate.
|
32
|
+
1. Add configuration files for Reek and Rubocop with default Rootstrap's configuration.
|
33
|
+
1. Add a rake task to run Rubocop and Reek by calling `rake code_analysis`.
|
34
|
+
1. [Clean the Gemfile](https://github.com/rootstrap/tech-guides/blob/master/open-source/developing_gems.md#gemfilegemfilelockgemspec).
|
35
|
+
1. [Git ignore the Gemfile.lock](https://github.com/rootstrap/tech-guides/blob/master/open-source/developing_gems.md#gemfilegemfilelockgemspec)
|
36
|
+
1. Add a CI provider configuration. GitHub Actions and Travis are available providers. Travis is the default.
|
37
|
+
1. Set the bundled files to be a short list of files. By default the gem will bundle:
|
38
|
+
- LICENSE.txt
|
39
|
+
- README.md
|
40
|
+
- lib/**/* (everything inside lib)
|
41
|
+
1. Apply Rubocop style fixes
|
42
|
+
|
43
|
+
#### Examples
|
44
|
+
|
45
|
+
```
|
46
|
+
rsgem new foo
|
47
|
+
```
|
48
|
+
Creates a new gem called foo.
|
49
|
+
|
50
|
+
```
|
51
|
+
rsgem new bar github_actions
|
52
|
+
```
|
53
|
+
Creates a new gem called bar that uses Github Actions as the CI provider.
|
54
|
+
|
55
|
+
#### Help
|
56
|
+
|
57
|
+
```
|
58
|
+
rsgem -h
|
59
|
+
```
|
60
|
+
Displays global help.
|
61
|
+
|
62
|
+
```
|
63
|
+
rsgem new -h
|
64
|
+
```
|
65
|
+
Displays help for the `new` command.
|
66
|
+
|
67
|
+
## Development
|
68
|
+
|
69
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
70
|
+
|
71
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
72
|
+
|
73
|
+
## Contributing
|
74
|
+
|
75
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/rootstrap/rsgem. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/rootstrap/rsgem/blob/master/CODE_OF_CONDUCT.md).
|
76
|
+
|
77
|
+
|
78
|
+
## License
|
79
|
+
|
80
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
81
|
+
|
82
|
+
## Code of Conduct
|
83
|
+
|
84
|
+
Everyone interacting in the Rootstrap project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/rootstrap/rsgem/blob/master/CODE_OF_CONDUCT.md).
|
data/bin/console
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'rsgem'
|
6
|
+
|
7
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
8
|
+
# with your gem easier. You can also use a different console, if you like.
|
9
|
+
|
10
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
+
# require "pry"
|
12
|
+
# Pry.start
|
13
|
+
|
14
|
+
require 'irb'
|
15
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
data/exe/rsgem
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSGem
|
4
|
+
module CIProviders
|
5
|
+
class Base
|
6
|
+
attr_reader :config_file_destination, :config_file_source, :name, :display_name
|
7
|
+
|
8
|
+
def initialize(config_file_source: nil, config_file_destination: nil, display_name:, name:)
|
9
|
+
@config_file_source = config_file_source
|
10
|
+
@config_file_destination = config_file_destination
|
11
|
+
@display_name = display_name
|
12
|
+
@name = name
|
13
|
+
end
|
14
|
+
|
15
|
+
def install(context)
|
16
|
+
destination = "#{context.folder_path}/#{config_file_destination}"
|
17
|
+
|
18
|
+
File.delete(destination) if File.exist?(destination)
|
19
|
+
FileUtils.mkdir_p(File.dirname(destination))
|
20
|
+
File.open(destination, 'w') do |file|
|
21
|
+
file.puts config_file_source_content
|
22
|
+
end
|
23
|
+
|
24
|
+
puts "\t#{display_name} CI configuration added"
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def config_file_source_content
|
30
|
+
File.read(config_file_source)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSGem
|
4
|
+
module CIProviders
|
5
|
+
GithubActions = Base.new(
|
6
|
+
config_file_source: "#{File.dirname(__FILE__)}/../support/github_actions.yml",
|
7
|
+
config_file_destination: '.github/workflows/ci.yml',
|
8
|
+
display_name: 'Github Actions',
|
9
|
+
name: 'github_actions'
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSGem
|
4
|
+
module CLI
|
5
|
+
module Commands
|
6
|
+
class New < Dry::CLI::Command
|
7
|
+
def self.ci_provider_options
|
8
|
+
RSGem::Constants::CI_PROVIDERS.map { |ci| "'#{ci.name}'" }.join(', ')
|
9
|
+
end
|
10
|
+
|
11
|
+
desc 'Create a new gem'
|
12
|
+
|
13
|
+
argument :gem_name, type: :string, required: true, desc: 'Name of your new gem'
|
14
|
+
argument :ci_provider, type: :string, required: false,
|
15
|
+
desc: 'CI provider to use. '\
|
16
|
+
"Available options are: #{ci_provider_options}. "\
|
17
|
+
"Default option is 'travis'"
|
18
|
+
|
19
|
+
example [
|
20
|
+
'foo # Creates a new gem called foo',
|
21
|
+
'bar github_actions # Creates a new gem called bar, with GitHub Actions as the '\
|
22
|
+
'CI provider'
|
23
|
+
]
|
24
|
+
|
25
|
+
def call(**options)
|
26
|
+
RSGem::Gem.new(gem_name: options[:gem_name], ci_provider: options[:ci_provider]).create
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSGem
|
4
|
+
class Context
|
5
|
+
attr_reader :options
|
6
|
+
|
7
|
+
def initialize(options:)
|
8
|
+
@options = options
|
9
|
+
|
10
|
+
raise MissingGemNameError unless options[:gem_name]
|
11
|
+
end
|
12
|
+
|
13
|
+
def ci_provider
|
14
|
+
@ci_provider ||= begin
|
15
|
+
return RSGem::Constants::DEFAULT_CI_PROVIDER unless (name = options[:ci_provider])
|
16
|
+
|
17
|
+
RSGem::Constants::CI_PROVIDERS.detect do |provider|
|
18
|
+
provider.name == name
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def gemfile_path
|
24
|
+
"#{folder_path}/Gemfile"
|
25
|
+
end
|
26
|
+
|
27
|
+
def gem_name
|
28
|
+
@gem_name ||= options[:gem_name]
|
29
|
+
end
|
30
|
+
|
31
|
+
def gemspec_path
|
32
|
+
"#{folder_path}/#{gem_name}.gemspec"
|
33
|
+
end
|
34
|
+
|
35
|
+
def folder_path
|
36
|
+
`pwd`.sub("\n", '/') + gem_name
|
37
|
+
end
|
38
|
+
|
39
|
+
def gitignore_path
|
40
|
+
"#{folder_path}/.gitignore"
|
41
|
+
end
|
42
|
+
|
43
|
+
def rakefile_path
|
44
|
+
"#{folder_path}/Rakefile"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSGem
|
4
|
+
module Dependencies
|
5
|
+
class Base
|
6
|
+
attr_reader :config_file_destination, :config_file_source, :mode, :name, :version
|
7
|
+
|
8
|
+
def initialize(config_file_source: nil, config_file_destination: nil, mode: :development,
|
9
|
+
name:, version: nil)
|
10
|
+
@config_file_source = config_file_source
|
11
|
+
@config_file_destination = config_file_destination
|
12
|
+
@mode = mode # Either `development' or `runtime'
|
13
|
+
@name = name
|
14
|
+
@version = version ? "'#{version}'" : nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def install(context)
|
18
|
+
if config_file_source
|
19
|
+
File.open("#{context.folder_path}/#{config_file_destination}", 'w') do |file|
|
20
|
+
file.puts config_file_source_content
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
puts "\t#{name.capitalize} installed"
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def config_file_source_content
|
30
|
+
File.read(config_file_source)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSGem
|
4
|
+
module Dependencies
|
5
|
+
# This is the latest stable version working correctly with codeclimate
|
6
|
+
# 0.18+ does not work currently https://github.com/codeclimate/test-reporter/issues/413
|
7
|
+
Simplecov = Base.new(name: 'simplecov', version: '~> 0.17.1')
|
8
|
+
end
|
9
|
+
end
|
data/lib/rsgem/gem.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSGem
|
4
|
+
class Gem
|
5
|
+
attr_reader :options
|
6
|
+
|
7
|
+
def initialize(options)
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def create
|
12
|
+
`bundle gem #{context.gem_name}`
|
13
|
+
|
14
|
+
add_code_analysis
|
15
|
+
add_dependencies
|
16
|
+
clean_gemfile
|
17
|
+
ignore_gemfile_lock
|
18
|
+
add_ci_provider
|
19
|
+
clean_gemspec
|
20
|
+
set_bundled_files
|
21
|
+
run_rubocop
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def add_ci_provider
|
27
|
+
context.ci_provider.install(context)
|
28
|
+
end
|
29
|
+
|
30
|
+
def add_code_analysis
|
31
|
+
Tasks::AddCodeAnalysis.new(context: context).add
|
32
|
+
end
|
33
|
+
|
34
|
+
def add_dependencies
|
35
|
+
[
|
36
|
+
Dependencies::Rake,
|
37
|
+
Dependencies::Reek,
|
38
|
+
Dependencies::RSpec,
|
39
|
+
Dependencies::Rubocop,
|
40
|
+
Dependencies::Simplecov
|
41
|
+
].each do |dependency|
|
42
|
+
Tasks::AddDependency.new(context: context, dependency: dependency).add
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def clean_gemfile
|
47
|
+
Tasks::CleanGemfile.new(context: context).clean
|
48
|
+
end
|
49
|
+
|
50
|
+
def clean_gemspec
|
51
|
+
Tasks::CleanGemspec.new(context: context).clean
|
52
|
+
end
|
53
|
+
|
54
|
+
def context
|
55
|
+
@context ||= Context.new(options: options)
|
56
|
+
end
|
57
|
+
|
58
|
+
def ignore_gemfile_lock
|
59
|
+
Tasks::IgnoreGemfileLock.new(context: context).ignore
|
60
|
+
end
|
61
|
+
|
62
|
+
def run_rubocop
|
63
|
+
Tasks::RunRubocop.new(context: context).run
|
64
|
+
end
|
65
|
+
|
66
|
+
def set_bundled_files
|
67
|
+
Tasks::SetBundledFiles.new(context: context).set
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
name: ci
|
2
|
+
|
3
|
+
on: push
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
build:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
strategy:
|
9
|
+
matrix:
|
10
|
+
ruby_version: [2.5.x, 2.6.x, 2.7.x]
|
11
|
+
|
12
|
+
steps:
|
13
|
+
- uses: actions/checkout@v2
|
14
|
+
- name: Set up Ruby
|
15
|
+
uses: actions/setup-ruby@v1
|
16
|
+
with:
|
17
|
+
ruby-version: ${{ matrix.ruby_version }}
|
18
|
+
- name: Download CodeClimate reporter
|
19
|
+
run: |
|
20
|
+
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
21
|
+
chmod +x ./cc-test-reporter
|
22
|
+
./cc-test-reporter before-build
|
23
|
+
env:
|
24
|
+
CC_TEST_REPORTER_ID: get_a_test_reporter_id_from_code_climate
|
25
|
+
- name: Build and test
|
26
|
+
run: |
|
27
|
+
gem install bundler:1.17.3
|
28
|
+
bundle update
|
29
|
+
bundle install --jobs 4 --retry 3
|
30
|
+
bundle exec rake code_analysis
|
31
|
+
bundle exec rspec
|
32
|
+
- name: Report to CodeClimate
|
33
|
+
run: |
|
34
|
+
./cc-test-reporter after-build --exit-code 0
|
35
|
+
env:
|
36
|
+
CC_TEST_REPORTER_ID: get_a_test_reporter_id_from_code_climate
|
@@ -0,0 +1,127 @@
|
|
1
|
+
detectors:
|
2
|
+
Attribute:
|
3
|
+
enabled: false
|
4
|
+
exclude: []
|
5
|
+
BooleanParameter:
|
6
|
+
enabled: true
|
7
|
+
exclude: []
|
8
|
+
ClassVariable:
|
9
|
+
enabled: false
|
10
|
+
exclude: []
|
11
|
+
ControlParameter:
|
12
|
+
enabled: true
|
13
|
+
exclude: []
|
14
|
+
DataClump:
|
15
|
+
enabled: true
|
16
|
+
exclude: []
|
17
|
+
max_copies: 2
|
18
|
+
min_clump_size: 2
|
19
|
+
DuplicateMethodCall:
|
20
|
+
enabled: true
|
21
|
+
exclude: []
|
22
|
+
max_calls: 1
|
23
|
+
allow_calls: []
|
24
|
+
FeatureEnvy:
|
25
|
+
enabled: true
|
26
|
+
exclude: []
|
27
|
+
InstanceVariableAssumption:
|
28
|
+
enabled: false
|
29
|
+
IrresponsibleModule:
|
30
|
+
enabled: false
|
31
|
+
exclude: []
|
32
|
+
LongParameterList:
|
33
|
+
enabled: true
|
34
|
+
exclude: []
|
35
|
+
max_params: 4
|
36
|
+
overrides:
|
37
|
+
initialize:
|
38
|
+
max_params: 5
|
39
|
+
LongYieldList:
|
40
|
+
enabled: true
|
41
|
+
exclude: []
|
42
|
+
max_params: 3
|
43
|
+
ManualDispatch:
|
44
|
+
enabled: true
|
45
|
+
exclude: []
|
46
|
+
MissingSafeMethod:
|
47
|
+
enabled: false
|
48
|
+
exclude: []
|
49
|
+
ModuleInitialize:
|
50
|
+
enabled: true
|
51
|
+
exclude: []
|
52
|
+
NestedIterators:
|
53
|
+
enabled: true
|
54
|
+
exclude: []
|
55
|
+
max_allowed_nesting: 2
|
56
|
+
ignore_iterators: []
|
57
|
+
NilCheck:
|
58
|
+
enabled: false
|
59
|
+
exclude: []
|
60
|
+
RepeatedConditional:
|
61
|
+
enabled: true
|
62
|
+
exclude: []
|
63
|
+
max_ifs: 3
|
64
|
+
SubclassedFromCoreClass:
|
65
|
+
enabled: true
|
66
|
+
exclude: []
|
67
|
+
TooManyConstants:
|
68
|
+
enabled: true
|
69
|
+
exclude: []
|
70
|
+
max_constants: 5
|
71
|
+
TooManyInstanceVariables:
|
72
|
+
enabled: true
|
73
|
+
exclude: []
|
74
|
+
max_instance_variables: 9
|
75
|
+
TooManyMethods:
|
76
|
+
enabled: true
|
77
|
+
exclude: []
|
78
|
+
max_methods: 25
|
79
|
+
TooManyStatements:
|
80
|
+
enabled: true
|
81
|
+
exclude:
|
82
|
+
- initialize
|
83
|
+
max_statements: 12
|
84
|
+
UncommunicativeMethodName:
|
85
|
+
enabled: true
|
86
|
+
exclude: []
|
87
|
+
reject:
|
88
|
+
- "/^[a-z]$/"
|
89
|
+
- "/[0-9]$/"
|
90
|
+
- "/[A-Z]/"
|
91
|
+
accept: []
|
92
|
+
UncommunicativeModuleName:
|
93
|
+
enabled: true
|
94
|
+
exclude: []
|
95
|
+
reject:
|
96
|
+
- "/^.$/"
|
97
|
+
- "/[0-9]$/"
|
98
|
+
accept:
|
99
|
+
- Inline::C
|
100
|
+
- "/V[0-9]/"
|
101
|
+
UncommunicativeParameterName:
|
102
|
+
enabled: true
|
103
|
+
exclude: []
|
104
|
+
reject:
|
105
|
+
- "/^.$/"
|
106
|
+
- "/[0-9]$/"
|
107
|
+
- "/[A-Z]/"
|
108
|
+
accept: []
|
109
|
+
UncommunicativeVariableName:
|
110
|
+
enabled: true
|
111
|
+
exclude: []
|
112
|
+
reject:
|
113
|
+
- "/^.$/"
|
114
|
+
- "/[0-9]$/"
|
115
|
+
- "/[A-Z]/"
|
116
|
+
accept:
|
117
|
+
- _
|
118
|
+
UnusedParameters:
|
119
|
+
enabled: true
|
120
|
+
exclude: []
|
121
|
+
UnusedPrivateMethod:
|
122
|
+
enabled: false
|
123
|
+
UtilityFunction:
|
124
|
+
enabled: false
|
125
|
+
|
126
|
+
exclude_paths:
|
127
|
+
- config
|
@@ -0,0 +1,81 @@
|
|
1
|
+
Style/Documentation:
|
2
|
+
Enabled: false
|
3
|
+
|
4
|
+
Layout/SpaceBeforeFirstArg:
|
5
|
+
Exclude:
|
6
|
+
|
7
|
+
Lint/AmbiguousBlockAssociation:
|
8
|
+
Exclude:
|
9
|
+
- spec/**/*
|
10
|
+
|
11
|
+
Metrics/AbcSize:
|
12
|
+
# The ABC size is a calculated magnitude, so this number can be an Integer or
|
13
|
+
# a Float.
|
14
|
+
Max: 15
|
15
|
+
|
16
|
+
Metrics/BlockLength:
|
17
|
+
CountComments: false
|
18
|
+
Max: 25
|
19
|
+
Exclude:
|
20
|
+
- '*.gemspec'
|
21
|
+
- config/**/*
|
22
|
+
- spec/**/*
|
23
|
+
ExcludedMethods:
|
24
|
+
- class_methods
|
25
|
+
|
26
|
+
Metrics/BlockNesting:
|
27
|
+
Max: 4
|
28
|
+
|
29
|
+
Metrics/ClassLength:
|
30
|
+
CountComments: false
|
31
|
+
Max: 200
|
32
|
+
|
33
|
+
# Avoid complex methods.
|
34
|
+
Metrics/CyclomaticComplexity:
|
35
|
+
Max: 7
|
36
|
+
|
37
|
+
Metrics/MethodLength:
|
38
|
+
CountComments: false
|
39
|
+
Max: 24
|
40
|
+
|
41
|
+
Metrics/ModuleLength:
|
42
|
+
CountComments: false
|
43
|
+
Max: 200
|
44
|
+
|
45
|
+
Layout/LineLength:
|
46
|
+
Max: 100
|
47
|
+
# To make it possible to copy or click on URIs in the code, we allow lines
|
48
|
+
# containing a URI to be longer than Max.
|
49
|
+
AllowURI: true
|
50
|
+
URISchemes:
|
51
|
+
- http
|
52
|
+
- https
|
53
|
+
|
54
|
+
Metrics/ParameterLists:
|
55
|
+
Max: 5
|
56
|
+
CountKeywordArgs: true
|
57
|
+
|
58
|
+
Metrics/PerceivedComplexity:
|
59
|
+
Max: 12
|
60
|
+
|
61
|
+
Style/FrozenStringLiteralComment:
|
62
|
+
Enabled: true
|
63
|
+
|
64
|
+
Style/ModuleFunction:
|
65
|
+
Enabled: false
|
66
|
+
|
67
|
+
Style/RescueModifier:
|
68
|
+
Exclude:
|
69
|
+
- spec/**/*
|
70
|
+
|
71
|
+
Naming/PredicateName:
|
72
|
+
Enabled: false
|
73
|
+
|
74
|
+
Style/HashEachMethods:
|
75
|
+
Enabled: true
|
76
|
+
|
77
|
+
Style/HashTransformKeys:
|
78
|
+
Enabled: true
|
79
|
+
|
80
|
+
Style/HashTransformValues:
|
81
|
+
Enabled: true
|
@@ -0,0 +1,28 @@
|
|
1
|
+
language: ruby
|
2
|
+
|
3
|
+
rvm:
|
4
|
+
- 2.5.0
|
5
|
+
- 2.6.0
|
6
|
+
- ruby-head
|
7
|
+
|
8
|
+
dist: bionic
|
9
|
+
|
10
|
+
jobs:
|
11
|
+
allow_failures:
|
12
|
+
- rvm: ruby-head
|
13
|
+
|
14
|
+
env:
|
15
|
+
global:
|
16
|
+
- CC_TEST_REPORTER_ID=get_a_test_reporter_id_from_code_climate
|
17
|
+
|
18
|
+
before_script:
|
19
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
20
|
+
- chmod +x ./cc-test-reporter
|
21
|
+
- ./cc-test-reporter before-build
|
22
|
+
|
23
|
+
script:
|
24
|
+
- bundle exec rake code_analysis
|
25
|
+
- bundle exec rspec
|
26
|
+
|
27
|
+
after_script:
|
28
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSGem
|
4
|
+
module Tasks
|
5
|
+
class AddCodeAnalysis
|
6
|
+
attr_reader :context
|
7
|
+
|
8
|
+
def initialize(context:)
|
9
|
+
@context = context
|
10
|
+
end
|
11
|
+
|
12
|
+
def add
|
13
|
+
File.open(context.rakefile_path, 'w') do |file|
|
14
|
+
file.puts rakefile
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def rakefile
|
21
|
+
@rakefile ||= File.read("#{File.dirname(__FILE__)}/../support/Rakefile")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSGem
|
4
|
+
module Tasks
|
5
|
+
class AddDependency
|
6
|
+
attr_reader :context, :dependency
|
7
|
+
|
8
|
+
def initialize(context:, dependency:)
|
9
|
+
@context = context
|
10
|
+
@dependency = dependency
|
11
|
+
end
|
12
|
+
|
13
|
+
def add
|
14
|
+
return if already_installed?
|
15
|
+
|
16
|
+
add_dependency
|
17
|
+
write_to_gemspec
|
18
|
+
dependency.install(context)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def add_dependency
|
24
|
+
gemspec_file.gsub!(/end\n\z/, code)
|
25
|
+
gemspec_file << "\nend"
|
26
|
+
end
|
27
|
+
|
28
|
+
def already_installed?
|
29
|
+
gemspec_file.match? Regexp.new("('|\")#{dependency.name}('|\")")
|
30
|
+
end
|
31
|
+
|
32
|
+
def code
|
33
|
+
text = [" spec.add_#{dependency.mode}_dependency '#{dependency.name}'", dependency.version]
|
34
|
+
text.compact.join(', ')
|
35
|
+
end
|
36
|
+
|
37
|
+
def gemspec_file
|
38
|
+
@gemspec_file ||= File.read(context.gemspec_path)
|
39
|
+
end
|
40
|
+
|
41
|
+
def write_to_gemspec
|
42
|
+
File.open(context.gemspec_path, 'w') do |file|
|
43
|
+
file.puts gemspec_file
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSGem
|
4
|
+
module Tasks
|
5
|
+
#
|
6
|
+
# Gemfile should only have the gemspec directive.
|
7
|
+
# An exception is when you need to develop against a gem that hasn't yet been released,
|
8
|
+
# in this case you can declare that dependency in the Gemfile:
|
9
|
+
#
|
10
|
+
# gem 'rack', github: 'rack/rack'
|
11
|
+
#
|
12
|
+
# gemspec is the place to declare dependencies.
|
13
|
+
#
|
14
|
+
# https://github.com/rootstrap/tech-guides/blob/master/open-source/developing_gems.md#gemfilegemfilelockgemspec
|
15
|
+
#
|
16
|
+
class CleanGemfile
|
17
|
+
attr_reader :context
|
18
|
+
|
19
|
+
def initialize(context:)
|
20
|
+
@context = context
|
21
|
+
end
|
22
|
+
|
23
|
+
def clean
|
24
|
+
gemfile.gsub!(/gem .+\n/, '') # Remove all gem definitions
|
25
|
+
gemfile.sub!(/\n\z/, '') # Remove last new line character
|
26
|
+
write_to_gemfile
|
27
|
+
puts "\tGemfile cleaned"
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def gemfile
|
33
|
+
@gemfile ||= File.read(context.gemfile_path)
|
34
|
+
end
|
35
|
+
|
36
|
+
def write_to_gemfile
|
37
|
+
File.open(context.gemfile_path, 'w') do |file|
|
38
|
+
file.puts gemfile
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSGem
|
4
|
+
module Tasks
|
5
|
+
class CleanGemspec
|
6
|
+
attr_reader :context
|
7
|
+
|
8
|
+
KEYS_TO_EMPTY = %w[summary description homepage].freeze
|
9
|
+
|
10
|
+
def initialize(context:)
|
11
|
+
@context = context
|
12
|
+
end
|
13
|
+
|
14
|
+
def clean
|
15
|
+
comment_metadata!
|
16
|
+
empty_keys!
|
17
|
+
write
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def gemspec
|
23
|
+
@gemspec ||= File.read(context.gemspec_path)
|
24
|
+
end
|
25
|
+
|
26
|
+
def empty_keys!
|
27
|
+
KEYS_TO_EMPTY.each do |key|
|
28
|
+
gemspec.gsub!(/(spec.#{key}.*)=(.*)\n/, "\\1= ''\n")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def comment_metadata!
|
33
|
+
gemspec.gsub!(/spec.metadata/, '# spec.metadata')
|
34
|
+
end
|
35
|
+
|
36
|
+
def write
|
37
|
+
File.open(context.gemspec_path, 'w') do |file|
|
38
|
+
file.puts gemspec
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSGem
|
4
|
+
module Tasks
|
5
|
+
#
|
6
|
+
# Gemfile.lock should be gitignored when developing gems
|
7
|
+
#
|
8
|
+
# https://github.com/rootstrap/tech-guides/blob/master/open-source/developing_gems.md#gemfilegemfilelockgemspec
|
9
|
+
#
|
10
|
+
class IgnoreGemfileLock
|
11
|
+
attr_reader :context
|
12
|
+
|
13
|
+
def initialize(context:)
|
14
|
+
@context = context
|
15
|
+
end
|
16
|
+
|
17
|
+
def ignore
|
18
|
+
gitignore << "\nGemfile.lock\n"
|
19
|
+
write_to_gitignore
|
20
|
+
puts "\tGemfile.lock added to .gitignore"
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def gitignore
|
26
|
+
@gitignore ||= File.read(context.gitignore_path)
|
27
|
+
end
|
28
|
+
|
29
|
+
def write_to_gitignore
|
30
|
+
File.open(context.gitignore_path, 'w') do |file|
|
31
|
+
file.puts gitignore
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSGem
|
4
|
+
module Tasks
|
5
|
+
class RunRubocop
|
6
|
+
attr_reader :context, :output
|
7
|
+
|
8
|
+
def initialize(context:)
|
9
|
+
@context = context
|
10
|
+
end
|
11
|
+
|
12
|
+
def run
|
13
|
+
puts "\tRubocop:"
|
14
|
+
@output = `cd #{context.folder_path} && bundle exec rubocop -a`
|
15
|
+
puts "\t\t#{last_line}"
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def last_line
|
21
|
+
@output.split("\n").last
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSGem
|
4
|
+
module Tasks
|
5
|
+
#
|
6
|
+
# When the gem is bundled into final users' projects, it only needs to contain the production
|
7
|
+
# code. Meaning that specs, docs, configuration files should not be present.
|
8
|
+
# This task updates the default `spec.files` configuration in the gemspec to just contain the
|
9
|
+
# files:
|
10
|
+
# - LICENSE.txt
|
11
|
+
# - README.md
|
12
|
+
# - lib/**/* (everything inside lib)
|
13
|
+
#
|
14
|
+
class SetBundledFiles
|
15
|
+
attr_reader :context
|
16
|
+
|
17
|
+
def initialize(context:)
|
18
|
+
@context = context
|
19
|
+
end
|
20
|
+
|
21
|
+
def set
|
22
|
+
# Explaining the regular expression:
|
23
|
+
# [spec.files][one or more white spaces][=][one or more white spaces][anything until "do"]
|
24
|
+
# [new line][anything until new line]
|
25
|
+
# [one or more white spaces][end]
|
26
|
+
gemspec.gsub!(
|
27
|
+
/spec.files\s+=\s+.+do\n.+\n\s+end/,
|
28
|
+
"spec.files = Dir['LICENSE.txt', 'README.md', 'lib/**/*']"
|
29
|
+
)
|
30
|
+
write
|
31
|
+
|
32
|
+
puts "\tGemspec files config updated"
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def gemspec
|
38
|
+
@gemspec ||= File.read(context.gemspec_path)
|
39
|
+
end
|
40
|
+
|
41
|
+
def write
|
42
|
+
File.open(context.gemspec_path, 'w') do |file|
|
43
|
+
file.puts gemspec
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/rsgem.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rsgem/version'
|
4
|
+
require 'rsgem/gem'
|
5
|
+
require 'rsgem/errors/missing_gem_name_error'
|
6
|
+
require 'rsgem/ci_providers/base'
|
7
|
+
require 'rsgem/ci_providers/github_actions'
|
8
|
+
require 'rsgem/ci_providers/travis'
|
9
|
+
require 'rsgem/tasks/add_code_analysis'
|
10
|
+
require 'rsgem/tasks/add_dependency'
|
11
|
+
require 'rsgem/tasks/clean_gemfile'
|
12
|
+
require 'rsgem/tasks/ignore_gemfile_lock'
|
13
|
+
require 'rsgem/tasks/clean_gemspec'
|
14
|
+
require 'rsgem/tasks/run_rubocop'
|
15
|
+
require 'rsgem/tasks/set_bundled_files'
|
16
|
+
require 'rsgem/dependencies/base'
|
17
|
+
require 'rsgem/dependencies/rake'
|
18
|
+
require 'rsgem/dependencies/reek'
|
19
|
+
require 'rsgem/dependencies/rspec'
|
20
|
+
require 'rsgem/dependencies/rubocop'
|
21
|
+
require 'rsgem/dependencies/simplecov'
|
22
|
+
require 'rsgem/constants'
|
23
|
+
require 'rsgem/context'
|
24
|
+
require 'dry/cli'
|
25
|
+
require 'rsgem/cli/commands/new'
|
26
|
+
require 'rsgem/cli/commands/version'
|
27
|
+
require 'rsgem/cli/commands'
|
28
|
+
|
29
|
+
module RSGem
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rsgem
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Juan Manuel Ramallo
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-04-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: dry-cli
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.6.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.6.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.13.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.13.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 13.0.1
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 13.0.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: reek
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 5.6.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 5.6.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 3.9.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.9.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.80.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.80.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simplecov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.17.1
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.17.1
|
111
|
+
description:
|
112
|
+
email:
|
113
|
+
- ramallojuanm@gmail.com
|
114
|
+
executables:
|
115
|
+
- rsgem
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- LICENSE.txt
|
120
|
+
- README.md
|
121
|
+
- bin/console
|
122
|
+
- bin/setup
|
123
|
+
- exe/rsgem
|
124
|
+
- lib/rsgem.rb
|
125
|
+
- lib/rsgem/ci_providers/base.rb
|
126
|
+
- lib/rsgem/ci_providers/github_actions.rb
|
127
|
+
- lib/rsgem/ci_providers/travis.rb
|
128
|
+
- lib/rsgem/cli/commands.rb
|
129
|
+
- lib/rsgem/cli/commands/new.rb
|
130
|
+
- lib/rsgem/cli/commands/version.rb
|
131
|
+
- lib/rsgem/constants.rb
|
132
|
+
- lib/rsgem/context.rb
|
133
|
+
- lib/rsgem/dependencies/base.rb
|
134
|
+
- lib/rsgem/dependencies/rake.rb
|
135
|
+
- lib/rsgem/dependencies/reek.rb
|
136
|
+
- lib/rsgem/dependencies/rspec.rb
|
137
|
+
- lib/rsgem/dependencies/rubocop.rb
|
138
|
+
- lib/rsgem/dependencies/simplecov.rb
|
139
|
+
- lib/rsgem/errors/missing_gem_name_error.rb
|
140
|
+
- lib/rsgem/gem.rb
|
141
|
+
- lib/rsgem/support/Rakefile
|
142
|
+
- lib/rsgem/support/github_actions.yml
|
143
|
+
- lib/rsgem/support/reek.yml
|
144
|
+
- lib/rsgem/support/rubocop.yml
|
145
|
+
- lib/rsgem/support/travis.yml
|
146
|
+
- lib/rsgem/tasks/add_code_analysis.rb
|
147
|
+
- lib/rsgem/tasks/add_dependency.rb
|
148
|
+
- lib/rsgem/tasks/clean_gemfile.rb
|
149
|
+
- lib/rsgem/tasks/clean_gemspec.rb
|
150
|
+
- lib/rsgem/tasks/ignore_gemfile_lock.rb
|
151
|
+
- lib/rsgem/tasks/run_rubocop.rb
|
152
|
+
- lib/rsgem/tasks/set_bundled_files.rb
|
153
|
+
- lib/rsgem/version.rb
|
154
|
+
homepage: https://github.com/rootstrap/rsgem
|
155
|
+
licenses:
|
156
|
+
- MIT
|
157
|
+
metadata:
|
158
|
+
homepage_uri: https://github.com/rootstrap/rsgem
|
159
|
+
source_code_uri: https://github.com/rootstrap/rsgem
|
160
|
+
post_install_message:
|
161
|
+
rdoc_options: []
|
162
|
+
require_paths:
|
163
|
+
- lib
|
164
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - ">="
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: 2.3.0
|
169
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
requirements: []
|
175
|
+
rubygems_version: 3.1.2
|
176
|
+
signing_key:
|
177
|
+
specification_version: 4
|
178
|
+
summary: Generating gems the Rootstrap way
|
179
|
+
test_files: []
|