labrea 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+