ruby_dep 1.3.1 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 585b2e7809884ed70f12ab125b3010a227dd1258
4
- data.tar.gz: 4662617de749aed7d226669cd7070ab17ef84475
3
+ metadata.gz: d14a8f932140718a77fa7320dcad7cb08a773070
4
+ data.tar.gz: 969284805a9cc3499b7265f86a48e02afd0eff4f
5
5
  SHA512:
6
- metadata.gz: ac19ea4d722256a8c68f6d17f0e85081cef44c97a9f3a8ec87efb09c85af2a4187769880f7a3cbdfd55af92db2e2567853b9579bdff7ea0c4a2840910bc03b69
7
- data.tar.gz: a3caa36c96cc3dd80f07cc8646a45dc46bdfa54ff34a11f76cff78998ef27fab15d122fa89034035aee0a1ed0edba9fe2baf07ef211ea23b78d3947b5e812b82
6
+ metadata.gz: 01a246baa7f0bdeaa701606c488c2d1f88fc32aad50eef6510e2a7142603c12969021973f42f0d858d1d034a33ea190caab3e2470f02fcda3c22eb47b0e61fae
7
+ data.tar.gz: 3f541d1ce2b598453287f1b2005eeb34da2cbb25962bfdc39d7afea29e5bc467672ad35543d201f38e4116d3974b641052259921e84bb60b0952fdecf6826ac3
data/.travis.yml CHANGED
@@ -1,12 +1,11 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  bundler_args: --without development
4
+ env: JRUBY_OPTS='--server -Xcompile.invokedynamic=false'
4
5
  rvm:
5
- - 2.0.0
6
- - 2.1.9
7
- - 2.2.4
8
6
  - 2.2.5
9
7
  - 2.3.1
10
- - jruby-9.0.5.0
11
- before_install: gem install bundler -v 1.12.1
8
+ - jruby-9.1.2.0
9
+
10
+ before_install: gem install bundler -v 1.12.5
12
11
  cache: bundler
data/README.md CHANGED
@@ -4,16 +4,24 @@
4
4
 
5
5
  ## Description
6
6
 
7
- RubyDep helps users avoid incompatible, buggy and insecure Ruby versions.
7
+ RubyDep does 2 things right now:
8
8
 
9
- It's for gem owners to add to their runtime dependencies in their gemspec.
9
+ 1. Helps end users avoid incompatible, buggy and insecure Ruby versions.
10
+ 2. Helps gem owners manage their gem's `required_ruby_version` gemspec field based on `.travis.yml`.
10
11
 
11
- 1. It automatically sets your gemspec's `required_ruby_version` based on rubies tested in your `.travis-yml`
12
- 2. It warns users of your project if they're using a buggy or vulnerable version of Ruby
12
+ ## Quick info
13
+
14
+ - if you want to know how to disable the warnings, see here: https://github.com/e2/ruby_dep/wiki/Disabling-warnings
15
+ - for a list of Ruby versions that can be used to install ruby_dep, see here: https://travis-ci.org/e2/ruby_dep
16
+ - if your version of Ruby is not supported, open a new issue and explain your situation/problem
17
+ - when in doubt, open a new issue or [read the FAQ on the Wiki](https://github.com/e2/ruby_dep/wiki/FAQ).
18
+ - gems using RubyDep are designed to not be installable on a given Ruby version, unless it's specifically declared supported by those gems - but it's ok to ask for supporting your Ruby if you're stuck on an older version (for whatever reason)
19
+ - discussions about Ruby versions can get complex and frustrating - please be patient and constructive, and open-minded about solutions - especially if you're having problems
13
20
 
14
- NOTE: RubyDep uses it's own approach on itself. This means it can only be installed on Ruby versions tested here: [check out the Travis build status](https://travis-ci.org/e2/ruby_dep). If you need support for an different/older version of Ruby, open an issue with "backport" in the title and provide a compelling case for supporting the version of Ruby you need.
15
- When in doubt, open a new issue or [read the FAQ on the Wiki](https://github.com/e2/ruby_dep/wiki/FAQ).
16
21
 
22
+ ## Supported Ruby versions:
23
+
24
+ NOTE: RubyDep uses it's own approach on itself. This means it can only be installed on Ruby versions tested here: [check out the Travis build status](https://travis-ci.org/e2/ruby_dep). If you need support for an different/older version of Ruby, open an issue with "backport" in the title and provide a compelling case for supporting the version of Ruby you need.
17
25
 
18
26
  ## Problem 1: "Which version of Ruby does your project support?"
19
27
 
@@ -0,0 +1,16 @@
1
+ module RubyDep
2
+ class Logger
3
+ def initialize(device, prefix)
4
+ @device = device
5
+ @prefix = prefix
6
+ end
7
+
8
+ def warning(msg)
9
+ @device.puts @prefix + msg
10
+ end
11
+
12
+ def notice(msg)
13
+ @device.puts @prefix + msg
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ require 'ruby_dep/warning'
2
+
3
+ RubyDep::Warning.new.silence!
@@ -0,0 +1,58 @@
1
+
2
+ module RubyDep
3
+ class RubyVersion
4
+ attr_reader :status # NOTE: monkey-patched by acceptance tests
5
+ attr_reader :version
6
+ attr_reader :engine
7
+
8
+ def initialize(ruby_version, engine)
9
+ @engine = engine
10
+ @version = Gem::Version.new(ruby_version)
11
+ @status = detect_status
12
+ end
13
+
14
+ def recognized?
15
+ info.any?
16
+ end
17
+
18
+ def recommended(status)
19
+ current = Gem::Version.new(@version)
20
+ info.select do |key, value|
21
+ value == status && Gem::Version.new(key) > current
22
+ end.keys.reverse
23
+ end
24
+
25
+ private
26
+
27
+ VERSION_INFO = {
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.3.0' => :unknown, # jruby-9.1.2.0, jruby-9.1.0.0
40
+ '2.2.3' => :buggy, # jruby-9.0.5.0
41
+ '2.2.0' => :insecure
42
+ }
43
+ }.freeze
44
+
45
+ def info
46
+ @info ||= VERSION_INFO[@engine] || {}
47
+ end
48
+
49
+ def detect_status
50
+ return :untracked unless recognized?
51
+
52
+ info.each do |ruby, status|
53
+ return status if @version >= Gem::Version.new(ruby)
54
+ end
55
+ :insecure
56
+ end
57
+ end
58
+ end
@@ -48,6 +48,8 @@ module RubyDep
48
48
  end
49
49
 
50
50
  def jruby_version(version)
51
+ return '2.3.0' if version == '9.1.2.0'
52
+ return '2.3.0' if version == '9.1.0.0'
51
53
  return '2.2.3' if version == '9.0.5.0'
52
54
  return '2.2.2' if version == '9.0.4.0'
53
55
  raise Error::Unrecognized::JRubyVersion, version
@@ -1,3 +1,3 @@
1
1
  module RubyDep
2
- VERSION = '1.3.1'.freeze
2
+ VERSION = '1.4.0'.freeze
3
3
  end
@@ -1,96 +1,97 @@
1
+ require 'ruby_dep/logger'
2
+ require 'ruby_dep/ruby_version'
3
+
1
4
  module RubyDep
5
+ PROJECT_URL = 'http://github.com/e2/ruby_dep'.freeze
6
+
2
7
  class Warning
8
+ DISABLING_ENVIRONMENT_VAR = 'RUBY_DEP_GEM_SILENCE_WARNINGS'.freeze
3
9
  PREFIX = 'RubyDep: WARNING: '.freeze
4
- MSG_BUGGY = 'Your Ruby is outdated/buggy.'.freeze
5
- MSG_INSECURE = 'Your Ruby has security vulnerabilities!'.freeze
6
10
 
7
- MSG_HOW_TO_DISABLE = ' (To disable warnings, set'\
8
- ' RUBY_DEP_GEM_SILENCE_WARNINGS=1)'.freeze
11
+ WARNING = {
12
+ insecure: 'Your Ruby has security vulnerabilities!'.freeze,
13
+ buggy: 'Your Ruby is outdated/buggy.'.freeze,
14
+ untracked: 'Your Ruby may not be supported.'.freeze
15
+ }.freeze
16
+
17
+ NOTICE_RECOMMENDATION = 'Your Ruby is: %s (%s).'\
18
+ ' Recommendation: upgrade to %s.'.freeze
19
+
20
+ NOTICE_BUGGY_ALTERNATIVE = '(Or, at least to %s)'.freeze
9
21
 
10
- OPEN_ISSUE_FOR_UNRECOGNIZED = 'If this version is important,'\
11
- ' please open an issue at http://github.com/e2/ruby_dep'.freeze
22
+ NOTICE_HOW_TO_DISABLE = '(To disable warnings, see:'\
23
+ "#{PROJECT_URL}/wiki/Disabling-warnings )".freeze
24
+
25
+ NOTICE_OPEN_ISSUE = 'If you need this version supported,'\
26
+ " please open an issue at #{PROJECT_URL}".freeze
27
+
28
+ def initialize
29
+ @version = RubyVersion.new(RUBY_VERSION, RUBY_ENGINE)
30
+ @logger = Logger.new(STDERR, PREFIX)
31
+ end
12
32
 
13
33
  def show_warnings
14
34
  return if silenced?
15
- case (status = check_ruby)
16
- when :insecure
17
- warn_ruby(MSG_INSECURE, status)
18
- when :buggy
19
- warn_ruby(MSG_BUGGY, status)
20
- when :unknown
21
- else
22
- raise "Unknown problem type: #{problem.inspect}"
23
- end
35
+ return warn_ruby(WARNING[status]) if WARNING.key?(status)
36
+ return if status == :unknown
37
+ raise "Unknown problem type: #{problem.inspect}"
24
38
  end
25
39
 
26
- private
27
-
28
- VERSION_INFO = {
29
- 'ruby' => {
30
- '2.3.1' => :unknown,
31
- '2.3.0' => :buggy,
32
- '2.2.5' => :unknown,
33
- '2.2.4' => :buggy,
34
- '2.2.0' => :insecure,
35
- '2.1.9' => :buggy,
36
- '2.0.0' => :insecure
37
- },
38
-
39
- 'jruby' => {
40
- '2.2.3' => :unknown, # jruby-9.0.5.0
41
- '2.2.0' => :insecure
42
- }
43
- }.freeze
44
-
45
- def check_ruby
46
- version = Gem::Version.new(RUBY_VERSION)
47
- current_ruby_info.each do |ruby, status|
48
- return status if version >= Gem::Version.new(ruby)
49
- end
50
- :insecure
40
+ def silence!
41
+ ENV[DISABLING_ENVIRONMENT_VAR] = '1'
51
42
  end
52
43
 
44
+ private
45
+
53
46
  def silenced?
54
- value = ENV['RUBY_DEP_GEM_SILENCE_WARNINGS']
47
+ value = ENV[DISABLING_ENVIRONMENT_VAR]
55
48
  (value || '0') !~ /^0|false|no|n$/
56
49
  end
57
50
 
58
- def warn_ruby(msg, status)
59
- STDERR.puts PREFIX + msg + MSG_HOW_TO_DISABLE
60
- STDERR.puts PREFIX + recommendation(status)
51
+ def status
52
+ @version.status
61
53
  end
62
54
 
63
- def recommendation(status)
64
- msg = "Your Ruby is: #{RUBY_VERSION}"
65
- return msg + recommendation_for_unknown unless recognized?
66
-
67
- msg += " (#{status})."
68
- msg += " Recommendation: install #{recommended(:unknown).join(' or ')}."
69
- return msg unless status == :insecure
55
+ def warn_ruby(msg)
56
+ @logger.warning(msg)
57
+ @logger.notice(recommendation)
58
+ @logger.notice(NOTICE_HOW_TO_DISABLE)
59
+ end
70
60
 
71
- msg + " (Or, at least to #{recommended(:buggy).join(' or ')})"
61
+ def recommendation
62
+ return unrecognized_msg unless @version.recognized?
63
+ return recommendation_msg unless status == :insecure
64
+ [recommendation_msg, safer_alternatives_msg].join(' ')
72
65
  end
73
66
 
74
- def recommended(status)
75
- current = Gem::Version.new(RUBY_VERSION)
76
- current_ruby_info.select do |key, value|
77
- value == status && Gem::Version.new(key) > current
78
- end.keys.reverse
67
+ def unrecognized_msg
68
+ format(
69
+ "Your Ruby is: %s '%s' (unrecognized). %s",
70
+ @version.version,
71
+ @version.engine,
72
+ NOTICE_OPEN_ISSUE
73
+ )
79
74
  end
80
75
 
81
- def current_ruby_info
82
- VERSION_INFO[RUBY_ENGINE] || {}
76
+ def recommended_versions
77
+ @version.recommended(:unknown)
83
78
  end
84
79
 
85
- def recognized?
86
- current_ruby_info.any?
80
+ def buggy_alternatives
81
+ @version.recommended(:buggy)
87
82
  end
88
83
 
89
- def recommendation_for_unknown
84
+ def recommendation_msg
90
85
  format(
91
- " '%s' (unrecognized). %s", RUBY_ENGINE,
92
- OPEN_ISSUE_FOR_UNRECOGNIZED
86
+ NOTICE_RECOMMENDATION,
87
+ @version.version,
88
+ status,
89
+ recommended_versions.join(' or ')
93
90
  )
94
91
  end
92
+
93
+ def safer_alternatives_msg
94
+ format(NOTICE_BUGGY_ALTERNATIVE, buggy_alternatives.join(' or '))
95
+ end
95
96
  end
96
97
  end
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.3.1
4
+ version: 1.4.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-05-06 00:00:00.000000000 Z
11
+ date: 2016-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -39,6 +39,9 @@ files:
39
39
  - LICENSE.txt
40
40
  - README.md
41
41
  - lib/ruby_dep.rb
42
+ - lib/ruby_dep/logger.rb
43
+ - lib/ruby_dep/quiet.rb
44
+ - lib/ruby_dep/ruby_version.rb
42
45
  - lib/ruby_dep/travis.rb
43
46
  - lib/ruby_dep/travis/ruby_version.rb
44
47
  - lib/ruby_dep/version.rb
@@ -55,10 +58,10 @@ required_ruby_version: !ruby/object:Gem::Requirement
55
58
  requirements:
56
59
  - - "~>"
57
60
  - !ruby/object:Gem::Version
58
- version: '2.0'
61
+ version: '2.2'
59
62
  - - ">="
60
63
  - !ruby/object:Gem::Version
61
- version: 2.0.0
64
+ version: 2.2.5
62
65
  required_rubygems_version: !ruby/object:Gem::Requirement
63
66
  requirements:
64
67
  - - ">="
@@ -66,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
69
  version: '0'
67
70
  requirements: []
68
71
  rubyforge_project:
69
- rubygems_version: 2.5.1
72
+ rubygems_version: 2.6.6
70
73
  signing_key:
71
74
  specification_version: 4
72
75
  summary: Extracts supported Ruby versions from Travis file