kennethkalmer-autotest-growl-remote 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ === 0.0.1 2009-09-15
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
@@ -0,0 +1,17 @@
1
+ History.txt
2
+ Manifest.txt
3
+ PostInstall.txt
4
+ README.rdoc
5
+ Rakefile
6
+ TODO.txt
7
+ lib/autotest-growl-remote.rb
8
+ lib/autotest/growl/remote.rb
9
+ lib/autotest/growl/result.rb
10
+ lib/autotest/growl/ruby-growl.rb
11
+ script/console
12
+ script/destroy
13
+ script/generate
14
+ spec/autotest-growl-remote_spec.rb
15
+ spec/spec.opts
16
+ spec/spec_helper.rb
17
+ tasks/rspec.rake
@@ -0,0 +1,7 @@
1
+
2
+ For more information on autotest-growl-remote, see http://autotest-growl-remote.rubyforge.org
3
+
4
+ NOTE: Change this information in PostInstall.txt
5
+ You can also delete it if you don't want it.
6
+
7
+
@@ -0,0 +1,59 @@
1
+ = autotest-growl-remote
2
+
3
+ * http://github.com/kennethkalmer/autotest-growl-remote
4
+
5
+ == DESCRIPTION:
6
+
7
+ A minimal copy of autotest-growl that only sends network notifications to
8
+ Growl. No fancy icons, but great for sending messages from a virtual machine
9
+ or a local CI box.
10
+
11
+ == SYNOPSIS:
12
+
13
+ Add to your project's .autotest, or to ~/.autotest
14
+
15
+ require 'autotest/growl/remote'
16
+
17
+ Autotest::Growl::Remote.remote_host = 'ip.or.host.name'
18
+ Autotest::Growl::Remote.remote_password = 'foo' # if needed
19
+
20
+ == REQUIREMENTS:
21
+
22
+ * ZenTest 4.0.0 or later
23
+
24
+ == INSTALL:
25
+
26
+ * gem install kennethkalmer-autotest-growl-remote
27
+
28
+ == ACTUAL WORK:
29
+
30
+ The actual work was done by Sven Schwyn (svoop) when he made the autotest-growl
31
+ project (which I just copied and pasted), and Eric Hodel (drbrain) for his
32
+ ruby-growl library that I bundled in here.
33
+
34
+ I only changed one method, and I did this for my own convenience.
35
+
36
+ == LICENSE:
37
+
38
+ (The MIT License)
39
+
40
+ Copyright (c) 2009 Kenneth Kalmer
41
+
42
+ Permission is hereby granted, free of charge, to any person obtaining
43
+ a copy of this software and associated documentation files (the
44
+ 'Software'), to deal in the Software without restriction, including
45
+ without limitation the rights to use, copy, modify, merge, publish,
46
+ distribute, sublicense, and/or sell copies of the Software, and to
47
+ permit persons to whom the Software is furnished to do so, subject to
48
+ the following conditions:
49
+
50
+ The above copyright notice and this permission notice shall be
51
+ included in all copies or substantial portions of the Software.
52
+
53
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
54
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
55
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
56
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
57
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
58
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
59
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,26 @@
1
+ require 'rubygems'
2
+ gem 'hoe', '>= 2.1.0'
3
+ require 'hoe'
4
+ require 'fileutils'
5
+ require './lib/autotest-growl-remote'
6
+
7
+ Hoe.plugin :newgem
8
+ # Hoe.plugin :website
9
+ # Hoe.plugin :cucumberfeatures
10
+
11
+ # Generate all the Rake tasks
12
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
13
+ $hoe = Hoe.spec 'autotest-growl-remote' do
14
+ self.developer 'Kenneth Kalmer', 'kenneth.kalmer@mgila.com'
15
+ self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
16
+ self.rubyforge_name = self.name # TODO this is default value
17
+ self.extra_deps = [['ZenTest','>= 4.0.0']]
18
+
19
+ end
20
+
21
+ require 'newgem/tasks'
22
+ Dir['tasks/**/*.rake'].each { |t| load t }
23
+
24
+ # TODO - want other tests/tasks run by default? Add them to the list
25
+ # remove_task :default
26
+ # task :default => [:spec, :features]
@@ -0,0 +1 @@
1
+ * Get this merged into autotest-growl
@@ -0,0 +1,10 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ module Autotest
5
+ module Growl
6
+ module Remote
7
+ VERSION = '0.1.0'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,156 @@
1
+ require 'rubygems'
2
+ require 'autotest'
3
+ require File.join( File.dirname(__FILE__), 'ruby-growl' )
4
+ require File.join(File.dirname(__FILE__), 'result')
5
+
6
+ ##
7
+ # Autotest::Growl
8
+ #
9
+ # == FEATUERS:
10
+ # * Display autotest results as local or remote Growl notifications.
11
+ # * Clean the terminal on every test cycle while maintaining scrollback.
12
+ #
13
+ # == SYNOPSIS:
14
+ # ~/.autotest
15
+ # require 'autotest/growl'
16
+ class Autotest
17
+ module Growl
18
+ module Remote
19
+
20
+ @label = ''
21
+ @modified_files = []
22
+ @ran_tests = false
23
+ @ran_features = false
24
+
25
+ @@remote_host = nil
26
+ @@remote_password = nil
27
+
28
+ @@one_notification_per_run = false
29
+ @@clear_terminal = false
30
+ @@hide_label = false
31
+ @@show_modified_files = false
32
+
33
+ # Hostname or IP address to send the notifications to
34
+ def self.remote_host=(hostname_or_ip)
35
+ @@remote_host = hostname_or_ip
36
+ end
37
+
38
+ # Growl password
39
+ def self.remote_password=( password )
40
+ @@remote_password = password
41
+ end
42
+
43
+ # Whether to limit the number of notifications per run to one or not (default).
44
+ def self.one_notification_per_run=(boolean)
45
+ @@one_notification_per_run = boolean
46
+ end
47
+
48
+ # Whether to clear the terminal before running tests (default) or not.
49
+ def self.clear_terminal=(boolean)
50
+ @@clear_terminal = boolean
51
+ end
52
+
53
+ # Whether to display the label (default) or not.
54
+ def self.hide_label=(boolean)
55
+ @@hide_label = boolean
56
+ end
57
+
58
+ # Whether to display the modified files or not (default).
59
+ def self.show_modified_files=(boolean)
60
+ @@show_modified_files = boolean
61
+ end
62
+
63
+ # Display a message through Growl.
64
+ def self.growl(title, message, icon, priority=0, stick="")
65
+ raise "Remote host not configured" if @@remote_host.nil?
66
+
67
+ g = ::Growl.new( @@remote_host, "autotest", [ "autotest Notification"], nil, @@remote_password )
68
+ g.notify "autotest Notification", title, message, priority, stick
69
+ end
70
+
71
+ # Display the modified files.
72
+ Autotest.add_hook :updated do |autotest, modified|
73
+ @ran_tests = @ran_features = false
74
+ if @@show_modified_files
75
+ if modified != @last_modified
76
+ growl @label + 'Modifications detected.', modified.collect {|m| m[0]}.join(', '), 'info', 0
77
+ @last_modified = modified
78
+ end
79
+ end
80
+ false
81
+ end
82
+
83
+ # Set the label and clear the terminal.
84
+ Autotest.add_hook :run_command do
85
+ @label = File.basename(Dir.pwd).upcase + ': ' if !@@hide_label
86
+ print "\n"*2 + '-'*80 + "\n"*2
87
+ print "\e[2J\e[f" if @@clear_terminal
88
+ false
89
+ end
90
+
91
+ # Parse the RSpec and Test::Unit results and send them to Growl.
92
+ Autotest.add_hook :ran_command do |autotest|
93
+ unless @@one_notification_per_run && @ran_tests
94
+ result = Result.new(autotest)
95
+ if result.exists?
96
+ case result.framework
97
+ when 'test-unit'
98
+ if result.has?('test-error')
99
+ growl @label + 'Cannot run some unit tests.', "#{result.get('test-error')} in #{result.get('test')}", 'error', 2
100
+ elsif result.has?('test-failed')
101
+ growl @label + 'Some unit tests failed.', "#{result['test-failed']} of #{result.get('test-assertion')} in #{result.get('test')} failed", 'failed', 2
102
+ else
103
+ growl @label + 'All unit tests passed.', "#{result.get('test-assertion')} in #{result.get('test')}", 'passed', -2
104
+ end
105
+ when 'rspec'
106
+ if result.has?('example-failed')
107
+ growl @label + 'Some RSpec examples failed.', "#{result['example-failed']} of #{result.get('example')} failed", 'failed', 2
108
+ elsif result.has?('example-pending')
109
+ growl @label + 'Some RSpec examples are pending.', "#{result['example-pending']} of #{result.get('example')} pending", 'pending', -1
110
+ else
111
+ growl @label + 'All RSpec examples passed.', "#{result.get('example')}", 'passed', -2
112
+ end
113
+ end
114
+ else
115
+ growl @label + 'Could not run tests.', '', 'error', 2
116
+ end
117
+ @ran_test = true
118
+ end
119
+ false
120
+ end
121
+
122
+ # Parse the Cucumber results and sent them to Growl.
123
+ Autotest.add_hook :ran_features do |autotest|
124
+ unless @@one_notification_per_run && @ran_features
125
+ result = Result.new(autotest)
126
+ if result.exists?
127
+ case result.framework
128
+ when 'cucumber'
129
+ explanation = []
130
+ if result.has?('scenario-undefined') || result.has?('step-undefined')
131
+ explanation << "#{result['scenario-undefined']} of #{result.get('scenario')} not defined" if result['scenario-undefined']
132
+ explanation << "#{result['step-undefined']} of #{result.get('step')} not defined" if result['step-undefined']
133
+ growl @label + 'Some Cucumber scenarios are not defined.', "#{explanation.join("\n")}", 'pending', -1
134
+ elsif result.has?('scenario-failed') || result.has?('step-failed')
135
+ explanation << "#{result['scenario-failed']} of #{result.get('scenario')} failed" if result['scenario-failed']
136
+ explanation << "#{result['step-failed']} of #{result.get('step')} failed" if result['step-failed']
137
+ growl @label + 'Some Cucumber scenarios failed.', "#{explanation.join("\n")}", 'failed', 2
138
+ elsif result.has?('scenario-pending') || result.has?('step-pending')
139
+ explanation << "#{result['scenario-pending']} of #{result.get('scenario')} pending" if result['scenario-pending']
140
+ explanation << "#{result['step-pending']} of #{result.get('step')} pending" if result['step-pending']
141
+ growl @label + 'Some Cucumber scenarios are pending.', "#{explanation.join("\n")}", 'pending', -1
142
+ else
143
+ growl @label + 'All Cucumber features passed.', '', 'passed', -2
144
+ end
145
+ end
146
+ else
147
+ growl @label + 'Could not run features.', '', 'error', 2
148
+ end
149
+ @ran_features = true
150
+ end
151
+ false
152
+ end
153
+
154
+ end
155
+ end
156
+ end
@@ -0,0 +1,64 @@
1
+ class Result
2
+
3
+ ##
4
+ # Analyze test result lines and return the numbers in a hash.
5
+ def initialize(autotest)
6
+ @numbers = {}
7
+ lines = autotest.results.map {|s| s.gsub(/(\e.*?m|\n)/, '') } # remove escape sequences
8
+ lines.reject! {|line| !line.match(/\d+\s+(example|test|scenario|step)s?/) } # isolate result numbers
9
+ lines.each do |line|
10
+ prefix = nil
11
+ line.scan(/([1-9]\d*)\s(\w+)/) do |number, kind|
12
+ kind.sub!(/s$/, '') # singularize
13
+ kind.sub!(/failure/, 'failed') # homogenize
14
+ if prefix
15
+ @numbers["#{prefix}-#{kind}"] = number.to_i
16
+ else
17
+ @numbers[kind] = number.to_i
18
+ prefix = kind
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ ##
25
+ # Determine the testing framework used.
26
+ def framework
27
+ case
28
+ when @numbers['test'] then 'test-unit'
29
+ when @numbers['example'] then 'rspec'
30
+ when @numbers['scenario'] then 'cucumber'
31
+ end
32
+ end
33
+
34
+ ##
35
+ # Determine whether a result exists at all.
36
+ def exists?
37
+ !@numbers.empty?
38
+ end
39
+
40
+ ##
41
+ # Check whether a specific result is present.
42
+ def has?(kind)
43
+ @numbers.has_key?(kind)
44
+ end
45
+
46
+ ##
47
+ # Get a plain result number.
48
+ def [](kind)
49
+ @numbers[kind]
50
+ end
51
+
52
+ ##
53
+ # Get a labelled result number. The prefix is removed and the label pluralized if necessary.
54
+ def get(kind)
55
+ "#{@numbers[kind]} #{kind.sub(/^.*-/, '')}#{'s' if @numbers[kind] != 1 && !kind.match(/(ed|ing)$/)}" if @numbers[kind]
56
+ end
57
+
58
+ ##
59
+ # Get the fatal error if any.
60
+ def fatal_error
61
+
62
+ end
63
+
64
+ end
@@ -0,0 +1,286 @@
1
+ #!/usr/local/bin/ruby -w
2
+
3
+ $TESTING = false unless defined? $TESTING
4
+
5
+ require 'md5'
6
+ require 'socket'
7
+
8
+ ##
9
+ # ruby-growl allows you to perform Growl notification via UDP from machines
10
+ # without growl installed (for example, non-OSX machines).
11
+ #
12
+ # What's Growl? Growl is a really cool "global notification system for Mac OS
13
+ # X". See http://growl.info/
14
+ #
15
+ # You'll need a Mac to recieve Growl notifications, but you can send Growl
16
+ # notifications from any UDP-capable machine that runs Ruby.
17
+ #
18
+ # See also the Ruby Growl bindings in Growl's subversion repository:
19
+ # http://growl.info/documentation/growl-source-install.php
20
+ #
21
+ # ruby-growl also contains a command-line notification tool named 'growl'. It
22
+ # is almost completely option-compatible with growlnotify. (All except for -p
23
+ # is supported, use --priority instead.)
24
+ #
25
+ # = Synopsis
26
+ #
27
+ # g = Growl.new "127.0.0.1", "ruby-growl",
28
+ # ["ruby-growl Notification"]
29
+ # g.notify "ruby-growl Notification", "It Came From Ruby-Growl",
30
+ # "Greetings!"
31
+
32
+ class Growl
33
+
34
+ ##
35
+ # The Ruby that ships with Tiger has a broken #pack, so 'v' means network
36
+ # byte order instead of 'n'.
37
+
38
+ BROKEN_PACK = [1].pack("n") != "\000\001" # :nodoc:
39
+
40
+ ##
41
+ # ruby-growl Version
42
+
43
+ VERSION = "1.0.1"
44
+
45
+ ##
46
+ # Growl Network Registration Packet +pack+ Format
47
+ #--
48
+ # Format:
49
+ #
50
+ # struct GrowlNetworkRegistration {
51
+ # struct GrowlNetworkPacket {
52
+ # unsigned char version;
53
+ # unsigned char type;
54
+ # } __attribute__((packed));
55
+ # unsigned short appNameLen;
56
+ # unsigned char numAllNotifications;
57
+ # unsigned char numDefaultNotifications;
58
+ # /*
59
+ # * Variable sized. Format:
60
+ # * <application name><all notifications><default notifications><checksum>
61
+ # * where <all notifications> is of the form (<length><name>){num} and
62
+ # * <default notifications> is an array of indices into the all notifications
63
+ # * array, each index being 8 bits.
64
+ # */
65
+ # unsigned char data[];
66
+ # } __attribute__((packed));
67
+
68
+ GNR_FORMAT = "CCnCCa*"
69
+
70
+ GNR_FORMAT.gsub!(/n/, 'v') if BROKEN_PACK
71
+
72
+ ##
73
+ # Growl Network Notification Packet +pack+ Format
74
+ #--
75
+ # Format:
76
+ #
77
+ # struct GrowlNetworkNotification {
78
+ # struct GrowlNetworkPacket {
79
+ # unsigned char version;
80
+ # unsigned char type;
81
+ # } __attribute__((packed));
82
+ # struct GrowlNetworkNotificationFlags {
83
+ # unsigned reserved: 12;
84
+ # signed priority: 3;
85
+ # unsigned sticky: 1;
86
+ # } __attribute__((packed)) flags; //size = 16 (12 + 3 + 1)
87
+ # unsigned short nameLen;
88
+ # unsigned short titleLen;
89
+ # unsigned short descriptionLen;
90
+ # unsigned short appNameLen;
91
+ # /*
92
+ # * Variable sized. Format:
93
+ # * <notification name><title><description><application name><checksum>
94
+ # */
95
+ # unsigned char data[];
96
+ # } __attribute__((packed));
97
+
98
+ GNN_FORMAT = "CCnnnnna*"
99
+
100
+ GNN_FORMAT.gsub!(/n/, 'v') if BROKEN_PACK
101
+
102
+ ##
103
+ # Growl UDP Port
104
+
105
+ GROWL_UDP_PORT = 9887
106
+
107
+ ##
108
+ # Growl Protocol Version
109
+
110
+ GROWL_PROTOCOL_VERSION = 1
111
+
112
+ ##
113
+ # Growl Registration Packet Id
114
+
115
+ GROWL_TYPE_REGISTRATION = 0
116
+
117
+ ##
118
+ # Growl Notification Packet Id
119
+
120
+ GROWL_TYPE_NOTIFICATION = 1
121
+
122
+ ##
123
+ # Creates a new Growl notifier and automatically registers any notifications
124
+ # with the remote machine.
125
+ #
126
+ # +host+ is the host to contact.
127
+ #
128
+ # +app_name+ is the name of the application sending the notifications.
129
+ #
130
+ # +all_notifies+ is a list of notification types your application sends.
131
+ #
132
+ # +default_notifies+ is a list of notification types that are turned on by
133
+ # default.
134
+ #
135
+ # I'm not sure about what +default_notifies+ is supposed to be set to, since
136
+ # there is a comment that says "not a subset of all_notifies" in the code.
137
+ #
138
+ # +password+ is the password needed to send notifications to +host+.
139
+
140
+ def initialize(host, app_name, all_notifies, default_notifies = nil,
141
+ password = nil)
142
+ @socket = UDPSocket.open
143
+ # FIXME This goes somewhere else
144
+ @socket.connect host, GROWL_UDP_PORT
145
+ @app_name = app_name
146
+ @all_notifies = all_notifies
147
+ @default_notifies = default_notifies.nil? ? all_notifies : default_notifies
148
+ @password = password
149
+
150
+ register
151
+ end
152
+
153
+ ##
154
+ # Sends a notification.
155
+ #
156
+ # +notify_type+ is the type of notification to send.
157
+ #
158
+ # +title+ is a title for the notification.
159
+ #
160
+ # +message+ is the body of the notification.
161
+ #
162
+ # +priority+ is the priorty of message to send.
163
+ #
164
+ # +sticky+ makes the notification stick until clicked.
165
+
166
+ def notify(notify_type, title, message, priority = 0, sticky = false)
167
+ raise "Unknown Notification" unless @all_notifies.include? notify_type
168
+ raise "Invalid Priority" unless priority >= -2 and priority <= 2
169
+
170
+ send notification_packet(notify_type, title, message, priority, sticky)
171
+ end
172
+
173
+ private unless $TESTING
174
+
175
+ ##
176
+ # Registers the notification types with +host+.
177
+
178
+ def register
179
+ send registration_packet
180
+ end
181
+
182
+ ##
183
+ # Sends a Growl packet
184
+
185
+ def send(packet)
186
+ set_sndbuf packet.length
187
+ @socket.send packet, 0
188
+ @socket.flush
189
+ end
190
+
191
+ ##
192
+ # Builds a Growl registration packet
193
+
194
+ def registration_packet
195
+ length = 0
196
+ data = []
197
+ data_format = ""
198
+
199
+ packet = [
200
+ GROWL_PROTOCOL_VERSION,
201
+ GROWL_TYPE_REGISTRATION
202
+ ]
203
+
204
+ packet << @app_name.length
205
+ packet << @all_notifies.length
206
+ packet << @default_notifies.length
207
+
208
+ data << @app_name
209
+ data_format = "a#{@app_name.length}"
210
+
211
+ @all_notifies.each do |notify|
212
+ data << notify.length
213
+ data << notify
214
+ data_format << "na#{notify.length}"
215
+ end
216
+
217
+ @default_notifies.each do |notify|
218
+ data << @all_notifies.index(notify) if @all_notifies.include? notify
219
+ data_format << "C"
220
+ end
221
+
222
+ data_format.gsub!(/n/, 'v') if BROKEN_PACK
223
+
224
+ data = data.pack data_format
225
+
226
+ packet << data
227
+
228
+ packet = packet.pack GNR_FORMAT
229
+
230
+ checksum = MD5.new packet
231
+ checksum.update @password unless @password.nil?
232
+
233
+ packet << checksum.digest
234
+
235
+ return packet
236
+ end
237
+
238
+ ##
239
+ # Builds a Growl notification packet
240
+
241
+ def notification_packet(name, title, description, priority, sticky)
242
+ flags = 0
243
+ data = []
244
+
245
+ packet = [
246
+ GROWL_PROTOCOL_VERSION,
247
+ GROWL_TYPE_NOTIFICATION,
248
+ ]
249
+
250
+ flags = 0
251
+ flags |= ((0x7 & priority) << 1) # 3 bits for priority
252
+ flags |= 1 if sticky # 1 bit for sticky
253
+
254
+ packet << flags
255
+ packet << name.length
256
+ packet << title.length
257
+ packet << description.length
258
+ packet << @app_name.length
259
+
260
+ data << name
261
+ data << title
262
+ data << description
263
+ data << @app_name
264
+
265
+ packet << data.join
266
+ packet = packet.pack GNN_FORMAT
267
+
268
+ checksum = MD5.new packet
269
+ checksum.update @password unless @password.nil?
270
+
271
+ packet << checksum.digest
272
+
273
+ return packet
274
+ end
275
+
276
+ ##
277
+ # Set the size of the send buffer
278
+ #--
279
+ # Is this truly necessary?
280
+
281
+ def set_sndbuf(length)
282
+ @socket.setsockopt Socket::SOL_SOCKET, Socket::SO_SNDBUF, length
283
+ end
284
+
285
+ end
286
+
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/autotest-growl-remote.rb'}"
9
+ puts "Loading autotest-growl-remote gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ # Time to add your specs!
4
+ # http://rspec.info/
5
+ describe "Place your specs here" do
6
+
7
+ it "find this spec in spec directory" do
8
+ # violated "Be sure to write your specs"
9
+ end
10
+
11
+ end
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,10 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
5
+ gem 'rspec'
6
+ require 'spec'
7
+ end
8
+
9
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
10
+ require 'autotest-growl-remote'
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
5
+ require 'spec'
6
+ end
7
+ begin
8
+ require 'spec/rake/spectask'
9
+ rescue LoadError
10
+ puts <<-EOS
11
+ To use rspec for testing you must install rspec gem:
12
+ gem install rspec
13
+ EOS
14
+ exit(0)
15
+ end
16
+
17
+ desc "Run the specs under spec/models"
18
+ Spec::Rake::SpecTask.new do |t|
19
+ t.spec_opts = ['--options', "spec/spec.opts"]
20
+ t.spec_files = FileList['spec/**/*_spec.rb']
21
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kennethkalmer-autotest-growl-remote
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Kenneth Kalmer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-15 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: ZenTest
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 4.0.0
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: hoe
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.3.2
34
+ version:
35
+ description: A minimal copy of autotest-growl that only sends network notifications to Growl. No fancy icons, but great for sending messages from a virtual machine or a local CI box.
36
+ email:
37
+ - kenneth.kalmer@mgila.com
38
+ executables: []
39
+
40
+ extensions: []
41
+
42
+ extra_rdoc_files:
43
+ - History.txt
44
+ - Manifest.txt
45
+ - PostInstall.txt
46
+ - TODO.txt
47
+ files:
48
+ - History.txt
49
+ - Manifest.txt
50
+ - PostInstall.txt
51
+ - README.rdoc
52
+ - Rakefile
53
+ - TODO.txt
54
+ - lib/autotest-growl-remote.rb
55
+ - lib/autotest/growl/remote.rb
56
+ - lib/autotest/growl/result.rb
57
+ - lib/autotest/growl/ruby-growl.rb
58
+ - script/console
59
+ - script/destroy
60
+ - script/generate
61
+ - spec/autotest-growl-remote_spec.rb
62
+ - spec/spec.opts
63
+ - spec/spec_helper.rb
64
+ - tasks/rspec.rake
65
+ has_rdoc: false
66
+ homepage: http://github.com/kennethkalmer/autotest-growl-remote
67
+ licenses:
68
+ post_install_message: PostInstall.txt
69
+ rdoc_options:
70
+ - --main
71
+ - README.rdoc
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: "0"
79
+ version:
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: "0"
85
+ version:
86
+ requirements: []
87
+
88
+ rubyforge_project: autotest-growl-remote
89
+ rubygems_version: 1.3.5
90
+ signing_key:
91
+ specification_version: 3
92
+ summary: A minimal copy of autotest-growl that only sends network notifications to Growl
93
+ test_files: []
94
+