vagrant-fog-box-storage 0.0.1 → 0.0.2
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 +3 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +58 -0
- data/README.md +43 -0
- data/Rakefile +15 -0
- data/lib/vagrant-fog-box-storage.rb +3 -0
- data/lib/vagrant-fog-box-storage/config.rb +82 -0
- data/lib/vagrant-fog-box-storage/version.rb +3 -0
- data/lib/vagrant_init.rb +6 -0
- data/test/test_helper.rb +36 -0
- data/test/vagrant-fog-box-storage/config_test.rb +69 -0
- data/vagrant-fog-box-storage.gemspec +26 -0
- data/vagrant-fog-box-storage.rb +3 -0
- metadata +104 -66
- checksums.yaml +0 -7
data/.gitignore
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
vagrant-fog-box-storage (0.0.1)
|
5
|
+
fog (~> 1.0)
|
6
|
+
vagrant (~> 1.0.6)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
archive-tar-minitar (0.5.2)
|
12
|
+
builder (3.2.0)
|
13
|
+
childprocess (0.3.9)
|
14
|
+
ffi (~> 1.0, >= 1.0.11)
|
15
|
+
erubis (2.7.0)
|
16
|
+
excon (0.19.5)
|
17
|
+
ffi (1.4.0)
|
18
|
+
fog (1.9.0)
|
19
|
+
builder
|
20
|
+
excon (~> 0.14)
|
21
|
+
formatador (~> 0.2.0)
|
22
|
+
mime-types
|
23
|
+
multi_json (~> 1.0)
|
24
|
+
net-scp (~> 1.0.4)
|
25
|
+
net-ssh (>= 2.1.3)
|
26
|
+
nokogiri (~> 1.5.0)
|
27
|
+
ruby-hmac
|
28
|
+
formatador (0.2.4)
|
29
|
+
i18n (0.6.4)
|
30
|
+
json (1.5.5)
|
31
|
+
log4r (1.1.10)
|
32
|
+
mime-types (1.21)
|
33
|
+
mocha (0.9.12)
|
34
|
+
multi_json (1.6.1)
|
35
|
+
net-scp (1.0.4)
|
36
|
+
net-ssh (>= 1.99.1)
|
37
|
+
net-ssh (2.2.2)
|
38
|
+
nokogiri (1.5.6)
|
39
|
+
protest (0.4.2)
|
40
|
+
ruby-hmac (0.4.0)
|
41
|
+
vagrant (1.0.6)
|
42
|
+
archive-tar-minitar (= 0.5.2)
|
43
|
+
childprocess (~> 0.3.1)
|
44
|
+
erubis (~> 2.7.0)
|
45
|
+
i18n (~> 0.6.0)
|
46
|
+
json (~> 1.5.1)
|
47
|
+
log4r (~> 1.1.9)
|
48
|
+
net-scp (~> 1.0.4)
|
49
|
+
net-ssh (~> 2.2.2)
|
50
|
+
|
51
|
+
PLATFORMS
|
52
|
+
ruby
|
53
|
+
|
54
|
+
DEPENDENCIES
|
55
|
+
bundler (>= 1.0.0)
|
56
|
+
mocha (~> 0.9.8)
|
57
|
+
protest (~> 0.4.0)
|
58
|
+
vagrant-fog-box-storage!
|
data/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# vagrant-fog-box-storage
|
2
|
+
|
3
|
+
Use the [fog](http://fog.io/) gem to get the authenticated url of a box to download from your favorite
|
4
|
+
cloud storage jawn.
|
5
|
+
|
6
|
+
The use case is if you have a vagrant box, stored on S3 (or another storage
|
7
|
+
provider supported by fog) that you don't want to be downloadable publicly that
|
8
|
+
you need to authenticate somehow to get at.
|
9
|
+
|
10
|
+
Note that this doesn't actually add an additional vagrant downloader class, but instead
|
11
|
+
grabs the authenticated url and uses ```Vagrant::Downloaders::HTTP``` to fetch
|
12
|
+
the box.
|
13
|
+
|
14
|
+
Example:
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
require 'vagrant-fog-box-storage'
|
18
|
+
|
19
|
+
Vagrant::Config.run do |config|
|
20
|
+
config.vm.define :app do |app_config|
|
21
|
+
app_config.fog_box_storage.provider = 'AWS'
|
22
|
+
app_config.fog_box_storage.access_key_id = "AAAAAAAAAAAAAAA"
|
23
|
+
app_config.fog_box_storage.secret_access_key = "XXXXXXXXXXXXXXXXXXXXXXXXX"
|
24
|
+
app_config.fog_box_storage.bucket_name = "awesome-secret-bukkit"
|
25
|
+
app_config.fog_box_storage.box_file_name = "secret-linux.box"
|
26
|
+
|
27
|
+
app_config.vm.box_url = app_config.fog_box_storage.box_url
|
28
|
+
|
29
|
+
app_config.vm.box = "secret-linux"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
```
|
34
|
+
|
35
|
+
## TODO
|
36
|
+
|
37
|
+
Not sure if there's a way to reach in and set ```vm.box_url``` from within the
|
38
|
+
plugin instead of having to call the ```#box_url``` method from the plugin from
|
39
|
+
the Vagrantfile.
|
40
|
+
|
41
|
+
## What else?
|
42
|
+
|
43
|
+
I've only used this with S3.
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
require 'bundler/setup'
|
4
|
+
Bundler::GemHelper.install_tasks
|
5
|
+
|
6
|
+
task :default => :test
|
7
|
+
|
8
|
+
desc "Run the test suite."
|
9
|
+
task :test do
|
10
|
+
$:.unshift File.expand_path("../test", __FILE__)
|
11
|
+
|
12
|
+
Dir["test/**/*_test.rb"].each do |f|
|
13
|
+
load f
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'vagrant/config'
|
2
|
+
|
3
|
+
|
4
|
+
module VagrantFogBoxStorage
|
5
|
+
|
6
|
+
class CloudStorageBoxNotFound < Exception ; end
|
7
|
+
class CloudStorageBucketNotFound < Exception ; end
|
8
|
+
|
9
|
+
class Config < Vagrant::Config::Base
|
10
|
+
def self.key_names
|
11
|
+
[
|
12
|
+
:provider,
|
13
|
+
:access_key_id,
|
14
|
+
:secret_access_key,
|
15
|
+
:bucket_name,
|
16
|
+
:box_file_name
|
17
|
+
]
|
18
|
+
end
|
19
|
+
|
20
|
+
self.key_names.each do |name|
|
21
|
+
attr_accessor name
|
22
|
+
end
|
23
|
+
|
24
|
+
def is_used?
|
25
|
+
self.class.key_names.any? do |name|
|
26
|
+
!self.send(name).nil?
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def cloud_storage
|
31
|
+
if is_used?
|
32
|
+
provider_name = self.provider.to_s.downcase
|
33
|
+
|
34
|
+
@cloud_storage ||= Fog::Storage.new({
|
35
|
+
:provider => self.provider,
|
36
|
+
:"#{provider_name}_access_key_id" => self.access_key_id,
|
37
|
+
:"#{provider_name}_secret_access_key" => self.secret_access_key
|
38
|
+
})
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def cloud_directories
|
43
|
+
cloud_storage.directories
|
44
|
+
end
|
45
|
+
|
46
|
+
def box_directory
|
47
|
+
directory = cloud_directories.get(self.bucket_name)
|
48
|
+
|
49
|
+
raise CloudStorageBucketNotFound.new("#{self.bucket_name} does not exist") if !directory
|
50
|
+
|
51
|
+
directory
|
52
|
+
end
|
53
|
+
|
54
|
+
def directory_files
|
55
|
+
directory = box_directory()
|
56
|
+
|
57
|
+
directory.files
|
58
|
+
end
|
59
|
+
|
60
|
+
def expiry_time
|
61
|
+
Time.now + 3600
|
62
|
+
end
|
63
|
+
|
64
|
+
def box_url
|
65
|
+
files = directory_files()
|
66
|
+
|
67
|
+
url = files.get_https_url(self.box_file_name, expiry_time)
|
68
|
+
|
69
|
+
url
|
70
|
+
end
|
71
|
+
|
72
|
+
def validate(env, errors)
|
73
|
+
if is_used?
|
74
|
+
errors.add('missing provider') if !self.provider
|
75
|
+
errors.add('missing access_key_id') if !self.access_key_id
|
76
|
+
errors.add('missing secret_access_key') if !self.secret_access_key
|
77
|
+
errors.add('missing bucket_name') if !self.bucket_name
|
78
|
+
errors.add('missing box_file_name') if !self.box_file_name
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
data/lib/vagrant_init.rb
ADDED
data/test/test_helper.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'vagrant'
|
2
|
+
require "test/unit/assertions"
|
3
|
+
require "protest"
|
4
|
+
require "mocha"
|
5
|
+
require "vagrant-fog-box-storage"
|
6
|
+
|
7
|
+
class Protest::TestCase
|
8
|
+
include Test::Unit::Assertions
|
9
|
+
include Mocha::API
|
10
|
+
include Vagrant::TestHelpers
|
11
|
+
|
12
|
+
# Get Mocha integrated properly into the tests
|
13
|
+
alias :original_run :run
|
14
|
+
def run(report)
|
15
|
+
original_run(report)
|
16
|
+
mocha_verify
|
17
|
+
ensure
|
18
|
+
mocha_teardown
|
19
|
+
end
|
20
|
+
|
21
|
+
# Helper to silence streams, courtesy of Ruby Facets library.
|
22
|
+
def silence_stream(*streams) #:yeild:
|
23
|
+
on_hold = streams.collect{ |stream| stream.dup }
|
24
|
+
streams.each do |stream|
|
25
|
+
stream.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')
|
26
|
+
stream.sync = true
|
27
|
+
end
|
28
|
+
yield
|
29
|
+
ensure
|
30
|
+
streams.each_with_index do |stream, i|
|
31
|
+
stream.reopen(on_hold[i])
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Protest.report_with(:documentation)
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
Protest.describe("Configuration class") do
|
4
|
+
setup do
|
5
|
+
Fog.mock!
|
6
|
+
|
7
|
+
@klass = VagrantFogBoxStorage::Config
|
8
|
+
@instance = @klass.new
|
9
|
+
@errors = Vagrant::Config::ErrorRecorder.new
|
10
|
+
@env = mock('Vagrant::Environment')
|
11
|
+
end
|
12
|
+
|
13
|
+
should "be valid by default" do
|
14
|
+
@instance.validate(@env, @errors)
|
15
|
+
assert @errors.errors.empty?
|
16
|
+
end
|
17
|
+
|
18
|
+
should "be invalid if any one key is set and another is not" do
|
19
|
+
@instance.provider = :aws
|
20
|
+
@instance.validate(@env, @errors)
|
21
|
+
|
22
|
+
assert !@errors.errors.empty?
|
23
|
+
end
|
24
|
+
|
25
|
+
should "be is_used? if all keys are set" do
|
26
|
+
@instance.provider = :aws
|
27
|
+
@instance.access_key_id = "1Z"
|
28
|
+
@instance.secret_access_key = "1Z"
|
29
|
+
@instance.bucket_name = "bukkit"
|
30
|
+
@instance.box_file_name = "awesome.box"
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'with all keys set' do
|
34
|
+
setup do
|
35
|
+
@instance.provider = :aws
|
36
|
+
@instance.access_key_id = "1Z"
|
37
|
+
@instance.secret_access_key = "1Z"
|
38
|
+
@instance.bucket_name = "bukkit"
|
39
|
+
@instance.box_file_name = "awesome.box"
|
40
|
+
end
|
41
|
+
|
42
|
+
context "#box_directory" do
|
43
|
+
should "get the directory using bucket_name" do
|
44
|
+
@instance.stubs(:cloud_directories).returns(dirs = [])
|
45
|
+
dirs.expects(:get).with('bukkit').returns(mock('FogDirectory'))
|
46
|
+
|
47
|
+
@instance.box_directory()
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context "#box_url" do
|
52
|
+
context "when box is found" do
|
53
|
+
setup do
|
54
|
+
@instance.stubs(:directory_files).returns(@files = mock('Files'))
|
55
|
+
@instance.stubs(:expiry_time).returns(@expires = Time.now)
|
56
|
+
end
|
57
|
+
|
58
|
+
should "return url for box" do
|
59
|
+
@files.expects(:get_https_url).with(@instance.box_file_name, @expires).
|
60
|
+
returns("http://example.com/files.gz")
|
61
|
+
|
62
|
+
|
63
|
+
assert_equal "http://example.com/files.gz", @instance.box_url
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path("../lib/vagrant-fog-box-storage/version", __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "vagrant-fog-box-storage"
|
6
|
+
s.version = VagrantFogBoxStorage::VERSION
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ["Nat Lownes"]
|
9
|
+
s.email = ["nat.lownes@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/natlownes/vagrant-fog-box-storage"
|
11
|
+
s.summary = "The use case is if you have a vagrant box, stored on S3 (or another storage provider supported by fog) that you don't want to be downloadable publicly that you need to authenticate somehow to get at."
|
12
|
+
s.description = ""
|
13
|
+
|
14
|
+
s.required_rubygems_version = ">= 1.3.6"
|
15
|
+
|
16
|
+
s.add_dependency "vagrant" , "~> 1.0.6"
|
17
|
+
s.add_dependency "fog" , "~> 1.0"
|
18
|
+
|
19
|
+
s.add_development_dependency "protest" , "~> 0.4.0"
|
20
|
+
s.add_development_dependency "mocha" , "~> 0.9.8"
|
21
|
+
s.add_development_dependency "bundler" , ">= 1.0.0"
|
22
|
+
|
23
|
+
s.files = `git ls-files`.split("\n")
|
24
|
+
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
25
|
+
s.require_path = 'lib'
|
26
|
+
end
|
metadata
CHANGED
@@ -1,103 +1,141 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-fog-box-storage
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
|
-
authors:
|
7
|
+
authors:
|
7
8
|
- Nat Lownes
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-03-06 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
15
|
name: vagrant
|
16
|
-
|
17
|
-
|
18
|
-
requirements:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
19
|
- - ~>
|
20
|
-
- !ruby/object:Gem::Version
|
20
|
+
- !ruby/object:Gem::Version
|
21
21
|
version: 1.0.6
|
22
22
|
type: :runtime
|
23
|
-
version_requirements: *id001
|
24
|
-
- !ruby/object:Gem::Dependency
|
25
|
-
name: fog
|
26
23
|
prerelease: false
|
27
|
-
|
28
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.0.6
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: fog
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
29
35
|
- - ~>
|
30
|
-
- !ruby/object:Gem::Version
|
31
|
-
version:
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '1.0'
|
32
38
|
type: :runtime
|
33
|
-
version_requirements: *id002
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: protest
|
36
39
|
prerelease: false
|
37
|
-
|
38
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '1.0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: protest
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
39
51
|
- - ~>
|
40
|
-
- !ruby/object:Gem::Version
|
52
|
+
- !ruby/object:Gem::Version
|
41
53
|
version: 0.4.0
|
42
54
|
type: :development
|
43
|
-
version_requirements: *id003
|
44
|
-
- !ruby/object:Gem::Dependency
|
45
|
-
name: mocha
|
46
55
|
prerelease: false
|
47
|
-
|
48
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
49
59
|
- - ~>
|
50
|
-
- !ruby/object:Gem::Version
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.4.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: mocha
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
51
69
|
version: 0.9.8
|
52
70
|
type: :development
|
53
|
-
version_requirements: *id004
|
54
|
-
- !ruby/object:Gem::Dependency
|
55
|
-
name: bundler
|
56
71
|
prerelease: false
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.9.8
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: bundler
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
61
85
|
version: 1.0.0
|
62
86
|
type: :development
|
63
|
-
|
64
|
-
|
65
|
-
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 1.0.0
|
94
|
+
description: ''
|
95
|
+
email:
|
66
96
|
- nat.lownes@gmail.com
|
67
97
|
executables: []
|
68
|
-
|
69
98
|
extensions: []
|
70
|
-
|
71
99
|
extra_rdoc_files: []
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
100
|
+
files:
|
101
|
+
- .gitignore
|
102
|
+
- CHANGELOG.md
|
103
|
+
- Gemfile
|
104
|
+
- Gemfile.lock
|
105
|
+
- README.md
|
106
|
+
- Rakefile
|
107
|
+
- lib/vagrant-fog-box-storage.rb
|
108
|
+
- lib/vagrant-fog-box-storage/config.rb
|
109
|
+
- lib/vagrant-fog-box-storage/version.rb
|
110
|
+
- lib/vagrant_init.rb
|
111
|
+
- test/test_helper.rb
|
112
|
+
- test/vagrant-fog-box-storage/config_test.rb
|
113
|
+
- vagrant-fog-box-storage.gemspec
|
114
|
+
- vagrant-fog-box-storage.rb
|
115
|
+
homepage: https://github.com/natlownes/vagrant-fog-box-storage
|
76
116
|
licenses: []
|
77
|
-
|
78
|
-
metadata: {}
|
79
|
-
|
80
117
|
post_install_message:
|
81
118
|
rdoc_options: []
|
82
|
-
|
83
|
-
require_paths:
|
119
|
+
require_paths:
|
84
120
|
- lib
|
85
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ! '>='
|
131
|
+
- !ruby/object:Gem::Version
|
94
132
|
version: 1.3.6
|
95
133
|
requirements: []
|
96
|
-
|
97
134
|
rubyforge_project:
|
98
|
-
rubygems_version:
|
135
|
+
rubygems_version: 1.8.25
|
99
136
|
signing_key:
|
100
|
-
specification_version:
|
101
|
-
summary:
|
137
|
+
specification_version: 3
|
138
|
+
summary: The use case is if you have a vagrant box, stored on S3 (or another storage
|
139
|
+
provider supported by fog) that you don't want to be downloadable publicly that
|
140
|
+
you need to authenticate somehow to get at.
|
102
141
|
test_files: []
|
103
|
-
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA512:
|
3
|
-
metadata.gz: 8cc3d8717f76f33f7b55dfed6e327eadfffcab97f6ab0334e4797a06796eea11c77a8fa979aa016ec9ab30981b8bc21fa49a58e1551707796261624e8b369a8d
|
4
|
-
data.tar.gz: c17469a29ccc9be165acbc9f608513c7be13ffc3130b556ee3df44fc0e7796f502a5d701cc740d4568ec4d7e841235362e48d88c2f790c2ad003a24da5219e6a
|
5
|
-
SHA1:
|
6
|
-
metadata.gz: 2a8eb0a161234ae4b5aea7ad29640c5cc1a7dd6b
|
7
|
-
data.tar.gz: 01bf75f6ca5f109de13b5f074d650db109a26298
|