semantic 1.2.1 → 1.3.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
2
  SHA1:
3
- metadata.gz: 369c17f0eac57ef46469825790c987018e7bed74
4
- data.tar.gz: 4ac7181b281ffd6cb4c7cd1b1d4ae59d2f014c17
3
+ metadata.gz: 84157e13bb503e4643995ea3fc5e66dc0e669a14
4
+ data.tar.gz: d66f6977b38924ed245de6b0849c6c6a6f6e48b3
5
5
  SHA512:
6
- metadata.gz: 2879e6c07bb46fe48981d44c97f78dd532ccdc77bc5f7ba5aa0fe39159ef4078a4f596cd433039e22ee780bbab16fd241f7222c713adc5383d75cf33e6731e87
7
- data.tar.gz: 8225d9f89fb80d7909f26de27e4f56faa21be3532bfb5eeaca26fc201eadd4b76ac30e88615c56e4312c35393fc63336b04c638ac4770b4324a55ecf0c4a23f9
6
+ metadata.gz: 4a995f1776791066bbd2f46b5bdbab90e0ea53477ea3143ea28d874e41524cdcfa2522a6593f5097f08370b0358b7701a90184f177318596a618fe386400201d
7
+ data.tar.gz: 6cbe7c9c57700057f807386f6d5df01f51cabcd7197dbb21794614c398bfacb84d041616522f8e90dc7bf608d97d5960781bb81a5321e1717e2171f903adf1c9
data/lib/semantic.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Semantic
2
- GEM_VERSION = '1.2.1'
2
+ GEM_VERSION = '1.3.0'
3
3
  autoload :Version, 'semantic/version'
4
4
  end
5
5
 
@@ -17,7 +17,7 @@ module Semantic
17
17
  end
18
18
 
19
19
 
20
- @major, @minor, @patch = version.split('.').map &:to_i
20
+ @major, @minor, @patch = version.split('.').map(&:to_i)
21
21
  end
22
22
 
23
23
  def to_a
@@ -76,8 +76,48 @@ module Semantic
76
76
  (self <=> other_version) == 0
77
77
  end
78
78
 
79
+ def satisfies other_version
80
+ return true if other_version.strip == '*'
81
+ parts = other_version.split /(\d(.+)?)/, 2
82
+ comparator, other_version_string = parts[0].strip, parts[1].strip
83
+
84
+ begin
85
+ Version.new other_version_string
86
+ comparator.empty? && comparator = '=='
87
+ satisfies_comparator? comparator, other_version_string
88
+ rescue ArgumentError
89
+ if ['<', '>', '<=', '>='].include?(comparator)
90
+ satisfies_comparator? comparator, pad_version_string(other_version_string)
91
+ else
92
+ tilde_matches? other_version_string
93
+ end
94
+ end
95
+ end
96
+
79
97
  private
80
98
 
99
+ def pad_version_string version_string
100
+ parts = version_string.split('.').reject {|x| x == '*'}
101
+ while parts.length < 3
102
+ parts << '0'
103
+ end
104
+ parts.join '.'
105
+ end
106
+
107
+ def tilde_matches? other_version_string
108
+ this_parts = to_a.collect &:to_s
109
+ other_parts = other_version_string.split('.').reject {|x| x == '*'}
110
+ other_parts == this_parts[0..other_parts.length-1]
111
+ end
112
+
113
+ def satisfies_comparator? comparator, other_version_string
114
+ if comparator == '~'
115
+ tilde_matches? other_version_string
116
+ else
117
+ self.send comparator, other_version_string
118
+ end
119
+ end
120
+
81
121
  def compare_recursively ary1, ary2
82
122
  # Short-circuit the recursion entirely if they're just equal
83
123
  return 0 if ary1 == ary2
@@ -105,4 +145,3 @@ module Semantic
105
145
  end
106
146
  end
107
147
  end
108
-
data/spec/version_spec.rb CHANGED
@@ -146,6 +146,33 @@ describe Semantic::Version do
146
146
  @v1_5_9_pre_1_build_4352.should == @v1_5_9_pre_1_build_5127
147
147
  @v1_5_9_pre_1_build_4352.should == @v1_5_9_pre_1
148
148
  end
149
+
150
+ it "determines whether it satisfies >= style specifications" do
151
+ @v1_6_0.satisfies('>=1.6.0').should be_true
152
+ @v1_6_0.satisfies('<=1.6.0').should be_true
153
+ @v1_6_0.satisfies('>=1.5.0').should be_true
154
+ @v1_6_0.satisfies('<=1.5.0').should_not be_true
155
+
156
+ # partial / non-semver numbers after comparator are extremely common in
157
+ # version specifications in the wild
158
+
159
+ @v1_6_0.satisfies('>1.5').should be_true
160
+ @v1_6_0.satisfies('<1').should_not be_true
161
+ end
162
+
163
+ it "determines whether it satisfies * style specifications" do
164
+ @v1_6_0.satisfies('1.*').should be_true
165
+ @v1_6_0.satisfies('1.6.*').should be_true
166
+ @v1_6_0.satisfies('2.*').should_not be_true
167
+ @v1_6_0.satisfies('1.5.*').should_not be_true
168
+ end
169
+
170
+ it "determines whether it satisfies ~ style specifications" do
171
+ @v1_6_0.satisfies('~1.6').should be_true
172
+ @v1_5_9_pre_1.satisfies('~1.5').should be_true
173
+ @v1_6_0.satisfies('~1.5').should_not be_true
174
+ end
175
+
149
176
  end
150
177
 
151
178
  context "type coercions" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semantic
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Lindsey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-02 00:00:00.000000000 Z
11
+ date: 2013-12-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -74,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
74
  version: '0'
75
75
  requirements: []
76
76
  rubyforge_project:
77
- rubygems_version: 2.0.3
77
+ rubygems_version: 2.1.9
78
78
  signing_key:
79
79
  specification_version: 4
80
80
  summary: Semantic Version utility class