vagrant 0.7.0.beta2 → 0.7.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/CHANGELOG.md +7 -7
- data/config/default.rb +0 -1
- data/lib/vagrant/config/ssh.rb +1 -2
- data/lib/vagrant/errors.rb +5 -0
- data/lib/vagrant/provisioners/puppet.rb +52 -11
- data/lib/vagrant/ssh.rb +3 -4
- data/lib/vagrant/version.rb +1 -1
- data/templates/commands/init/Vagrantfile.erb +13 -11
- data/templates/locales/en.yml +5 -0
- data/templates/ssh_config.erb +1 -1
- data/test/vagrant/provisioners/puppet_test.rb +54 -22
- data/test/vagrant/ssh_test.rb +8 -6
- data/vagrant.gemspec +1 -1
- metadata +6 -7
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
-
## 0.7.0
|
1
|
+
## 0.7.0 (January 19, 2011)
|
2
2
|
|
3
|
+
- VirtualBox 4.0 support. Support for VirtualBox 3.2 is _dropped_, since
|
4
|
+
the API is so different. Stay with the 0.6.x series if you have VirtualBox
|
5
|
+
3.2.x.
|
3
6
|
- Puppet server provisioner. [GH-262]
|
4
7
|
- Use numeric uid/gid in mounting shared folders to increase portability. [GH-252]
|
5
8
|
- HTTP downloading follows redirects. [GH-163]
|
@@ -23,17 +26,14 @@
|
|
23
26
|
change is not backwards compatible. [GH-265]
|
24
27
|
- Provisioners are now RVM-friendly, meaning if you installed chef or puppet
|
25
28
|
with an RVM managed Ruby, Vagrant now finds then. [GH-254]
|
26
|
-
|
27
|
-
## 0.7.0.beta (December 24, 2010)
|
28
|
-
|
29
|
-
- VirtualBox 4.0 support. Support for VirtualBox 3.2 is _dropped_, since
|
30
|
-
the API is so different. Stay with the 0.6.x series if you have VirtualBox
|
31
|
-
3.2.x.
|
32
29
|
- Changed the unused host only network destroy mechanism to check for
|
33
30
|
uselessness after the VM is destroyed. This should result in more accurate
|
34
31
|
checks.
|
35
32
|
- Networks are no longer disabled upon halt/destroy. With the above
|
36
33
|
change, its unnecessary.
|
34
|
+
- Puppet supports `module_path` configuration to mount local modules directory
|
35
|
+
as a shared folder and configure puppet with it. [GH-270]
|
36
|
+
- `ssh-config` now outputs `127.0.0.1` as the host instead of `localhost`.
|
37
37
|
|
38
38
|
## 0.6.9 (December 21, 2010)
|
39
39
|
|
data/config/default.rb
CHANGED
data/lib/vagrant/config/ssh.rb
CHANGED
@@ -5,7 +5,6 @@ module Vagrant
|
|
5
5
|
|
6
6
|
attr_accessor :username
|
7
7
|
attr_accessor :host
|
8
|
-
attr_accessor :port
|
9
8
|
attr_accessor :forwarded_port_key
|
10
9
|
attr_accessor :max_tries
|
11
10
|
attr_accessor :timeout
|
@@ -18,7 +17,7 @@ module Vagrant
|
|
18
17
|
end
|
19
18
|
|
20
19
|
def validate(errors)
|
21
|
-
[:username, :host, :
|
20
|
+
[:username, :host, :forwarded_port_key, :max_tries, :timeout, :private_key_path].each do |field|
|
22
21
|
errors.add(I18n.t("vagrant.config.common.error_empty", :field => field)) if !instance_variable_get("@#{field}".to_sym)
|
23
22
|
end
|
24
23
|
|
data/lib/vagrant/errors.rb
CHANGED
@@ -245,6 +245,11 @@ module Vagrant
|
|
245
245
|
error_key(:ssh_key_bad_permissions)
|
246
246
|
end
|
247
247
|
|
248
|
+
class SSHPortNotDetected < VagrantError
|
249
|
+
status_code(50)
|
250
|
+
error_key(:ssh_port_not_detected)
|
251
|
+
end
|
252
|
+
|
248
253
|
class SSHUnavailable < VagrantError
|
249
254
|
status_code(45)
|
250
255
|
error_key(:ssh_unavailable)
|
@@ -10,12 +10,14 @@ module Vagrant
|
|
10
10
|
class Config < Vagrant::Config::Base
|
11
11
|
attr_accessor :manifest_file
|
12
12
|
attr_accessor :manifests_path
|
13
|
+
attr_accessor :module_path
|
13
14
|
attr_accessor :pp_path
|
14
15
|
attr_accessor :options
|
15
16
|
|
16
17
|
def initialize
|
17
18
|
@manifest_file = nil
|
18
19
|
@manifests_path = "manifests"
|
20
|
+
@module_path = nil
|
19
21
|
@pp_path = "/tmp/vagrant-puppet"
|
20
22
|
@options = []
|
21
23
|
end
|
@@ -32,51 +34,90 @@ module Vagrant
|
|
32
34
|
manifest_file || "#{top.vm.box}.pp"
|
33
35
|
end
|
34
36
|
|
37
|
+
# Returns the module paths as an array of paths expanded relative to the
|
38
|
+
# root path.
|
39
|
+
def expanded_module_paths
|
40
|
+
return [] if !module_path
|
41
|
+
|
42
|
+
# Get all the paths and expand them relative to the root path, returning
|
43
|
+
# the array of expanded paths
|
44
|
+
paths = module_path
|
45
|
+
paths = [paths] if !paths.is_a?(Array)
|
46
|
+
paths.map do |path|
|
47
|
+
Pathname.new(path).expand_path(env.root_path)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
35
51
|
def validate(errors)
|
36
52
|
super
|
37
53
|
|
54
|
+
# Manifests path/file validation
|
38
55
|
if !expanded_manifests_path.directory?
|
39
56
|
errors.add(I18n.t("vagrant.provisioners.puppet.manifests_path_missing", :path => expanded_manifests_path))
|
40
|
-
|
57
|
+
else
|
58
|
+
if !expanded_manifests_path.join(computed_manifest_file).file?
|
59
|
+
errors.add(I18n.t("vagrant.provisioners.puppet.manifest_missing", :manifest => computed_manifest_file))
|
60
|
+
end
|
41
61
|
end
|
42
62
|
|
43
|
-
|
63
|
+
# Module paths validation
|
64
|
+
expanded_module_paths.each do |path|
|
65
|
+
if !path.directory?
|
66
|
+
errors.add(I18n.t("vagrant.provisioners.puppet.module_path_missing", :path => path))
|
67
|
+
end
|
68
|
+
end
|
44
69
|
end
|
45
70
|
end
|
46
71
|
|
47
72
|
def prepare
|
73
|
+
set_module_paths
|
48
74
|
share_manifests
|
75
|
+
share_module_paths
|
49
76
|
end
|
50
77
|
|
51
78
|
def provision!
|
52
79
|
verify_binary("puppet")
|
53
|
-
create_pp_path
|
54
80
|
run_puppet_client
|
55
81
|
end
|
56
82
|
|
57
83
|
def share_manifests
|
58
|
-
env.config.vm.share_folder("manifests",
|
84
|
+
env.config.vm.share_folder("manifests", manifests_guest_path, config.expanded_manifests_path)
|
59
85
|
end
|
60
86
|
|
61
|
-
def
|
62
|
-
|
63
|
-
|
87
|
+
def share_module_paths
|
88
|
+
count = 0
|
89
|
+
@module_paths.each do |from, to|
|
90
|
+
# Sorry for the cryptic key here, but VirtualBox has a strange limit on
|
91
|
+
# maximum size for it and its something small (around 10)
|
92
|
+
env.config.vm.share_folder("v-pp-m#{count}", to, from)
|
93
|
+
count += 1
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def set_module_paths
|
98
|
+
@module_paths = {}
|
99
|
+
config.expanded_module_paths.each_with_index do |path, i|
|
100
|
+
@module_paths[path] = File.join(config.pp_path, "modules-#{i}")
|
64
101
|
end
|
65
102
|
end
|
66
103
|
|
67
|
-
def
|
104
|
+
def manifests_guest_path
|
105
|
+
File.join(config.pp_path, "manifests")
|
106
|
+
end
|
107
|
+
|
108
|
+
def verify_binary(binary)
|
68
109
|
vm.ssh.execute do |ssh|
|
69
|
-
ssh.exec!("sudo
|
70
|
-
ssh.exec!("sudo chown #{env.config.ssh.username} #{config.pp_path}")
|
110
|
+
ssh.exec!("sudo -i which #{binary}", :error_class => PuppetError, :_key => :puppet_not_detected, :binary => binary)
|
71
111
|
end
|
72
112
|
end
|
73
113
|
|
74
114
|
def run_puppet_client
|
75
115
|
options = [config.options].flatten
|
116
|
+
options << "--modulepath '#{@module_paths.values.join(':')}'" if !@module_paths.empty?
|
76
117
|
options << config.computed_manifest_file
|
77
118
|
options = options.join(" ")
|
78
119
|
|
79
|
-
command = "sudo -i 'cd #{
|
120
|
+
command = "sudo -i 'cd #{manifests_guest_path}; puppet #{options}'"
|
80
121
|
|
81
122
|
env.ui.info I18n.t("vagrant.provisioners.puppet.running_puppet", :manifest => config.computed_manifest_file)
|
82
123
|
|
data/lib/vagrant/ssh.rb
CHANGED
@@ -142,8 +142,7 @@ module Vagrant
|
|
142
142
|
|
143
143
|
# Returns the port which is either given in the options hash or taken from
|
144
144
|
# the config by finding it in the forwarded ports hash based on the
|
145
|
-
# `config.ssh.forwarded_port_key
|
146
|
-
# when port forwarding isn't used.
|
145
|
+
# `config.ssh.forwarded_port_key`.
|
147
146
|
def port(opts={})
|
148
147
|
# Check if port was specified in options hash
|
149
148
|
pnum = opts[:port]
|
@@ -161,8 +160,8 @@ module Vagrant
|
|
161
160
|
|
162
161
|
return pnum.hostport if pnum
|
163
162
|
|
164
|
-
#
|
165
|
-
|
163
|
+
# This should NEVER happen.
|
164
|
+
raise Errors::SSHPortNotDetected
|
166
165
|
end
|
167
166
|
end
|
168
167
|
end
|
data/lib/vagrant/version.rb
CHANGED
@@ -24,18 +24,19 @@ Vagrant::Config.run do |config|
|
|
24
24
|
# Share an additional folder to the guest VM. The first argument is
|
25
25
|
# an identifier, the second is the path on the guest to mount the
|
26
26
|
# folder, and the third is the path on the host to the actual folder.
|
27
|
-
# config.vm.share_folder
|
27
|
+
# config.vm.share_folder "v-data", "/vagrant_data", "../data"
|
28
28
|
|
29
29
|
# Enable provisioning with chef solo, specifying a cookbooks path (relative
|
30
30
|
# to this Vagrantfile), and adding some recipes and/or roles.
|
31
31
|
#
|
32
|
-
# config.vm.
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
32
|
+
# config.vm.provision :chef_solo do |chef|
|
33
|
+
# chef.cookbooks_path = "cookbooks"
|
34
|
+
# chef.add_recipe "mysql"
|
35
|
+
# chef.add_role "web"
|
36
36
|
#
|
37
|
-
# You may also specify custom JSON attributes:
|
38
|
-
#
|
37
|
+
# # You may also specify custom JSON attributes:
|
38
|
+
# chef.json = { :mysql_password => "foo" }
|
39
|
+
# end
|
39
40
|
|
40
41
|
# Enable provisioning with chef server, specifying the chef server URL,
|
41
42
|
# and the path to the validation key (relative to this Vagrantfile).
|
@@ -47,9 +48,10 @@ Vagrant::Config.run do |config|
|
|
47
48
|
# HTTP instead of HTTPS depending on your configuration. Also change the
|
48
49
|
# validation key to validation.pem.
|
49
50
|
#
|
50
|
-
# config.vm.
|
51
|
-
#
|
52
|
-
#
|
51
|
+
# config.vm.provision :chef_server do |chef|
|
52
|
+
# chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
|
53
|
+
# chef.validation_key_path = "ORGNAME-validator.pem"
|
54
|
+
# end
|
53
55
|
#
|
54
56
|
# If you're using the Opscode platform, your validator client is
|
55
57
|
# ORGNAME-validator, replacing ORGNAME with your organization name.
|
@@ -57,5 +59,5 @@ Vagrant::Config.run do |config|
|
|
57
59
|
# IF you have your own Chef Server, the default validation client name is
|
58
60
|
# chef-validator, unless you changed the configuration.
|
59
61
|
#
|
60
|
-
#
|
62
|
+
# chef.validation_client_name = "ORGNAME-validator"
|
61
63
|
end
|
data/templates/locales/en.yml
CHANGED
@@ -84,6 +84,10 @@ en:
|
|
84
84
|
permissions on the following file to 0600 and then try running this command again:
|
85
85
|
|
86
86
|
%{key_path}
|
87
|
+
ssh_port_not_detected: |-
|
88
|
+
Vagrant couldn't determine the SSH port for your VM! This is a rare,
|
89
|
+
exceptional event, and a bug should be filed. Please try recreating your
|
90
|
+
VM (vagrant destroy, then vagrant up). Sorry!
|
87
91
|
ssh_unavailable: "`ssh` binary could not be found. Is an SSH client installed?"
|
88
92
|
ssh_unavailable_windows: |-
|
89
93
|
`vagrant ssh` isn't available on the Windows platform. The
|
@@ -475,6 +479,7 @@ en:
|
|
475
479
|
running_puppet: "Running Puppet with %{manifest}..."
|
476
480
|
manifest_missing: "The Puppet %{manifest} manifest is missing. You cannot configure this box."
|
477
481
|
manifests_path_missing: "The manifests path specified for Puppet does not exist: %{path}"
|
482
|
+
module_path_missing: "The configured module path doesn't exist: %{path}"
|
478
483
|
|
479
484
|
puppet_server:
|
480
485
|
not_detected: |-
|
data/templates/ssh_config.erb
CHANGED
@@ -41,6 +41,20 @@ class PuppetProvisionerTest < Test::Unit::TestCase
|
|
41
41
|
assert_equal "woot.pp", @config.computed_manifest_file
|
42
42
|
end
|
43
43
|
|
44
|
+
should "return an empty array if no module path is set" do
|
45
|
+
@config.module_path = nil
|
46
|
+
assert_equal [], @config.expanded_module_paths
|
47
|
+
end
|
48
|
+
|
49
|
+
should "return array of module paths expanded relative to root path" do
|
50
|
+
@config.module_path = "foo"
|
51
|
+
|
52
|
+
result = @config.expanded_module_paths
|
53
|
+
assert result.is_a?(Array)
|
54
|
+
assert_equal 1, result.length
|
55
|
+
assert_equal File.expand_path(@config.module_path, @env.root_path), result[0].to_s
|
56
|
+
end
|
57
|
+
|
44
58
|
should "be valid" do
|
45
59
|
@config.validate(@errors)
|
46
60
|
assert @errors.errors.empty?
|
@@ -63,11 +77,27 @@ class PuppetProvisionerTest < Test::Unit::TestCase
|
|
63
77
|
@config.validate(@errors)
|
64
78
|
assert !@errors.errors.empty?
|
65
79
|
end
|
80
|
+
|
81
|
+
should "be invalid if a specified module path doesn't exist" do
|
82
|
+
@config.module_path = "foo"
|
83
|
+
@config.validate(@errors)
|
84
|
+
assert !@errors.errors.empty?
|
85
|
+
end
|
86
|
+
|
87
|
+
should "be valid if all module paths exist" do
|
88
|
+
@config.module_path = "foo"
|
89
|
+
@config.expanded_module_paths.first.mkdir
|
90
|
+
@config.validate(@errors)
|
91
|
+
assert @errors.errors.empty?
|
92
|
+
end
|
66
93
|
end
|
67
94
|
|
68
95
|
context "preparing" do
|
69
96
|
should "share manifests" do
|
70
|
-
|
97
|
+
pre_seq = sequence("prepare")
|
98
|
+
@action.expects(:set_module_paths).once.in_sequence(pre_seq)
|
99
|
+
@action.expects(:share_manifests).once.in_sequence(pre_seq)
|
100
|
+
@action.expects(:share_module_paths).once.in_sequence(pre_seq)
|
71
101
|
@action.prepare
|
72
102
|
end
|
73
103
|
end
|
@@ -76,26 +106,30 @@ class PuppetProvisionerTest < Test::Unit::TestCase
|
|
76
106
|
should "run the proper sequence of methods in order" do
|
77
107
|
prov_seq = sequence("prov_seq")
|
78
108
|
@action.expects(:verify_binary).with("puppet").once.in_sequence(prov_seq)
|
79
|
-
@action.expects(:create_pp_path).once.in_sequence(prov_seq)
|
80
109
|
@action.expects(:run_puppet_client).once.in_sequence(prov_seq)
|
81
110
|
@action.provision!
|
82
111
|
end
|
83
112
|
end
|
84
113
|
|
85
114
|
context "share manifests folder" do
|
86
|
-
setup do
|
87
|
-
@manifests_path = "manifests"
|
88
|
-
@pp_path = "/tmp/vagrant-puppet"
|
89
|
-
@action.stubs(:manifests_path).returns(@manifests_path)
|
90
|
-
@action.stubs(:pp_path).returns(@pp_path)
|
91
|
-
end
|
92
|
-
|
93
115
|
should "share manifest folder" do
|
94
|
-
@env.config.vm.expects(:share_folder).with("manifests", @
|
116
|
+
@env.config.vm.expects(:share_folder).with("manifests", @action.manifests_guest_path, @config.expanded_manifests_path)
|
95
117
|
@action.share_manifests
|
96
118
|
end
|
97
119
|
end
|
98
120
|
|
121
|
+
context "sharing module paths" do
|
122
|
+
should "share all the module paths" do
|
123
|
+
@config.module_path = ["foo", "bar"]
|
124
|
+
@config.expanded_module_paths.each_with_index do |path, i|
|
125
|
+
@env.config.vm.expects(:share_folder).with("v-pp-m#{i}", File.join(@config.pp_path, "modules-#{i}"), path)
|
126
|
+
end
|
127
|
+
|
128
|
+
@action.set_module_paths
|
129
|
+
@action.share_module_paths
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
99
133
|
context "verifying binary" do
|
100
134
|
setup do
|
101
135
|
@ssh = mock("ssh")
|
@@ -109,25 +143,15 @@ class PuppetProvisionerTest < Test::Unit::TestCase
|
|
109
143
|
end
|
110
144
|
end
|
111
145
|
|
112
|
-
context "create pp path" do
|
113
|
-
should "create and chown the folder to the ssh user" do
|
114
|
-
ssh_seq = sequence("ssh_seq")
|
115
|
-
ssh = mock("ssh")
|
116
|
-
ssh.expects(:exec!).with("sudo mkdir -p #{@config.pp_path}").once.in_sequence(ssh_seq)
|
117
|
-
ssh.expects(:exec!).with("sudo chown #{@env.config.ssh.username} #{@config.pp_path}").once.in_sequence(ssh_seq)
|
118
|
-
@vm.ssh.expects(:execute).yields(ssh)
|
119
|
-
@action.create_pp_path
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
146
|
context "running puppet client" do
|
124
147
|
setup do
|
125
148
|
@ssh = mock("ssh")
|
126
149
|
@vm.ssh.stubs(:execute).yields(@ssh)
|
150
|
+
@action.set_module_paths
|
127
151
|
end
|
128
152
|
|
129
153
|
def expect_puppet_command(command)
|
130
|
-
@ssh.expects(:exec!).with("sudo -i 'cd #{@
|
154
|
+
@ssh.expects(:exec!).with("sudo -i 'cd #{@action.manifests_guest_path}; #{command}'")
|
131
155
|
end
|
132
156
|
|
133
157
|
should "cd into the pp_path directory and run puppet" do
|
@@ -146,5 +170,13 @@ class PuppetProvisionerTest < Test::Unit::TestCase
|
|
146
170
|
expect_puppet_command("puppet --modulepath modules --verbose #{@config.computed_manifest_file}")
|
147
171
|
@action.run_puppet_client
|
148
172
|
end
|
173
|
+
|
174
|
+
should "cd into the pp_path and run puppet with module paths if set" do
|
175
|
+
@config.module_path = "foo"
|
176
|
+
expect_puppet_command("puppet --modulepath '#{File.join(@config.pp_path, 'modules-0')}' #{@config.computed_manifest_file}")
|
177
|
+
|
178
|
+
@action.set_module_paths
|
179
|
+
@action.run_puppet_client
|
180
|
+
end
|
149
181
|
end
|
150
182
|
end
|
data/test/vagrant/ssh_test.rb
CHANGED
@@ -19,6 +19,7 @@ class SshTest < Test::Unit::TestCase
|
|
19
19
|
setup do
|
20
20
|
mock_ssh
|
21
21
|
@ssh.stubs(:check_key_permissions)
|
22
|
+
@ssh.stubs(:port).returns(2222)
|
22
23
|
Kernel.stubs(:exec)
|
23
24
|
Kernel.stubs(:system).returns(true)
|
24
25
|
|
@@ -53,8 +54,8 @@ class SshTest < Test::Unit::TestCase
|
|
53
54
|
end
|
54
55
|
|
55
56
|
should "call exec with supplied params" do
|
56
|
-
args = {:username => 'bar', :private_key_path => 'baz', :host => 'bak'
|
57
|
-
ssh_exec_expect(
|
57
|
+
args = {:username => 'bar', :private_key_path => 'baz', :host => 'bak'}
|
58
|
+
ssh_exec_expect(@ssh.port, args[:private_key_path], args[:username], args[:host])
|
58
59
|
@ssh.connect(args)
|
59
60
|
end
|
60
61
|
|
@@ -116,10 +117,10 @@ class SshTest < Test::Unit::TestCase
|
|
116
117
|
|
117
118
|
def ssh_exec_expect(port, key_path, uname, host)
|
118
119
|
Kernel.expects(:exec).with() do |arg|
|
119
|
-
assert arg =~ /^ssh
|
120
|
-
assert arg =~ /-p #{port}
|
121
|
-
assert arg =~ /-i #{key_path}
|
122
|
-
assert arg =~ /#{uname}@#{host}
|
120
|
+
assert arg =~ /^ssh/, "ssh command expected"
|
121
|
+
assert arg =~ /-p #{port}/, "-p #{port} expected"
|
122
|
+
assert arg =~ /-i #{key_path}/, "-i #{key_path} expected"
|
123
|
+
assert arg =~ /#{uname}@#{host}/, "#{uname}@{host} expected"
|
123
124
|
yield arg if block_given?
|
124
125
|
true
|
125
126
|
end
|
@@ -198,6 +199,7 @@ class SshTest < Test::Unit::TestCase
|
|
198
199
|
setup do
|
199
200
|
mock_ssh
|
200
201
|
@ssh.stubs(:check_key_permissions)
|
202
|
+
@ssh.stubs(:port).returns(2222)
|
201
203
|
end
|
202
204
|
|
203
205
|
should "return true if SSH connection works" do
|
data/vagrant.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_dependency "net-scp", "~> 1.0.4"
|
23
23
|
s.add_dependency "i18n", "~> 0.5.0"
|
24
24
|
s.add_dependency "thor", "~> 0.14.6"
|
25
|
-
s.add_dependency "virtualbox", "~> 0.8.
|
25
|
+
s.add_dependency "virtualbox", "~> 0.8.2"
|
26
26
|
|
27
27
|
s.add_development_dependency "rake"
|
28
28
|
s.add_development_dependency "contest", ">= 0.1.2"
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
4
|
+
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 7
|
8
8
|
- 0
|
9
|
-
|
10
|
-
version: 0.7.0.beta2
|
9
|
+
version: 0.7.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Mitchell Hashimoto
|
@@ -16,7 +15,7 @@ autorequire:
|
|
16
15
|
bindir: bin
|
17
16
|
cert_chain: []
|
18
17
|
|
19
|
-
date: 2011-01-
|
18
|
+
date: 2011-01-19 00:00:00 -08:00
|
20
19
|
default_executable:
|
21
20
|
dependencies:
|
22
21
|
- !ruby/object:Gem::Dependency
|
@@ -149,8 +148,8 @@ dependencies:
|
|
149
148
|
segments:
|
150
149
|
- 0
|
151
150
|
- 8
|
152
|
-
-
|
153
|
-
version: 0.8.
|
151
|
+
- 2
|
152
|
+
version: 0.8.2
|
154
153
|
type: :runtime
|
155
154
|
prerelease: false
|
156
155
|
version_requirements: *id009
|
@@ -467,7 +466,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
467
466
|
requirements:
|
468
467
|
- - ">="
|
469
468
|
- !ruby/object:Gem::Version
|
470
|
-
hash:
|
469
|
+
hash: -3286949326636393746
|
471
470
|
segments:
|
472
471
|
- 0
|
473
472
|
version: "0"
|