and_feathers 0.0.1 → 1.0.0.pre

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.
@@ -1,106 +0,0 @@
1
- require 'and_feathers'
2
- require 'support/in_memory_gzipped_tarball'
3
-
4
- describe AndFeathers do
5
-
6
- describe 'a tarball with a base directory' do
7
- let(:tarball) do
8
- AndFeathers.build('redis') do |redis|
9
- redis.dir('cookbooks') do |cookbooks|
10
- cookbooks.dir('redis') do |redis|
11
- redis.file('README') { 'README contents' }
12
- redis.file('CHANGELOG') { 'CHANGELOG contents' }
13
- redis.file('metadata.rb') { 'metadata.rb contents' }
14
- redis.dir('recipes') do |recipes|
15
- recipes.file('default.rb') { 'default.rb contents' }
16
- end
17
- redis.dir('templates') do |templates|
18
- templates.dir('default')
19
- end
20
- end
21
- end
22
- end
23
- end
24
-
25
- let(:tree) do
26
- [
27
- './redis',
28
- './redis/cookbooks',
29
- './redis/cookbooks/redis',
30
- './redis/cookbooks/redis/README',
31
- './redis/cookbooks/redis/CHANGELOG',
32
- './redis/cookbooks/redis/metadata.rb',
33
- './redis/cookbooks/redis/recipes',
34
- './redis/cookbooks/redis/recipes/default.rb',
35
- './redis/cookbooks/redis/templates',
36
- './redis/cookbooks/redis/templates/default'
37
- ]
38
- end
39
-
40
- it 'iterates through each directory breadth-first' do
41
- expect(tarball.to_a.map(&:path)).to eql(tree)
42
- end
43
-
44
- it 'can build an in-memory tarred/gzipped IO stream' do
45
- reader = InMemoryGzippedTarball.new(tarball.to_io)
46
-
47
- expect(reader.to_a.map(&:first)).to eql(tree)
48
- expect(reader.to_a.map(&:last).reject(&:empty?)).to eq([
49
- 'README contents',
50
- 'CHANGELOG contents',
51
- 'metadata.rb contents',
52
- 'default.rb contents'
53
- ])
54
- end
55
- end
56
-
57
- describe 'a tarball without a base directory' do
58
- let(:tarball) do
59
- AndFeathers.build do |redis|
60
- redis.dir('cookbooks') do |cookbooks|
61
- cookbooks.dir('redis') do |redis|
62
- redis.file('README') { 'README contents' }
63
- redis.file('CHANGELOG') { 'CHANGELOG contents' }
64
- redis.file('metadata.rb') { 'metadata.rb contents' }
65
- redis.dir('recipes') do |recipes|
66
- recipes.file('default.rb') { 'default.rb contents' }
67
- end
68
- redis.dir('templates') do |templates|
69
- templates.dir('default')
70
- end
71
- end
72
- end
73
- end
74
- end
75
-
76
- let(:tree) do
77
- [
78
- './cookbooks',
79
- './cookbooks/redis',
80
- './cookbooks/redis/README',
81
- './cookbooks/redis/CHANGELOG',
82
- './cookbooks/redis/metadata.rb',
83
- './cookbooks/redis/recipes',
84
- './cookbooks/redis/recipes/default.rb',
85
- './cookbooks/redis/templates',
86
- './cookbooks/redis/templates/default'
87
- ]
88
- end
89
-
90
- it 'iterates through each directory breadth-first' do
91
- expect(tarball.to_a.map(&:path)).to eql(tree)
92
- end
93
-
94
- it 'can build an in-memory tarred/gzipped IO stream' do
95
- reader = InMemoryGzippedTarball.new(tarball.to_io)
96
-
97
- expect(reader.to_a.map(&:first)).to eql(tree)
98
- expect(reader.to_a.map(&:last).reject(&:empty?)).to eq([
99
- 'README contents',
100
- 'CHANGELOG contents',
101
- 'metadata.rb contents',
102
- 'default.rb contents'
103
- ])
104
- end
105
- end
106
- end
@@ -1,35 +0,0 @@
1
- require 'rubygems/package'
2
- require 'zlib'
3
-
4
- class InMemoryGzippedTarball
5
- include Enumerable
6
-
7
- NotUnzipped = Object.new
8
-
9
- def initialize(file)
10
- @file = file
11
- @unzipped = NotUnzipped
12
- end
13
-
14
- def each
15
- if NotUnzipped == @unzipped
16
- reader = Zlib::GzipReader.new(@file)
17
- @unzipped = StringIO.new(reader.read).tap do
18
- reader.close
19
- end
20
- end
21
-
22
- Gem::Package::TarReader.new(@unzipped)do |tar|
23
- tar.each do |tarfile|
24
- if tarfile.directory?
25
- yield tarfile.full_name, ''
26
- else
27
- yield tarfile.full_name, tarfile.read
28
- end
29
- end
30
- end
31
- ensure
32
- @unzipped.rewind
33
- end
34
- end
35
-