vim-flavor 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/features/.nav CHANGED
@@ -15,3 +15,4 @@
15
15
  - typical_usage.feature
16
16
  - dependencies.feature
17
17
  - failures.feature
18
+ - version_tag_format.feature
@@ -5,7 +5,8 @@ Feature: Version constraint
5
5
 
6
6
  Note that vim-flavor assumes that plugins follow [the versioning pocilies of
7
7
  RubyGems](http://docs.rubygems.org/read/chapter/7#page26), to determine
8
- compatibility of plugins. See also [Philosophy](philosophy) for the details.
8
+ compatibility of plugins. See also [Philosophy](../philosophy) for the
9
+ details.
9
10
 
10
11
  Background:
11
12
  Given a repository "foo" with versions "1.0 1.1 1.2 2.0"
@@ -148,3 +148,35 @@ Feature: Resolve dependencies of Vim plugins
148
148
  And a bootstrap script is created in "$home/.vim"
149
149
  And a flavor "$foo_uri" version "2.1" is deployed to "$home/.vim"
150
150
  And a flavor "$bar_uri" version "2.1" is deployed to "$home/.vim"
151
+
152
+ Scenario: Resolve dependencies with different style version tags
153
+ Given a repository "foo" with versions "v4.5 v6.7 v8.9"
154
+ And a repository "bar" with versions "1.0 1.1 2.0 2.1" and a flavorfile:
155
+ """ruby
156
+ flavor '$foo_uri', '>= 6.7'
157
+ """
158
+ And a flavorfile with:
159
+ """ruby
160
+ flavor '$foo_uri'
161
+ flavor '$bar_uri'
162
+ """
163
+ When I run `vim-flavor install`
164
+ Then it should pass with template:
165
+ """
166
+ Checking versions...
167
+ Use $bar_uri ... 2.1
168
+ Use $foo_uri ... v8.9
169
+ Use $foo_uri ... v8.9
170
+ Deploying plugins...
171
+ $bar_uri 2.1 ... done
172
+ $foo_uri v8.9 ... done
173
+ Completed.
174
+ """
175
+ And a lockfile is created with:
176
+ """
177
+ $bar_uri (2.1)
178
+ $foo_uri (v8.9)
179
+ """
180
+ And a bootstrap script is created in "$home/.vim"
181
+ And a flavor "$foo_uri" version "v8.9" is deployed to "$home/.vim"
182
+ And a flavor "$bar_uri" version "2.1" is deployed to "$home/.vim"
@@ -40,3 +40,9 @@ Then /^(?:a|the) lockfile is (?:created|updated) with:$/ do |content|
40
40
  """
41
41
  }
42
42
  end
43
+
44
+ Then /^(?:a|the) lockfile is not created$/ do
45
+ steps %Q{
46
+ Then a file named "#{'.'.to_lockfile_path}" should not exist
47
+ }
48
+ end
@@ -3,11 +3,9 @@ Feature: Version lock
3
3
  as a lazy Vim user,
4
4
  I want to keep versions of Vim plugins which I installed before.
5
5
 
6
- Background:
6
+ Scenario: Install with a lockfile including "X.Y.Z" style tags
7
7
  Given a repository "foo" with versions "1.0.0 1.0.1 1.0.2"
8
-
9
- Scenario: Install with lockfile
10
- Given a flavorfile with:
8
+ And a flavorfile with:
11
9
  """ruby
12
10
  flavor '$foo_uri'
13
11
  """
@@ -23,3 +21,22 @@ Feature: Version lock
23
21
  """
24
22
  And a bootstrap script is created in "$home/.vim"
25
23
  And a flavor "$foo_uri" version "1.0.0" is deployed to "$home/.vim"
24
+
25
+ Scenario: Install with a lockfile including "vX.Y.Z" style tags
26
+ Given a repository "foo" with versions "v4.5.6 v8.8 v9.0"
27
+ And a flavorfile with:
28
+ """ruby
29
+ flavor '$foo_uri'
30
+ """
31
+ And a lockfile with:
32
+ """
33
+ $foo_uri (v8.8)
34
+ """
35
+ When I run `vim-flavor install`
36
+ Then it should pass
37
+ And the lockfile is updated with:
38
+ """
39
+ $foo_uri (v8.8)
40
+ """
41
+ And a bootstrap script is created in "$home/.vim"
42
+ And a flavor "$foo_uri" version "v8.8" is deployed to "$home/.vim"
@@ -0,0 +1,74 @@
1
+ Feature: Version tag format
2
+ In order to use proper versions of Vim plugins,
3
+ as a lazy Vim user,
4
+ I want to use only tags which are formatted as versions.
5
+
6
+ Scenario: With tags in the style of "X.Y.Z"
7
+ Given a repository "foo" with versions "1 1.2 1.2.3"
8
+ And a flavorfile with:
9
+ """ruby
10
+ flavor '$foo_uri'
11
+ """
12
+ When I run `vim-flavor install`
13
+ Then it should pass
14
+ And a lockfile is created with:
15
+ """
16
+ $foo_uri (1.2.3)
17
+ """
18
+ And a bootstrap script is created in "$home/.vim"
19
+ And a flavor "$foo_uri" version "1.2.3" is deployed to "$home/.vim"
20
+
21
+ Scenario: With tags in the style of "vX.Y.Z"
22
+ Given a repository "foo" with versions "v4.5.6 v7 v8.9"
23
+ And a flavorfile with:
24
+ """ruby
25
+ flavor '$foo_uri'
26
+ """
27
+ When I run `vim-flavor install`
28
+ Then it should pass
29
+ And a lockfile is created with:
30
+ """
31
+ $foo_uri (v8.9)
32
+ """
33
+ And a bootstrap script is created in "$home/.vim"
34
+ And a flavor "$foo_uri" version "v8.9" is deployed to "$home/.vim"
35
+
36
+ Scenario: Without valid tags
37
+ Given a repository "foo" with versions "abc def ghi"
38
+ And a flavorfile with:
39
+ """ruby
40
+ flavor '$foo_uri'
41
+ """
42
+ When I run `vim-flavor install`
43
+ Then it should fail with template:
44
+ """
45
+ Checking versions...
46
+ Use $foo_uri ... failed
47
+ """
48
+ And it should fail with regexp:
49
+ """
50
+ There is no valid version
51
+ """
52
+ And a lockfile is not created
53
+ And a bootstrap script is not created in "$home/.vim"
54
+ And a flavor "$foo_uri" is not deployed to "$home/.vim"
55
+
56
+ Scenario: Without tags
57
+ Given a repository "foo"
58
+ And a flavorfile with:
59
+ """ruby
60
+ flavor '$foo_uri'
61
+ """
62
+ When I run `vim-flavor install`
63
+ Then it should fail with template:
64
+ """
65
+ Checking versions...
66
+ Use $foo_uri ... failed
67
+ """
68
+ And it should fail with regexp:
69
+ """
70
+ There is no valid version
71
+ """
72
+ And a lockfile is not created
73
+ And a bootstrap script is not created in "$home/.vim"
74
+ And a flavor "$foo_uri" is not deployed to "$home/.vim"
@@ -129,8 +129,8 @@ module Vim
129
129
 
130
130
  def versions_from_tags(tags)
131
131
  tags.
132
- select {|t| t != '' && Gem::Version.correct?(t)}.
133
- map {|t| Gem::Version.create(t)}
132
+ select {|t| t != '' && Version.correct?(t)}.
133
+ map {|t| Version.create(t)}
134
134
  end
135
135
 
136
136
  def list_versions()
@@ -37,6 +37,7 @@ module Vim
37
37
  }
38
38
  rule(:locked_version) {
39
39
  (
40
+ str('v').maybe >>
40
41
  match('[\d.]').repeat(1)
41
42
  ).as(:locked_version)
42
43
  }
@@ -1,5 +1,26 @@
1
1
  module Vim
2
2
  module Flavor
3
- VERSION = '1.1.0'
3
+ VERSION = '1.1.1'
4
+
5
+ class Version < Gem::Version
6
+ attr_accessor :original_tag_name
7
+
8
+ def initialize(tag_name)
9
+ @original_tag_name = tag_name
10
+ super(self.class.normalize_tag_name(tag_name))
11
+ end
12
+
13
+ def self.normalize_tag_name(tag_name)
14
+ tag_name.sub(/^v/, '')
15
+ end
16
+
17
+ def self.correct?(tag_name)
18
+ super(normalize_tag_name(tag_name))
19
+ end
20
+
21
+ def to_s()
22
+ @original_tag_name
23
+ end
24
+ end
4
25
  end
5
26
  end
@@ -22,14 +22,14 @@ module Vim
22
22
  def self.parse(s)
23
23
  m = /^\s*(>=|~>)\s+(\S+)$/.match(s)
24
24
  if m
25
- [Gem::Version.create(m[2]), m[1]]
25
+ [Version.create(m[2]), m[1]]
26
26
  else
27
27
  raise "Invalid version constraint: #{s.inspect}"
28
28
  end
29
29
  end
30
30
 
31
31
  def compatible?(other_version_or_s)
32
- v = Gem::Version.create(other_version_or_s)
32
+ v = Version.create(other_version_or_s)
33
33
  if qualifier == '~>'
34
34
  self.base_version.bump() > v and v >= self.base_version
35
35
  elsif qualifier == '>='
@@ -42,7 +42,7 @@ module Vim
42
42
  def find_the_best_version(versions)
43
43
  versions.
44
44
  select {|v| compatible?(v)}.
45
- max()
45
+ max() or raise 'There is no valid version'
46
46
  end
47
47
  end
48
48
  end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ module Vim
4
+ module Flavor
5
+ describe Version do
6
+ describe '::create' do
7
+ it 'accept "X.Y.Z" style tags' do
8
+ expect {
9
+ Version.create('1')
10
+ Version.create('1.2')
11
+ Version.create('1.2.3')
12
+ }.not_to raise_error
13
+ end
14
+
15
+ it 'accept "vX.Y.Z" style tags' do
16
+ expect {
17
+ Version.create('v1')
18
+ Version.create('v1.2')
19
+ Version.create('v1.2.3')
20
+ }.not_to raise_error
21
+ end
22
+ end
23
+
24
+ describe '::correct?' do
25
+ it 'accept "X.Y.Z" style tags' do
26
+ Version.correct?('1').should be_true
27
+ Version.correct?('1.2').should be_true
28
+ Version.correct?('1.2.3').should be_true
29
+ end
30
+
31
+ it 'accept "vX.Y.Z" style tags' do
32
+ Version.correct?('v1').should be_true
33
+ Version.correct?('v1.2').should be_true
34
+ Version.correct?('v1.2.3').should be_true
35
+ end
36
+ end
37
+
38
+ describe '#<=>' do
39
+ it 'can comapre "X.Y.Z" tags' do
40
+ Version.create('1.2.3').should be <= Version.create('1.3')
41
+ Version.create('1.2.3').should be == Version.create('1.2.3')
42
+ Version.create('1.2.3').should be >= Version.create('1.1')
43
+ end
44
+
45
+ it 'can comapre "vX.Y.Z" tags' do
46
+ Version.create('v1.2.3').should be <= Version.create('v1.3')
47
+ Version.create('v1.2.3').should be == Version.create('v1.2.3')
48
+ Version.create('v1.2.3').should be >= Version.create('v1.1')
49
+ end
50
+
51
+ it 'can comapre "X.Y.Z" tag with "vX.Y.Z" tag' do
52
+ Version.create('1.2.3').should be <= Version.create('v1.3')
53
+ Version.create('1.2.3').should be == Version.create('v1.2.3')
54
+ Version.create('1.2.3').should be >= Version.create('v1.1')
55
+ end
56
+ end
57
+
58
+ describe '#to_s' do
59
+ it 'is converted into the original string' do
60
+ Version.create('1.2.3').to_s.should == '1.2.3'
61
+ Version.create('v1.2.3').to_s.should == 'v1.2.3'
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -50,6 +50,13 @@ module Vim
50
50
  find_the_best_version(['1.2.2', '1.2.3', '1.2.4', '1.3.3', '2.0']).
51
51
  should == '1.2.4'
52
52
  end
53
+
54
+ it 'fails if no version is given' do
55
+ expect {
56
+ VersionConstraint.new('>= 1.2.3').
57
+ find_the_best_version([]).tap {|v| p v}
58
+ }.to raise_error(RuntimeError, 'There is no valid version')
59
+ end
53
60
  end
54
61
  end
55
62
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vim-flavor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-17 00:00:00.000000000 Z
12
+ date: 2013-03-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parslet
@@ -147,6 +147,7 @@ files:
147
147
  - features/typical_usage/upgrade_vim_plugins.feature
148
148
  - features/uninstall_vim_flavor.md
149
149
  - features/version_lock.feature
150
+ - features/version_tag_format.feature
150
151
  - lib/vim-flavor.rb
151
152
  - lib/vim-flavor/cli.rb
152
153
  - lib/vim-flavor/enumerableextension.rb
@@ -166,6 +167,7 @@ files:
166
167
  - spec/lockfile_spec.rb
167
168
  - spec/spec_helper.rb
168
169
  - spec/stringextension_spec.rb
170
+ - spec/version_spec.rb
169
171
  - spec/versionconstraint_spec.rb
170
172
  - vim-flavor.gemspec
171
173
  homepage: https://github.com/kana/vim-flavor
@@ -231,6 +233,7 @@ test_files:
231
233
  - features/typical_usage/upgrade_vim_plugins.feature
232
234
  - features/uninstall_vim_flavor.md
233
235
  - features/version_lock.feature
236
+ - features/version_tag_format.feature
234
237
  - spec/enumerableextension_spec.rb
235
238
  - spec/facade_spec.rb
236
239
  - spec/flavor_spec.rb
@@ -238,4 +241,5 @@ test_files:
238
241
  - spec/lockfile_spec.rb
239
242
  - spec/spec_helper.rb
240
243
  - spec/stringextension_spec.rb
244
+ - spec/version_spec.rb
241
245
  - spec/versionconstraint_spec.rb