taskbot 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "cinch", "~> 1.1.2"
4
+ gem "mongo_mapper", "~> 0.8.6"
5
+ gem "bson_ext", "~> 1.2.4"
6
+ gem "daemons", "~> 1.1.0"
7
+ gem "optiflag", "~> 0.7"
8
+
9
+ group :development do
10
+ gem "bundler", "~> 1.0.0"
11
+ gem "jeweler", "~> 1.5.2"
12
+ end
@@ -0,0 +1,37 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activesupport (3.0.5)
5
+ bson (1.2.4)
6
+ bson_ext (1.2.4)
7
+ cinch (1.1.2)
8
+ daemons (1.1.0)
9
+ git (1.2.5)
10
+ jeweler (1.5.2)
11
+ bundler (~> 1.0.0)
12
+ git (>= 1.2.5)
13
+ rake
14
+ jnunemaker-validatable (1.8.4)
15
+ activesupport (>= 2.3.4)
16
+ mongo (1.2.4)
17
+ bson (>= 1.2.4)
18
+ mongo_mapper (0.8.6)
19
+ activesupport (>= 2.3.4)
20
+ jnunemaker-validatable (~> 1.8.4)
21
+ plucky (~> 0.3.6)
22
+ optiflag (0.7)
23
+ plucky (0.3.7)
24
+ mongo (~> 1.1)
25
+ rake (0.8.7)
26
+
27
+ PLATFORMS
28
+ ruby
29
+
30
+ DEPENDENCIES
31
+ bson_ext (~> 1.2.4)
32
+ bundler (~> 1.0.0)
33
+ cinch (~> 1.1.2)
34
+ daemons (~> 1.1.0)
35
+ jeweler (~> 1.5.2)
36
+ mongo_mapper (~> 0.8.6)
37
+ optiflag (~> 0.7)
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Logan Koester
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,83 @@
1
+ = taskbot
2
+
3
+ Simple to-do lists implemented as an IRC robot
4
+
5
+ It is distributed as a Ruby gem and based on Cinch and MongoDB.
6
+
7
+ == Usage
8
+
9
+ <&logankoester> !task help
10
+ < TaskBot> Simple to-do lists implemented as an IRC robot
11
+ < TaskBot> !task add "Take out the trash" - Add a task for yourself
12
+ < TaskBot> !task add <nick> "Take out the trash" - Add a task for <nick>
13
+ < TaskBot> !task complete|finish #<task_id> - Mark a task completed
14
+ < TaskBot> !task rm|delete|remove #<task_id> - Remove a task
15
+ < TaskBot> !task list - Get a list of your uncompleted tasks
16
+ < TaskBot> !task list <nick> - Get a list of <nick>'s uncompleted tasks
17
+ < TaskBot> Author: Logan Koester <logan@logankoester.com>
18
+ < TaskBot> Fork me at https://github.com/logankoester/taskbot>
19
+
20
+ == Installation & Setup
21
+
22
+ 1. Install Ruby 1.9 and rubygems if you don't already have it.
23
+
24
+ 2. Install taskbot
25
+
26
+ $ gem install taskbot
27
+ Successfully installed taskbot-0.1.0
28
+ 1 gem installed
29
+
30
+ 3. Set up a MongoDB database to store users information in. I recommend creating a free account at https://mongohq.com
31
+
32
+ 4. Create a configuration file
33
+
34
+ $ taskbot --setup ~/.taskbot
35
+ taskbot v0.1.0 - Simple to-do lists implemented as an IRC robot
36
+
37
+ IRC Configuration
38
+ -----------------
39
+ IRC Nick: TaskBot
40
+ IRC Server: irc.myserver.net
41
+ For password protected channels, type "#channel PASSWORD"
42
+ Channel: #mychannel
43
+ Database Configuration
44
+ ----------------------
45
+ You can get free MongoDB hosting from http://mongohq.com
46
+ MongoDB Host: dbhost
47
+ MongoDB Port: 6000
48
+ MongoDB Database: taskbot
49
+ MongoDB Username: taskbot
50
+ MongoDB Password: taskbot
51
+
52
+ File written.
53
+ Use taskbot -f ~/.taskbot to launch your bot.
54
+
55
+ 5. Launch your new IRC bot!
56
+
57
+ $ taskbot -f ~/.taskbot
58
+
59
+ Use --daemonize if you want to run it in the background.
60
+
61
+ == Usage
62
+
63
+ Explore the options and features available with !task help
64
+
65
+ == Getting Help
66
+
67
+ When all else fails, read the code!
68
+
69
+ == Contributing to taskbot
70
+
71
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
72
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
73
+ * Fork the project
74
+ * Start a feature/bugfix branch
75
+ * Commit and push until you are happy with your contribution
76
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
77
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
78
+
79
+ == Copyright
80
+
81
+ Copyright (c) 2011 Logan Koester. See LICENSE.txt for
82
+ further details.
83
+
@@ -0,0 +1,37 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'rake'
11
+
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
+ gem.name = "taskbot"
16
+ gem.homepage = "http://github.com/logankoester/taskbot"
17
+ gem.license = "MIT"
18
+ gem.summary = %Q{Simple to-do lists implemented as an IRC robot}
19
+ gem.description = %Q{Simple to-do lists implemented as an IRC robot}
20
+ gem.email = "logan@logankoester.com"
21
+ gem.authors = ["Logan Koester"]
22
+ # Include your dependencies below. Runtime dependencies are required when using your gem,
23
+ # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
24
+ # gem.add_runtime_dependency 'jabber4r', '> 0.1'
25
+ # gem.add_development_dependency 'rspec', '> 1.2.3'
26
+ end
27
+ Jeweler::RubygemsDotOrgTasks.new
28
+
29
+ require 'rake/rdoctask'
30
+ Rake::RDocTask.new do |rdoc|
31
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
32
+
33
+ rdoc.rdoc_dir = 'rdoc'
34
+ rdoc.title = "taskbot #{version}"
35
+ rdoc.rdoc_files.include('README*')
36
+ rdoc.rdoc_files.include('lib/**/*.rb')
37
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'daemons'
5
+ require 'optiflag'
6
+ require 'yaml'
7
+
8
+ APP_VERSION = File.read("#{File.dirname(__FILE__)}/../VERSION")
9
+
10
+ def ask(q)
11
+ print q
12
+ a = STDIN.gets.chomp
13
+ return a
14
+ end
15
+
16
+ module App extend OptiFlagSet
17
+ optional_flag "file" do
18
+ alternate_forms "f"
19
+ description "Path to a configuration file"
20
+ end
21
+
22
+ optional_flag "setup" do
23
+ description "Generate a configuration file"
24
+ end
25
+
26
+ optional_switch_flag "daemonize" do
27
+ alternate_forms "d"
28
+ description "Run this process in the background"
29
+ end
30
+
31
+ and_process!
32
+ end
33
+
34
+ puts "taskbot v#{APP_VERSION} - Simple to-do lists implemented as an IRC robot"
35
+
36
+ flag = App.flags
37
+
38
+ if flag.file
39
+ Daemons.daemonize if flag.daemonize?
40
+ puts "Using configuration at #{flag.file}"
41
+ $config = YAML.load_file(flag.file)
42
+ require File.expand_path("#{File.dirname(__FILE__)}/../lib/taskbot.rb")
43
+ elsif flag.setup
44
+ $config = {'mongodb' => {}}
45
+
46
+ puts
47
+ puts "IRC Configuration"
48
+ puts "-----------------"
49
+ $config['nick'] = ask "IRC Nick: "
50
+ $config['server'] = ask "IRC Server: "
51
+ puts "For password protected channels, type \"#channel PASSWORD\""
52
+ $config['channels'] = [ask("Channel: ")]
53
+
54
+ puts "Database Configuration"
55
+ puts "----------------------"
56
+ puts "You can get free MongoDB hosting from http://mongohq.com"
57
+ $config['mongodb']['host'] = ask "MongoDB Host: "
58
+ $config['mongodb']['port'] = ask "MongoDB Port: "
59
+ $config['mongodb']['database'] = ask "MongoDB Database: "
60
+ $config['mongodb']['username'] = ask "MongoDB Username: "
61
+ $config['mongodb']['password'] = ask "MongoDB Password: "
62
+
63
+ File.open(flag.setup, 'w+') { |f| f << $config.to_yaml }
64
+ puts
65
+ puts "File written."
66
+ puts "Use taskbot -f #{flag.setup} to launch your bot."
67
+ else
68
+ puts "Use taskbot --help for usage"
69
+ end
@@ -0,0 +1,9 @@
1
+ module Cinch
2
+ module Plugins
3
+ module TaskBot
4
+ autoload :Task, File.expand_path('../taskbot/task', __FILE__)
5
+ autoload :User, File.expand_path('../taskbot/user', __FILE__)
6
+ autoload :Tasks, File.expand_path('../taskbot/tasks', __FILE__)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ module Cinch
2
+ module Plugins
3
+ module TaskBot
4
+
5
+ class Task
6
+ include MongoMapper::Document
7
+ key :content, String
8
+ key :status, Symbol, :default => :open
9
+ belongs_to :user
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,117 @@
1
+ module Cinch
2
+ module Plugins
3
+ module TaskBot
4
+ class Tasks
5
+ include Cinch::Plugin
6
+
7
+ match /add "(.+)"/, :method => :add_task
8
+ match /add (.+) "(.+)"/, :method => :add_task_for
9
+
10
+ match /complete|finish #(.+)/, :method => :complete_task
11
+ match /rm|delete|remove #(.+)/, :method => :remove_task
12
+
13
+ match /list$/, :method => :get_list
14
+ match /list (.+)/, :method => :get_list_for
15
+
16
+ match /help$/, :method => :help
17
+
18
+ listen_to :channel
19
+ prefix /^!task /
20
+
21
+ def initialize(*args)
22
+ super
23
+ end
24
+
25
+ def help(m)
26
+ m.reply "Simple to-do lists implemented as an IRC robot"
27
+
28
+ m.reply "!task add \"Take out the trash\" - Add a task for yourself"
29
+ m.reply "!task add <nick> \"Take out the trash\" - Add a task for <nick>"
30
+
31
+ m.reply "!task complete|finish #<task_id> - Mark a task completed"
32
+ m.reply "!task rm|delete|remove #<task_id> - Remove a task"
33
+
34
+ m.reply "!task list - Get a list of your uncompleted tasks"
35
+ m.reply "!task list <nick> - Get a list of <nick>'s uncompleted tasks"
36
+
37
+ m.reply "Author: Logan Koester <logan@logankoester.com>"
38
+ m.reply "Fork me at https://github.com/logankoester/taskbot>"
39
+ end
40
+
41
+ # Add a task for yourself
42
+ def add_task(m, content)
43
+ add_task_for_user(m, m.user.nick, content)
44
+ end
45
+
46
+ # Add a task for <nick>
47
+ def add_task_for(m, nick, content)
48
+ add_task_for_user(m, nick, content)
49
+ end
50
+
51
+ # Mark a task completed
52
+ def complete_task(m, task_id)
53
+ set_task_status(m, task_id, :completed)
54
+ end
55
+
56
+ # Remove a task
57
+ def remove_task(m, task_id)
58
+ task = Task.find(task_id)
59
+ if task
60
+ Task.destroy(task_id)
61
+ m.reply "Task ##{task_id} has been removed."
62
+ else
63
+ m.reply "Task ##{task_id} not found."
64
+ end
65
+ end
66
+
67
+ # Get a list of your uncompleted tasks
68
+ def get_list(m)
69
+ get_list_for_user(m, m.user.nick)
70
+ end
71
+
72
+ # Get a list of <nick>'s uncompleted tasks
73
+ def get_list_for(m, nick)
74
+ get_list_for_user(m, nick)
75
+ end
76
+
77
+ private
78
+ def add_task_for_user(m, nick, content)
79
+ nick.downcase!
80
+ user = User.find_by_nick(nick)
81
+ user_status = (user.nil?) ? "New user '#{nick}' created" : "Existing user '#{nick}' found"
82
+ user ||= User.create( :nick => nick )
83
+ task = user.tasks.create( :content => content )
84
+ m.reply "#{user_status}, task added as #{task.id}"
85
+ return task
86
+ end
87
+
88
+ def get_list_for_user(m, nick)
89
+ nick.downcase!
90
+ user = User.find_by_nick(nick)
91
+ user_status = (user.nil?) ? "New user '#{nick}' created" : "Existing user '#{nick}' found"
92
+ user ||= User.create( :nick => nick )
93
+ open_tasks = user.tasks.map { |t| t if t.status == :open }
94
+ if open_tasks.empty?
95
+ m.reply "#{user_status}, no open tasks."
96
+ else
97
+ m.reply "#{user_status}, open tasks:"
98
+ open_tasks.each { |t| m.reply "##{t._id} #{t.content}" }
99
+ end
100
+ end
101
+
102
+ def set_task_status(m, task_id, new_status)
103
+ task = Task.find(task_id)
104
+ if task
105
+ old_status = task.status
106
+ task.status = new_status
107
+ task.save
108
+ m.reply "Task ##{task.id} status changed from #{old_status} to #{task.status}"
109
+ else
110
+ m.reply "Task ##{task_id} not found."
111
+ end
112
+ end
113
+
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,13 @@
1
+ module Cinch
2
+ module Plugins
3
+ module TaskBot
4
+
5
+ class User
6
+ include MongoMapper::Document
7
+ key :nick, String
8
+ many :tasks, :class => Cinch::Plugins::TaskBot::Task
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,30 @@
1
+ %w{rubygems cinch mongo_mapper}.each { |d| require d }
2
+
3
+ require "#{File.dirname(__FILE__)}/cinch/plugins/taskbot"
4
+
5
+ begin
6
+ MongoMapper.connection = Mongo::Connection.new($config['mongodb']['host'], $config['mongodb']['port'])
7
+ MongoMapper.database = $config['mongodb']['database']
8
+ MongoMapper.database.authenticate($config['mongodb']['username'], $config['mongodb']['password'])
9
+ rescue Mongo::AuthenticationError => e
10
+ puts e
11
+ puts "Host: " + $config['mongodb']['host']
12
+ puts "Port: " + $config['mongodb']['port']
13
+ puts "Database: " + $config['mongodb']['database']
14
+ puts "Username: " + $config['mongodb']['username']
15
+ puts "Password: " + $config['mongodb']['password']
16
+ exit
17
+ rescue Exception => e
18
+ "Failed to connect to database: #{e}"
19
+ end
20
+
21
+ $bot = Cinch::Bot.new do
22
+ configure do |c|
23
+ c.server = $config['server']
24
+ c.nick = $config['nick']
25
+ c.channels = $config['channels']
26
+ c.plugins.plugins = [Cinch::Plugins::TaskBot::Tasks]
27
+ end
28
+ end
29
+
30
+ $bot.start
@@ -0,0 +1,73 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{taskbot}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Logan Koester"]
12
+ s.date = %q{2011-03-21}
13
+ s.default_executable = %q{taskbot}
14
+ s.description = %q{Simple to-do lists implemented as an IRC robot}
15
+ s.email = %q{logan@logankoester.com}
16
+ s.executables = ["taskbot"]
17
+ s.extra_rdoc_files = [
18
+ "LICENSE.txt",
19
+ "README.rdoc"
20
+ ]
21
+ s.files = [
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "bin/taskbot",
29
+ "lib/cinch/plugins/taskbot.rb",
30
+ "lib/cinch/plugins/taskbot/task.rb",
31
+ "lib/cinch/plugins/taskbot/tasks.rb",
32
+ "lib/cinch/plugins/taskbot/user.rb",
33
+ "lib/taskbot.rb",
34
+ "taskbot.gemspec"
35
+ ]
36
+ s.homepage = %q{http://github.com/logankoester/taskbot}
37
+ s.licenses = ["MIT"]
38
+ s.require_paths = ["lib"]
39
+ s.rubygems_version = %q{1.3.7}
40
+ s.summary = %q{Simple to-do lists implemented as an IRC robot}
41
+
42
+ if s.respond_to? :specification_version then
43
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
44
+ s.specification_version = 3
45
+
46
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
47
+ s.add_runtime_dependency(%q<cinch>, ["~> 1.1.2"])
48
+ s.add_runtime_dependency(%q<mongo_mapper>, ["~> 0.8.6"])
49
+ s.add_runtime_dependency(%q<bson_ext>, ["~> 1.2.4"])
50
+ s.add_runtime_dependency(%q<daemons>, ["~> 1.1.0"])
51
+ s.add_runtime_dependency(%q<optiflag>, ["~> 0.7"])
52
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
53
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
54
+ else
55
+ s.add_dependency(%q<cinch>, ["~> 1.1.2"])
56
+ s.add_dependency(%q<mongo_mapper>, ["~> 0.8.6"])
57
+ s.add_dependency(%q<bson_ext>, ["~> 1.2.4"])
58
+ s.add_dependency(%q<daemons>, ["~> 1.1.0"])
59
+ s.add_dependency(%q<optiflag>, ["~> 0.7"])
60
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
61
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
62
+ end
63
+ else
64
+ s.add_dependency(%q<cinch>, ["~> 1.1.2"])
65
+ s.add_dependency(%q<mongo_mapper>, ["~> 0.8.6"])
66
+ s.add_dependency(%q<bson_ext>, ["~> 1.2.4"])
67
+ s.add_dependency(%q<daemons>, ["~> 1.1.0"])
68
+ s.add_dependency(%q<optiflag>, ["~> 0.7"])
69
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
70
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
71
+ end
72
+ end
73
+
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: taskbot
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Logan Koester
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-03-21 00:00:00 -04:00
18
+ default_executable: taskbot
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: cinch
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 1
30
+ - 2
31
+ version: 1.1.2
32
+ type: :runtime
33
+ prerelease: false
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: mongo_mapper
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ~>
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 0
44
+ - 8
45
+ - 6
46
+ version: 0.8.6
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: bson_ext
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ segments:
58
+ - 1
59
+ - 2
60
+ - 4
61
+ version: 1.2.4
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: daemons
67
+ requirement: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ~>
71
+ - !ruby/object:Gem::Version
72
+ segments:
73
+ - 1
74
+ - 1
75
+ - 0
76
+ version: 1.1.0
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *id004
80
+ - !ruby/object:Gem::Dependency
81
+ name: optiflag
82
+ requirement: &id005 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ segments:
88
+ - 0
89
+ - 7
90
+ version: "0.7"
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: *id005
94
+ - !ruby/object:Gem::Dependency
95
+ name: bundler
96
+ requirement: &id006 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ segments:
102
+ - 1
103
+ - 0
104
+ - 0
105
+ version: 1.0.0
106
+ type: :development
107
+ prerelease: false
108
+ version_requirements: *id006
109
+ - !ruby/object:Gem::Dependency
110
+ name: jeweler
111
+ requirement: &id007 !ruby/object:Gem::Requirement
112
+ none: false
113
+ requirements:
114
+ - - ~>
115
+ - !ruby/object:Gem::Version
116
+ segments:
117
+ - 1
118
+ - 5
119
+ - 2
120
+ version: 1.5.2
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *id007
124
+ description: Simple to-do lists implemented as an IRC robot
125
+ email: logan@logankoester.com
126
+ executables:
127
+ - taskbot
128
+ extensions: []
129
+
130
+ extra_rdoc_files:
131
+ - LICENSE.txt
132
+ - README.rdoc
133
+ files:
134
+ - Gemfile
135
+ - Gemfile.lock
136
+ - LICENSE.txt
137
+ - README.rdoc
138
+ - Rakefile
139
+ - VERSION
140
+ - bin/taskbot
141
+ - lib/cinch/plugins/taskbot.rb
142
+ - lib/cinch/plugins/taskbot/task.rb
143
+ - lib/cinch/plugins/taskbot/tasks.rb
144
+ - lib/cinch/plugins/taskbot/user.rb
145
+ - lib/taskbot.rb
146
+ - taskbot.gemspec
147
+ has_rdoc: true
148
+ homepage: http://github.com/logankoester/taskbot
149
+ licenses:
150
+ - MIT
151
+ post_install_message:
152
+ rdoc_options: []
153
+
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ none: false
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ hash: 88891898656538276
162
+ segments:
163
+ - 0
164
+ version: "0"
165
+ required_rubygems_version: !ruby/object:Gem::Requirement
166
+ none: false
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ segments:
171
+ - 0
172
+ version: "0"
173
+ requirements: []
174
+
175
+ rubyforge_project:
176
+ rubygems_version: 1.3.7
177
+ signing_key:
178
+ specification_version: 3
179
+ summary: Simple to-do lists implemented as an IRC robot
180
+ test_files: []
181
+