packagegenerator 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.
@@ -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