campfire-bot 0.1.0 → 1.0.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/.gitignore CHANGED
@@ -1,4 +1,4 @@
1
- *config.yml
1
+ config.yml
2
2
  tmp/*
3
3
  var/*
4
4
  .bundle
data/Gemfile CHANGED
@@ -1,3 +1,8 @@
1
1
  source :gemcutter
2
2
 
3
- gemspec
3
+ gem 'twitter-stream'
4
+ gem 'tinder', ">= 1.4.3"
5
+ gem 'mime-types'
6
+ gem 'activesupport'
7
+ gem 'logging'
8
+ gem 'i18n'
@@ -8,15 +8,26 @@ h2. Installation
8
8
 
9
9
  @gem install campfire-bot@
10
10
 
11
+ h3. Download
12
+
13
+ Download the source from "github":http://github.com/joshwand/campfire-bot
14
+
15
+
11
16
  h3. Configuration
12
17
 
13
- Create a @config.yml@ in the directory from which you will run the bot. Use @config.example.yml@ as an example.
18
+ Create a @config.yml@ in the root of the source directory. Use @config.example.yml@ as an example.
14
19
 
15
20
  h2. Usage
16
21
 
17
- To run the bot, run @campfire-bot@ with the environment name as the argument:
22
+ To run the bot, run @campfire-bot@ with the following parameters:
23
+
24
+ -c config FILE path to config file
25
+ -e ENVIRONMENT_NAME environment name to load from config file
26
+ -p plugin PLUGIN_PATH path to your plugins
27
+
28
+ Example:
18
29
 
19
- campfire-bot development
30
+ @campfire-bot -c config.yml -e production -p ./plugins@
20
31
 
21
32
  h2. Known issues
22
33
 
@@ -41,5 +52,4 @@ h3. Contributors
41
52
  * Marcel M. Cary - "github":http://github.com/mcary
42
53
  * Hugh Evans - "github":http://github.com/artpop
43
54
  * Sean O'Dowd - "github":http://github.com/seanodowd
44
- * Andrew Erickson - "github":http://github.com/aerickson
45
- * Chad Boyd - "github":http://github.com/hoverlover
55
+ * Andrew Erickson - "github":http://github.com/aerickson
@@ -1,13 +1,59 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # Run this script with the environment as the only argument. eg. ./script/campfire-bot development
4
- BOT_ENVIRONMENT = ARGV.first
5
- BOT_ROOT = '.'
3
+ # Run this script with the environment as the only argument. eg. ./script/bot development
4
+ # BOT_ENVIRONMENT = ARGV.first
5
+ # BOT_ROOT = File.join(File.dirname(__FILE__), '..')
6
6
 
7
7
  require 'rubygems'
8
- require 'bundler/setup'
8
+ # require 'bundler/setup'
9
+ require 'optparse'
9
10
  require 'bot'
11
+ # require File.join(BOT_ROOT, 'lib', 'bot')
12
+
13
+
14
+ options = {}
15
+
16
+
17
+ begin
18
+ optparse = OptionParser.new do |opts|
19
+ opts.banner = "Usage: campfire-bot [options]"
20
+
21
+ opts.on("-cCONFIG_FILE", "--config CONFIG_FILE", "path to your config file") do |config|
22
+ options[:config_file] = config
23
+ end
24
+
25
+ opts.on("-eENVIRONMENT", "--environment ENVIRONMENT", "the environment name as specified in the config file") do |env|
26
+ options[:env] = env
27
+ end
28
+
29
+ opts.on( "-pPLUGIN_PATH", "--plugin_path PLUGIN_PATH",
30
+ "path to your plugins folder" ) do |pp|
31
+ options[:plugin_path] = pp
32
+ end
33
+
34
+ opts.on_tail("-h", "--help", "prints this help text") do
35
+ p opts
36
+ exit
37
+ end
38
+ end
39
+
40
+ optparse.parse!
41
+
42
+ mandatory = [:config_file, :env, :plugin_path]
43
+ missing = mandatory.select{ |param| options[param].nil? }
44
+ if not missing.empty?
45
+ puts "Missing options: #{missing.join(', ')}"
46
+ puts optparse
47
+ exit
48
+ end
49
+ rescue OptionParser::InvalidOption, OptionParser::MissingArgument
50
+ puts $!.to_s
51
+ puts optparse
52
+ exit
53
+ end
54
+
55
+
56
+ bot.create(options[:config_file], options[:env], options[:plugin_path])
10
57
 
11
- bot = CampfireBot::Bot.instance
12
58
  bot.connect
13
- bot.run
59
+ bot.run
@@ -5,8 +5,8 @@ require "version"
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "campfire-bot"
7
7
  s.version = CampfireBot::VERSION
8
- s.authors = ["Josh Wand", "Chad Boyd"]
9
- s.email = ["", "hoverlover@gmail.com"]
8
+ s.authors = ["Josh Wand", "Tim Riley"]
9
+ s.email = ["josh@joshwand.com"]
10
10
  s.homepage = "https://github.com/joshwand/campfire-bot"
11
11
  s.summary = %q{This is a bot for 37 Signals’ Campfire chat service.}
12
12
  s.description = s.summary
@@ -14,14 +14,11 @@ Gem::Specification.new do |s|
14
14
  s.files = `git ls-files`.split("\n")
15
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
- s.require_paths = ["lib", "plugins"]
17
+ s.require_paths = ["lib"]
18
18
 
19
19
  s.add_dependency 'twitter-stream', '~> 0.1'
20
20
  s.add_dependency 'tinder', '>= 1.4.3'
21
- s.add_dependency 'hpricot', '~> 0.8.3'
22
- s.add_dependency 'mime-types', '~> 1.16'
23
- s.add_dependency 'activesupport', '~> 3.1.3'
21
+ s.add_dependency 'activesupport', '~> 3.0.3'
24
22
  s.add_dependency 'logging', '~> 1.4.3'
25
- s.add_dependency 'eventmachine', '~> 0.12.10'
26
23
  s.add_dependency 'i18n', '~> 0.5.0'
27
24
  end
@@ -1,10 +1,9 @@
1
1
  development:
2
2
  site: campfire_subdomain_name
3
3
  use_ssl: true
4
- log_dir: var
5
4
  rooms:
6
5
  - Main room
7
- - <%= "Other room" %> # ERB interpolation
6
+ - Other room
8
7
  api_key: your_api_key
9
8
  nickname: Bot
10
9
  fullname: Bot Name
@@ -29,3 +28,5 @@ production:
29
28
  - basecamp
30
29
  svn_urls:
31
30
  - http://your.svn/url/
31
+ svn_username: your_svn_username
32
+ svn_password: your_svn_password
data/lib/bot.rb CHANGED
@@ -7,43 +7,47 @@ require 'yaml'
7
7
  require 'eventmachine'
8
8
  require 'logging'
9
9
  require 'fileutils'
10
- require 'erb'
10
+
11
+ # Local Libs
12
+ require "message"
13
+ require "event"
14
+ require "plugin"
15
+
11
16
  require 'tinder'
12
17
 
13
18
  module CampfireBot
14
- autoload :Plugin, 'plugin'
15
- autoload :Event, 'event'
16
- autoload :Message, 'message'
17
-
18
19
  class Bot
19
20
  # this is necessary so the room and campfire objects can be accessed by plugins.
20
21
  include Singleton
21
22
 
22
23
  # FIXME - these will be invalid if disconnected. handle this.
23
- attr_reader :campfire, :rooms, :config, :log
24
-
25
- def initialize
26
- if BOT_ENVIRONMENT.nil?
27
- puts "you must specify a BOT_ENVIRONMENT"
28
- exit 1
29
- end
30
- @timeouts = 0
31
- @config = YAML::load(ERB.new(File.read("#{BOT_ROOT}/config.yml")).result)[BOT_ENVIRONMENT]
32
- @rooms = {}
24
+ attr_reader :campfire, :rooms, :config, :log, :environment_name
25
+
26
+ def create(config_file, environment_name, plugin_path)
27
+ @config = YAML::load(File.read(config_file))[environment_name]
28
+ @plugin_path = plugin_path
29
+ @environment_name = environment_name
30
+
33
31
  @root_logger = Logging.logger["CampfireBot"]
34
32
  @log = Logging.logger[self]
35
-
36
- log_dir = @config['log_dir']
37
- Dir.mkdir(log_dir) unless Dir.exists? log_dir
38
-
33
+
39
34
  # TODO much of this should be configurable per environment
40
- @root_logger.add_appenders Logging.appenders.rolling_file("#{log_dir}/#{BOT_ENVIRONMENT}.log",
35
+
36
+ @root_logger.add_appenders Logging.appenders.rolling_file("#{@environment_name}.log",
41
37
  :layout => Logging.layouts.pattern(:pattern => "%d | %-6l | %-12c | %m\n"),
42
38
  :age => 'daily',
43
39
  :keep => 7)
44
40
  @root_logger.level = @config['log_level'] rescue :info
41
+
42
+ @timeouts = 0
43
+
44
+ @rooms = {}
45
+
45
46
  end
46
47
 
48
+ # def initialize
49
+ # end
50
+
47
51
  def connect
48
52
  load_plugins unless !@config['enable_plugins']
49
53
  begin
@@ -60,8 +64,7 @@ module CampfireBot
60
64
  def run(interval = 5)
61
65
  catch(:stop_listening) do
62
66
  trap('INT') { throw :stop_listening }
63
- trap('TERM') { throw :stop_listening }
64
-
67
+
65
68
  # since room#listen blocks, stick it in its own thread
66
69
  @rooms.each_pair do |room_name, room|
67
70
  Thread.new do
@@ -119,9 +122,6 @@ module CampfireBot
119
122
  end
120
123
  end
121
124
  end
122
-
123
- # Leave the room so users won't be under the false impression that the bot is still running.
124
- @rooms.each_value.map(&:leave)
125
125
  end
126
126
 
127
127
  private
@@ -143,7 +143,7 @@ module CampfireBot
143
143
 
144
144
  def load_plugins
145
145
  @config['enable_plugins'].each do |plugin_name|
146
- require "campfire_bot/#{plugin_name}"
146
+ load "#{@plugin_path}/#{plugin_name}.rb"
147
147
  end
148
148
 
149
149
  # And instantiate them
@@ -1,3 +1,3 @@
1
1
  module CampfireBot
2
- VERSION = '0.1.0'
2
+ VERSION = '1.0.0'
3
3
  end
metadata CHANGED
@@ -1,22 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: campfire-bot
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 23
5
+ prerelease:
5
6
  segments:
6
- - 0
7
7
  - 1
8
8
  - 0
9
- version: 0.1.0
9
+ - 0
10
+ version: 1.0.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Josh Wand
13
- - Chad Boyd
14
+ - Tim Riley
14
15
  autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2011-12-08 00:00:00 -06:00
19
- default_executable:
19
+ date: 2012-02-16 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: twitter-stream
@@ -26,6 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
+ hash: 9
29
30
  segments:
30
31
  - 0
31
32
  - 1
@@ -40,6 +41,7 @@ dependencies:
40
41
  requirements:
41
42
  - - ">="
42
43
  - !ruby/object:Gem::Version
44
+ hash: 1
43
45
  segments:
44
46
  - 1
45
47
  - 4
@@ -48,98 +50,56 @@ dependencies:
48
50
  type: :runtime
49
51
  version_requirements: *id002
50
52
  - !ruby/object:Gem::Dependency
51
- name: hpricot
53
+ name: activesupport
52
54
  prerelease: false
53
55
  requirement: &id003 !ruby/object:Gem::Requirement
54
56
  none: false
55
57
  requirements:
56
58
  - - ~>
57
59
  - !ruby/object:Gem::Version
60
+ hash: 1
58
61
  segments:
62
+ - 3
59
63
  - 0
60
- - 8
61
64
  - 3
62
- version: 0.8.3
65
+ version: 3.0.3
63
66
  type: :runtime
64
67
  version_requirements: *id003
65
- - !ruby/object:Gem::Dependency
66
- name: mime-types
67
- prerelease: false
68
- requirement: &id004 !ruby/object:Gem::Requirement
69
- none: false
70
- requirements:
71
- - - ~>
72
- - !ruby/object:Gem::Version
73
- segments:
74
- - 1
75
- - 16
76
- version: "1.16"
77
- type: :runtime
78
- version_requirements: *id004
79
- - !ruby/object:Gem::Dependency
80
- name: activesupport
81
- prerelease: false
82
- requirement: &id005 !ruby/object:Gem::Requirement
83
- none: false
84
- requirements:
85
- - - ~>
86
- - !ruby/object:Gem::Version
87
- segments:
88
- - 3
89
- - 1
90
- - 3
91
- version: 3.1.3
92
- type: :runtime
93
- version_requirements: *id005
94
68
  - !ruby/object:Gem::Dependency
95
69
  name: logging
96
70
  prerelease: false
97
- requirement: &id006 !ruby/object:Gem::Requirement
71
+ requirement: &id004 !ruby/object:Gem::Requirement
98
72
  none: false
99
73
  requirements:
100
74
  - - ~>
101
75
  - !ruby/object:Gem::Version
76
+ hash: 1
102
77
  segments:
103
78
  - 1
104
79
  - 4
105
80
  - 3
106
81
  version: 1.4.3
107
82
  type: :runtime
108
- version_requirements: *id006
109
- - !ruby/object:Gem::Dependency
110
- name: eventmachine
111
- prerelease: false
112
- requirement: &id007 !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ~>
116
- - !ruby/object:Gem::Version
117
- segments:
118
- - 0
119
- - 12
120
- - 10
121
- version: 0.12.10
122
- type: :runtime
123
- version_requirements: *id007
83
+ version_requirements: *id004
124
84
  - !ruby/object:Gem::Dependency
125
85
  name: i18n
126
86
  prerelease: false
127
- requirement: &id008 !ruby/object:Gem::Requirement
87
+ requirement: &id005 !ruby/object:Gem::Requirement
128
88
  none: false
129
89
  requirements:
130
90
  - - ~>
131
91
  - !ruby/object:Gem::Version
92
+ hash: 11
132
93
  segments:
133
94
  - 0
134
95
  - 5
135
96
  - 0
136
97
  version: 0.5.0
137
98
  type: :runtime
138
- version_requirements: *id008
99
+ version_requirements: *id005
139
100
  description: "This is a bot for 37 Signals\xE2\x80\x99 Campfire chat service."
140
101
  email:
141
- - ""
142
- - hoverlover@gmail.com
102
+ - josh@joshwand.com
143
103
  executables:
144
104
  - campfire-bot
145
105
  extensions: []
@@ -149,9 +109,7 @@ extra_rdoc_files: []
149
109
  files:
150
110
  - .autotest
151
111
  - .gitignore
152
- - CHANGELOG.md
153
112
  - Gemfile
154
- - Gemfile.lock
155
113
  - README.textile
156
114
  - TODO
157
115
  - bin/campfire-bot
@@ -163,38 +121,6 @@ files:
163
121
  - lib/message.rb
164
122
  - lib/plugin.rb
165
123
  - lib/version.rb
166
- - plugins/accountability.rb
167
- - plugins/austin.rb
168
- - plugins/basecamp.rb
169
- - plugins/beer.rb
170
- - plugins/beijing_tally.rb
171
- - plugins/boop.rb
172
- - plugins/bruce.rb
173
- - plugins/bugzilla.rb
174
- - plugins/calvin.rb
175
- - plugins/chuck.rb
176
- - plugins/dilbert.rb
177
- - plugins/excuse.rb
178
- - plugins/fail.rb
179
- - plugins/figlet.rb
180
- - plugins/fun.rb
181
- - plugins/garfield.rb
182
- - plugins/generic_search.rb
183
- - plugins/help.rb
184
- - plugins/infobot.rb
185
- - plugins/insult.rb
186
- - plugins/jira.rb
187
- - plugins/lolcats.rb
188
- - plugins/our_quotes.rb
189
- - plugins/quote.rb
190
- - plugins/schneier.rb
191
- - plugins/seen.rb
192
- - plugins/signal_filter.rb
193
- - plugins/svn.rb
194
- - plugins/twitter_echo.rb
195
- - plugins/unfuddle.rb
196
- - plugins/weather.rb
197
- - plugins/xkcd.rb
198
124
  - spec/beer_spec.rb
199
125
  - spec/bugzilla_spec.rb
200
126
  - spec/command_spec.rb
@@ -263,7 +189,6 @@ files:
263
189
  - vendor/escape/rdoc/index.html
264
190
  - vendor/escape/rdoc/rdoc-style.css
265
191
  - vendor/escape/test/test-escape.rb
266
- has_rdoc: true
267
192
  homepage: https://github.com/joshwand/campfire-bot
268
193
  licenses: []
269
194
 
@@ -272,12 +197,12 @@ rdoc_options: []
272
197
 
273
198
  require_paths:
274
199
  - lib
275
- - plugins
276
200
  required_ruby_version: !ruby/object:Gem::Requirement
277
201
  none: false
278
202
  requirements:
279
203
  - - ">="
280
204
  - !ruby/object:Gem::Version
205
+ hash: 3
281
206
  segments:
282
207
  - 0
283
208
  version: "0"
@@ -286,13 +211,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
286
211
  requirements:
287
212
  - - ">="
288
213
  - !ruby/object:Gem::Version
214
+ hash: 3
289
215
  segments:
290
216
  - 0
291
217
  version: "0"
292
218
  requirements: []
293
219
 
294
220
  rubyforge_project:
295
- rubygems_version: 1.3.7
221
+ rubygems_version: 1.8.16
296
222
  signing_key:
297
223
  specification_version: 3
298
224
  summary: "This is a bot for 37 Signals\xE2\x80\x99 Campfire chat service."