dm-persevere-adapter 0.15 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ pkg
2
+ tmp
3
+ coverage
data/Manifest.txt CHANGED
@@ -4,6 +4,7 @@ Manifest.txt
4
4
  README.txt
5
5
  Rakefile
6
6
  lib/persevere_adapter.rb
7
+ lib/persevere_adapter/version.rb
7
8
  spec/integration/persevere_adapter_spec.rb
8
9
  spec/spec.opts
9
10
  spec/spec_helper.rb
data/Rakefile CHANGED
@@ -1,38 +1,29 @@
1
- require 'pathname'
2
1
  require 'rubygems'
3
- require 'hoe'
2
+ require 'pathname'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gemspec|
7
+ gemspec.name = %q{dm-persevere-adapter}
8
+ gemspec.summary = %q{A DataMapper Adapter for persevere}
9
+ gemspec.description = %q{A DataMapper Adapter for persevere}
10
+ gemspec.email = ["irjudson [a] gmail [d] com"]
11
+ gemspec.homepage = %q{http://github.com/yogo/dm-persevere-adapter}
12
+ gemspec.authors = ["Ivan R. Judson", "The Yogo Data Management Development Team" ]
13
+ gemspec.rdoc_options = ["--main", "README.txt"]
14
+ gemspec.add_dependency(%q<dm-core>, [">= 0.10.1"])
15
+ gemspec.add_dependency(%q<persevere>, [">= 1.1"])
16
+ gemspec.add_dependency(%q<extlib>)
17
+ end
18
+ rescue LoadError
19
+ puts "Jeweler not available. Install it with: gem install jeweler"
20
+ end
4
21
 
5
22
  ROOT = Pathname(__FILE__).dirname.expand_path
6
23
  JRUBY = RUBY_PLATFORM =~ /java/
7
24
  WINDOWS = Gem.win_platform?
8
25
  SUDO = (WINDOWS || JRUBY) ? '' : ('sudo' unless ENV['SUDOLESS'])
9
26
 
10
- #require ROOT + 'lib/persevere_adapter/version'
11
-
12
- # define some constants to help with task files
13
- GEM_NAME = 'dm-persevere-adapter'
14
- #GEM_VERSION = DataMapper::PersevereAdapter::VERSION
15
- GEM_VERSION = "0.15"
16
-
17
- Hoe.spec(GEM_NAME) do |p|
18
- p.developer('Ivan R. Judson', 'irjudson [a] gmail [d] com')
19
-
20
- p.description = 'A DataMapper Adapter for persevere'
21
- p.summary = 'A DataMapper Adapter for persevere'
22
- p.url = 'http://github.com/USERNAME/dm-persevere-adapter'
23
-
24
- p.clean_globs |= %w[ log pkg coverage ]
25
- p.spec_extras = {
26
- :has_rdoc => true,
27
- :extra_rdoc_files => %w[ README.txt LICENSE.txt History.txt ]
28
- }
29
-
30
- p.extra_deps = [
31
- ['dm-core', ">= 0.9.10"],
32
- ['extlib', ">= 0.9.10"],
33
- ['persevere', "~> 1.0"]
34
- ]
35
-
36
- end
27
+ require ROOT + 'lib/persevere_adapter'
37
28
 
38
- Pathname.glob(ROOT.join('tasks/**/*.rb').to_s).each { |f| require f }
29
+ Pathname.glob(ROOT.join('tasks/**/*.rb').to_s).each { |f| require f }
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.16.0
@@ -0,0 +1,73 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{dm-persevere-adapter}
8
+ s.version = "0.16.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Ivan R. Judson", "The Yogo Data Management Development Team"]
12
+ s.date = %q{2010-01-06}
13
+ s.description = %q{A DataMapper Adapter for persevere}
14
+ s.email = ["irjudson [a] gmail [d] com"]
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.txt"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ "History.txt",
22
+ "LICENSE.txt",
23
+ "Manifest.txt",
24
+ "README.txt",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "dm-persevere-adapter.gemspec",
28
+ "lib/persevere_adapter.rb",
29
+ "spec/integration/persevere_adapter_spec.rb",
30
+ "spec/persevere_adapter_spec.rb",
31
+ "spec/spec.opts",
32
+ "spec/spec_helper.rb",
33
+ "spec/unit/create_spec.rb",
34
+ "spec/unit/delete_spec.rb",
35
+ "spec/unit/read_spec.rb",
36
+ "spec/unit/update_spec.rb",
37
+ "tasks/spec.rb"
38
+ ]
39
+ s.homepage = %q{http://github.com/yogo/dm-persevere-adapter}
40
+ s.rdoc_options = ["--main", "README.txt"]
41
+ s.require_paths = ["lib"]
42
+ s.rubygems_version = %q{1.3.5}
43
+ s.summary = %q{A DataMapper Adapter for persevere}
44
+ s.test_files = [
45
+ "spec/persevere_adapter_spec.rb",
46
+ "spec/spec_helper.rb",
47
+ "spec/integration/persevere_adapter_spec.rb",
48
+ "spec/unit/create_spec.rb",
49
+ "spec/unit/delete_spec.rb",
50
+ "spec/unit/read_spec.rb",
51
+ "spec/unit/update_spec.rb"
52
+ ]
53
+
54
+ if s.respond_to? :specification_version then
55
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
56
+ s.specification_version = 3
57
+
58
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
59
+ s.add_runtime_dependency(%q<dm-core>, [">= 0.10.1"])
60
+ s.add_runtime_dependency(%q<persevere>, [">= 1.1"])
61
+ s.add_runtime_dependency(%q<extlib>, [">= 0"])
62
+ else
63
+ s.add_dependency(%q<dm-core>, [">= 0.10.1"])
64
+ s.add_dependency(%q<persevere>, [">= 1.1"])
65
+ s.add_dependency(%q<extlib>, [">= 0"])
66
+ end
67
+ else
68
+ s.add_dependency(%q<dm-core>, [">= 0.10.1"])
69
+ s.add_dependency(%q<persevere>, [">= 1.1"])
70
+ s.add_dependency(%q<extlib>, [">= 0"])
71
+ end
72
+ end
73
+
@@ -7,7 +7,6 @@ require 'persevere'
7
7
  module DataMapper
8
8
  module Adapters
9
9
  class PersevereAdapter < AbstractAdapter
10
- VERSION='0.15'
11
10
  ##
12
11
  # Used by DataMapper to put records into a data-store: "INSERT"
13
12
  # in SQL-speak. It takes an array of the resources (model
@@ -154,7 +153,7 @@ module DataMapper
154
153
  resources = Array.new
155
154
  json_query = make_json_query(query)
156
155
 
157
- tblname = Extlib::Inflection.classify(query.model).pluralize
156
+ tblname = Extlib::Inflection.classify(query.model)
158
157
  path = "/#{tblname}/#{json_query}"
159
158
 
160
159
  response = @persevere.retrieve(path)
@@ -172,8 +171,6 @@ module DataMapper
172
171
  end
173
172
 
174
173
  resources = query.model.load(results, query)
175
- else
176
- return false
177
174
  end
178
175
 
179
176
  query.filter_records(resources)
@@ -215,6 +212,32 @@ module DataMapper
215
212
  return deleted
216
213
  end
217
214
 
215
+ ##
216
+ #
217
+ # Other methods for the Yogo Data Management Toolkit
218
+ #
219
+ ##
220
+ def get_schema(name = nil, project = nil)
221
+ path = nil
222
+ if name.nil? & project.nil?
223
+ path = "/Class/"
224
+ elsif project.nil?
225
+ path = "/Class/#{name}"
226
+ elsif name.nil?
227
+ path = "/Class/#{project}/"
228
+ else
229
+ path = "/Class/#{project}/#{name}"
230
+ end
231
+
232
+ response = @persevere.retrieve(path)
233
+
234
+ if response.code == "200"
235
+ return JSON.parse(response.body)
236
+ else
237
+ return nil
238
+ end
239
+ end
240
+
218
241
  private
219
242
 
220
243
  ##
@@ -254,12 +277,16 @@ module DataMapper
254
277
  @classes = []
255
278
  @persevere = nil
256
279
  @prepped = false
280
+
281
+ connect
257
282
  end
258
283
 
259
284
  def connect
260
- uri = URI::HTTP.build(@options).to_s
261
- @persevere = Persevere.new(uri)
262
- prep_persvr unless @prepped
285
+ if ! @prepped
286
+ uri = URI::HTTP.build(@options).to_s
287
+ @persevere = Persevere.new(uri)
288
+ prep_persvr unless @prepped
289
+ end
263
290
  end
264
291
 
265
292
  def prep_persvr
@@ -0,0 +1,34 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+
4
+ require DataMapper.root / 'lib' / 'dm-core' / 'spec' / 'adapter_shared_spec'
5
+
6
+ describe DataMapper::Adapters::PersevereAdapter do
7
+ before :all do
8
+ # This needs to point to a valid ldap server
9
+ @adapter = DataMapper.setup(:default, { :adapter => 'persevere',
10
+ :host => 'localhost',
11
+ :port => '8080' }
12
+ )
13
+ end
14
+
15
+ it_should_behave_like 'An Adapter'
16
+
17
+ describe '#schema' do
18
+ it 'should return all of the schemas (in json) if no name is provided' do
19
+ @adapter.get_schema()
20
+ end
21
+
22
+ it 'should return the json schema of the class specified' do
23
+ @adapter.get_schema("Object")
24
+ end
25
+
26
+ it 'should return all of the schemas (in json) for a project if no name is provided' do
27
+ @adapter.get_schema(nil, "Class")
28
+ end
29
+
30
+ it 'should return all of the schemas (in json) if no name is provided' do
31
+ @adapter.get_schema("Object", "Class")
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,22 @@
1
+ $LOAD_PATH << File.dirname(__FILE__)
2
+
3
+ require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
4
+
5
+ describe 'A Persevere adapter' do
6
+
7
+ before do
8
+ @adapter = DataMapper::Repository.adapters[:default]
9
+ end
10
+
11
+ describe 'when saving a resource' do
12
+
13
+ before do
14
+ @book = Book.new(:title => 'Hello, World!', :author => 'Anonymous')
15
+ end
16
+
17
+ it 'should call the adapter create method' do
18
+ #@adapter.should_receive(:create).with([@book])
19
+ @book.save
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ # $LOAD_PATH << File.dirname(__FILE__)
2
+ #
3
+ # require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
4
+ #
5
+ # describe 'A Persevere adapter' do
6
+ #
7
+ # before do
8
+ # @adapter = DataMapper::Repository.adapters[:default]
9
+ # end
10
+ #
11
+ # describe 'when deleting an existing resource' do
12
+ # before do
13
+ # @book = Book.new(:title => 'Hello, World!', :author => 'Anonymous')
14
+ # @book.stub!(:new_record?).and_return(false)
15
+ # end
16
+ #
17
+ # it 'should do an HTTP DELETE' do
18
+ # @adapter.should_receive(:delete)
19
+ # @book.destroy
20
+ # end
21
+ #
22
+ # end
23
+ # end
@@ -0,0 +1,102 @@
1
+ $LOAD_PATH << File.dirname(__FILE__)
2
+
3
+ require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
4
+
5
+ describe 'A Persevere adapter' do
6
+
7
+ before do
8
+ @adapter = DataMapper::Repository.adapters[:default]
9
+ end
10
+
11
+ # describe 'when getting one resource' do
12
+ #
13
+ # describe 'if the resource exists' do
14
+ #
15
+ # before do
16
+ # book_xml = <<-BOOK
17
+ # <?xml version='1.0' encoding='UTF-8'?>
18
+ # <book>
19
+ # <author>Stephen King</author>
20
+ # <created-at type='datetime'>2008-06-08T17:03:07Z</created-at>
21
+ # <id type='integer'>1</id>
22
+ # <title>The Shining</title>
23
+ # <updated-at type='datetime'>2008-06-08T17:03:07Z</updated-at>
24
+ # </book>
25
+ # BOOK
26
+ # @id = 1
27
+ # @response = mock(Net::HTTPResponse)
28
+ # @response.stub!(:body).and_return(book_xml)
29
+ # @adapter.stub!(:http_get).and_return(@response)
30
+ # end
31
+ #
32
+ # it 'should return the resource' do
33
+ # book = Book.get(@id)
34
+ # book.should_not be_nil
35
+ # book.id.should be_an_instance_of(Fixnum)
36
+ # book.id.should == 1
37
+ # end
38
+ #
39
+ # it 'should do an HTTP GET' do
40
+ # @adapter.should_receive(:http_get).with('/books/1.xml').and_return(@response)
41
+ # Book.get(@id)
42
+ # end
43
+ #
44
+ # it "it be equal to itself" do
45
+ # Book.get(@id).should == Book.get(@id)
46
+ # end
47
+ # end
48
+ #
49
+ #
50
+ # describe 'if the resource does not exist' do
51
+ # it 'should return nil' do
52
+ # @id = 1
53
+ # @response = mock(Net::HTTPNotFound)
54
+ # @response.stub!(:content_type).and_return('text/html')
55
+ # @response.stub!(:body).and_return('<html></html>')
56
+ # @adapter.stub!(:http_get).and_return(@response)
57
+ # id = 4200
58
+ # Book.get(id).should be_nil
59
+ # end
60
+ # end
61
+ # end
62
+ #
63
+ # describe 'when getting all resource of a particular type' do
64
+ # before do
65
+ # books_xml = <<-BOOK
66
+ # <?xml version='1.0' encoding='UTF-8'?>
67
+ # <books type='array'>
68
+ # <book>
69
+ # <author>Ursula K LeGuin</author>
70
+ # <created-at type='datetime'>2008-06-08T17:02:28Z</created-at>
71
+ # <id type='integer'>1</id>
72
+ # <title>The Dispossed</title>
73
+ # <updated-at type='datetime'>2008-06-08T17:02:28Z</updated-at>
74
+ # </book>
75
+ # <book>
76
+ # <author>Stephen King</author>
77
+ # <created-at type='datetime'>2008-06-08T17:03:07Z</created-at>
78
+ # <id type='integer'>2</id>
79
+ # <title>The Shining</title>
80
+ # <updated-at type='datetime'>2008-06-08T17:03:07Z</updated-at>
81
+ # </book>
82
+ # </books>
83
+ # BOOK
84
+ # @response = mock(Net::HTTPResponse)
85
+ # @response.stub!(:body).and_return(books_xml)
86
+ # @adapter.stub!(:http_get).and_return(@response)
87
+ # end
88
+ #
89
+ # it 'should get a non-empty list' do
90
+ # Book.all.should_not be_empty
91
+ # end
92
+ #
93
+ # it 'should receive one Resource for each entity in the XML' do
94
+ # Book.all.size.should == 2
95
+ # end
96
+ #
97
+ # it 'should do an HTTP GET' do
98
+ # @adapter.should_receive(:http_get).and_return(@response)
99
+ # Book.first
100
+ # end
101
+ # end
102
+ end
@@ -0,0 +1,37 @@
1
+ # $LOAD_PATH << File.dirname(__FILE__)
2
+ #
3
+ # require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
4
+ #
5
+ # describe 'A Persevere adapter' do
6
+ #
7
+ # describe 'when updating an existing resource' do
8
+ # # before do
9
+ # # @books_xml = <<-XML
10
+ # # <book>
11
+ # # <id type='integer'>42</id>
12
+ # # <title>Starship Troopers</title>
13
+ # # <author>Robert Heinlein</author>
14
+ # # <created-at type='datetime'>2008-06-08T17:02:28Z</created-at>
15
+ # # </book>
16
+ # # XML
17
+ # # repository do |repo|
18
+ # # @repository = repo
19
+ # # @book = Book.new(:id => 42,
20
+ # # :title => 'Starship Troopers',
21
+ # # :author => 'Robert Heinlein',
22
+ # # :created_at => DateTime.parse('2008-06-08T17:02:28Z'))
23
+ # # @book.instance_eval { @new_record = false }
24
+ # # @repository.identity_map(Book)[@book.key] = @book
25
+ # # @book.title = "Mary Had a Little Lamb"
26
+ # # end
27
+ # # end
28
+ # #
29
+ # # it 'should do an HTTP PUT' do
30
+ # # adapter = @repository.adapter #DataMapper::Repository.adapters[:default]
31
+ # # adapter.should_receive(:http_put).with('/books/42.xml', @book.to_xml)
32
+ # # @repository.scope do
33
+ # # @book.save
34
+ # # end
35
+ # # end
36
+ # end
37
+ # end
metadata CHANGED
@@ -1,108 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-persevere-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.15"
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
- - Ivan R. Judson
7
+ - Ivan R. Judson
8
+ - The Yogo Data Management Development Team
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
12
 
12
- date: 2009-10-15 00:00:00 -06:00
13
+ date: 2010-01-06 00:00:00 -07:00
13
14
  default_executable:
14
15
  dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: dm-core
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 0.9.10
24
- version:
25
- - !ruby/object:Gem::Dependency
26
- name: extlib
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 0.9.10
34
- version:
35
- - !ruby/object:Gem::Dependency
36
- name: persevere
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
41
- - - ~>
42
- - !ruby/object:Gem::Version
43
- version: "1.0"
44
- version:
45
- - !ruby/object:Gem::Dependency
46
- name: hoe
47
- type: :development
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - ">="
52
- - !ruby/object:Gem::Version
53
- version: 2.3.3
54
- version:
16
+ - !ruby/object:Gem::Dependency
17
+ name: dm-core
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 0.10.1
25
+ version:
26
+ - !ruby/object:Gem::Dependency
27
+ name: persevere
28
+ type: :runtime
29
+ version_requirement:
30
+ version_requirements: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "1.1"
35
+ version:
36
+ - !ruby/object:Gem::Dependency
37
+ name: extlib
38
+ type: :runtime
39
+ version_requirement:
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
45
+ version:
55
46
  description: A DataMapper Adapter for persevere
56
47
  email:
57
- - irjudson [a] gmail [d] com
48
+ - irjudson [a] gmail [d] com
58
49
  executables: []
59
50
 
60
51
  extensions: []
61
52
 
62
53
  extra_rdoc_files:
63
- - README.txt
64
- - LICENSE.txt
65
- - History.txt
54
+ - LICENSE.txt
55
+ - README.txt
66
56
  files:
67
- - History.txt
68
- - LICENSE.txt
69
- - Manifest.txt
70
- - README.txt
71
- - Rakefile
72
- - lib/persevere_adapter.rb
73
- - spec/integration/persevere_adapter_spec.rb
74
- - spec/spec.opts
75
- - spec/spec_helper.rb
76
- - tasks/install.rb
77
- - tasks/spec.rb
57
+ - .gitignore
58
+ - History.txt
59
+ - LICENSE.txt
60
+ - Manifest.txt
61
+ - README.txt
62
+ - Rakefile
63
+ - VERSION
64
+ - dm-persevere-adapter.gemspec
65
+ - lib/persevere_adapter.rb
66
+ - spec/integration/persevere_adapter_spec.rb
67
+ - spec/persevere_adapter_spec.rb
68
+ - spec/spec.opts
69
+ - spec/spec_helper.rb
70
+ - spec/unit/create_spec.rb
71
+ - spec/unit/delete_spec.rb
72
+ - spec/unit/read_spec.rb
73
+ - spec/unit/update_spec.rb
74
+ - tasks/spec.rb
78
75
  has_rdoc: true
79
- homepage: http://github.com/USERNAME/dm-persevere-adapter
76
+ homepage: http://github.com/yogo/dm-persevere-adapter
80
77
  licenses: []
81
78
 
82
79
  post_install_message:
83
80
  rdoc_options:
84
- - --main
85
- - README.txt
81
+ - --main
82
+ - README.txt
86
83
  require_paths:
87
- - lib
84
+ - lib
88
85
  required_ruby_version: !ruby/object:Gem::Requirement
89
86
  requirements:
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- version: "0"
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: "0"
93
90
  version:
94
91
  required_rubygems_version: !ruby/object:Gem::Requirement
95
92
  requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- version: "0"
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: "0"
99
96
  version:
100
97
  requirements: []
101
98
 
102
- rubyforge_project: dm-persevere-adapter
99
+ rubyforge_project:
103
100
  rubygems_version: 1.3.5
104
101
  signing_key:
105
102
  specification_version: 3
106
103
  summary: A DataMapper Adapter for persevere
107
- test_files: []
108
-
104
+ test_files:
105
+ - spec/persevere_adapter_spec.rb
106
+ - spec/spec_helper.rb
107
+ - spec/integration/persevere_adapter_spec.rb
108
+ - spec/unit/create_spec.rb
109
+ - spec/unit/delete_spec.rb
110
+ - spec/unit/read_spec.rb
111
+ - spec/unit/update_spec.rb
data/tasks/install.rb DELETED
@@ -1,13 +0,0 @@
1
- def sudo_gem(cmd)
2
- sh "#{SUDO} #{RUBY} -S gem #{cmd}", :verbose => false
3
- end
4
-
5
- desc "Install #{GEM_NAME} #{GEM_VERSION}"
6
- task :install => [ :package ] do
7
- sudo_gem "install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources"
8
- end
9
-
10
- desc "Uninstall #{GEM_NAME} #{GEM_VERSION}"
11
- task :uninstall => [ :clobber ] do
12
- sudo_gem "uninstall #{GEM_NAME} -v#{GEM_VERSION} -Ix"
13
- end