strong_versions 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 781e63371b2ecd0953ea88bcf84ce8673fe1df2a
4
- data.tar.gz: 39099e9c2c5f84bcb67150a7a2b0e6f84c613fb9
2
+ SHA256:
3
+ metadata.gz: a9da34b3e4b80be8af4d27254850e051518efbf3073be7e13ab612e9ba9e8c75
4
+ data.tar.gz: 42a655b38542c8b644b593cff388b91ade0229096165d0eba359eeef1a11cf22
5
5
  SHA512:
6
- metadata.gz: 81a2471b4847714f914b76368b4bce0a0f5f9f2859d999838158ccec69762e293e3e5443fabb5a633874002de4fc77e6946c2388a1ce7403499cd72da19fe2ee
7
- data.tar.gz: ea2d11b94e7a6c4932bf3a2fd7bc3aa383756e5870ba1b0df6da1190ad374c56968d16f6bb99a7ced78f457e1934a6ceafea25ea6c0d51d64c6d58f7cdbe88a4
6
+ metadata.gz: 9002687db125d01a87f404cd27d6f855243c92b87813a44e44453804694735ba1292f5eb751751249ab8478b4efe845809f4739202f1069937830f73996dc4c7
7
+ data.tar.gz: 616c683f92e0b1a0f8fcd8ac8b24a42bbd5dad96b2d1dbff5d7ea6c2555d78542a9079f4c17aa301a54a29fed5a1d582d0b3bcbed656da46023fb9190bdea428
data/.gitignore CHANGED
@@ -1,8 +1,8 @@
1
+ Gemfile.lock
1
2
  /.bundle/
2
3
  /.yardoc
3
4
  /_yardoc/
4
5
  /coverage/
5
- /doc/
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
@@ -12,3 +12,5 @@
12
12
 
13
13
  *.swp
14
14
  *.swo
15
+
16
+ .byebug_history
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.5.3
data/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ Copyright 2018 Robert Farrell
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,13 +1,34 @@
1
- # Strong Versions
1
+ # StrongVersions
2
2
 
3
- Ensure gems in your `Gemfile` are appropriately versioned.
3
+ ```
4
+ The right thing to guide us
5
+ Is right here inside us
6
+ --Nickelback
7
+ ```
8
+
9
+ # Overview
10
+
11
+ _StrongVersions_ is a _Bundler_ plugin that enforces a strict policy on your `Gemfile` requirements:
12
+
13
+ * The pessimistic `~>` operator must be used for all gem requirement definitions.
14
+ * If the gem version is greater than 1, the requirement format must be `major.minor`, e.g. `'~> 2.5`'
15
+ * If the gem version is less than 1, the requirement format must be `major.minor.patch`, e.g. `'~> 0.8.9'`
16
+ * An upper bound can be specified as long as a valid pessimistic version is also specified, e.g. `'~> 8.4', '<= 8.4.7'`
17
+ * All gems with a `path` source are ignored, e.g. `path: '/path/to/gem'`
18
+ * All gems specified in the [ignore list](#ignore) are ignored.
19
+
20
+ Any gems that do not satisfy these rules will cause `bundle install` to fail and give output detailing which gems did not meet the standard and why.
21
+
22
+ The benefit of applying this standard is that it [should](https://semver.org/) always be relatively safe to run `bundle update` to upgrade to the latest compatible versions of all dependencies.
23
+
24
+ ![StrongVersions](doc/images/strong-versions-example.png)
4
25
 
5
26
  ## Installation
6
27
 
7
- Add the gem to your `Gemile`
28
+ Add the plugin to your `Gemfile`
8
29
 
9
30
  ```ruby
10
- gem 'strong_versions'
31
+ plugin 'strong_versions', '~> 0.2.0'
11
32
  ```
12
33
 
13
34
  And rebuild your bundle:
@@ -15,3 +36,50 @@ And rebuild your bundle:
15
36
  ```bash
16
37
  $ bundle install
17
38
  ```
39
+
40
+ ## Usage
41
+
42
+ Once the plugin is installed it will automatically hook into _Bundler_ and raise an exception every time you call `bundle install` if there are any errors.
43
+
44
+ ### Exclusions
45
+
46
+ <a name="ignore"></a>You can exclude any gems from this list by adding them to the `ignore` section of `.strong_versions.yml` in your project root, e.g.:
47
+
48
+ ```yaml
49
+ # .strong_versions.yml
50
+ ignore:
51
+ - rails
52
+ ```
53
+
54
+ ### Raise or Warn
55
+
56
+ _StrongVersions_ can be configured to raise an exception (default) or output a warning when the standard is not met.
57
+
58
+ Warning instead of raising is especially useful when you want to add new dependencies to your `Gemfile` as you can initially set them with loose requirements and then update the `Gemfile` with more precise values based on your new `Gemfile.lock`.
59
+
60
+ Set `on_failure` in `.strong_versions.yml` to either `raise` or `warn`:
61
+
62
+ ```yaml
63
+ # .strong_versions.yml
64
+ on_failure: warn
65
+ ```
66
+
67
+ ## Contributing
68
+
69
+ Fork and create a pull request.
70
+
71
+ Run tests with _RSpec_:
72
+
73
+ ```
74
+ $ bin/rspec
75
+ ```
76
+
77
+ Check code with _Rubocop_:
78
+
79
+ ```
80
+ $ bin/rubocop
81
+ ```
82
+
83
+ ## License
84
+
85
+ [MIT License](LICENSE)
data/bin/rake ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rake' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("rake", "rake")
data/bin/rspec ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rspec' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("rspec-core", "rspec")
data/bin/rubocop ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rubocop' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("rubocop", "rubocop")
@@ -0,0 +1,6 @@
1
+ en:
2
+ errors:
3
+ operator: "Expected pessimistic operator (~>), found:"
4
+ version: "Expected major and minor version (e.g. 1.2), found:"
5
+ unknown_on_failure: "StrongVersions: Unknown value for `on_failure` in .strong_versions.yml: '%{on_failure}'. Expected one of %{expected}"
6
+ version_not_specified: "[not specified]"
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StrongVersions
4
+ class Config
5
+ def initialize(path)
6
+ @config = (YAML.load_file(path) if File.exist?(path))
7
+
8
+ validate_on_failure
9
+ end
10
+
11
+ def exceptions
12
+ return [] if @config.nil?
13
+
14
+ @config.fetch('ignore', [])
15
+ end
16
+
17
+ def on_failure
18
+ return 'raise' if @config.nil?
19
+
20
+ @config.fetch('on_failure', 'raise')
21
+ end
22
+
23
+ private
24
+
25
+ def validate_on_failure
26
+ expected = %w[warn raise]
27
+ strategy = on_failure
28
+ return strategy if expected.include?(strategy)
29
+
30
+ raise Bundler::BundlerError,
31
+ I18n.t(
32
+ 'errors.unknown_on_failure', on_failure: strategy,
33
+ expected: expected
34
+ )
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StrongVersions
4
+ class Dependencies
5
+ def initialize(dependencies)
6
+ @dependencies = dependencies.map do |raw_dependency|
7
+ Dependency.new(raw_dependency)
8
+ end
9
+ @invalid_gems = []
10
+ end
11
+
12
+ def validate!(options = {})
13
+ return if validate(options)
14
+
15
+ on_failure = options.fetch(:on_failure, 'raise')
16
+ case on_failure
17
+ when 'raise'
18
+ raise_failure
19
+ when 'warn'
20
+ warn_failure
21
+ end
22
+ end
23
+
24
+ def validate(options = {})
25
+ @dependencies.each do |dependency|
26
+ next if options.fetch(:except).include?(dependency.name)
27
+ next if dependency.valid?
28
+
29
+ @invalid_gems.push(dependency) unless dependency.valid?
30
+ end
31
+ @invalid_gems.empty?
32
+ end
33
+
34
+ private
35
+
36
+ def raise_failure
37
+ warn_failure
38
+ # We must raise an error that Bundler recognises otherwise it prints a
39
+ # huge amount of output. `Bundler::GemspecError` just outputs the error
40
+ # message we set in red.
41
+ raise Bundler::GemspecError, 'StrongVersions failure'
42
+ end
43
+
44
+ def warn_failure
45
+ STDERR.puts("\n" + 'StrongVersions expectations not met:'.red + "\n\n")
46
+ @invalid_gems.each do |gem|
47
+ STDERR.puts(format_errors(gem.name, gem.errors))
48
+ end
49
+ STDERR.puts("\n")
50
+ end
51
+
52
+ def raise_unknown(on_failure)
53
+ raise Bundler::Error,
54
+ I18n.t('errors.unknown_on_failure', on_failure: on_failure)
55
+ end
56
+
57
+ def format_errors(name, errors)
58
+ message = "#{name}: ".green
59
+ message + errors.map do |error|
60
+ type = I18n.t("errors.#{error[:type]}").red
61
+ value = error[:value].light_red
62
+ '"'.red + "#{type} #{value}" + '"'.red
63
+ end.join(', '.red)
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StrongVersions
4
+ class Dependency
5
+ attr_reader :name, :errors
6
+
7
+ def initialize(dependency)
8
+ @dependency = dependency
9
+ @name = dependency.name
10
+ @errors = []
11
+
12
+ versions.each do |operator, version|
13
+ validate_version(operator, version)
14
+ end
15
+ end
16
+
17
+ def valid?
18
+ @errors.empty?
19
+ end
20
+
21
+ private
22
+
23
+ def versions
24
+ @dependency.requirements_list.map do |requirement|
25
+ parse_version(requirement)
26
+ end
27
+ end
28
+
29
+ def parse_version(requirement)
30
+ operator, version_obj = Gem::Requirement.parse(requirement)
31
+ if version_obj.respond_to?(:version)
32
+ # Ruby >= 2.3.0: `version_obj` is a `Gem::Version`
33
+ [operator, version_obj.version]
34
+ else
35
+ # Ruby < 2.3.0: `version_obj` is a `String`
36
+ [operator, version_obj]
37
+ end
38
+ end
39
+
40
+ def validate_version(operator, version)
41
+ return if path_source?
42
+ return if any_valid?
43
+
44
+ check_pessimistic(operator)
45
+ check_valid_version(version)
46
+ end
47
+
48
+ def check_pessimistic(operator)
49
+ return if pessimistic?(operator)
50
+
51
+ @errors << { type: :operator, value: operator }
52
+ end
53
+
54
+ def check_valid_version(version)
55
+ return if valid_version?(version)
56
+
57
+ version = I18n.t('version_not_specified') if version == '0'
58
+ @errors << { type: :version, value: version }
59
+ end
60
+
61
+ def pessimistic?(operator)
62
+ operator == '~>'
63
+ end
64
+
65
+ def valid_version?(version)
66
+ return true if version =~ /^[1-9][0-9]*\.\d+$/ # major.minor, e.g. "2.5"
67
+ return true if version =~ /^0\.\d+\.\d+$/ # 0.minor.patch, e.g. "0.1.8"
68
+
69
+ false
70
+ end
71
+
72
+ def any_valid?
73
+ versions.any? do |operator, version|
74
+ pessimistic?(operator) && valid_version?(version)
75
+ end
76
+ end
77
+
78
+ def path_source?
79
+ @dependency.source.is_a?(Bundler::Source::Path)
80
+ end
81
+
82
+ def pessimistic_with_upper_bound?(operator)
83
+ any_pessimistic? && %w[< <=].include?(operator)
84
+ end
85
+
86
+ def any_pessimistic?
87
+ versions.any? do |_version, operator|
88
+ %w[< <= ~>].include?(operator)
89
+ end
90
+ end
91
+ end
92
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module StrongVersions
4
- VERSION = '0.1.1'
4
+ VERSION = '0.2.0'
5
5
  end
@@ -1,27 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'strong_versions/version'
3
+ require 'colorize'
4
+ require 'i18n'
5
+ require 'yaml'
4
6
 
5
- module StrongVersions
6
- module_function
7
+ I18n.config.available_locales = :en
8
+ I18n.load_path += Dir[
9
+ File.join(File.expand_path('..', __dir__), 'config', 'locales', '**', '*.yml')
10
+ ]
7
11
 
8
- def post_install_hooks
9
- puts 'post install'
10
- end
12
+ require 'strong_versions/version'
11
13
 
12
- def post_build_hooks
13
- puts 'post build'
14
- end
14
+ require 'strong_versions/dependency'
15
+ require 'strong_versions/dependencies'
16
+ require 'strong_versions/config'
15
17
 
16
- def pre_install_hooks
17
- puts 'pre-install'
18
- end
18
+ module StrongVersions
19
19
  end
20
-
21
- puts 'hmmm'
22
- puts 'hmmm'
23
- puts 'hmmm'
24
- puts 'hmmm'
25
- puts 'hmmm'
26
- puts 'hmmm'
27
- puts 'hmmm'
data/plugins.rb CHANGED
@@ -1,11 +1,13 @@
1
- require 'byebug'; byebug
2
- class MyCommand < Bundler::Plugin::API
3
- command 'my_command'
4
- def exec(command, args)
5
- require 'byebug'; byebug
6
- end
7
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'strong_versions'
4
+
5
+ Bundler::Plugin.add_hook('before-install-all') do |dependencies|
6
+ config_path = Bundler.root.join('.strong_versions.yml')
7
+ config = StrongVersions::Config.new(config_path)
8
8
 
9
- Bundler::Plugin.add_hook('before-install-all') do |_d|
10
- require 'byebug'; byebug
9
+ StrongVersions::Dependencies.new(dependencies).validate!(
10
+ except: config.exceptions,
11
+ on_failure: config.on_failure
12
+ )
11
13
  end
@@ -19,14 +19,18 @@ Gem::Specification.new do |spec|
19
19
  f.match(%r{^(test|spec|features)/})
20
20
  end
21
21
  end
22
- p spec.files
23
22
 
24
23
  spec.bindir = 'bin'
25
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
24
+ spec.executables = []
26
25
  spec.require_paths = ['lib']
27
26
 
27
+ spec.add_dependency 'colorize', '~> 0.8'
28
+ spec.add_dependency 'i18n', '>= 0.5.0'
29
+
28
30
  spec.add_development_dependency 'bundler', '~> 1.16'
31
+ spec.add_development_dependency 'byebug', '~> 10.0'
29
32
  spec.add_development_dependency 'rake', '~> 10.0'
30
33
  spec.add_development_dependency 'rspec', '~> 3.0'
31
- spec.add_development_dependency 'rubocop', '0.59.2'
34
+ spec.add_development_dependency 'rspec-its', '~> 1.2'
35
+ spec.add_development_dependency 'rubocop', '~> 0.60.0'
32
36
  end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: strong_versions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Farrell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-28 00:00:00.000000000 Z
11
+ date: 2018-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colorize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.8'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: i18n
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.5.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.5.0
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: bundler
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +52,20 @@ dependencies:
24
52
  - - "~>"
25
53
  - !ruby/object:Gem::Version
26
54
  version: '1.16'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
27
69
  - !ruby/object:Gem::Dependency
28
70
  name: rake
29
71
  requirement: !ruby/object:Gem::Requirement
@@ -52,40 +94,61 @@ dependencies:
52
94
  - - "~>"
53
95
  - !ruby/object:Gem::Version
54
96
  version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-its
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.2'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.2'
55
111
  - !ruby/object:Gem::Dependency
56
112
  name: rubocop
57
113
  requirement: !ruby/object:Gem::Requirement
58
114
  requirements:
59
- - - '='
115
+ - - "~>"
60
116
  - !ruby/object:Gem::Version
61
- version: 0.59.2
117
+ version: 0.60.0
62
118
  type: :development
63
119
  prerelease: false
64
120
  version_requirements: !ruby/object:Gem::Requirement
65
121
  requirements:
66
- - - '='
122
+ - - "~>"
67
123
  - !ruby/object:Gem::Version
68
- version: 0.59.2
124
+ version: 0.60.0
69
125
  description: Ensure your gems are appropriately versioned
70
126
  email:
71
127
  - robertanthonyfarrell@gmail.com
72
- executables:
73
- - console
74
- - setup
128
+ executables: []
75
129
  extensions: []
76
130
  extra_rdoc_files: []
77
131
  files:
78
132
  - ".gitignore"
79
133
  - ".rspec"
80
134
  - ".rubocop.yml"
135
+ - ".ruby-version"
81
136
  - ".travis.yml"
82
137
  - Gemfile
83
- - Gemfile.lock
138
+ - LICENSE
84
139
  - README.md
85
140
  - Rakefile
86
141
  - bin/console
142
+ - bin/rake
143
+ - bin/rspec
144
+ - bin/rubocop
87
145
  - bin/setup
146
+ - config/locales/en.yml
147
+ - doc/images/strong-versions-example.png
88
148
  - lib/strong_versions.rb
149
+ - lib/strong_versions/config.rb
150
+ - lib/strong_versions/dependencies.rb
151
+ - lib/strong_versions/dependency.rb
89
152
  - lib/strong_versions/version.rb
90
153
  - plugins.rb
91
154
  - strong_versions.gemspec
@@ -108,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
171
  version: '0'
109
172
  requirements: []
110
173
  rubyforge_project:
111
- rubygems_version: 2.5.2.2
174
+ rubygems_version: 2.7.6
112
175
  signing_key:
113
176
  specification_version: 4
114
177
  summary: Enforce strict versioning on your Gemfile
data/Gemfile.lock DELETED
@@ -1,53 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- strong_versions (0.1.0)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- ast (2.4.0)
10
- diff-lcs (1.3)
11
- jaro_winkler (1.5.1)
12
- parallel (1.12.1)
13
- parser (2.5.1.2)
14
- ast (~> 2.4.0)
15
- powerpack (0.1.2)
16
- rainbow (3.0.0)
17
- rake (10.5.0)
18
- rspec (3.8.0)
19
- rspec-core (~> 3.8.0)
20
- rspec-expectations (~> 3.8.0)
21
- rspec-mocks (~> 3.8.0)
22
- rspec-core (3.8.0)
23
- rspec-support (~> 3.8.0)
24
- rspec-expectations (3.8.2)
25
- diff-lcs (>= 1.2.0, < 2.0)
26
- rspec-support (~> 3.8.0)
27
- rspec-mocks (3.8.0)
28
- diff-lcs (>= 1.2.0, < 2.0)
29
- rspec-support (~> 3.8.0)
30
- rspec-support (3.8.0)
31
- rubocop (0.59.2)
32
- jaro_winkler (~> 1.5.1)
33
- parallel (~> 1.10)
34
- parser (>= 2.5, != 2.5.1.1)
35
- powerpack (~> 0.1)
36
- rainbow (>= 2.2.2, < 4.0)
37
- ruby-progressbar (~> 1.7)
38
- unicode-display_width (~> 1.0, >= 1.0.1)
39
- ruby-progressbar (1.10.0)
40
- unicode-display_width (1.4.0)
41
-
42
- PLATFORMS
43
- ruby
44
-
45
- DEPENDENCIES
46
- bundler (~> 1.16)
47
- rake (~> 10.0)
48
- rspec (~> 3.0)
49
- rubocop (= 0.59.2)
50
- strong_versions!
51
-
52
- BUNDLED WITH
53
- 1.16.4