manman 0.0.1 → 0.1.0

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/Manifest.txt CHANGED
@@ -2,4 +2,8 @@ History.markdown
2
2
  Manifest.txt
3
3
  README.markdown
4
4
  Rakefile
5
+ bin/manman
5
6
  lib/manman.rb
7
+ lib/manman/opts.rb
8
+ lib/manman/runner.rb
9
+ lib/manman/version.rb
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'hoe'
2
- require './lib/manman.rb'
2
+ require './lib/manman/version.rb'
3
3
 
4
4
  Hoe.spec 'manman' do
5
5
 
@@ -12,7 +12,7 @@ Hoe.spec 'manman' do
12
12
 
13
13
  self.author = 'Gerald Bauer'
14
14
  self.email = 'webslideshow@googlegroups.com'
15
-
15
+
16
16
  # switch extension to .markdown for gihub formatting
17
17
  self.readme_file = 'README.markdown'
18
18
  self.history_file = 'History.markdown'
data/bin/manman ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ###
4
+ ##
5
+ # todo/fix: set filemod to x flag
6
+
7
+ require 'manman'
8
+
9
+ Manman.main
@@ -0,0 +1,69 @@
1
+ module Manman
2
+
3
+ class Opts
4
+
5
+ def base=(value)
6
+ @base = value
7
+ end
8
+
9
+ def base
10
+ @base || './paket'
11
+ end
12
+
13
+
14
+ def template=(value)
15
+ @template = value
16
+ end
17
+
18
+ def template
19
+ @template || 'paket.txt.erb'
20
+ end
21
+
22
+
23
+ def output=(value)
24
+ @output = value
25
+ end
26
+
27
+ def output
28
+ @output || 'paket.txt'
29
+ end
30
+
31
+
32
+ def release=(value)
33
+ @release = value
34
+ end
35
+
36
+ def release
37
+ @release # NB: has no default; required arg
38
+ end
39
+
40
+
41
+ def env=(value)
42
+ @env = value
43
+ end
44
+
45
+ def env
46
+ @env # NB: has no default; required arg
47
+ end
48
+
49
+
50
+ def valid=(value)
51
+ @valid = value
52
+ end
53
+
54
+ def valid
55
+ @valid # NB: has no default; required arg
56
+ end
57
+
58
+
59
+ def config_path=(value)
60
+ @config_path = value
61
+ end
62
+
63
+ def config_path
64
+ @config_path || '~/.manman'
65
+ end
66
+
67
+ end # class Opts
68
+
69
+ end # module Manman
@@ -0,0 +1,208 @@
1
+ module Manman
2
+
3
+ class Runner
4
+
5
+ def initialize
6
+ @logger = Logger.new(STDOUT)
7
+ @logger.level = Logger::INFO
8
+
9
+ @opts = Opts.new
10
+ end
11
+
12
+ attr_reader :logger, :opts
13
+
14
+ def run( args )
15
+ opt=OptionParser.new do |cmd|
16
+
17
+ cmd.banner = "Usage: manman [options]"
18
+
19
+ cmd.on( '-r', '--release RELEASE', 'Release Version (e.g. 2013.08)' ) do |release|
20
+ opts.release = release
21
+ end
22
+
23
+ cmd.on( '-e', '--env ENV', 'Environment (e.g. TEST)' ) do |env|
24
+ opts.env = env
25
+ end
26
+
27
+ cmd.on( '-u', '--valid_until VALID', 'Valid until (e.g. 2014.01.31)' ) do |valid|
28
+ opts.valid = valid
29
+ end
30
+
31
+ cmd.on( '-d', '--dir PATH', "Path to Packages (default is #{opts.base})" ) do |path|
32
+ opts.base = path
33
+ end
34
+
35
+
36
+ cmd.on( '-t', '--template FILE', "Input Template (default is #{opts.template})" ) do |file|
37
+ opts.template = file
38
+ end
39
+
40
+ cmd.on( '-o', '--out FILE', "Output File (default is #{opts.output})" ) do |file|
41
+ opts.output = file
42
+ end
43
+
44
+
45
+
46
+ cmd.on( '-c', '--config PATH', "Configuration Path (default is #{opts.config_path})" ) do |path|
47
+ opts.config_path = path
48
+ end
49
+
50
+ cmd.on( '-v', '--version', "Show version" ) do
51
+ puts Manman.banner
52
+ exit
53
+ end
54
+
55
+ cmd.on( "--verbose", "Show debug trace" ) do
56
+ logger.datetime_format = "%H:%H:%S"
57
+ logger.level = Logger::DEBUG
58
+ end
59
+
60
+ cmd.on_tail( "-h", "--help", "Show this message" ) do
61
+ puts <<EOS
62
+
63
+ manman - Manifest Manager, Version #{VERSION}
64
+
65
+ #{cmd.help}
66
+
67
+ Examples:
68
+ manman -r 2013.08 -e TEST -u 2014.12.31
69
+
70
+ EOS
71
+ exit
72
+ end
73
+ end
74
+
75
+ opt.parse!( args )
76
+
77
+ puts Manman.banner
78
+
79
+
80
+ # check for required args
81
+
82
+ puts "*** Missing Argument: Release Argument Required" if opts.release.nil?
83
+ puts "*** Missing Argument: Environment Argument Required" if opts.env.nil?
84
+ puts "*** Missing Argument: Environment Argument Required" if opts.valid.nil?
85
+
86
+ if opts.release.nil? || opts.env.nil? || opts.valid.nil?
87
+ puts
88
+ puts "Use -h/--help for usage options."
89
+ return ## exit ??
90
+ end
91
+
92
+ puts "Using settings:"
93
+ pp opts
94
+
95
+
96
+ generate_manifest()
97
+
98
+ puts 'Done.'
99
+
100
+ end # method run
101
+
102
+
103
+
104
+ def generate_manifest
105
+
106
+ puts " working folder is: #{Dir.pwd}"
107
+
108
+ puts "Loading template #{opts.template}..."
109
+
110
+ old_lines = File.read( opts.template )
111
+
112
+ new_lines = []
113
+
114
+ header_lines = []
115
+
116
+
117
+ ### todo/fix: move to template ???
118
+ header_lines << "####################################################\n"
119
+ header_lines << "# generated on #{Time.now} using #{Manman.banner}\n"
120
+ header_lines << "# - version: #{opts.release}, env: #{opts.env}, valid until: #{opts.valid}\n"
121
+
122
+ old_lines.each_line do |line|
123
+
124
+ if line =~ /^\s*#/
125
+ # skip komments and do NOT copy to result (keep comments secret!)
126
+ logger.debug 'skipping comment line'
127
+ next
128
+ end
129
+
130
+ if line =~ /^\s*$/
131
+ # kommentar oder leerzeile überspringen
132
+ logger.debug 'skipping blank line'
133
+ new_lines << line
134
+ next
135
+ end
136
+
137
+ # split/process key value pair
138
+
139
+ tokens = line.split( ':' )
140
+
141
+ key = tokens[0]
142
+ values = tokens[1]
143
+
144
+
145
+ ## special keys (NOT files; do NOT calculate md5 digest)
146
+
147
+ ## todo: make headers configurable
148
+
149
+ if [ 'VERSION', 'UMGEBUNG', 'MANDANT', 'GUELTIG_BIS', 'CHECKSUM' ].include?( key )
150
+ if key == 'VERSION'
151
+ new_lines << "#{key}: #{opts.release}\n"
152
+ elsif key == 'UMGEBUNG'
153
+ new_lines << "#{key}: #{opts.env}\n"
154
+ elsif key == 'GUELTIG_BIS'
155
+ new_lines << "#{key}: #{opts.valid}\n"
156
+ else
157
+ new_lines << line ## just pass header line throug; not modified
158
+ end
159
+ next
160
+ end
161
+
162
+ ### calculate md5 digests
163
+
164
+ md5 = ""
165
+ fn = "#{opts.base}/#{key}" # filename
166
+
167
+ if File.exists?( fn ) == false
168
+ md5 = "xxxxxxx"
169
+ msg = "*** ERROR: #{key} missing; using path #{fn}"
170
+ puts msg
171
+ header_lines << "# #{msg}\n" # add error to header in manifest
172
+ else
173
+ md5 = calc_digest_md5( fn )
174
+ puts "OK #{key} -> #{md5}"
175
+ end
176
+
177
+ new_lines << "#{key}: #{md5}, #{values}"
178
+
179
+ end # oldlines.each
180
+
181
+
182
+ header_lines << "#####################################\n"
183
+ header_lines << "\n"
184
+
185
+ new_lines = header_lines + new_lines
186
+
187
+ File.open( opts.output, 'w') do |f|
188
+ new_lines.each do |line|
189
+ f.write( line )
190
+ end
191
+ end
192
+
193
+ end # method generate_manifest
194
+
195
+
196
+ def calc_digest_md5( fn )
197
+ # digest/hash is a string of 20 hexadecimal 8-bit numbers
198
+ # example:
199
+ # 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
200
+
201
+ md5 = Digest::MD5.hexdigest( File.open( fn, 'rb') { |f| f.read } )
202
+ md5
203
+ end
204
+
205
+
206
+
207
+ end # class Runner
208
+ end # module Manman
@@ -0,0 +1,4 @@
1
+
2
+ module Manman
3
+ VERSION = '0.1.0'
4
+ end
data/lib/manman.rb CHANGED
@@ -1,4 +1,39 @@
1
1
 
2
+ require 'yaml'
3
+ require 'pp'
4
+ require 'logger'
5
+ require 'optparse'
6
+ require 'fileutils'
7
+ require 'date'
8
+ require 'digest/md5'
9
+
10
+
11
+
12
+ # rubygems
13
+
14
+ #### nothing here for now
15
+
16
+ # our own code
17
+
18
+ require 'manman/version'
19
+ require 'manman/opts'
20
+ require 'manman/runner'
21
+
2
22
  module Manman
3
- VERSION = '0.0.1'
4
- end
23
+
24
+ def self.banner
25
+ "manman #{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
26
+ end
27
+
28
+ def self.root
29
+ "#{File.expand_path( File.dirname(File.dirname(__FILE__)) )}"
30
+ end
31
+
32
+ def self.main
33
+ Runner.new.run(ARGV)
34
+ end
35
+
36
+ end # module Manman
37
+
38
+
39
+ Manman.main if __FILE__ == $0
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: manman
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 0
9
8
  - 1
10
- version: 0.0.1
9
+ - 0
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Gerald Bauer
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-10-04 00:00:00 Z
18
+ date: 2012-10-17 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rdoc
@@ -49,8 +49,8 @@ dependencies:
49
49
  version_requirements: *id002
50
50
  description: manman - Manifest Manager
51
51
  email: webslideshow@googlegroups.com
52
- executables: []
53
-
52
+ executables:
53
+ - manman
54
54
  extensions: []
55
55
 
56
56
  extra_rdoc_files:
@@ -60,7 +60,11 @@ files:
60
60
  - Manifest.txt
61
61
  - README.markdown
62
62
  - Rakefile
63
+ - bin/manman
63
64
  - lib/manman.rb
65
+ - lib/manman/opts.rb
66
+ - lib/manman/runner.rb
67
+ - lib/manman/version.rb
64
68
  homepage: http://geraldb.github.com/manman
65
69
  licenses: []
66
70