labrea 0.0.1

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.
Files changed (2) hide show
  1. data/lib/labrea.rb +128 -0
  2. metadata +92 -0
data/lib/labrea.rb ADDED
@@ -0,0 +1,128 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'digest/sha1'
5
+ require 'json'
6
+
7
+ class Labrea
8
+ # Class initialization
9
+ def initialize(filename, install_dir, exclude)
10
+ @filename = filename
11
+ @install_dir = install_dir
12
+ @exclude = exclude
13
+ @working_dir = Dir.pwd()
14
+ @changeset = Array.new
15
+ end
16
+
17
+ # Installation of binary archive
18
+ def install(testmode=false)
19
+ @changeset.clear
20
+ extract_files(testmode)
21
+
22
+ # Generate checksums and add to hash
23
+ checksums = Hash.new
24
+ if File.exists?(@install_dir)
25
+ Dir.chdir(@install_dir) do |path|
26
+ Dir.glob("**/*.*") do |file|
27
+ @changeset << file.to_s
28
+ if File.file?(file)
29
+ puts file
30
+ if !@exclude.include? file
31
+ checksums[file] = sha1sum(file)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ # Write out checksum file
39
+ File.open("#{@install_dir}/checksum.json", "w+") do |file|
40
+ file.puts JSON.generate(checksums)
41
+ end
42
+
43
+ return @changeset
44
+ end
45
+
46
+ # Update of binary archive
47
+ def update(testmode=false)
48
+ end
49
+
50
+ # Verification of binary archive
51
+ def verify(testmode=false)
52
+ @changeset.clear
53
+
54
+ # Read checksums from file
55
+ checksums = Hash.new
56
+ File.open("#{@install_dir}/checksum.json", "r+") do |file|
57
+ checksums = JSON.load(file)
58
+ end
59
+
60
+ checksums.each_pair do |k,v|
61
+ Dir.chdir(@install_dir) do |path|
62
+ if sha1sum(k) != v
63
+ extract_file(k, testmode)
64
+ end
65
+ end
66
+ end
67
+
68
+ return @changeset
69
+ end
70
+
71
+ def filetype(filename)
72
+ if filename.match('.*\.tgz')
73
+ return :tgz
74
+ end
75
+
76
+ if filename.match('.*\.tar\.gz')
77
+ return :tgz
78
+ end
79
+
80
+ if filename.match('.*\.zip')
81
+ return :zip
82
+ end
83
+
84
+ if filename.match('.*\.bz2')
85
+ return :bz2
86
+ end
87
+
88
+ return :unknown
89
+ end
90
+
91
+ def extract_files(testmode)
92
+ Dir.chdir(@working_dir) do |path|
93
+ @changeset << @install_dir
94
+
95
+ case filetype(@filename)
96
+ when :tgz
97
+ `tar -xzvf #{@filename} -C #{@install_dir}` unless testmode
98
+ when :zip
99
+ `unzip #{@filename} -d #{@install_dir}` unless testmode
100
+ when :bz2
101
+ `tar -xjvf #{@filename} -C #{@install_dir}` unless testmode
102
+ end
103
+ end
104
+ end
105
+
106
+ def extract_file(file, testmode)
107
+ Dir.chdir(@working_dir) do |path|
108
+ @changeset << file.to_s
109
+
110
+ case filetype(@filename)
111
+ when :tgz
112
+ `tar -xzvf #{@filename} -C #{@install_dir} #{file}` unless testmode
113
+ when :zip
114
+ `unzip #{@filename} -d #{@install_dir} #{file}` unless testmode
115
+ when :bz2
116
+ `tar -xjvf #{@filename} -C #{@install_dir} #{file}` unless testmode
117
+ end
118
+ end
119
+ end
120
+
121
+ def sha1sum(file)
122
+ if File.file?(file)
123
+ return Digest::SHA1.hexdigest File.read(file)
124
+ end
125
+
126
+ return false
127
+ end
128
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: labrea
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - David Sledge
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2013-08-14 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: json
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: bundler
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ description: A binary installation utility
49
+ email: dsledge@appriss.com
50
+ executables: []
51
+
52
+ extensions: []
53
+
54
+ extra_rdoc_files: []
55
+
56
+ files:
57
+ - lib/labrea.rb
58
+ homepage: https://github.com/dsledge/labrea
59
+ licenses:
60
+ - GPL3
61
+ post_install_message:
62
+ rdoc_options: []
63
+
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ hash: 3
81
+ segments:
82
+ - 0
83
+ version: "0"
84
+ requirements: []
85
+
86
+ rubyforge_project:
87
+ rubygems_version: 1.8.15
88
+ signing_key:
89
+ specification_version: 3
90
+ summary: Binary Installation Utility
91
+ test_files: []
92
+