yore 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/Manifest.txt +22 -0
- data/PostInstall.txt +7 -0
- data/README.rdoc +48 -0
- data/Rakefile +57 -0
- data/bin/yore +65 -0
- data/lib/ihl_ruby/enum.rb +50 -0
- data/lib/ihl_ruby/extend_base_classes.rb +313 -0
- data/lib/ihl_ruby/misc_utils.rb +454 -0
- data/lib/ihl_ruby/string_utils.rb +53 -0
- data/lib/ihl_ruby/xml_utils.rb +163 -0
- data/lib/yore/yore_core.rb +491 -0
- data/lib/yore.orig.rb +6 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/rewind_spec.rb +187 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/test_job_a.xml +19 -0
- data/spec/yore_spec.rb +199 -0
- data/tasks/rspec.rake +21 -0
- metadata +128 -0
data/spec/rewind_spec.rb
ADDED
@@ -0,0 +1,187 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
gem 'RequirePaths'; require 'require_paths'
|
3
|
+
require_paths '../../..'
|
4
|
+
|
5
|
+
require 'ihl_ruby/misc_utils'
|
6
|
+
|
7
|
+
require 'fileutils'
|
8
|
+
|
9
|
+
require 'yore_core'
|
10
|
+
|
11
|
+
def ensure_clean_bucket(aName)
|
12
|
+
`s3cmd createbucket #{aName}`
|
13
|
+
`s3cmd deleteall #{aName}`
|
14
|
+
end
|
15
|
+
|
16
|
+
describe YoreCore::Yore do
|
17
|
+
before(:each) do
|
18
|
+
@yore = YoreCore::Yore.new
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should collect a list of files into a single file with a .contents file" do
|
22
|
+
# create a temp dir
|
23
|
+
temp_dir = MiscUtils::make_temp_dir('yore_spec')
|
24
|
+
# create source and dest subfolders
|
25
|
+
source_dir = File.expand_path('source',temp_dir)
|
26
|
+
dest_dir = File.expand_path('dest',temp_dir)
|
27
|
+
FileUtils.mkdir_p([source_dir,dest_dir])
|
28
|
+
# create some dirs and files in source
|
29
|
+
['a','a/1','b','c'].each {|p| FileUtils.mkdir_p(File.expand_path(p,source_dir))}
|
30
|
+
%w(a/blah.txt a/1/blahblah.txt b/apples.txt c/carrots.txt).each do |f|
|
31
|
+
MiscUtils::make_temp_file(f,source_dir)
|
32
|
+
end
|
33
|
+
# collect into dest file
|
34
|
+
# get recursive file list, without carrots
|
35
|
+
filelist = MiscUtils::recursive_file_list(source_dir) {|p| not p =~ /carrots.txt/}
|
36
|
+
dest_file = File.join(dest_dir,'destfile.bzb')
|
37
|
+
|
38
|
+
@yore.collect(filelist,dest_file)
|
39
|
+
|
40
|
+
# check contains filelist files ignoring .contents
|
41
|
+
cmd = "tar --list --file=#{dest_file}"
|
42
|
+
filelist_out = `#{cmd}`
|
43
|
+
i = 0
|
44
|
+
filelist_out.each_line {|line|
|
45
|
+
next if line==".contents\n"
|
46
|
+
i.should < filelist.length
|
47
|
+
line.chomp("\n").should == MiscUtils.path_debase(filelist[i],source_dir) # .bite('/')
|
48
|
+
i += 1
|
49
|
+
}
|
50
|
+
# could also check .contents file against actual contents
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should encrypt and unencrypt a file with a standard iv but a supplied key" do
|
54
|
+
orig_content = 'abcdef123456'
|
55
|
+
temp_file1 = MiscUtils.make_temp_file(nil,nil,orig_content)
|
56
|
+
temp_file2 = temp_file1+'.enc'
|
57
|
+
temp_file3 = temp_file1+'.dec'
|
58
|
+
|
59
|
+
@yore.pack(temp_file1,temp_file2)
|
60
|
+
@yore.unpack(temp_file2,temp_file3)
|
61
|
+
|
62
|
+
file3_content = MiscUtils.string_from_file(temp_file3)
|
63
|
+
file3_content.should == orig_content
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should create a backup filename combining a prefix, date, day and standard extension, and be able to decode the filename back to a date" do
|
67
|
+
@yore.configure({
|
68
|
+
:prefix => 'spec',
|
69
|
+
:first_hour => 4
|
70
|
+
})
|
71
|
+
now = Time.local(2009, 1, 1, 0, 0, 0, 0)
|
72
|
+
exp_filename = "spec-20081231.rew"
|
73
|
+
calc_filename = @yore.encode_file_name(now)
|
74
|
+
calc_filename.should == exp_filename
|
75
|
+
@yore.decode_file_name(calc_filename).should == Time.local(2008, 12, 31)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should upload and download files intact" do
|
79
|
+
bucket = 'yore_spec'
|
80
|
+
ensure_clean_bucket(bucket)
|
81
|
+
@yore.configure({
|
82
|
+
:bucket => bucket
|
83
|
+
})
|
84
|
+
content = 'this is my test content'
|
85
|
+
temp_dir = MiscUtils.make_temp_dir()
|
86
|
+
temp_file = MiscUtils.make_temp_file(nil, temp_dir, content)
|
87
|
+
puts @yore.upload(temp_file)
|
88
|
+
orig_file = temp_file+'.orig'
|
89
|
+
File.rename(temp_file, orig_file)
|
90
|
+
puts @yore.download(temp_file)
|
91
|
+
down_file_content = MiscUtils.string_from_file(temp_file)
|
92
|
+
down_file_content.should == content
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should backup and restore multiple directories of file" do
|
96
|
+
# create a temp dir
|
97
|
+
temp_dir = MiscUtils::make_temp_dir('yore_spec')
|
98
|
+
# create source and dest subfolders
|
99
|
+
source_dir = File.expand_path('source',temp_dir)
|
100
|
+
source1 = File.join(source_dir,'source1')
|
101
|
+
source2 = File.join(source_dir,'source2')
|
102
|
+
dest_dir = File.expand_path('dest',temp_dir)
|
103
|
+
bucket = 'yore_spec'
|
104
|
+
|
105
|
+
FileUtils.mkdir_p([source1,source2,dest_dir])
|
106
|
+
# create some dirs and files in source
|
107
|
+
['a','a/1','b','c'].each {|p| FileUtils.mkdir_p(File.expand_path(p,source1))}
|
108
|
+
%w(a/blah.txt a/1/blahblah.txt b/apples.txt c/carrots.txt).each do |f|
|
109
|
+
MiscUtils::make_temp_file(f,source1)
|
110
|
+
end
|
111
|
+
['w','x/1','y/2','z'].each {|p| FileUtils.mkdir_p(File.expand_path(p,source2))}
|
112
|
+
%w(w/zonk.txt x/1/eggs.txt y/2/bloop.txt z/zax.txt).each do |f|
|
113
|
+
MiscUtils::make_temp_file(f,source2)
|
114
|
+
end
|
115
|
+
|
116
|
+
# create job file
|
117
|
+
job_template = <<EOF
|
118
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
119
|
+
<Yore>
|
120
|
+
<SimpleItems>
|
121
|
+
<Item Name="crypto_iv">3A63775C1E3F291B0925578165EB917E</Item>
|
122
|
+
<Item Name="crypto_key">07692FC8656F04AE5518B80D38681E038A3C12050DF6CC97CEEC33D800D5E2FE</Item>
|
123
|
+
<Item Name="prefix">backup</Item>
|
124
|
+
<Item Name="log_level">DEBUG</Item>
|
125
|
+
<Item Name="bucket">${BUCKET}</Item>
|
126
|
+
</SimpleItems>
|
127
|
+
<Sources>
|
128
|
+
<Source>
|
129
|
+
<IncludePath>${SOURCE1}</IncludePath>
|
130
|
+
<IncludePath>${SOURCE2}</IncludePath>
|
131
|
+
</Source>
|
132
|
+
</Sources>
|
133
|
+
</Yore>
|
134
|
+
EOF
|
135
|
+
|
136
|
+
job_content = StringUtils::render_template(job_template,{
|
137
|
+
'SOURCE1' => source1,
|
138
|
+
'SOURCE2' => source2,
|
139
|
+
'BUCKET' => bucket
|
140
|
+
})
|
141
|
+
MiscUtils::string_to_file(job_content,job_file = MiscUtils::temp_file)
|
142
|
+
|
143
|
+
ensure_clean_bucket(bucket)
|
144
|
+
@yore.configure({
|
145
|
+
:bucket => bucket
|
146
|
+
})
|
147
|
+
|
148
|
+
# call yore script with ruby from the command line, then download result and check contents
|
149
|
+
puts cmd = "#{File.expand_path('../lib/yore',THIS_DIR)} backup #{job_file}"
|
150
|
+
puts result = `#{cmd}`
|
151
|
+
|
152
|
+
retrieved_fname = File.expand_path(@yore.encode_file_name(), dest_dir)
|
153
|
+
collection_fname = MiscUtils::temp_file
|
154
|
+
|
155
|
+
puts @yore.download(retrieved_fname)
|
156
|
+
puts @yore.unpack(retrieved_fname,collection_fname)
|
157
|
+
|
158
|
+
filelist = MiscUtils::recursive_file_list(source_dir,false)
|
159
|
+
|
160
|
+
# check contains filelist files ignoring .contents
|
161
|
+
cmd = "tar --list --file=#{collection_fname}"
|
162
|
+
filelist_out = `#{cmd}`
|
163
|
+
filelist_out = filelist_out.split("\n").sort
|
164
|
+
filelist_out.should == filelist
|
165
|
+
# i = 0
|
166
|
+
# filelist_out.each {|line|
|
167
|
+
# next if line==".contents\n"
|
168
|
+
# i.should < filelist.length
|
169
|
+
# line.chomp("\n").should == MiscUtils.path_debase(filelist[i],source_dir) # .bite('/')
|
170
|
+
# i += 1
|
171
|
+
# }
|
172
|
+
# could also check .contents file against actual contents
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should assign proper boolean values" do
|
176
|
+
class Blah
|
177
|
+
SOMECONSTANT = {:a => 'AAA', :b => true, :c => false}
|
178
|
+
end
|
179
|
+
|
180
|
+
puts Blah::SOMECONSTANT.inspect
|
181
|
+
end
|
182
|
+
|
183
|
+
it "should provide configurable criteria for keeping old files"
|
184
|
+
|
185
|
+
it "should clean a folder full of files, removing files that don't match configurable criteria for keeping old files"
|
186
|
+
end
|
187
|
+
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/spec/spec_helper.rb
ADDED
data/spec/test_job_a.xml
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<Yore>
|
3
|
+
<SimpleItems>
|
4
|
+
<Item Name="keep_daily">14</Item>
|
5
|
+
<Item Name="keep_weekly">12</Item>
|
6
|
+
<Item Name="keep_monthly">12</Item>
|
7
|
+
<Item Name="crypto_iv">3A63775C1E3F291B0925578165EB917E</Item>
|
8
|
+
<Item Name="crypto_key">07692FC8656F04AE5518B80D38681E038A3C12050DF6CC97CEEC33D800D5E2FE</Item>
|
9
|
+
<Item Name="first_hour">4</Item>
|
10
|
+
<Item Name="prefix">backup</Item>
|
11
|
+
<Item Name="log_level">DEBUG</Item>
|
12
|
+
</SimpleItems>
|
13
|
+
<Sources>
|
14
|
+
<Source>
|
15
|
+
<IncludePath>test_source</IncludePath>
|
16
|
+
<!-- <ExcludePath></ExcludePath> -->
|
17
|
+
</Source>
|
18
|
+
</Sources>
|
19
|
+
</Yore>
|
data/spec/yore_spec.rb
ADDED
@@ -0,0 +1,199 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
3
|
+
|
4
|
+
gem 'RequirePaths'; require 'require_paths'
|
5
|
+
require_paths '../lib','../../..'
|
6
|
+
|
7
|
+
|
8
|
+
## Time to add your specs!
|
9
|
+
# http://rspec.info/
|
10
|
+
#describe "Place your specs here" do
|
11
|
+
#
|
12
|
+
# it "find this spec in spec directory" do
|
13
|
+
# violated "Be sure to write your specs"
|
14
|
+
# end
|
15
|
+
#end
|
16
|
+
|
17
|
+
require 'ihl_ruby/misc_utils'
|
18
|
+
|
19
|
+
require 'fileutils'
|
20
|
+
|
21
|
+
require 'yore/yore_core'
|
22
|
+
|
23
|
+
def ensure_clean_bucket(aName)
|
24
|
+
`s3cmd createbucket #{aName}`
|
25
|
+
`s3cmd deleteall #{aName}`
|
26
|
+
end
|
27
|
+
|
28
|
+
describe YoreCore::Yore do
|
29
|
+
before(:each) do
|
30
|
+
@yore = YoreCore::Yore.new
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should collect a list of files into a single file with a .contents file" do
|
34
|
+
# create a temp dir
|
35
|
+
temp_dir = MiscUtils::make_temp_dir('yore_spec')
|
36
|
+
# create source and dest subfolders
|
37
|
+
source_dir = File.expand_path('source',temp_dir)
|
38
|
+
dest_dir = File.expand_path('dest',temp_dir)
|
39
|
+
FileUtils.mkdir_p([source_dir,dest_dir])
|
40
|
+
# create some dirs and files in source
|
41
|
+
['a','a/1','b','c'].each {|p| FileUtils.mkdir_p(File.expand_path(p,source_dir))}
|
42
|
+
%w(a/blah.txt a/1/blahblah.txt b/apples.txt c/carrots.txt).each do |f|
|
43
|
+
MiscUtils::make_temp_file(f,source_dir)
|
44
|
+
end
|
45
|
+
# collect into dest file
|
46
|
+
# get recursive file list, without carrots
|
47
|
+
filelist = MiscUtils::recursive_file_list(source_dir) {|p| not p =~ /carrots.txt/}
|
48
|
+
dest_file = File.join(dest_dir,'destfile.bzb')
|
49
|
+
|
50
|
+
@yore.collect(filelist,dest_file)
|
51
|
+
|
52
|
+
# check contains filelist files ignoring .contents
|
53
|
+
cmd = "tar --list --file=#{dest_file}"
|
54
|
+
filelist_out = `#{cmd}`
|
55
|
+
i = 0
|
56
|
+
filelist_out.each_line {|line|
|
57
|
+
next if line==".contents\n"
|
58
|
+
i.should < filelist.length
|
59
|
+
line.chomp("\n").should == MiscUtils.path_debase(filelist[i],source_dir) # .bite('/')
|
60
|
+
i += 1
|
61
|
+
}
|
62
|
+
# could also check .contents file against actual contents
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should encrypt and unencrypt a file with a standard iv but a supplied key" do
|
66
|
+
orig_content = 'abcdef123456'
|
67
|
+
temp_file1 = MiscUtils.make_temp_file(nil,nil,orig_content)
|
68
|
+
temp_file2 = temp_file1+'.enc'
|
69
|
+
temp_file3 = temp_file1+'.dec'
|
70
|
+
|
71
|
+
@yore.pack(temp_file1,temp_file2)
|
72
|
+
@yore.unpack(temp_file2,temp_file3)
|
73
|
+
|
74
|
+
file3_content = MiscUtils.string_from_file(temp_file3)
|
75
|
+
file3_content.should == orig_content
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should create a backup filename combining a prefix, date, day and standard extension, and be able to decode the filename back to a date" do
|
79
|
+
@yore.configure({
|
80
|
+
:prefix => 'spec',
|
81
|
+
:first_hour => 4
|
82
|
+
})
|
83
|
+
now = Time.local(2009, 1, 1, 0, 0, 0, 0)
|
84
|
+
exp_filename = "spec-20081231.rew"
|
85
|
+
calc_filename = @yore.encode_file_name(now)
|
86
|
+
calc_filename.should == exp_filename
|
87
|
+
@yore.decode_file_name(calc_filename).should == Time.local(2008, 12, 31)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should upload and download files intact" do
|
91
|
+
bucket = 'yore_spec'
|
92
|
+
ensure_clean_bucket(bucket)
|
93
|
+
@yore.configure({
|
94
|
+
:bucket => bucket
|
95
|
+
})
|
96
|
+
content = 'this is my test content'
|
97
|
+
temp_dir = MiscUtils.make_temp_dir()
|
98
|
+
temp_file = MiscUtils.make_temp_file(nil, temp_dir, content)
|
99
|
+
puts @yore.upload(temp_file)
|
100
|
+
orig_file = temp_file+'.orig'
|
101
|
+
File.rename(temp_file, orig_file)
|
102
|
+
puts @yore.download(temp_file)
|
103
|
+
down_file_content = MiscUtils.string_from_file(temp_file)
|
104
|
+
down_file_content.should == content
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should backup and restore multiple directories of file" do
|
108
|
+
# create a temp dir
|
109
|
+
temp_dir = MiscUtils::make_temp_dir('yore_spec')
|
110
|
+
# create source and dest subfolders
|
111
|
+
source_dir = File.expand_path('source',temp_dir)
|
112
|
+
source1 = File.join(source_dir,'source1')
|
113
|
+
source2 = File.join(source_dir,'source2')
|
114
|
+
dest_dir = File.expand_path('dest',temp_dir)
|
115
|
+
bucket = 'yore_spec'
|
116
|
+
|
117
|
+
FileUtils.mkdir_p([source1,source2,dest_dir])
|
118
|
+
# create some dirs and files in source
|
119
|
+
['a','a/1','b','c'].each {|p| FileUtils.mkdir_p(File.expand_path(p,source1))}
|
120
|
+
%w(a/blah.txt a/1/blahblah.txt b/apples.txt c/carrots.txt).each do |f|
|
121
|
+
MiscUtils::make_temp_file(f,source1)
|
122
|
+
end
|
123
|
+
['w','x/1','y/2','z'].each {|p| FileUtils.mkdir_p(File.expand_path(p,source2))}
|
124
|
+
%w(w/zonk.txt x/1/eggs.txt y/2/bloop.txt z/zax.txt).each do |f|
|
125
|
+
MiscUtils::make_temp_file(f,source2)
|
126
|
+
end
|
127
|
+
|
128
|
+
# create job file
|
129
|
+
job_template = <<EOF
|
130
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
131
|
+
<Yore>
|
132
|
+
<SimpleItems>
|
133
|
+
<Item Name="crypto_iv">3A63775C1E3F291B0925578165EB917E</Item>
|
134
|
+
<Item Name="crypto_key">07692FC8656F04AE5518B80D38681E038A3C12050DF6CC97CEEC33D800D5E2FE</Item>
|
135
|
+
<Item Name="prefix">backup</Item>
|
136
|
+
<Item Name="log_level">DEBUG</Item>
|
137
|
+
<Item Name="bucket">${BUCKET}</Item>
|
138
|
+
</SimpleItems>
|
139
|
+
<Sources>
|
140
|
+
<Source>
|
141
|
+
<IncludePath>${SOURCE1}</IncludePath>
|
142
|
+
<IncludePath>${SOURCE2}</IncludePath>
|
143
|
+
</Source>
|
144
|
+
</Sources>
|
145
|
+
</Yore>
|
146
|
+
EOF
|
147
|
+
|
148
|
+
job_content = StringUtils::render_template(job_template,{
|
149
|
+
'SOURCE1' => source1,
|
150
|
+
'SOURCE2' => source2,
|
151
|
+
'BUCKET' => bucket
|
152
|
+
})
|
153
|
+
MiscUtils::string_to_file(job_content,job_file = MiscUtils::temp_file)
|
154
|
+
|
155
|
+
ensure_clean_bucket(bucket)
|
156
|
+
@yore.configure({
|
157
|
+
:bucket => bucket
|
158
|
+
})
|
159
|
+
|
160
|
+
# call yore script with ruby from the command line, then download result and check contents
|
161
|
+
puts cmd = "ruby #{File.expand_path('../bin/yore.rb',THIS_DIR)} backup #{job_file}"
|
162
|
+
puts result = `#{cmd}`
|
163
|
+
|
164
|
+
retrieved_fname = File.expand_path(@yore.encode_file_name(), dest_dir)
|
165
|
+
collection_fname = MiscUtils::temp_file
|
166
|
+
|
167
|
+
puts @yore.download(retrieved_fname)
|
168
|
+
puts @yore.unpack(retrieved_fname,collection_fname)
|
169
|
+
|
170
|
+
filelist = MiscUtils::recursive_file_list(source_dir,false)
|
171
|
+
|
172
|
+
# check contains filelist files ignoring .contents
|
173
|
+
cmd = "tar --list --file=#{collection_fname}"
|
174
|
+
filelist_out = `#{cmd}`
|
175
|
+
filelist_out = filelist_out.split("\n").sort
|
176
|
+
filelist_out.should == filelist
|
177
|
+
# i = 0
|
178
|
+
# filelist_out.each {|line|
|
179
|
+
# next if line==".contents\n"
|
180
|
+
# i.should < filelist.length
|
181
|
+
# line.chomp("\n").should == MiscUtils.path_debase(filelist[i],source_dir) # .bite('/')
|
182
|
+
# i += 1
|
183
|
+
# }
|
184
|
+
# could also check .contents file against actual contents
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should assign proper boolean values" do
|
188
|
+
class Blah
|
189
|
+
SOMECONSTANT = {:a => 'AAA', :b => true, :c => false}
|
190
|
+
end
|
191
|
+
|
192
|
+
puts Blah::SOMECONSTANT.inspect
|
193
|
+
end
|
194
|
+
|
195
|
+
|
196
|
+
it "should provide configurable criteria for keeping old files"
|
197
|
+
|
198
|
+
it "should clean a folder full of files, removing files that don't match configurable criteria for keeping old files"
|
199
|
+
end
|
data/tasks/rspec.rake
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
begin
|
2
|
+
require 'spec'
|
3
|
+
rescue LoadError
|
4
|
+
require 'rubygems'
|
5
|
+
require 'spec'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'spec/rake/spectask'
|
9
|
+
rescue LoadError
|
10
|
+
puts <<-EOS
|
11
|
+
To use rspec for testing you must install rspec gem:
|
12
|
+
gem install rspec
|
13
|
+
EOS
|
14
|
+
exit(0)
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run the specs under spec/models"
|
18
|
+
Spec::Rake::SpecTask.new do |t|
|
19
|
+
t.spec_opts = ['--options', "spec/spec.opts"]
|
20
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yore
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gary McGhee
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-01-25 00:00:00 +09:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: RequirePaths
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.0.1
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: cmdparse
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.0.2
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: s3sync
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.2.5
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: newgem
|
47
|
+
type: :development
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.2.3
|
54
|
+
version:
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: hoe
|
57
|
+
type: :development
|
58
|
+
version_requirement:
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 1.8.0
|
64
|
+
version:
|
65
|
+
description: FIX (describe your package)
|
66
|
+
email:
|
67
|
+
- contact@buzz@ware@com@au
|
68
|
+
executables:
|
69
|
+
- yore
|
70
|
+
extensions: []
|
71
|
+
|
72
|
+
extra_rdoc_files:
|
73
|
+
- History.txt
|
74
|
+
- Manifest.txt
|
75
|
+
- PostInstall.txt
|
76
|
+
- README.rdoc
|
77
|
+
files:
|
78
|
+
- bin/yore
|
79
|
+
- History.txt
|
80
|
+
- lib/ihl_ruby/enum.rb
|
81
|
+
- lib/ihl_ruby/extend_base_classes.rb
|
82
|
+
- lib/ihl_ruby/misc_utils.rb
|
83
|
+
- lib/ihl_ruby/string_utils.rb
|
84
|
+
- lib/ihl_ruby/xml_utils.rb
|
85
|
+
- lib/yore.orig.rb
|
86
|
+
- lib/yore/yore_core.rb
|
87
|
+
- Manifest.txt
|
88
|
+
- PostInstall.txt
|
89
|
+
- Rakefile
|
90
|
+
- README.rdoc
|
91
|
+
- script/console
|
92
|
+
- script/destroy
|
93
|
+
- script/generate
|
94
|
+
- spec/rewind_spec.rb
|
95
|
+
- spec/spec.opts
|
96
|
+
- spec/spec_helper.rb
|
97
|
+
- spec/test_job_a.xml
|
98
|
+
- spec/yore_spec.rb
|
99
|
+
- tasks/rspec.rake
|
100
|
+
has_rdoc: true
|
101
|
+
homepage: FIX (url)
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options:
|
104
|
+
- --main
|
105
|
+
- README.rdoc
|
106
|
+
require_paths:
|
107
|
+
- lib
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: "0"
|
113
|
+
version:
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: "0"
|
119
|
+
version:
|
120
|
+
requirements: []
|
121
|
+
|
122
|
+
rubyforge_project: buzzware
|
123
|
+
rubygems_version: 1.3.1
|
124
|
+
signing_key:
|
125
|
+
specification_version: 2
|
126
|
+
summary: FIX (describe your package)
|
127
|
+
test_files: []
|
128
|
+
|