xig_installer 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/ChangeLog ADDED
@@ -0,0 +1,4 @@
1
+ == 0.0.1 / 2010-01-05
2
+
3
+ * initial release
4
+
data/README ADDED
@@ -0,0 +1,29 @@
1
+
2
+ = xig_installer
3
+
4
+
5
+ == Description
6
+
7
+
8
+ == Installation
9
+
10
+ === Archive Installation
11
+
12
+ rake install
13
+
14
+ === Gem Installation
15
+
16
+ gem install xig_installer
17
+
18
+
19
+ == Features/Problems
20
+
21
+
22
+ == Synopsis
23
+
24
+
25
+ == Copyright
26
+
27
+ Author:: wtnabe <wtnabe@gmail.com>
28
+ Copyright:: Copyright (c) 2010 wtnabe
29
+ License::
data/Rakefile ADDED
@@ -0,0 +1,145 @@
1
+ # -*- mode: ruby -*-
2
+ require 'rubygems'
3
+ require 'rake'
4
+ require 'rake/clean'
5
+ require 'rake/testtask'
6
+ require 'rake/packagetask'
7
+ require 'rake/gempackagetask'
8
+ require 'rake/rdoctask'
9
+ require 'rake/contrib/rubyforgepublisher'
10
+ require 'rake/contrib/sshpublisher'
11
+ require 'fileutils'
12
+ require 'lib/xig_installer'
13
+ include FileUtils
14
+
15
+ NAME = "xig_installer"
16
+ AUTHOR = "wtnabe"
17
+ EMAIL = "wtnabe@gmail.com"
18
+ DESCRIPTION = "Installer for net-irc example irc gateways"
19
+ RUBYFORGE_PROJECT = "xig_installer"
20
+ HOMEPATH = "http://github.com/wtnabe/xig_installer"
21
+ BIN_FILES = %w( xig_installer )
22
+
23
+ VERS = XigInstaller::VERSION
24
+ REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
25
+ CLEAN.include ['**/.*.sw?', '*.gem', '.config']
26
+ RDOC_OPTS = [
27
+ '--title', "#{NAME} documentation",
28
+ "--charset", "utf-8",
29
+ "--opname", "index.html",
30
+ "--line-numbers",
31
+ "--main", "README",
32
+ "--inline-source",
33
+ ]
34
+
35
+ task :default => [:test]
36
+ task :package => [:clean]
37
+
38
+ Rake::TestTask.new("test") do |t|
39
+ t.libs << "test"
40
+ t.pattern = "test/**/*_test.rb"
41
+ t.verbose = true
42
+ end
43
+
44
+ spec = Gem::Specification.new do |s|
45
+ s.name = NAME
46
+ s.version = VERS
47
+ s.platform = Gem::Platform::RUBY
48
+ s.has_rdoc = true
49
+ s.extra_rdoc_files = ["README", "ChangeLog"]
50
+ s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
51
+ s.summary = DESCRIPTION
52
+ s.description = DESCRIPTION
53
+ s.author = AUTHOR
54
+ s.email = EMAIL
55
+ s.homepage = HOMEPATH
56
+ s.executables = BIN_FILES
57
+ s.rubyforge_project = RUBYFORGE_PROJECT
58
+ s.bindir = "bin"
59
+ s.require_path = "lib"
60
+ #s.autorequire = ""
61
+ s.test_files = Dir["test/*_test.rb"]
62
+
63
+ s.add_dependency('net-irc')
64
+ #s.required_ruby_version = '>= 1.8.2'
65
+
66
+ s.files = %w(README ChangeLog Rakefile) +
67
+ Dir.glob("{bin,doc,test,lib,templates,generator,extras,website,script}/**/*") +
68
+ Dir.glob("ext/**/*.{h,c,rb}") +
69
+ Dir.glob("examples/**/*.rb") +
70
+ Dir.glob("tools/*.rb") +
71
+ Dir.glob("rails/*.rb")
72
+
73
+ s.extensions = FileList["ext/**/extconf.rb"].to_a
74
+ end
75
+
76
+ Rake::GemPackageTask.new(spec) do |p|
77
+ p.need_tar = true
78
+ p.gem_spec = spec
79
+ end
80
+
81
+ task :install do
82
+ name = "#{NAME}-#{VERS}.gem"
83
+ sh %{rake package}
84
+ sh %{sudo gem install pkg/#{name}}
85
+ end
86
+
87
+ task :uninstall => [:clean] do
88
+ sh %{sudo gem uninstall #{NAME}}
89
+ end
90
+
91
+
92
+ Rake::RDocTask.new do |rdoc|
93
+ rdoc.rdoc_dir = 'html'
94
+ rdoc.options += RDOC_OPTS
95
+ rdoc.template = "resh"
96
+ #rdoc.template = "#{ENV['template']}.rb" if ENV['template']
97
+ if ENV['DOC_FILES']
98
+ rdoc.rdoc_files.include(ENV['DOC_FILES'].split(/,\s*/))
99
+ else
100
+ rdoc.rdoc_files.include('README', 'ChangeLog')
101
+ rdoc.rdoc_files.include('lib/**/*.rb')
102
+ rdoc.rdoc_files.include('ext/**/*.c')
103
+ end
104
+ end
105
+
106
+ desc "Publish to RubyForge"
107
+ task :rubyforge => [:rdoc, :package] do
108
+ require 'rubyforge'
109
+ Rake::RubyForgePublisher.new(RUBYFORGE_PROJECT, 'wtnabe').upload
110
+ end
111
+
112
+ desc 'Package and upload the release to rubyforge.'
113
+ task :release => [:clean, :package] do |t|
114
+ v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
115
+ abort "Versions don't match #{v} vs #{VERS}" unless v == VERS
116
+ pkg = "pkg/#{NAME}-#{VERS}"
117
+
118
+ require 'rubyforge'
119
+ rf = RubyForge.new.configure
120
+ puts "Logging in"
121
+ rf.login
122
+
123
+ c = rf.userconfig
124
+ # c["release_notes"] = description if description
125
+ # c["release_changes"] = changes if changes
126
+ c["preformatted"] = true
127
+
128
+ files = [
129
+ "#{pkg}.tgz",
130
+ "#{pkg}.gem"
131
+ ].compact
132
+
133
+ puts "Releasing #{NAME} v. #{VERS}"
134
+ rf.add_release RUBYFORGE_PROJECT, NAME, VERS, *files
135
+ end
136
+
137
+ desc 'Show information about the gem.'
138
+ task :debug_gem do
139
+ puts spec.to_ruby
140
+ end
141
+
142
+ desc 'Update gem spec'
143
+ task :gemspec do
144
+ open("#{NAME}.gemspec", 'w').write spec.to_ruby
145
+ end
data/bin/xig_installer ADDED
@@ -0,0 +1,7 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ $LOAD_PATH << File.dirname( __FILE__ ) + '/../lib' if File.exist?( File.dirname( __FILE__ ) + '/../lib' )
4
+ require 'rubygems'
5
+ require 'xig_installer'
6
+
7
+ XigInstaller.new.run
@@ -0,0 +1,300 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'pathname'
3
+ require 'optparse'
4
+ require 'erb'
5
+ include FileUtils::Verbose
6
+
7
+ class XigInstaller
8
+ VERSION = '0.0.1'
9
+ TARGET_DIR = '/usr/local/bin'
10
+ XIG_GLOB = '*ig.rb'
11
+
12
+ class CommandNotExist < StandardError ; end
13
+ class DirectoryNotExist < StandardError; end
14
+ class NetIRCNotInstalled < StandardError; end
15
+ class TargetGatewayNotValid < StandardError; end
16
+ class TargetGatewayNotInstalled < StandardError; end
17
+
18
+ def initialize
19
+ @commands = nil
20
+ @gateways = nil
21
+ @gateway_dir = nil
22
+ @max_cmdname_length = nil
23
+ @target_dir = TARGET_DIR
24
+ end
25
+ attr_reader :target_dir
26
+
27
+ def run
28
+ if ( cmd = parse_args() )
29
+ if ( commands.include?( cmd ) )
30
+ exec_cmd( cmd )
31
+ elsif ( cmd == 'help' )
32
+ usage( ARGV.shift )
33
+ elsif ( cmd =~ /\A(?:--)?version\z/ )
34
+ usage( 'version' )
35
+ end
36
+ else
37
+ usage
38
+ end
39
+ end
40
+
41
+ def exec_cmd( cmd )
42
+ if commands.include?( cmd )
43
+ send( "cmd_#{cmd}", *ARGV )
44
+ else
45
+ raise CommandNotExist
46
+ end
47
+ end
48
+
49
+ def commands
50
+ if ( !@commands )
51
+ @commands = methods.grep( /\Acmd_(.*)\z/ ).map { |e|
52
+ e.sub( /\Acmd_(.*)\z/, '\1' )
53
+ }
54
+ end
55
+
56
+ return @commands
57
+ end
58
+
59
+ def installed?( name )
60
+ Dir.chdir( @target_dir ) {
61
+ Dir.glob( XIG_GLOB ).include?( name )
62
+ }
63
+ end
64
+
65
+ def different?( name )
66
+ begin
67
+ src = File.stat( File.join( gateway_dir, name ) )
68
+ begin
69
+ dest = File.stat( File.join( @target_dir, name ) )
70
+ if ( src.mtime != dest.mtime )
71
+ return true
72
+ else
73
+ return false
74
+ end
75
+ rescue Errno::ENOENT
76
+ return true
77
+ end
78
+ rescue Errno::ENOENT
79
+ raise NetIRCNotInstalled
80
+ end
81
+ end
82
+
83
+ def gateways( dir = nil )
84
+ dir ||= gateway_dir
85
+
86
+ if ( dir )
87
+ if ( File.exist?( dir ) )
88
+ Dir.chdir( dir ) {
89
+ Dir.glob( XIG_GLOB )
90
+ }
91
+ else
92
+ raise DirectoryNotExist, dir
93
+ end
94
+ else
95
+ raise NetIRCNotInstalled
96
+ end
97
+ end
98
+
99
+ def gateway_dir
100
+ if ( @gateway_dir.nil? )
101
+ net_irc = `gem which net/irc`.chomp
102
+
103
+ if ( File.exist?( net_irc ) )
104
+ @gateway_dir = (Pathname( net_irc ).
105
+ parent.parent.parent + 'examples').to_s
106
+ else
107
+ @gateway_dir = false
108
+ end
109
+ end
110
+
111
+ return @gateway_dir
112
+ end
113
+
114
+ def cmd_list( subcmd = nil )
115
+ subcmds = methods.grep( /\A_cmd_list_(.*)\z/ ).map { |c|
116
+ c.sub( /\A_cmd_list_(.*)\z/, '\1' )
117
+ }
118
+ if ( subcmd == 'help' )
119
+ subcmds
120
+ elsif ( subcmds.include?( subcmd ) )
121
+ puts send( "_cmd_list_#{subcmd}" )
122
+ else
123
+ puts _cmd_list_available
124
+ end
125
+ end
126
+
127
+ def _cmd_list_available
128
+ gateways
129
+ end
130
+
131
+ def _cmd_list_installed
132
+ gateways.reject { |e|
133
+ !installed?( e )
134
+ }
135
+ end
136
+
137
+ def _cmd_list_update
138
+ _cmd_list_installed.reject { |e|
139
+ different?( name )
140
+ }
141
+ end
142
+
143
+ def cmd_install( *targets )
144
+ available = gateways & targets
145
+ if ( targets.size == 0 )
146
+ _copy( gateways )
147
+ elsif ( available == targets )
148
+ _copy( targets )
149
+ else
150
+ raise TargetGatewayNotValid, (targets - available).join( ', ' )
151
+ end
152
+ end
153
+
154
+ def cmd_upgrade( *targets )
155
+ if ( targets.size == 0 )
156
+ _cmd_list_installed.map { |e|
157
+ different?( e ) ? cmd_install( e ).to_s : nil
158
+ }.compact
159
+ else
160
+ targets.reject { |e|
161
+ !installed?( e )
162
+ }.map { |e|
163
+ different?( e ) ? cmd_install( e ).to_s : nil
164
+ }.compact
165
+ end
166
+ end
167
+
168
+ def _copy( targets )
169
+ targets.each { |e|
170
+ cp( File.join( gateway_dir, e ), @target_dir, :preserve => true )
171
+ }
172
+ end
173
+
174
+ def cmd_uninstall( *targets )
175
+ installed = _cmd_list_installed
176
+ available = installed & targets
177
+ if ( targets.size == 0 )
178
+ _remove( installed )
179
+ elsif ( available == targets )
180
+ _remove( targets )
181
+ else
182
+ raise TargetGatewayNotInstalled, (targets - installed).join( ', ' )
183
+ end
184
+ end
185
+
186
+ def _remove( targets )
187
+ targets.each { |e|
188
+ rm( File.join( @target_dir, e ) )
189
+ }
190
+ end
191
+
192
+ def usage( cmd = nil )
193
+ puts "#{self.class} ver.#{VERSION}"
194
+ if ( commands.include?( cmd ) )
195
+ puts "\n"
196
+ puts send( "usage_#{cmd}" )
197
+ elsif ( cmd == 'version' )
198
+ ;
199
+ else
200
+ puts ERB.new( <<EOD, nil, '-' ).result( binding )
201
+
202
+ Usage: #{File.basename( $0 )} command [options] [TARGET]
203
+
204
+ Commands:
205
+ <%- commands.sort.each do |e| -%>
206
+ <%= simple_help( e ) %>
207
+ <%- end -%>
208
+
209
+ Options:
210
+ <%= parser.help.sub( /[\r\n]/, '' ) %>
211
+ EOD
212
+ end
213
+ exit
214
+ end
215
+
216
+ def usage_list( subcmd = nil )
217
+ ERB.new( <<EOD, nil, '-' ).result( binding )
218
+ show gateway list
219
+
220
+ Usage: #{File.basename( $0 )} list [subcommand]
221
+
222
+ Subcommands:
223
+ <%- cmd_list( 'help' ).sort.each do |cmd| -%>
224
+ <%= cmd %>
225
+ <%- end -%>
226
+ EOD
227
+ end
228
+
229
+ def usage_install
230
+ ERB.new( <<EOD ).result( binding )
231
+ install specified or all gateways
232
+ EOD
233
+ end
234
+
235
+ def usage_upgrade
236
+ ERB.new( <<EOD ).result( binding )
237
+ upgrade specified or all gateways if need
238
+ EOD
239
+ end
240
+
241
+ def usage_uninstall
242
+ ERB.new( <<EOD ).result( binding )
243
+ uninstall specified or all gateways
244
+ EOD
245
+ end
246
+
247
+ def simple_help( cmd )
248
+ if ( commands.include?( cmd ) )
249
+ return sprintf( "%-*s %s",
250
+ max_cmdname_length,
251
+ cmd,
252
+ send( "usage_#{cmd}" ).lines.first.chomp )
253
+ end
254
+ end
255
+
256
+ def max_cmdname_length
257
+ if ( !@max_cmdname_length )
258
+ @max_cmdname_length = commands.map { |e|
259
+ e.size
260
+ }.max
261
+ end
262
+
263
+ return @max_cmdname_length
264
+ end
265
+
266
+ def parse_args
267
+ parser.parse!( ARGV )
268
+ return ARGV.shift
269
+ end
270
+
271
+ def parser
272
+ return OptionParser.new { |opt|
273
+ opt.banner = ''
274
+ opt.on( '-t', '--target DIR', 'target directory' ) { |d|
275
+ dir = File.expand_path( d )
276
+ if ( File.exist?( dir ) and File.directory?( dir ) )
277
+ @target_dir = dir
278
+ else
279
+ raise DirectoryNotExist, d
280
+ end
281
+ }
282
+ opt.on( '-g', '--gateway DIR', 'gateway source directory' ) { |d|
283
+ dir = File.expand_path( d )
284
+ if ( File.exist?( dir ) and File.directory?( dir ) )
285
+ @gateway_dir = dir
286
+ else
287
+ raise DirectoryNotExist, d
288
+ end
289
+ }
290
+ }
291
+ end
292
+ end
293
+
294
+ if ( !String.respond_to?( :lines ) )
295
+ class String
296
+ def lines
297
+ self.split( /(?:\r\n|[\r\n])/ )
298
+ end
299
+ end
300
+ end
@@ -0,0 +1,3 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/xig_installer'
3
+
@@ -0,0 +1,155 @@
1
+ require 'rubygems'
2
+ require File.dirname(__FILE__) + '/test_helper.rb'
3
+
4
+ require "test/unit"
5
+ class XigInstallerTest < Test::Unit::TestCase
6
+ def setup
7
+ @obj = XigInstaller.new
8
+ begin
9
+ @obj.cmd_uninstall
10
+ rescue
11
+ end
12
+ end
13
+
14
+ def teardown
15
+ @obj.cmd_uninstall
16
+ end
17
+
18
+ def test_exec_cmd
19
+ c = 'abc'
20
+ assert( !@obj.commands.include?( c ) )
21
+ begin
22
+ assert( @obj.exec_cmd( c ) )
23
+ rescue XigInstaller::CommandNotExist
24
+ assert( true )
25
+ end
26
+ end
27
+
28
+ def test_commands
29
+ cmds = @obj.commands
30
+ assert( cmds.is_a?( Array ) )
31
+ assert( cmds.size > 0 )
32
+ end
33
+
34
+ def test_installed?
35
+ assert( !@obj.installed?( 'tig.rb' ) )
36
+ @obj.cmd_install( 'tig.rb' )
37
+ assert( @obj.installed?( 'tig.rb' ) )
38
+ end
39
+
40
+ def test_gateways
41
+ begin
42
+ require 'net/irc'
43
+ gateways = @obj.gateways
44
+ assert( gateways.is_a?( Array ) )
45
+ assert( gateways.size > 0 )
46
+ gateways.each { |e|
47
+ assert( e =~ /\A.*ig\.rb\z/ )
48
+ }
49
+ rescue LoadError
50
+ assert( !@obj.gateways )
51
+ end
52
+ begin
53
+ @obj.gateways( 'target' )
54
+ rescue XigInstaller::DirectoryNotExist
55
+ assert( true )
56
+ end
57
+ end
58
+
59
+ def test_gateway_dir
60
+ begin
61
+ require 'net/irc'
62
+ assert( File.exist?( @obj.gateway_dir ) )
63
+ rescue LoadError
64
+ assert( !@obj.gateway_dir )
65
+ end
66
+ end
67
+
68
+ def test_cmd_list
69
+ subcmds = @obj.cmd_list( 'help' )
70
+ assert( subcmds.is_a?( Array ) )
71
+ assert( subcmds.size > 0 )
72
+ end
73
+
74
+ def test_cmd_list_available
75
+ availables = @obj._cmd_list_available
76
+ assert( availables.is_a?( Array ) )
77
+ assert( availables.size > 0 )
78
+ end
79
+
80
+ def test_cmd_list_installed
81
+ assert( @obj._cmd_list_installed.is_a?( Array ) )
82
+ end
83
+
84
+ def test_cmd_list_update
85
+ installed = @obj._cmd_list_installed
86
+ assert( @obj._cmd_list_update.size == installed.size )
87
+ end
88
+
89
+ def test_cmd_install
90
+ begin
91
+ @obj.cmd_install( 'foo' )
92
+ rescue XigInstaller::TargetGatewayNotValid
93
+ assert( true )
94
+ end
95
+ assert( tig = @obj.cmd_install( 'tig.rb' ) )
96
+ @obj.cmd_uninstall()
97
+ assert( all = @obj.cmd_install() )
98
+ assert( all.size > tig.size )
99
+ end
100
+
101
+ def test_cmd_upgrade
102
+ target = 'tig.rb'
103
+ @obj.cmd_install( target )
104
+ File.utime( File.stat( __FILE__ ).atime,
105
+ File.stat( __FILE__ ).mtime,
106
+ File.join( @obj.target_dir, target ) )
107
+ assert( @obj.different?( target ) )
108
+ assert( @obj.cmd_upgrade( target ) == [target] )
109
+ assert( !@obj.different?( target ) )
110
+ assert( @obj.cmd_upgrade( target ) == [] )
111
+ File.utime( File.stat( __FILE__ ).atime,
112
+ File.stat( __FILE__ ).mtime,
113
+ File.join( @obj.target_dir, target ) )
114
+ assert( @obj.cmd_upgrade() == [target] )
115
+ end
116
+
117
+ def test_cmd_uninstall
118
+ @obj.cmd_install( 'tig.rb' )
119
+ assert( tig = @obj.cmd_uninstall( 'tig.rb' ) )
120
+ @obj.cmd_install( 'tig.rb' )
121
+ assert( all = @obj.cmd_uninstall() )
122
+ assert( tig == all )
123
+ assert( @obj.cmd_uninstall() )
124
+ begin
125
+ @obj.cmd_uninstall( 'tig.rb' )
126
+ rescue XigInstaller::TargetGatewayNotInstalled
127
+ assert( true )
128
+ end
129
+ begin
130
+ @obj.cmd_uninstall( 'foo' )
131
+ rescue XigInstaller::TargetGatewayNotInstalled
132
+ assert( true )
133
+ end
134
+ end
135
+ def test_parser
136
+ assert( @obj.parser.parse( %w( help ) ) == %w( help ) )
137
+ assert( @obj.target_dir == '/usr/local/bin' )
138
+ # -t
139
+ target = (%w( /opt/local/bin /sw/local/bin ) +
140
+ [File.expand_path(File.dirname( __FILE__ ))]).find { |e|
141
+ File.exist?( e )
142
+ }
143
+ @obj.parser.parse( %w( install -t ) + [target] )
144
+ assert( @obj.target_dir == target )
145
+ begin
146
+ @obj.parser.parse( %w( install -t ) + [target] )
147
+ rescue XigInstaller::DirectoryNotExist
148
+ assert( true )
149
+ end
150
+ # -g
151
+ src = (Pathname( __FILE__ ).parent.expand_path).to_s
152
+ @obj.parser.parse( %w( install -g ) + [src] )
153
+ assert( @obj.gateway_dir == src )
154
+ end
155
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: xig_installer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - wtnabe
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-01-05 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: net-irc
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ description: Installer for net-irc example irc gateways
26
+ email: wtnabe@gmail.com
27
+ executables:
28
+ - xig_installer
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - README
33
+ - ChangeLog
34
+ files:
35
+ - README
36
+ - ChangeLog
37
+ - Rakefile
38
+ - bin/xig_installer
39
+ - test/xig_installer_test.rb
40
+ - test/test_helper.rb
41
+ - lib/xig_installer.rb
42
+ has_rdoc: true
43
+ homepage: http://github.com/wtnabe/xig_installer
44
+ licenses: []
45
+
46
+ post_install_message:
47
+ rdoc_options:
48
+ - --title
49
+ - xig_installer documentation
50
+ - --charset
51
+ - utf-8
52
+ - --opname
53
+ - index.html
54
+ - --line-numbers
55
+ - --main
56
+ - README
57
+ - --inline-source
58
+ - --exclude
59
+ - ^(examples|extras)/
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: "0"
67
+ version:
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
73
+ version:
74
+ requirements: []
75
+
76
+ rubyforge_project: xig_installer
77
+ rubygems_version: 1.3.5
78
+ signing_key:
79
+ specification_version: 3
80
+ summary: Installer for net-irc example irc gateways
81
+ test_files:
82
+ - test/xig_installer_test.rb