redcard 1.0.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.
- data/.gitignore +2 -0
- data/.travis.yml +11 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +73 -0
- data/Rakefile +7 -0
- data/lib/redcard/1.8.rb +3 -0
- data/lib/redcard/1.9.rb +3 -0
- data/lib/redcard/2.0.rb +3 -0
- data/lib/redcard/engine.rb +17 -0
- data/lib/redcard/ironruby.rb +3 -0
- data/lib/redcard/jruby/1.7.rb +3 -0
- data/lib/redcard/jruby.rb +3 -0
- data/lib/redcard/maglev.rb +3 -0
- data/lib/redcard/rubinius/2.0.rb +3 -0
- data/lib/redcard/rubinius.rb +3 -0
- data/lib/redcard/topaz.rb +3 -0
- data/lib/redcard/version.rb +41 -0
- data/lib/redcard.rb +100 -0
- data/redcard.gemspec +32 -0
- data/spec/1.9_spec.rb +37 -0
- data/spec/check_spec.rb +111 -0
- data/spec/rubinius/2.0_spec.rb +30 -0
- data/spec/rubinius_spec.rb +22 -0
- data/spec/spec_helper.rb +94 -0
- data/spec/verify_spec.rb +112 -0
- metadata +118 -0
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Brian Ford. All rights reserved.
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
4
|
+
obtaining a copy of this software and associated documentation
|
5
|
+
files (the "Software"), to deal in the Software without
|
6
|
+
restriction, including without limitation the rights to use,
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the
|
9
|
+
Software is furnished to do so, subject to the following
|
10
|
+
conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
# RedCard
|
2
|
+
|
3
|
+
RedCard provides a standard way to ensure that the running Ruby implementation
|
4
|
+
matches the desired language version, implementation, and implementation
|
5
|
+
version.
|
6
|
+
|
7
|
+
|
8
|
+
## Why Do We Need It?
|
9
|
+
|
10
|
+
Once upon a time, Ruby was a very simple universe. There was a single Ruby
|
11
|
+
implementation and a single stable version. Now there are multiple current
|
12
|
+
language versions, multiple implementations, and numerous versions of those
|
13
|
+
multiple implementations.
|
14
|
+
|
15
|
+
In an ideal world, every Ruby implementation would provide the same features
|
16
|
+
and all such features would have consistent behavior. In the real world, this
|
17
|
+
is not the case. Hence, the need arises to have some facility for restricting
|
18
|
+
the conditions under which an application or library runs. RedCard provides
|
19
|
+
various mechanisms for specifying what language version, implementation, and
|
20
|
+
implementation version are required.
|
21
|
+
|
22
|
+
|
23
|
+
NOTE: In this documentation, Ruby version specifies the version of the Ruby
|
24
|
+
programming language itself. Historically, the word "Ruby" could have applied
|
25
|
+
to the language or the original implementation of the language. We refer to
|
26
|
+
the original implementation as MRI or Matz's Ruby Implementation. RedCard
|
27
|
+
distinguishes between Ruby language versions, Ruby implementations, and
|
28
|
+
implementation versions.
|
29
|
+
|
30
|
+
|
31
|
+
## Be Liberal
|
32
|
+
|
33
|
+
RedCard provides an API for specifying multiple implementations and versions.
|
34
|
+
|
35
|
+
RedCard.check *requirements
|
36
|
+
|
37
|
+
The parameter, requirements, is an Array of Symbols or Strings with an
|
38
|
+
optional final Hash of implementations as keys and implementation versions as
|
39
|
+
values.
|
40
|
+
|
41
|
+
The following examples illustrate this:
|
42
|
+
|
43
|
+
# Requires any version JRuby or Rubinius
|
44
|
+
RedCard.check :rubinius, :jruby
|
45
|
+
|
46
|
+
# Requires Ruby language 1.9 and MRI or Rubinius
|
47
|
+
RedCard.check :mri, :rubinius, "1.9"
|
48
|
+
|
49
|
+
# Requires Ruby language 1.9.3 or 2.0
|
50
|
+
RedCard.check "1.9.3", "2.0"
|
51
|
+
|
52
|
+
# Requires Ruby language 1.9 and Rubinius version 2.0
|
53
|
+
RedCard.check "1.9", :rubinius => "2.0"
|
54
|
+
|
55
|
+
|
56
|
+
## Be Conservative
|
57
|
+
|
58
|
+
RedCard provides some convenience files that define restrictive requirements.
|
59
|
+
Using these, you can easily restrict the application to a single language
|
60
|
+
version, implementation, and implementation version.
|
61
|
+
|
62
|
+
The following examples illustrate this:
|
63
|
+
|
64
|
+
# Requires at minimum Ruby version 1.9 but accepts anything greater
|
65
|
+
require 'redcard/1.9'
|
66
|
+
|
67
|
+
# Requires Rubinius 2.0
|
68
|
+
require 'redcard/rubinius/2.0'
|
69
|
+
|
70
|
+
# Requires Ruby 1.9 and Rubinius
|
71
|
+
require 'redcard/1.9'
|
72
|
+
require 'redcard/rubinius'
|
73
|
+
|
data/Rakefile
ADDED
data/lib/redcard/1.8.rb
ADDED
data/lib/redcard/1.9.rb
ADDED
data/lib/redcard/2.0.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
class RedCard
|
2
|
+
class Engine
|
3
|
+
def initialize(engine, candidate)
|
4
|
+
@engine = engine.to_s
|
5
|
+
@candidate = candidate.to_s
|
6
|
+
end
|
7
|
+
|
8
|
+
def valid?
|
9
|
+
case @engine
|
10
|
+
when "rbx"
|
11
|
+
@candidate == "rbx" or @candidate == "rubinius"
|
12
|
+
else
|
13
|
+
@candidate == @engine
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class RedCard
|
2
|
+
VERSION = "1.0.0"
|
3
|
+
|
4
|
+
class Version
|
5
|
+
def initialize(version, candidate)
|
6
|
+
@version_spec = version.to_str
|
7
|
+
@version = convert @version_spec
|
8
|
+
|
9
|
+
case candidate
|
10
|
+
when Range
|
11
|
+
@minimum_spec = candidate.begin.to_str
|
12
|
+
@maximum_spec = candidate.end.to_str
|
13
|
+
@exclusive = candidate.exclude_end?
|
14
|
+
|
15
|
+
@minimum = convert @minimum_spec
|
16
|
+
@maximum = convert @maximum_spec
|
17
|
+
else
|
18
|
+
@minimum = convert candidate.to_str
|
19
|
+
@maximum = nil
|
20
|
+
@exclusive = nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def valid?
|
25
|
+
return false unless @version >= @minimum
|
26
|
+
return true if @maximum.nil?
|
27
|
+
|
28
|
+
if @exclusive
|
29
|
+
return @version < @maximum
|
30
|
+
else
|
31
|
+
return @version <= @maximum
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def convert(string)
|
36
|
+
major, minor, tiny, patch = string.split "."
|
37
|
+
parts = [major, minor, tiny, patch].map { |x| x.to_i }
|
38
|
+
("1%03d%03d%03d%05d" % parts).to_i
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/redcard.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'redcard/version'
|
2
|
+
require 'redcard/engine'
|
3
|
+
|
4
|
+
class RedCard
|
5
|
+
class InvalidRubyVersionError < Exception; end
|
6
|
+
class InvalidRubyEngineError < Exception; end
|
7
|
+
class UnknownRubyEngineError < Exception; end
|
8
|
+
class InvalidRubyError < Exception; end
|
9
|
+
|
10
|
+
def self.check(*requirements)
|
11
|
+
new(*requirements).check
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.verify(*requirements)
|
15
|
+
card = new(*requirements)
|
16
|
+
unless card.check
|
17
|
+
raise card.error, card.message
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.engine
|
22
|
+
(defined?(RUBY_ENGINE) && RUBY_ENGINE) || "ruby"
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.engine_version
|
26
|
+
case engine
|
27
|
+
# when "ironruby"
|
28
|
+
# TODO
|
29
|
+
when "jruby"
|
30
|
+
Object.const_get :JRUBY_VERSION
|
31
|
+
# when "maglev"
|
32
|
+
# TODO
|
33
|
+
when "rbx"
|
34
|
+
if defined?(::Rubinius)
|
35
|
+
Object.const_get(:Rubinius).const_get(:VERSION)
|
36
|
+
end
|
37
|
+
when "ruby"
|
38
|
+
RUBY_VERSION
|
39
|
+
when "topaz"
|
40
|
+
if defined?(::Topaz)
|
41
|
+
Object.const_get(:Topaz).const_get(:VERSION)
|
42
|
+
end
|
43
|
+
else
|
44
|
+
raise UnknownRubyEngineError, "#{engine} is not recognized"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
attr_reader :error, :message
|
50
|
+
|
51
|
+
def initialize(*requirements)
|
52
|
+
@engine_versions = requirements.last.kind_of?(Hash) ? requirements.pop.to_a : []
|
53
|
+
@engines = requirements.select { |x| x.kind_of? Symbol }
|
54
|
+
@versions = requirements.select { |x| x.kind_of? String or x.kind_of? Range }
|
55
|
+
end
|
56
|
+
|
57
|
+
def check
|
58
|
+
unless @engines.empty? or
|
59
|
+
@engines.any? { |x| Engine.new(RedCard.engine, x).valid? }
|
60
|
+
invalid_engine
|
61
|
+
return false
|
62
|
+
end
|
63
|
+
|
64
|
+
unless @versions.empty? or
|
65
|
+
@versions.any? { |x| Version.new(RUBY_VERSION, x).valid? }
|
66
|
+
invalid_ruby_version
|
67
|
+
return false
|
68
|
+
end
|
69
|
+
|
70
|
+
return true if @engine_versions.empty?
|
71
|
+
|
72
|
+
@engine_versions.map! do |e, v|
|
73
|
+
[Engine.new(RedCard.engine, e), Version.new(RedCard.engine_version, v)]
|
74
|
+
end
|
75
|
+
|
76
|
+
return true if @engine_versions.any? do |engine, version|
|
77
|
+
engine.valid? and version.valid?
|
78
|
+
end
|
79
|
+
|
80
|
+
invalid_engine_version
|
81
|
+
return false
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
def invalid_ruby_version
|
87
|
+
@error = InvalidRubyVersionError
|
88
|
+
@message = "#{RUBY_VERSION} is not supported"
|
89
|
+
end
|
90
|
+
|
91
|
+
def invalid_engine
|
92
|
+
@error = InvalidRubyEngineError
|
93
|
+
@message = "#{RedCard.engine} is not supported"
|
94
|
+
end
|
95
|
+
|
96
|
+
def invalid_engine_version
|
97
|
+
@error = InvalidRubyError
|
98
|
+
@message = "#{RedCard.engine} version #{RedCard.engine_version} is not supported"
|
99
|
+
end
|
100
|
+
end
|
data/redcard.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'redcard/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = "redcard"
|
6
|
+
gem.version = "#{RedCard::VERSION}"
|
7
|
+
gem.authors = ["Brian Shirai"]
|
8
|
+
gem.email = ["brixen@gmail.com"]
|
9
|
+
gem.homepage = "https://github.com/brixen/redcard"
|
10
|
+
|
11
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) unless File.extname(f) == ".bat" }.compact
|
12
|
+
gem.files = `git ls-files`.split("\n")
|
13
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
gem.require_paths = ["lib"]
|
15
|
+
gem.summary = <<-EOS
|
16
|
+
RedCard provides a standard way to ensure that the running Ruby implementation
|
17
|
+
matches the desired language version, implementation, and implementation
|
18
|
+
version.
|
19
|
+
EOS
|
20
|
+
gem.has_rdoc = true
|
21
|
+
gem.extra_rdoc_files = %w[ README.md LICENSE ]
|
22
|
+
gem.rubygems_version = %q{1.3.5}
|
23
|
+
gem.rubyforge_project = 'http://rubyforge.org/projects/mspec'
|
24
|
+
|
25
|
+
gem.rdoc_options << '--title' << 'MSpec Gem' <<
|
26
|
+
'--main' << 'README' <<
|
27
|
+
'--line-numbers'
|
28
|
+
|
29
|
+
gem.add_development_dependency "rake", "~> 0.9"
|
30
|
+
gem.add_development_dependency "rspec", "~> 2.8"
|
31
|
+
end
|
32
|
+
|
data/spec/1.9_spec.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Ruby version requirement" do
|
4
|
+
before do
|
5
|
+
redcard_save_state
|
6
|
+
redcard_unload "redcard/1.9"
|
7
|
+
end
|
8
|
+
|
9
|
+
after do
|
10
|
+
redcard_restore_state
|
11
|
+
end
|
12
|
+
|
13
|
+
it "succeeds if RUBY_VERSION is 1.9.0" do
|
14
|
+
redcard_version "1.9.0"
|
15
|
+
expect { require 'redcard/1.9' }.not_to raise_error
|
16
|
+
end
|
17
|
+
|
18
|
+
it "succeeds if RUBY_VERSION is 1.9.9" do
|
19
|
+
redcard_version "1.9.9"
|
20
|
+
expect { require 'redcard/1.9' }.not_to raise_error
|
21
|
+
end
|
22
|
+
|
23
|
+
it "succeeds if RUBY_VERSION is 1.10.0" do
|
24
|
+
redcard_version "1.10.0"
|
25
|
+
expect { require 'redcard/1.9' }.not_to raise_error
|
26
|
+
end
|
27
|
+
|
28
|
+
it "succeeds if RUBY_VERSION is 2.0.0" do
|
29
|
+
redcard_version "2.0.0"
|
30
|
+
expect { require 'redcard/1.9' }.not_to raise_error
|
31
|
+
end
|
32
|
+
|
33
|
+
it "raises an InvalidRubyVersionError if RUBY_VERSION is less than 1.9" do
|
34
|
+
redcard_version "1.8.9"
|
35
|
+
expect { require 'redcard/1.9' }.to raise_error(RedCard::InvalidRubyVersionError)
|
36
|
+
end
|
37
|
+
end
|
data/spec/check_spec.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "RedCard.check" do
|
4
|
+
before do
|
5
|
+
redcard_save_state
|
6
|
+
end
|
7
|
+
|
8
|
+
after do
|
9
|
+
redcard_restore_state
|
10
|
+
end
|
11
|
+
|
12
|
+
context "when RUBY_VERSION is '2.10.1'" do
|
13
|
+
before do
|
14
|
+
redcard_version "2.10.1"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns true for '2.0'" do
|
18
|
+
expect(RedCard.check("2.0")).to be_true
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns true for '2.0.0'" do
|
22
|
+
expect(RedCard.check("2.0.0")).to be_true
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns true for '2.9.10'" do
|
26
|
+
expect(RedCard.check("2.9.10")).to be_true
|
27
|
+
end
|
28
|
+
|
29
|
+
it "returns true for '2.10.1'" do
|
30
|
+
expect(RedCard.check("2.10.1")).to be_true
|
31
|
+
end
|
32
|
+
|
33
|
+
it "returns true for '1.9.100'" do
|
34
|
+
expect(RedCard.check("1.9.100")).to be_true
|
35
|
+
end
|
36
|
+
|
37
|
+
it "returns true for '1.8.10'" do
|
38
|
+
expect(RedCard.check("1.8.10")).to be_true
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns false for '2.10.2'" do
|
42
|
+
expect(RedCard.check("2.10.2")).to be_false
|
43
|
+
end
|
44
|
+
|
45
|
+
it "returns true for '1.8.10'..'2.10.1'" do
|
46
|
+
expect(RedCard.check("1.8.10".."2.10.1")).to be_true
|
47
|
+
end
|
48
|
+
|
49
|
+
it "returns true for '1.8.10'..'2.10.2'" do
|
50
|
+
expect(RedCard.check("1.8.10".."2.10.2")).to be_true
|
51
|
+
end
|
52
|
+
|
53
|
+
it "returns true for '1.8.10'..'2.11'" do
|
54
|
+
expect(RedCard.check("1.8.10".."2.11")).to be_true
|
55
|
+
end
|
56
|
+
|
57
|
+
it "returns false for '2.10.2'..'2.11.2'" do
|
58
|
+
expect(RedCard.check("2.10.2"..."2.11.2")).to be_false
|
59
|
+
end
|
60
|
+
|
61
|
+
it "returns false for '1.8.10'...'2.10.1'" do
|
62
|
+
expect(RedCard.check("1.8.10"..."2.10.1")).to be_false
|
63
|
+
end
|
64
|
+
|
65
|
+
context "when RUBY_ENGINE is 'rbx'" do
|
66
|
+
before do
|
67
|
+
redcard_engine "rbx"
|
68
|
+
end
|
69
|
+
|
70
|
+
it "returns true for '1.9', :rbx" do
|
71
|
+
expect(RedCard.check("1.9", :rbx)).to be_true
|
72
|
+
end
|
73
|
+
|
74
|
+
it "returns false for '1.9', :topaz" do
|
75
|
+
expect(RedCard.check("1.9", :topaz)).to be_false
|
76
|
+
end
|
77
|
+
|
78
|
+
context "when Rubinius::VERSION is '2.0.0'" do
|
79
|
+
before do
|
80
|
+
redcard_engine_version "2.0.0"
|
81
|
+
end
|
82
|
+
|
83
|
+
it "returns true for '1.9', :rbx => '2.0'" do
|
84
|
+
expect(RedCard.check("1.9", :rbx => "2.0")).to be_true
|
85
|
+
end
|
86
|
+
|
87
|
+
it "returns true for '1.9', :rbx => '1.2.4'" do
|
88
|
+
expect(RedCard.check("1.9", :rbx => "1.2.4")).to be_true
|
89
|
+
end
|
90
|
+
|
91
|
+
it "returns false for '1.9', :rbx => '2.1'" do
|
92
|
+
expect(RedCard.check("1.9", :rbx => "2.1")).to be_false
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context "when RUBY_ENGINE is 'rbx'" do
|
99
|
+
before do
|
100
|
+
redcard_engine "rbx"
|
101
|
+
end
|
102
|
+
|
103
|
+
it "returns true for :rbx" do
|
104
|
+
expect(RedCard.check(:rbx)).to be_true
|
105
|
+
end
|
106
|
+
|
107
|
+
it "returns false for :topaz" do
|
108
|
+
expect(RedCard.check(:topaz)).to be_false
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Rubinius version requirement" do
|
4
|
+
before do
|
5
|
+
redcard_save_state
|
6
|
+
redcard_unload "redcard/rubinius/2.0"
|
7
|
+
end
|
8
|
+
|
9
|
+
after do
|
10
|
+
redcard_restore_state
|
11
|
+
end
|
12
|
+
|
13
|
+
it "succeeds if RUBY_ENGINE is 'rbx' and Rubinius::VERSION is greater than or equal to 2.0" do
|
14
|
+
redcard_engine "rbx"
|
15
|
+
redcard_engine_version "2.0.0"
|
16
|
+
expect { require 'redcard/rubinius/2.0' }.not_to raise_error
|
17
|
+
end
|
18
|
+
|
19
|
+
it "raises an InvalidRubyEngineError if RUBY_ENGINE is 'topaz'" do
|
20
|
+
redcard_engine "topaz"
|
21
|
+
redcard_engine_version "2.0.0"
|
22
|
+
expect { require 'redcard/rubinius/2.0' }.to raise_error(RedCard::InvalidRubyError)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "raises an InvalidEngineVersionError if Rubinius::VERSION is less than 2.0" do
|
26
|
+
redcard_engine "rbx"
|
27
|
+
redcard_engine_version "1.2.4"
|
28
|
+
expect { require 'redcard/rubinius/2.0' }.to raise_error(RedCard::InvalidRubyError)
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Ruby engine requirement" do
|
4
|
+
before do
|
5
|
+
redcard_save_state
|
6
|
+
redcard_unload "redcard/rubinius"
|
7
|
+
end
|
8
|
+
|
9
|
+
after do
|
10
|
+
redcard_restore_state
|
11
|
+
end
|
12
|
+
|
13
|
+
it "succeeds if RUBY_ENGINE is 'rbx'" do
|
14
|
+
redcard_engine "rbx"
|
15
|
+
expect { require 'redcard/rubinius' }.not_to raise_error
|
16
|
+
end
|
17
|
+
|
18
|
+
it "raises an InvalidRubyEngineError if RUBY_ENGINE is 'topaz'" do
|
19
|
+
redcard_engine "topaz"
|
20
|
+
expect { require 'redcard/rubinius' }.to raise_error(RedCard::InvalidRubyEngineError)
|
21
|
+
end
|
22
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'redcard'
|
2
|
+
|
3
|
+
RSpec.configure do |config|
|
4
|
+
config.expect_with :rspec do |c|
|
5
|
+
c.syntax = [:should, :expect]
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class RedCard
|
10
|
+
module Specs
|
11
|
+
@verbose = nil
|
12
|
+
@ruby_version = nil
|
13
|
+
@engine = nil
|
14
|
+
@engine_version = nil
|
15
|
+
|
16
|
+
def self.save_state
|
17
|
+
@verbose = $VERBOSE
|
18
|
+
$VERBOSE = nil
|
19
|
+
@ruby_version = RUBY_VERSION
|
20
|
+
@ruby_engine = RedCard.engine
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.save_engine_version
|
24
|
+
@engine_version = RedCard.engine_version
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.restore_state
|
28
|
+
$VERBOSE = nil
|
29
|
+
Object.const_set :RUBY_VERSION, @ruby_version
|
30
|
+
|
31
|
+
engine_version = @engine_version ? @engine_version : nil
|
32
|
+
Object.const_set :RUBY_ENGINE, @ruby_engine
|
33
|
+
|
34
|
+
$VERBOSE = @verbose
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.version=(version)
|
38
|
+
Object.const_set :RUBY_VERSION, version
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.engine=(engine)
|
42
|
+
Object.const_set :RUBY_ENGINE, engine
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.engine_version=(version)
|
46
|
+
case RedCard.engine
|
47
|
+
# when "ironruby"
|
48
|
+
# TODO
|
49
|
+
when "jruby"
|
50
|
+
Object.const_set :JRUBY_VERSION, version
|
51
|
+
# when "maglev"
|
52
|
+
# TODO
|
53
|
+
when "rbx"
|
54
|
+
unless defined?(::Rubinius)
|
55
|
+
Object.const_set :Rubinius, Module.new
|
56
|
+
end
|
57
|
+
Object.const_get(:Rubinius).const_set(:VERSION, version)
|
58
|
+
when "ruby"
|
59
|
+
RUBY_VERSION
|
60
|
+
when "topaz"
|
61
|
+
unless defined?(::Topaz)
|
62
|
+
Object.const_set :Topaz, Module.new
|
63
|
+
end
|
64
|
+
Object.const_get(:Topaz).const_set(:VERSION, version)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def redcard_save_state
|
71
|
+
RedCard::Specs.save_state
|
72
|
+
end
|
73
|
+
|
74
|
+
def redcard_restore_state
|
75
|
+
RedCard::Specs.restore_state
|
76
|
+
end
|
77
|
+
|
78
|
+
def redcard_unload(path)
|
79
|
+
$".delete "#{path}.rb"
|
80
|
+
$".delete File.expand_path("../../lib/#{path}.rb", __FILE__)
|
81
|
+
end
|
82
|
+
|
83
|
+
def redcard_version(version)
|
84
|
+
RedCard::Specs.version = version
|
85
|
+
end
|
86
|
+
|
87
|
+
def redcard_engine(engine)
|
88
|
+
RedCard::Specs.engine = engine
|
89
|
+
end
|
90
|
+
|
91
|
+
def redcard_engine_version(version)
|
92
|
+
RedCard::Specs.save_engine_version
|
93
|
+
RedCard::Specs.engine_version = version
|
94
|
+
end
|
data/spec/verify_spec.rb
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "RedCard.verify" do
|
4
|
+
before do
|
5
|
+
redcard_save_state
|
6
|
+
end
|
7
|
+
|
8
|
+
after do
|
9
|
+
redcard_restore_state
|
10
|
+
end
|
11
|
+
|
12
|
+
context "when RUBY_VERSION is '2.10.1'" do
|
13
|
+
before do
|
14
|
+
redcard_version "2.10.1"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns nil for '2.0'" do
|
18
|
+
expect(RedCard.verify("2.0")).to be_nil
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns nil for '2.0.0'" do
|
22
|
+
expect(RedCard.verify("2.0.0")).to be_nil
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns nil for '2.9.10'" do
|
26
|
+
expect(RedCard.verify("2.9.10")).to be_nil
|
27
|
+
end
|
28
|
+
|
29
|
+
it "returns nil for '2.10.1'" do
|
30
|
+
expect(RedCard.verify("2.10.1")).to be_nil
|
31
|
+
end
|
32
|
+
|
33
|
+
it "returns nil for '1.9.100'" do
|
34
|
+
expect(RedCard.verify("1.9.100")).to be_nil
|
35
|
+
end
|
36
|
+
|
37
|
+
it "returns nil for '1.8.10'" do
|
38
|
+
expect(RedCard.verify("1.8.10")).to be_nil
|
39
|
+
end
|
40
|
+
|
41
|
+
it "raises an InvalidRubyVersionError for '2.10.2'" do
|
42
|
+
expect { RedCard.verify("2.10.2") }.to raise_error(RedCard::InvalidRubyVersionError)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "returns nil for '1.8.10'..'2.10.1'" do
|
46
|
+
expect(RedCard.verify("1.8.10".."2.10.1")).to be_nil
|
47
|
+
end
|
48
|
+
|
49
|
+
it "returns nil for '1.8.10'..'2.10.2'" do
|
50
|
+
expect(RedCard.verify("1.8.10".."2.10.2")).to be_nil
|
51
|
+
end
|
52
|
+
|
53
|
+
it "returns nil for '1.8.10'..'2.11'" do
|
54
|
+
expect(RedCard.verify("1.8.10".."2.11")).to be_nil
|
55
|
+
end
|
56
|
+
|
57
|
+
it "raises an InvalidRubyVersionError for '2.10.2'..'2.11.2'" do
|
58
|
+
expect { RedCard.verify("2.10.2"..."2.11.2") }.to raise_error(RedCard::InvalidRubyVersionError)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "raises an InvalidRubyVersionError for '1.8.10'...'2.10.1'" do
|
62
|
+
expect { RedCard.verify("1.8.10"..."2.10.1") }.to raise_error(RedCard::InvalidRubyVersionError)
|
63
|
+
end
|
64
|
+
|
65
|
+
context "when RUBY_ENGINE is 'rbx'" do
|
66
|
+
before do
|
67
|
+
redcard_engine "rbx"
|
68
|
+
end
|
69
|
+
|
70
|
+
it "returns nil for '1.9', :rbx" do
|
71
|
+
expect(RedCard.verify("1.9", :rbx)).to be_nil
|
72
|
+
end
|
73
|
+
|
74
|
+
it "raises an InvalidRubyEngineError for '1.9', :topaz" do
|
75
|
+
expect { RedCard.verify("1.9", :topaz) }.to raise_error(RedCard::InvalidRubyEngineError)
|
76
|
+
end
|
77
|
+
|
78
|
+
context "when Rubinius::VERSION is '2.0.0'" do
|
79
|
+
before do
|
80
|
+
redcard_engine_version "2.0.0"
|
81
|
+
end
|
82
|
+
|
83
|
+
it "returns nil for '1.9', :rbx => '2.0'" do
|
84
|
+
expect(RedCard.verify("1.9", :rbx => "2.0")).to be_nil
|
85
|
+
end
|
86
|
+
|
87
|
+
it "returns nil for '1.9', :rbx => '1.2.4'" do
|
88
|
+
expect(RedCard.verify("1.9", :rbx => "1.2.4")).to be_nil
|
89
|
+
end
|
90
|
+
|
91
|
+
it "raises an InvalidRubyError for '1.9', :rbx => '2.1'" do
|
92
|
+
expect { RedCard.verify("1.9", :rbx => "2.1") }.to raise_error(RedCard::InvalidRubyError)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context "when RUBY_ENGINE is 'rbx'" do
|
99
|
+
before do
|
100
|
+
redcard_engine "rbx"
|
101
|
+
end
|
102
|
+
|
103
|
+
it "returns nil for :rbx" do
|
104
|
+
expect(RedCard.verify(:rbx)).to be_nil
|
105
|
+
end
|
106
|
+
|
107
|
+
it "raises an InvalidRubyEngineError for :topaz" do
|
108
|
+
expect { RedCard.verify(:topaz) }.to raise_error(RedCard::InvalidRubyEngineError)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
metadata
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: redcard
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Brian Shirai
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-19 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0.9'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.9'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '2.8'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '2.8'
|
46
|
+
description:
|
47
|
+
email:
|
48
|
+
- brixen@gmail.com
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files:
|
52
|
+
- README.md
|
53
|
+
- LICENSE
|
54
|
+
files:
|
55
|
+
- .gitignore
|
56
|
+
- .travis.yml
|
57
|
+
- Gemfile
|
58
|
+
- LICENSE
|
59
|
+
- README.md
|
60
|
+
- Rakefile
|
61
|
+
- lib/redcard.rb
|
62
|
+
- lib/redcard/1.8.rb
|
63
|
+
- lib/redcard/1.9.rb
|
64
|
+
- lib/redcard/2.0.rb
|
65
|
+
- lib/redcard/engine.rb
|
66
|
+
- lib/redcard/ironruby.rb
|
67
|
+
- lib/redcard/jruby.rb
|
68
|
+
- lib/redcard/jruby/1.7.rb
|
69
|
+
- lib/redcard/maglev.rb
|
70
|
+
- lib/redcard/rubinius.rb
|
71
|
+
- lib/redcard/rubinius/2.0.rb
|
72
|
+
- lib/redcard/topaz.rb
|
73
|
+
- lib/redcard/version.rb
|
74
|
+
- redcard.gemspec
|
75
|
+
- spec/1.9_spec.rb
|
76
|
+
- spec/check_spec.rb
|
77
|
+
- spec/rubinius/2.0_spec.rb
|
78
|
+
- spec/rubinius_spec.rb
|
79
|
+
- spec/spec_helper.rb
|
80
|
+
- spec/verify_spec.rb
|
81
|
+
homepage: https://github.com/brixen/redcard
|
82
|
+
licenses: []
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options:
|
85
|
+
- --title
|
86
|
+
- MSpec Gem
|
87
|
+
- --main
|
88
|
+
- README
|
89
|
+
- --line-numbers
|
90
|
+
require_paths:
|
91
|
+
- lib
|
92
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
requirements: []
|
105
|
+
rubyforge_project: http://rubyforge.org/projects/mspec
|
106
|
+
rubygems_version: 1.8.24
|
107
|
+
signing_key:
|
108
|
+
specification_version: 3
|
109
|
+
summary: RedCard provides a standard way to ensure that the running Ruby implementation
|
110
|
+
matches the desired language version, implementation, and implementation version.
|
111
|
+
test_files:
|
112
|
+
- spec/1.9_spec.rb
|
113
|
+
- spec/check_spec.rb
|
114
|
+
- spec/rubinius/2.0_spec.rb
|
115
|
+
- spec/rubinius_spec.rb
|
116
|
+
- spec/spec_helper.rb
|
117
|
+
- spec/verify_spec.rb
|
118
|
+
has_rdoc: true
|