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.
- data/lib/packagegenerator/generator.rb +114 -0
- data/lib/packagegenerator/install_config.rb +14 -0
- data/lib/packagegenerator/install_directory.rb +14 -0
- data/lib/packagegenerator/install_file.rb +14 -0
- data/lib/packagegenerator/install_item.rb +29 -0
- data/lib/packagegenerator/install_link.rb +14 -0
- data/lib/packagegenerator.rb +10 -0
- data/test/test_generator.rb +46 -0
- metadata +53 -0
@@ -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,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,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
|