ruby_dep 1.1.0 → 1.2.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 +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +3 -1
- data/README.md +26 -9
- data/lib/ruby_dep/travis.rb +5 -1
- data/lib/ruby_dep/travis/ruby_version.rb +57 -0
- data/lib/ruby_dep/version.rb +1 -1
- data/lib/ruby_dep/warning.rb +16 -8
- metadata +7 -12
- data/Gemfile +0 -16
- data/Guardfile +0 -77
- data/Rakefile +0 -8
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/ruby_dep.gemspec +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 139539b2a5db649646809eb696ded2cdc83f22de
|
4
|
+
data.tar.gz: 2b0ba1b76e1c066696672d43faff2d77bf841e7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7e5f69acb5b96a247fcd7dcab013a54a2141b31241e3e6cbbc047d519189ae7bab7d50a0d1ebdd1c5fa32ccb90753d8ffbdaeae48aefe172ba4fd3504b61dd9
|
7
|
+
data.tar.gz: fc40843fe82fd96af98ea6762134a8c8d31f89b6ab0732bc8f60cb4b2a328fb14ec3176c23221f528e1e4fa1e00280cf46ca60d2e95f591dae24daa25e5834d5
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -4,24 +4,31 @@
|
|
4
4
|
|
5
5
|
## The problem
|
6
6
|
|
7
|
-
Your gem doesn't support all possible Ruby versions.
|
7
|
+
Your gem shouldn't (and likely doesn't) support all possible Ruby versions.
|
8
8
|
|
9
|
-
And not all Ruby versions are secure to even
|
9
|
+
(And not all Ruby versions are secure to even be installed).
|
10
10
|
|
11
|
-
So, you need to tell users which Ruby versions you support in:
|
11
|
+
You need a way to protect users who don't know about this. So, you need to tell users which Ruby versions you support in:
|
12
12
|
|
13
13
|
1. Your gemspec
|
14
14
|
2. Your README
|
15
15
|
3. Your .travis.yml file
|
16
16
|
4. Any issues you get about which version of Ruby is supported or not
|
17
17
|
|
18
|
-
But maintaning that information in 4 different places breaks the principle of
|
18
|
+
But, maintaning that information in 4 different places breaks the principle of
|
19
19
|
single responsibility.
|
20
20
|
|
21
|
+
And users often don't really "read" a README if they can avoid it.
|
22
|
+
|
21
23
|
|
22
24
|
## The solution
|
23
25
|
|
24
|
-
This
|
26
|
+
This gem helps you and your project users avoid Ruby version problems by:
|
27
|
+
|
28
|
+
- warning users if their Ruby is seriously outdated or contains serious vulnerabilities
|
29
|
+
- helps you manage which Ruby versions you actually support (and prevents installing other versions)
|
30
|
+
|
31
|
+
How? This gems detects which Ruby version users are using and which ones your project supports.
|
25
32
|
|
26
33
|
It assumes you are using Travis and the versions listed in your `.travis.yml` are supported.
|
27
34
|
|
@@ -44,18 +51,17 @@ Also, you it can warn users if they are using an outdated version of Ruby.
|
|
44
51
|
abort "Install 'ruby_dep' gem before building this gem"
|
45
52
|
end
|
46
53
|
|
47
|
-
s.add_development_dependency 'ruby_dep', '~> 1.
|
54
|
+
s.add_development_dependency 'ruby_dep', '~> 1.1'
|
48
55
|
```
|
49
56
|
|
50
57
|
### In your `README.md`:
|
51
58
|
|
52
59
|
Replace your mentions of "supported Ruby versions" to point to the Travis build.
|
53
60
|
|
54
|
-
|
61
|
+
If users see their Ruby version "green" on Travis, it suggests it's supported, right?
|
55
62
|
|
56
|
-
|
63
|
+
(Or, you can point to the rubygems.org site where the required Ruby version is listed).
|
57
64
|
|
58
|
-
If it fails, it isn't, right?
|
59
65
|
|
60
66
|
### In your library:
|
61
67
|
|
@@ -70,6 +76,17 @@ To disable warnings, just set the following environment variable:
|
|
70
76
|
|
71
77
|
`RUBY_DEP_GEM_SILENCE_WARNINGS=1`
|
72
78
|
|
79
|
+
You can follow these rules of thumb:
|
80
|
+
|
81
|
+
1. Avoid changing major version numbers, even if you're dropping a major version of Ruby (e.g. 1.9.2)
|
82
|
+
2. If you want to support a current version, add it to your `.travis.yml` (e.g. Ruby 2.3.1)
|
83
|
+
3. To support an earlier version of Ruby, add it to your `.travis.yml` and release a new gem version.
|
84
|
+
4. If you want to support a range of Rubies, include the whole range without gaps in minor version numbers (e.g. 2.0.0, 2.1.0, 2.2.0, 2.3.0)
|
85
|
+
5. If you just want to test a Ruby version (but not actually support it), put it into the "allow failures" part of your Travis build matrix.
|
86
|
+
6. If you want to drop support for a Ruby, remove it from the `.travis.yml` and just bump your gem's minor number.
|
87
|
+
|
88
|
+
When in doubt, open an issue and just ask.
|
89
|
+
|
73
90
|
|
74
91
|
## Roadmap
|
75
92
|
|
data/lib/ruby_dep/travis.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
|
3
|
+
require 'ruby_dep/travis/ruby_version'
|
4
|
+
|
3
5
|
module RubyDep
|
4
6
|
class Travis
|
5
7
|
def version_constraint(filename = '.travis.yml')
|
@@ -10,13 +12,15 @@ module RubyDep
|
|
10
12
|
lowest = lowest_supported(selected)
|
11
13
|
|
12
14
|
["~> #{lowest[0..1].join('.')}", ">= #{lowest.join('.')}"]
|
15
|
+
rescue RubyVersion::Error => ex
|
16
|
+
abort("RubyDep Error: #{ex.message}")
|
13
17
|
end
|
14
18
|
|
15
19
|
private
|
16
20
|
|
17
21
|
def versions_for_latest_major(versions)
|
18
22
|
by_major = versions.map do |x|
|
19
|
-
|
23
|
+
RubyVersion.new(x).segments[0..2]
|
20
24
|
end.group_by(&:first)
|
21
25
|
|
22
26
|
last_supported_major = by_major.keys.sort.last
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module RubyDep
|
2
|
+
class Travis
|
3
|
+
class RubyVersion
|
4
|
+
REGEXP = /^
|
5
|
+
(?:
|
6
|
+
(?<engine>ruby|jruby)
|
7
|
+
-)?
|
8
|
+
(?<version>\d+\.\d+\.\d+(?:\.\d+)?)
|
9
|
+
(?:-p\d+)?
|
10
|
+
(?:-clang)?
|
11
|
+
$/x
|
12
|
+
|
13
|
+
class Error < RuntimeError
|
14
|
+
class Unrecognized < Error
|
15
|
+
def initialize(invalid_version_string)
|
16
|
+
@invalid_version_string = invalid_version_string
|
17
|
+
end
|
18
|
+
|
19
|
+
def message
|
20
|
+
"Unrecognized Ruby version: #{@invalid_version_string.inspect}"
|
21
|
+
end
|
22
|
+
|
23
|
+
class JRubyVersion < Unrecognized
|
24
|
+
def message
|
25
|
+
"Unrecognized JRuby version: #{@invalid_version_string.inspect}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def initialize(travis_version_string)
|
32
|
+
ruby_version_string = version_for(travis_version_string)
|
33
|
+
@version = Gem::Version.new(ruby_version_string)
|
34
|
+
end
|
35
|
+
|
36
|
+
def segments
|
37
|
+
@version.segments
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def version_for(travis_version_string)
|
43
|
+
match = REGEXP.match(travis_version_string)
|
44
|
+
raise Error::Unrecognized, travis_version_string unless match
|
45
|
+
return match[:version] unless match[:engine]
|
46
|
+
return jruby_version(match[:version]) if match[:engine] == 'jruby'
|
47
|
+
match[:version] # if match[:engine] == 'ruby'
|
48
|
+
end
|
49
|
+
|
50
|
+
def jruby_version(version)
|
51
|
+
return '2.2.3' if version == '9.0.5.0'
|
52
|
+
return '2.2.2' if version == '9.0.4.0'
|
53
|
+
raise Error::Unrecognized::JRubyVersion, version
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/ruby_dep/version.rb
CHANGED
data/lib/ruby_dep/warning.rb
CHANGED
@@ -25,18 +25,26 @@ module RubyDep
|
|
25
25
|
private
|
26
26
|
|
27
27
|
VERSION_INFO = {
|
28
|
-
'
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
'ruby' => {
|
29
|
+
'2.3.1' => :unknown,
|
30
|
+
'2.3.0' => :buggy,
|
31
|
+
'2.2.5' => :unknown,
|
32
|
+
'2.2.4' => :buggy,
|
33
|
+
'2.2.0' => :insecure,
|
34
|
+
'2.1.9' => :buggy,
|
35
|
+
'2.0.0' => :insecure
|
36
|
+
},
|
37
|
+
|
38
|
+
'jruby' => {
|
39
|
+
'2.2.3' => :unknown, # jruby-9.0.5.0
|
40
|
+
'2.2.0' => :insecure
|
41
|
+
}
|
35
42
|
}.freeze
|
36
43
|
|
37
44
|
def check_ruby
|
38
45
|
version = Gem::Version.new(RUBY_VERSION)
|
39
|
-
VERSION_INFO
|
46
|
+
info = VERSION_INFO[RUBY_ENGINE] || {}
|
47
|
+
info.each do |ruby, status|
|
40
48
|
return status if version >= Gem::Version.new(ruby)
|
41
49
|
end
|
42
50
|
:insecure
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_dep
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cezary Baginski
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.12'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.12'
|
27
27
|
description: Creates a version constraint of supported Rubies,suitable for a gemspec
|
28
28
|
file
|
29
29
|
email:
|
@@ -36,18 +36,13 @@ files:
|
|
36
36
|
- ".rspec"
|
37
37
|
- ".rubocop.yml"
|
38
38
|
- ".travis.yml"
|
39
|
-
- Gemfile
|
40
|
-
- Guardfile
|
41
39
|
- LICENSE.txt
|
42
40
|
- README.md
|
43
|
-
- Rakefile
|
44
|
-
- bin/console
|
45
|
-
- bin/setup
|
46
41
|
- lib/ruby_dep.rb
|
47
42
|
- lib/ruby_dep/travis.rb
|
43
|
+
- lib/ruby_dep/travis/ruby_version.rb
|
48
44
|
- lib/ruby_dep/version.rb
|
49
45
|
- lib/ruby_dep/warning.rb
|
50
|
-
- ruby_dep.gemspec
|
51
46
|
homepage: https://github.com/e2/ruby_dep
|
52
47
|
licenses:
|
53
48
|
- MIT
|
@@ -63,7 +58,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
63
58
|
version: '2.2'
|
64
59
|
- - ">="
|
65
60
|
- !ruby/object:Gem::Version
|
66
|
-
version: 2.2.
|
61
|
+
version: 2.2.3
|
67
62
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
63
|
requirements:
|
69
64
|
- - ">="
|
@@ -71,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
71
66
|
version: '0'
|
72
67
|
requirements: []
|
73
68
|
rubyforge_project:
|
74
|
-
rubygems_version: 2.
|
69
|
+
rubygems_version: 2.5.1
|
75
70
|
signing_key:
|
76
71
|
specification_version: 4
|
77
72
|
summary: Extracts supported Ruby versions from Travis file
|
data/Gemfile
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
# Specify your gem's dependencies in ruby_dep.gemspec
|
4
|
-
gemspec
|
5
|
-
|
6
|
-
gem 'rake'
|
7
|
-
|
8
|
-
group :development do
|
9
|
-
gem 'rubocop', '~> 0.39.0'
|
10
|
-
gem 'guard-rubocop', '~> 1.2'
|
11
|
-
gem 'guard-rspec', '~> 4.6'
|
12
|
-
end
|
13
|
-
|
14
|
-
group :test do
|
15
|
-
gem 'rspec', '~> 3.4'
|
16
|
-
end
|
data/Guardfile
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
# A sample Guardfile
|
2
|
-
# More info at https://github.com/guard/guard#readme
|
3
|
-
|
4
|
-
## Uncomment and set this to only include directories you want to watch
|
5
|
-
# directories %w(app lib config test spec features) \
|
6
|
-
# .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
|
7
|
-
|
8
|
-
## Note: if you are using the `directories` clause above and you are not
|
9
|
-
## watching the project directory ('.'), then you will want to move
|
10
|
-
## the Guardfile to a watched dir and symlink it back, e.g.
|
11
|
-
#
|
12
|
-
# $ mkdir config
|
13
|
-
# $ mv Guardfile config/
|
14
|
-
# $ ln -s config/Guardfile .
|
15
|
-
#
|
16
|
-
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
17
|
-
|
18
|
-
# Note: The cmd option is now required due to the increasing number of ways
|
19
|
-
# rspec may be run, below are examples of the most common uses.
|
20
|
-
# * bundler: 'bundle exec rspec'
|
21
|
-
# * bundler binstubs: 'bin/rspec'
|
22
|
-
# * spring: 'bin/rspec' (This will use spring if running and you have
|
23
|
-
# installed the spring binstubs per the docs)
|
24
|
-
# * zeus: 'zeus rspec' (requires the server to be started separately)
|
25
|
-
# * 'just' rspec: 'rspec'
|
26
|
-
|
27
|
-
group :specs, halt_on_fail: true do
|
28
|
-
guard :rspec, cmd: 'bundle exec rspec', failed_mode: :keep do
|
29
|
-
require 'guard/rspec/dsl'
|
30
|
-
dsl = Guard::RSpec::Dsl.new(self)
|
31
|
-
|
32
|
-
# Feel free to open issues for suggestions and improvements
|
33
|
-
|
34
|
-
# RSpec files
|
35
|
-
rspec = dsl.rspec
|
36
|
-
watch(rspec.spec_helper) { rspec.spec_dir }
|
37
|
-
watch(rspec.spec_support) { rspec.spec_dir }
|
38
|
-
watch(rspec.spec_files)
|
39
|
-
|
40
|
-
# Ruby files
|
41
|
-
ruby = dsl.ruby
|
42
|
-
dsl.watch_spec_files_for(ruby.lib_files)
|
43
|
-
|
44
|
-
# Rails files
|
45
|
-
rails = dsl.rails(view_extensions: %w(erb haml slim))
|
46
|
-
dsl.watch_spec_files_for(rails.app_files)
|
47
|
-
dsl.watch_spec_files_for(rails.views)
|
48
|
-
|
49
|
-
watch(rails.controllers) do |m|
|
50
|
-
[
|
51
|
-
rspec.spec.call("routing/#{m[1]}_routing"),
|
52
|
-
rspec.spec.call("controllers/#{m[1]}_controller"),
|
53
|
-
rspec.spec.call("acceptance/#{m[1]}")
|
54
|
-
]
|
55
|
-
end
|
56
|
-
|
57
|
-
# Rails config changes
|
58
|
-
watch(rails.spec_helper) { rspec.spec_dir }
|
59
|
-
watch(rails.routes) { "#{rspec.spec_dir}/routing" }
|
60
|
-
watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" }
|
61
|
-
|
62
|
-
# Capybara features specs
|
63
|
-
watch(rails.view_dirs) { |m| rspec.spec.call("features/#{m[1]}") }
|
64
|
-
watch(rails.layouts) { |m| rspec.spec.call("features/#{m[1]}") }
|
65
|
-
|
66
|
-
# Turnip features and steps
|
67
|
-
watch(%r{^spec/acceptance/(.+)\.feature$})
|
68
|
-
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
|
69
|
-
Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance'
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
guard :rubocop do
|
74
|
-
watch(/.+\.rb$/)
|
75
|
-
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
|
76
|
-
end
|
77
|
-
end
|
data/Rakefile
DELETED
data/bin/console
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'bundler/setup'
|
4
|
-
require 'ruby_dep'
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require 'irb'
|
14
|
-
IRB.start
|
data/bin/setup
DELETED
data/ruby_dep.gemspec
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'ruby_dep/version'
|
5
|
-
|
6
|
-
# Yes, inception: we're using this ourselves
|
7
|
-
require 'ruby_dep/travis'
|
8
|
-
|
9
|
-
Gem::Specification.new do |spec|
|
10
|
-
spec.name = 'ruby_dep'
|
11
|
-
spec.version = RubyDep::VERSION
|
12
|
-
spec.authors = ['Cezary Baginski']
|
13
|
-
spec.email = ['cezary@chronomantic.net']
|
14
|
-
|
15
|
-
spec.summary = 'Extracts supported Ruby versions from Travis file'
|
16
|
-
spec.description = 'Creates a version constraint of supported Rubies,' \
|
17
|
-
'suitable for a gemspec file'
|
18
|
-
spec.homepage = 'https://github.com/e2/ruby_dep'
|
19
|
-
spec.license = 'MIT'
|
20
|
-
|
21
|
-
spec.required_ruby_version = RubyDep::Travis.new.version_constraint
|
22
|
-
|
23
|
-
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
24
|
-
f.match(%r{^(test|spec|features)/})
|
25
|
-
end
|
26
|
-
|
27
|
-
spec.bindir = 'exe'
|
28
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
29
|
-
spec.require_paths = ['lib']
|
30
|
-
|
31
|
-
spec.add_development_dependency 'bundler', '~> 1.11'
|
32
|
-
end
|