packagegenerator 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,114 @@
1
+ require 'pathname'
2
+
3
+ module PackageGenerator
4
+ class Generator
5
+
6
+ attr_writer :package_name, :copyright, :description, :version, :vendor, :license, :readme, :preinstall_commands, :postinstall_commands, :install_items
7
+
8
+ def initialize
9
+ @license = 'LICENSE'
10
+ @readme = 'README'
11
+ @install_items = []
12
+ end
13
+
14
+ def add_install_item(item)
15
+ @install_items << item
16
+ end
17
+
18
+ def add_directory_contents(target_path, directory_path, exclude=[])
19
+ directory_search=File.join(directory_path, '**', '*')
20
+ directory_pathname=Pathname.new(directory_path)
21
+
22
+ search_files = Dir.glob(directory_search)
23
+
24
+ exclude.each do |excluded_item|
25
+ search_files.delete excluded_item
26
+ end
27
+
28
+
29
+ search_files.each do |file_name|
30
+ if File.file?(file_name)
31
+ install_file = PackageGenerator::InstallFile.new
32
+ install_file.source = file_name
33
+ install_file.mode = Integer("%o" % (File.lstat(file_name).mode & 0777))
34
+
35
+ file_pathname = Pathname.new(file_name)
36
+ relative_path = file_pathname.relative_path_from(directory_pathname)
37
+
38
+ install_file.target = File.join(target_path, relative_path)
39
+
40
+ add_install_item install_file
41
+ end
42
+ end
43
+ end
44
+
45
+
46
+ def generate(output=$stdout)
47
+ raise ArgumentError, 'package_name cannot be nil.' if @package_name.nil?
48
+ raise ArgumentError, 'copyright cannot be nil.' if @copyright.nil?
49
+ raise ArgumentError, 'vendor cannot be nil.' if @vendor.nil?
50
+ raise ArgumentError, 'license cannot be nil.' if @license.nil?
51
+ raise ArgumentError, 'readme cannot be nil.' if @readme.nil?
52
+ raise ArgumentError, 'description cannot be nil.' if @description.nil?
53
+ raise ArgumentError, 'version cannot be nil.' if @version.nil?
54
+
55
+ output.write "%product #{@package_name}\n"
56
+ output.write "%copyright #{@copyright}\n"
57
+ output.write "%vendor #{@vendor}\n"
58
+ output.write "%license #{@license}\n"
59
+ output.write "%readme #{@readme}\n"
60
+ output.write "%description #{@description}\n"
61
+ output.write "%version #{@version}\n"
62
+
63
+ write_preinstall(output) if @preinstall_commands.is_a?(Array)
64
+ write_postinstall(output) if @postinstall_commands.is_a?(Array)
65
+ write_install_items(output) if @install_items.is_a?(Array) && @install_items.length > 0
66
+ end
67
+
68
+ :private
69
+ def write_preinstall(output)
70
+ output.write "\n"
71
+ preinstall_index = 0
72
+ @preinstall_commands.each do |preinstall_command|
73
+ output.write "%preinstall "
74
+ if preinstall_command =~ /\n/
75
+ output.write "<< EOF#{preinstall_index}\n"
76
+ output.write "#{preinstall_command}\n"
77
+ output.write "EOF#{preinstall_index}\n"
78
+ else
79
+ output.write "#{preinstall_command}\n"
80
+ end
81
+
82
+ preinstall_index += 1
83
+ end
84
+ end
85
+
86
+ def write_postinstall(output)
87
+ output.write "\n"
88
+ postinstall_index = 0
89
+ @postinstall_commands.each do |postinstall_command|
90
+ output.write "%postinstall "
91
+ if postinstall_command =~ /\n/
92
+ output.write "<< EOF#{postinstall_index}\n"
93
+ output.write "#{postinstall_command}\n"
94
+ output.write "EOF#{postinstall_index}\n"
95
+ else
96
+ output.write "#{postinstall_command}\n"
97
+ end
98
+
99
+ postinstall_index += 1
100
+ end
101
+ end
102
+
103
+ def write_install_items(output)
104
+ output.write "\n"
105
+ @install_items.each do |install_file|
106
+ if(install_file.is_a?(InstallItem))
107
+ install_file.write(output)
108
+ end
109
+ end
110
+ end
111
+
112
+ end
113
+
114
+ end
@@ -0,0 +1,14 @@
1
+ module PackageGenerator
2
+ class InstallConfig < InstallItem
3
+ def initialize(args=nil)
4
+ super args
5
+ end
6
+
7
+ def write(output=$stdout)
8
+ validate
9
+
10
+ output.write "c #{@mode} #{@user} #{@group} '#{@target}' '#{@source}'\n"
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module PackageGenerator
2
+ class InstallDirectory < InstallItem
3
+ def initialize(args=nil)
4
+ super args
5
+ end
6
+
7
+ def write(output=$stdout)
8
+ validate
9
+
10
+ output.write "d #{@mode} #{@user} #{@group} '#{@target}' -\n"
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module PackageGenerator
2
+ class InstallFile < InstallItem
3
+ def initialize(args=nil)
4
+ super args
5
+ end
6
+
7
+ def write(output=$stdout)
8
+ validate
9
+
10
+ output.write "f #{@mode} #{@user} #{@group} '#{@target}' '#{@source}'\n"
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,29 @@
1
+ module PackageGenerator
2
+ class InstallItem
3
+ attr_writer :mode, :user, :group, :source, :target
4
+
5
+ def initialize args
6
+ unless args.nil?
7
+ @mode = args[:mode] if args.has_key?(:mode)
8
+ @group = args[:group] if args.has_key?(:group)
9
+ @user = args[:user] if args.has_key?(:user)
10
+ @source = args[:source] if args.has_key?(:source)
11
+ @target = args[:target] if args.has_key?(:target)
12
+ else
13
+ @mode = 644
14
+ @user = 'root'
15
+ @group ='root'
16
+ end
17
+ end
18
+
19
+ :protected
20
+ def validate
21
+ raise ArgumentError, 'mode must be an number.' unless @mode.is_a?(Numeric)
22
+ raise ArgumentError, 'user cannot be nil.' if @user.nil?
23
+ raise ArgumentError, 'group cannot be nil.' if @group.nil?
24
+ raise ArgumentError, 'source cannot be nil.' if @source.nil?
25
+ raise ArgumentError, 'target cannot be nil.' if @target.nil?
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,14 @@
1
+ module PackageGenerator
2
+ class InstallFile < InstallItem
3
+ def initialize(args=nil)
4
+ super args
5
+ end
6
+
7
+ def write(output=$stdout)
8
+ validate
9
+
10
+ output.write "l #{@mode} #{@user} #{@group} '#{@target}' '#{@source}'\n"
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ require File.join(File.dirname(__FILE__), 'packagegenerator', 'generator')
2
+ require File.join(File.dirname(__FILE__), 'packagegenerator', 'install_item')
3
+ require File.join(File.dirname(__FILE__), 'packagegenerator', 'install_file')
4
+ require File.join(File.dirname(__FILE__), 'packagegenerator', 'install_directory')
5
+
6
+ module PackageGenerator
7
+ unless const_defined?(:VERSION)
8
+ VERSION = '0.0.1'
9
+ end
10
+ end
@@ -0,0 +1,46 @@
1
+ require "test/unit"
2
+ require 'packagegenerator'
3
+ require 'tmpdir'
4
+
5
+ class Generator < Test::Unit::TestCase
6
+ def tempfolder
7
+ return File.join(Dir.tmpdir(), 'packagegenerator')
8
+ end
9
+
10
+ def setup
11
+ 500.times do |i|
12
+ directory_number = i%7
13
+ directory_path = File.join(tempfolder, directory_number.to_s)
14
+ FileUtils.makedirs directory_path unless Dir.exists?(directory_path)
15
+
16
+ file_path = File.join(directory_path, i.to_s)
17
+
18
+ File.open file_path, 'w' do |f|
19
+ f.write i
20
+ end
21
+
22
+ File.chmod 0755, file_path if i % 3 == 1
23
+ File.chmod 0700, file_path if i % 4 == 1
24
+ File.chmod 0600, file_path if i % 2 == 1
25
+ end
26
+ end
27
+
28
+ def teardown
29
+ FileUtils.rmtree tempfolder
30
+ end
31
+
32
+ def test_something
33
+ foo = PackageGenerator::Generator.new
34
+ foo.package_name= 'example_package'
35
+ foo.copyright= 'Copyright some company 2012'
36
+ foo.vendor='some company'
37
+ foo.description='adsfasd'
38
+ foo.version = '1.0.0.0'
39
+ #foo.preinstall_commands=['echo preinstall "#1"', "echo 'multiline'\necho 'test'"]
40
+ #foo.postinstall_commands=['echo preinstall "#1"', "echo 'multiline'\necho 'test'"]
41
+
42
+ foo.add_directory_contents '/var/lib/test/packagegenerator', tempfolder
43
+ foo.generate
44
+ end
45
+
46
+ end
metadata ADDED
@@ -0,0 +1,53 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: packagegenerator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jeremy Custenborder
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-15 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: packagegenerator is a simple wrapper to generate input files for epm.
15
+ email: jcustenborder@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/packagegenerator/generator.rb
21
+ - lib/packagegenerator/install_config.rb
22
+ - lib/packagegenerator/install_directory.rb
23
+ - lib/packagegenerator/install_file.rb
24
+ - lib/packagegenerator/install_item.rb
25
+ - lib/packagegenerator/install_link.rb
26
+ - lib/packagegenerator.rb
27
+ - test/test_generator.rb
28
+ homepage: http://github.com/jcustenborder/packagegenerator
29
+ licenses: []
30
+ post_install_message:
31
+ rdoc_options: []
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ requirements: []
47
+ rubyforge_project:
48
+ rubygems_version: 1.8.23
49
+ signing_key:
50
+ specification_version: 3
51
+ summary: packagegenerator is a simple wrapper to generate input files for epm.
52
+ test_files:
53
+ - test/test_generator.rb