campfire-bot 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.
Files changed (115) hide show
  1. data/.autotest +11 -0
  2. data/.gitignore +6 -0
  3. data/Gemfile +3 -0
  4. data/Gemfile.lock +57 -0
  5. data/README.textile +52 -0
  6. data/TODO +72 -0
  7. data/bin/bot +13 -0
  8. data/campfire-bot.gemspec +27 -0
  9. data/cfbot-stop.sh +8 -0
  10. data/config.example.yml +31 -0
  11. data/lib/bot.rb +194 -0
  12. data/lib/event.rb +114 -0
  13. data/lib/message.rb +30 -0
  14. data/lib/plugin.rb +77 -0
  15. data/lib/version.rb +3 -0
  16. data/plugins/accountability.rb +45 -0
  17. data/plugins/austin.rb +29 -0
  18. data/plugins/basecamp.rb +48 -0
  19. data/plugins/beer.rb +214 -0
  20. data/plugins/beijing_tally.rb +30 -0
  21. data/plugins/boop.rb +127 -0
  22. data/plugins/bruce.rb +15 -0
  23. data/plugins/bugzilla.rb +198 -0
  24. data/plugins/calvin.rb +43 -0
  25. data/plugins/chuck.rb +23 -0
  26. data/plugins/dilbert.rb +51 -0
  27. data/plugins/excuse.rb +478 -0
  28. data/plugins/fail.rb +16 -0
  29. data/plugins/figlet.rb +10 -0
  30. data/plugins/fun.rb +95 -0
  31. data/plugins/garfield.rb +43 -0
  32. data/plugins/generic_search.rb +66 -0
  33. data/plugins/help.rb +13 -0
  34. data/plugins/infobot.rb +58 -0
  35. data/plugins/insult.rb +87 -0
  36. data/plugins/jira.rb +197 -0
  37. data/plugins/lolcats.rb +17 -0
  38. data/plugins/our_quotes.rb +195 -0
  39. data/plugins/quote.rb +31 -0
  40. data/plugins/schneier.rb +28 -0
  41. data/plugins/seen.rb +88 -0
  42. data/plugins/signal_filter.rb +9 -0
  43. data/plugins/svn.rb +167 -0
  44. data/plugins/twitter_echo.rb +54 -0
  45. data/plugins/unfuddle.rb +69 -0
  46. data/plugins/weather.rb +25 -0
  47. data/plugins/xkcd.rb +43 -0
  48. data/spec/beer_spec.rb +224 -0
  49. data/spec/bugzilla_spec.rb +90 -0
  50. data/spec/command_spec.rb +96 -0
  51. data/spec/jira_spec.rb +264 -0
  52. data/spec/our_quotes_spec.rb +186 -0
  53. data/spec/plugin_spec.rb +43 -0
  54. data/spec/spec.opts +1 -0
  55. data/vendor/escape/ChangeLog +30 -0
  56. data/vendor/escape/Makefile +5 -0
  57. data/vendor/escape/README +81 -0
  58. data/vendor/escape/VERSION +1 -0
  59. data/vendor/escape/escape.rb +302 -0
  60. data/vendor/escape/install.rb +109 -0
  61. data/vendor/escape/misc/README.erb +85 -0
  62. data/vendor/escape/rdoc/classes/Escape.html +427 -0
  63. data/vendor/escape/rdoc/classes/Escape.src/M000022.html +19 -0
  64. data/vendor/escape/rdoc/classes/Escape.src/M000023.html +32 -0
  65. data/vendor/escape/rdoc/classes/Escape.src/M000024.html +24 -0
  66. data/vendor/escape/rdoc/classes/Escape.src/M000025.html +19 -0
  67. data/vendor/escape/rdoc/classes/Escape.src/M000026.html +48 -0
  68. data/vendor/escape/rdoc/classes/Escape.src/M000027.html +19 -0
  69. data/vendor/escape/rdoc/classes/Escape.src/M000028.html +19 -0
  70. data/vendor/escape/rdoc/classes/Escape/HTMLAttrValue.html +113 -0
  71. data/vendor/escape/rdoc/classes/Escape/HTMLEscaped.html +113 -0
  72. data/vendor/escape/rdoc/classes/Escape/PercentEncoded.html +113 -0
  73. data/vendor/escape/rdoc/classes/Escape/ShellEscaped.html +113 -0
  74. data/vendor/escape/rdoc/classes/Escape/StringWrapper.html +242 -0
  75. data/vendor/escape/rdoc/classes/Escape/StringWrapper.src/M000029.html +18 -0
  76. data/vendor/escape/rdoc/classes/Escape/StringWrapper.src/M000030.html +18 -0
  77. data/vendor/escape/rdoc/classes/Escape/StringWrapper.src/M000031.html +18 -0
  78. data/vendor/escape/rdoc/classes/Escape/StringWrapper.src/M000032.html +18 -0
  79. data/vendor/escape/rdoc/classes/Escape/StringWrapper.src/M000033.html +18 -0
  80. data/vendor/escape/rdoc/classes/Escape/StringWrapper.src/M000035.html +18 -0
  81. data/vendor/escape/rdoc/classes/TestEscapeHTML.html +182 -0
  82. data/vendor/escape/rdoc/classes/TestEscapeHTML.src/M000008.html +18 -0
  83. data/vendor/escape/rdoc/classes/TestEscapeHTML.src/M000009.html +18 -0
  84. data/vendor/escape/rdoc/classes/TestEscapeHTML.src/M000010.html +18 -0
  85. data/vendor/escape/rdoc/classes/TestEscapeHTML.src/M000011.html +18 -0
  86. data/vendor/escape/rdoc/classes/TestEscapePercentEncoded.html +182 -0
  87. data/vendor/escape/rdoc/classes/TestEscapePercentEncoded.src/M000012.html +18 -0
  88. data/vendor/escape/rdoc/classes/TestEscapePercentEncoded.src/M000013.html +19 -0
  89. data/vendor/escape/rdoc/classes/TestEscapePercentEncoded.src/M000014.html +20 -0
  90. data/vendor/escape/rdoc/classes/TestEscapePercentEncoded.src/M000015.html +22 -0
  91. data/vendor/escape/rdoc/classes/TestEscapeShellEscaped.html +167 -0
  92. data/vendor/escape/rdoc/classes/TestEscapeShellEscaped.src/M000016.html +18 -0
  93. data/vendor/escape/rdoc/classes/TestEscapeShellEscaped.src/M000017.html +20 -0
  94. data/vendor/escape/rdoc/classes/TestEscapeShellEscaped.src/M000018.html +20 -0
  95. data/vendor/escape/rdoc/classes/TestEscapeStringWrapper.html +167 -0
  96. data/vendor/escape/rdoc/classes/TestEscapeStringWrapper.src/M000019.html +20 -0
  97. data/vendor/escape/rdoc/classes/TestEscapeStringWrapper.src/M000020.html +24 -0
  98. data/vendor/escape/rdoc/classes/TestEscapeStringWrapper.src/M000021.html +22 -0
  99. data/vendor/escape/rdoc/files/escape_rb.html +136 -0
  100. data/vendor/escape/rdoc/files/install_rb.html +250 -0
  101. data/vendor/escape/rdoc/files/install_rb.src/M000001.html +23 -0
  102. data/vendor/escape/rdoc/files/install_rb.src/M000002.html +31 -0
  103. data/vendor/escape/rdoc/files/install_rb.src/M000003.html +27 -0
  104. data/vendor/escape/rdoc/files/install_rb.src/M000004.html +27 -0
  105. data/vendor/escape/rdoc/files/install_rb.src/M000005.html +21 -0
  106. data/vendor/escape/rdoc/files/install_rb.src/M000006.html +23 -0
  107. data/vendor/escape/rdoc/files/install_rb.src/M000007.html +21 -0
  108. data/vendor/escape/rdoc/files/test/test-escape_rb.html +109 -0
  109. data/vendor/escape/rdoc/fr_class_index.html +36 -0
  110. data/vendor/escape/rdoc/fr_file_index.html +29 -0
  111. data/vendor/escape/rdoc/fr_method_index.html +61 -0
  112. data/vendor/escape/rdoc/index.html +24 -0
  113. data/vendor/escape/rdoc/rdoc-style.css +208 -0
  114. data/vendor/escape/test/test-escape.rb +90 -0
  115. metadata +259 -0
@@ -0,0 +1,208 @@
1
+
2
+ body {
3
+ font-family: Verdana,Arial,Helvetica,sans-serif;
4
+ font-size: 90%;
5
+ margin: 0;
6
+ margin-left: 40px;
7
+ padding: 0;
8
+ background: white;
9
+ }
10
+
11
+ h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
12
+ h1 { font-size: 150%; }
13
+ h2,h3,h4 { margin-top: 1em; }
14
+
15
+ a { background: #eef; color: #039; text-decoration: none; }
16
+ a:hover { background: #039; color: #eef; }
17
+
18
+ /* Override the base stylesheet's Anchor inside a table cell */
19
+ td > a {
20
+ background: transparent;
21
+ color: #039;
22
+ text-decoration: none;
23
+ }
24
+
25
+ /* and inside a section title */
26
+ .section-title > a {
27
+ background: transparent;
28
+ color: #eee;
29
+ text-decoration: none;
30
+ }
31
+
32
+ /* === Structural elements =================================== */
33
+
34
+ div#index {
35
+ margin: 0;
36
+ margin-left: -40px;
37
+ padding: 0;
38
+ font-size: 90%;
39
+ }
40
+
41
+
42
+ div#index a {
43
+ margin-left: 0.7em;
44
+ }
45
+
46
+ div#index .section-bar {
47
+ margin-left: 0px;
48
+ padding-left: 0.7em;
49
+ background: #ccc;
50
+ font-size: small;
51
+ }
52
+
53
+
54
+ div#classHeader, div#fileHeader {
55
+ width: auto;
56
+ color: white;
57
+ padding: 0.5em 1.5em 0.5em 1.5em;
58
+ margin: 0;
59
+ margin-left: -40px;
60
+ border-bottom: 3px solid #006;
61
+ }
62
+
63
+ div#classHeader a, div#fileHeader a {
64
+ background: inherit;
65
+ color: white;
66
+ }
67
+
68
+ div#classHeader td, div#fileHeader td {
69
+ background: inherit;
70
+ color: white;
71
+ }
72
+
73
+
74
+ div#fileHeader {
75
+ background: #057;
76
+ }
77
+
78
+ div#classHeader {
79
+ background: #048;
80
+ }
81
+
82
+
83
+ .class-name-in-header {
84
+ font-size: 180%;
85
+ font-weight: bold;
86
+ }
87
+
88
+
89
+ div#bodyContent {
90
+ padding: 0 1.5em 0 1.5em;
91
+ }
92
+
93
+ div#description {
94
+ padding: 0.5em 1.5em;
95
+ background: #efefef;
96
+ border: 1px dotted #999;
97
+ }
98
+
99
+ div#description h1,h2,h3,h4,h5,h6 {
100
+ color: #125;;
101
+ background: transparent;
102
+ }
103
+
104
+ div#validator-badges {
105
+ text-align: center;
106
+ }
107
+ div#validator-badges img { border: 0; }
108
+
109
+ div#copyright {
110
+ color: #333;
111
+ background: #efefef;
112
+ font: 0.75em sans-serif;
113
+ margin-top: 5em;
114
+ margin-bottom: 0;
115
+ padding: 0.5em 2em;
116
+ }
117
+
118
+
119
+ /* === Classes =================================== */
120
+
121
+ table.header-table {
122
+ color: white;
123
+ font-size: small;
124
+ }
125
+
126
+ .type-note {
127
+ font-size: small;
128
+ color: #DEDEDE;
129
+ }
130
+
131
+ .xxsection-bar {
132
+ background: #eee;
133
+ color: #333;
134
+ padding: 3px;
135
+ }
136
+
137
+ .section-bar {
138
+ color: #333;
139
+ border-bottom: 1px solid #999;
140
+ margin-left: -20px;
141
+ }
142
+
143
+
144
+ .section-title {
145
+ background: #79a;
146
+ color: #eee;
147
+ padding: 3px;
148
+ margin-top: 2em;
149
+ margin-left: -30px;
150
+ border: 1px solid #999;
151
+ }
152
+
153
+ .top-aligned-row { vertical-align: top }
154
+ .bottom-aligned-row { vertical-align: bottom }
155
+
156
+ /* --- Context section classes ----------------------- */
157
+
158
+ .context-row { }
159
+ .context-item-name { font-family: monospace; font-weight: bold; color: black; }
160
+ .context-item-value { font-size: small; color: #448; }
161
+ .context-item-desc { color: #333; padding-left: 2em; }
162
+
163
+ /* --- Method classes -------------------------- */
164
+ .method-detail {
165
+ background: #efefef;
166
+ padding: 0;
167
+ margin-top: 0.5em;
168
+ margin-bottom: 1em;
169
+ border: 1px dotted #ccc;
170
+ }
171
+ .method-heading {
172
+ color: black;
173
+ background: #ccc;
174
+ border-bottom: 1px solid #666;
175
+ padding: 0.2em 0.5em 0 0.5em;
176
+ }
177
+ .method-signature { color: black; background: inherit; }
178
+ .method-name { font-weight: bold; }
179
+ .method-args { font-style: italic; }
180
+ .method-description { padding: 0 0.5em 0 0.5em; }
181
+
182
+ /* --- Source code sections -------------------- */
183
+
184
+ a.source-toggle { font-size: 90%; }
185
+ div.method-source-code {
186
+ background: #262626;
187
+ color: #ffdead;
188
+ margin: 1em;
189
+ padding: 0.5em;
190
+ border: 1px dashed #999;
191
+ overflow: hidden;
192
+ }
193
+
194
+ div.method-source-code pre { color: #ffdead; overflow: hidden; }
195
+
196
+ /* --- Ruby keyword styles --------------------- */
197
+
198
+ .standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
199
+
200
+ .ruby-constant { color: #7fffd4; background: transparent; }
201
+ .ruby-keyword { color: #00ffff; background: transparent; }
202
+ .ruby-ivar { color: #eedd82; background: transparent; }
203
+ .ruby-operator { color: #00ffee; background: transparent; }
204
+ .ruby-identifier { color: #ffdead; background: transparent; }
205
+ .ruby-node { color: #ffa07a; background: transparent; }
206
+ .ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
207
+ .ruby-regexp { color: #ffa07a; background: transparent; }
208
+ .ruby-value { color: #7fffd4; background: transparent; }
@@ -0,0 +1,90 @@
1
+ require 'test/unit'
2
+ require 'escape'
3
+
4
+ class TestEscapeStringWrapper < Test::Unit::TestCase
5
+ def test_eq
6
+ assert(Escape::PercentEncoded.new("foo") == Escape::PercentEncoded.new("foo"))
7
+ assert(Escape::PercentEncoded.new("foo") != Escape::PercentEncoded.new("bar"))
8
+ assert(Escape::ShellEscaped.new("a") != Escape::PercentEncoded.new("a"))
9
+ end
10
+
11
+ def test_hash
12
+ v1 = Escape::PercentEncoded.new("foo")
13
+ v2 = Escape::PercentEncoded.new("foo")
14
+ h = {}
15
+ h[v1] = 1
16
+ h[v2] = 2
17
+ assert_equal(1, h.size)
18
+ assert_equal(2, h[v1])
19
+ end
20
+
21
+ def test_new_dup
22
+ s = "a"
23
+ o = Escape::PercentEncoded.new(s)
24
+ assert_not_equal(s.object_id, o.instance_variable_get(:@str).object_id)
25
+ o = Escape::PercentEncoded.new_no_dup(s)
26
+ assert_equal(s.object_id, o.instance_variable_get(:@str).object_id)
27
+ end
28
+ end
29
+
30
+ class TestEscapeShellEscaped < Test::Unit::TestCase
31
+ def assert_equal_se(str, tst)
32
+ assert_equal(Escape::ShellEscaped.new(str), tst)
33
+ end
34
+
35
+ def test_shell_command
36
+ assert_equal_se("com arg", Escape.shell_command(%w[com arg]))
37
+ assert_equal_se("ls /", Escape.shell_command(%w[ls /]))
38
+ assert_equal_se("echo '*'", Escape.shell_command(%w[echo *]))
39
+ end
40
+
41
+ def test_shell_single_word
42
+ assert_equal_se("''", Escape.shell_single_word(''))
43
+ assert_equal_se("foo", Escape.shell_single_word('foo'))
44
+ assert_equal_se("'*'", Escape.shell_single_word('*'))
45
+ end
46
+
47
+ end
48
+
49
+ class TestEscapePercentEncoded < Test::Unit::TestCase
50
+ def assert_equal_pe(str, tst)
51
+ assert_equal(Escape::PercentEncoded.new(str), tst)
52
+ end
53
+
54
+ def test_uri_segment
55
+ assert_kind_of(Escape::PercentEncoded, Escape.uri_segment("foo"))
56
+ assert_equal_pe("a%2Fb", Escape.uri_segment("a/b"))
57
+ end
58
+
59
+ def test_uri_path
60
+ assert_kind_of(Escape::PercentEncoded, Escape.uri_path("foo"))
61
+ assert_equal_pe("a/b/c", Escape.uri_path("a/b/c"))
62
+ assert_equal_pe("a%3Fb/c%3Fd/e%3Ff", Escape.uri_path("a?b/c?d/e?f"))
63
+ end
64
+
65
+ def test_html_form
66
+ assert_kind_of(Escape::PercentEncoded, Escape.html_form([["foo","bar"]]))
67
+ assert_equal_pe("a=b&c=d", Escape.html_form([["a","b"], ["c","d"]]))
68
+ assert_equal_pe("a=b;c=d", Escape.html_form([["a","b"], ["c","d"]], ';'))
69
+ assert_equal_pe("k=1&k=2", Escape.html_form([["k","1"], ["k","2"]]))
70
+ assert_equal_pe("k%3D=%26%3B%3D", Escape.html_form([["k=","&;="]]))
71
+ end
72
+ end
73
+
74
+ class TestEscapeHTML < Test::Unit::TestCase
75
+ def assert_equal_he(str, tst)
76
+ assert_equal(Escape::HTMLEscaped.new(str), tst)
77
+ end
78
+
79
+ def assert_equal_hav(str, tst)
80
+ assert_equal(Escape::HTMLAttrValue.new(str), tst)
81
+ end
82
+
83
+ def test_html_text
84
+ assert_equal_he('a&amp;&lt;&gt;"', Escape.html_text('a&<>"'))
85
+ end
86
+
87
+ def test_html_attr_value
88
+ assert_equal_hav('"a&amp;&lt;&gt;&quot;"', Escape.html_attr_value('a&<>"'))
89
+ end
90
+ end
metadata ADDED
@@ -0,0 +1,259 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: campfire-bot
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Josh Wand
9
+ - Chad Boyd
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2011-10-03 00:00:00.000000000Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: twitter-stream
17
+ requirement: &70179924138760 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: '0.1'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *70179924138760
26
+ - !ruby/object:Gem::Dependency
27
+ name: tinder
28
+ requirement: &70179924137920 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.4.3
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *70179924137920
37
+ - !ruby/object:Gem::Dependency
38
+ name: hpricot
39
+ requirement: &70179924137020 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: 0.8.3
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *70179924137020
48
+ - !ruby/object:Gem::Dependency
49
+ name: mime-types
50
+ requirement: &70179924135860 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: '1.16'
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: *70179924135860
59
+ - !ruby/object:Gem::Dependency
60
+ name: activesupport
61
+ requirement: &70179924135160 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: 3.0.3
67
+ type: :runtime
68
+ prerelease: false
69
+ version_requirements: *70179924135160
70
+ - !ruby/object:Gem::Dependency
71
+ name: logging
72
+ requirement: &70179924132180 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.4.3
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: *70179924132180
81
+ - !ruby/object:Gem::Dependency
82
+ name: eventmachine
83
+ requirement: &70179924129980 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: 0.12.10
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: *70179924129980
92
+ - !ruby/object:Gem::Dependency
93
+ name: i18n
94
+ requirement: &70179924129300 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ~>
98
+ - !ruby/object:Gem::Version
99
+ version: 0.5.0
100
+ type: :runtime
101
+ prerelease: false
102
+ version_requirements: *70179924129300
103
+ description: This is a bot for 37 Signals’ Campfire chat service.
104
+ email:
105
+ - ''
106
+ - hoverlover@gmail.com
107
+ executables:
108
+ - bot
109
+ extensions: []
110
+ extra_rdoc_files: []
111
+ files:
112
+ - .autotest
113
+ - .gitignore
114
+ - Gemfile
115
+ - Gemfile.lock
116
+ - README.textile
117
+ - TODO
118
+ - bin/bot
119
+ - campfire-bot.gemspec
120
+ - cfbot-stop.sh
121
+ - config.example.yml
122
+ - lib/bot.rb
123
+ - lib/event.rb
124
+ - lib/message.rb
125
+ - lib/plugin.rb
126
+ - lib/version.rb
127
+ - plugins/accountability.rb
128
+ - plugins/austin.rb
129
+ - plugins/basecamp.rb
130
+ - plugins/beer.rb
131
+ - plugins/beijing_tally.rb
132
+ - plugins/boop.rb
133
+ - plugins/bruce.rb
134
+ - plugins/bugzilla.rb
135
+ - plugins/calvin.rb
136
+ - plugins/chuck.rb
137
+ - plugins/dilbert.rb
138
+ - plugins/excuse.rb
139
+ - plugins/fail.rb
140
+ - plugins/figlet.rb
141
+ - plugins/fun.rb
142
+ - plugins/garfield.rb
143
+ - plugins/generic_search.rb
144
+ - plugins/help.rb
145
+ - plugins/infobot.rb
146
+ - plugins/insult.rb
147
+ - plugins/jira.rb
148
+ - plugins/lolcats.rb
149
+ - plugins/our_quotes.rb
150
+ - plugins/quote.rb
151
+ - plugins/schneier.rb
152
+ - plugins/seen.rb
153
+ - plugins/signal_filter.rb
154
+ - plugins/svn.rb
155
+ - plugins/twitter_echo.rb
156
+ - plugins/unfuddle.rb
157
+ - plugins/weather.rb
158
+ - plugins/xkcd.rb
159
+ - spec/beer_spec.rb
160
+ - spec/bugzilla_spec.rb
161
+ - spec/command_spec.rb
162
+ - spec/jira_spec.rb
163
+ - spec/our_quotes_spec.rb
164
+ - spec/plugin_spec.rb
165
+ - spec/spec.opts
166
+ - tmp/.gitignore
167
+ - vendor/escape/ChangeLog
168
+ - vendor/escape/Makefile
169
+ - vendor/escape/README
170
+ - vendor/escape/VERSION
171
+ - vendor/escape/escape.rb
172
+ - vendor/escape/install.rb
173
+ - vendor/escape/misc/README.erb
174
+ - vendor/escape/rdoc/classes/Escape.html
175
+ - vendor/escape/rdoc/classes/Escape.src/M000022.html
176
+ - vendor/escape/rdoc/classes/Escape.src/M000023.html
177
+ - vendor/escape/rdoc/classes/Escape.src/M000024.html
178
+ - vendor/escape/rdoc/classes/Escape.src/M000025.html
179
+ - vendor/escape/rdoc/classes/Escape.src/M000026.html
180
+ - vendor/escape/rdoc/classes/Escape.src/M000027.html
181
+ - vendor/escape/rdoc/classes/Escape.src/M000028.html
182
+ - vendor/escape/rdoc/classes/Escape/HTMLAttrValue.html
183
+ - vendor/escape/rdoc/classes/Escape/HTMLEscaped.html
184
+ - vendor/escape/rdoc/classes/Escape/PercentEncoded.html
185
+ - vendor/escape/rdoc/classes/Escape/ShellEscaped.html
186
+ - vendor/escape/rdoc/classes/Escape/StringWrapper.html
187
+ - vendor/escape/rdoc/classes/Escape/StringWrapper.src/M000029.html
188
+ - vendor/escape/rdoc/classes/Escape/StringWrapper.src/M000030.html
189
+ - vendor/escape/rdoc/classes/Escape/StringWrapper.src/M000031.html
190
+ - vendor/escape/rdoc/classes/Escape/StringWrapper.src/M000032.html
191
+ - vendor/escape/rdoc/classes/Escape/StringWrapper.src/M000033.html
192
+ - vendor/escape/rdoc/classes/Escape/StringWrapper.src/M000035.html
193
+ - vendor/escape/rdoc/classes/TestEscapeHTML.html
194
+ - vendor/escape/rdoc/classes/TestEscapeHTML.src/M000008.html
195
+ - vendor/escape/rdoc/classes/TestEscapeHTML.src/M000009.html
196
+ - vendor/escape/rdoc/classes/TestEscapeHTML.src/M000010.html
197
+ - vendor/escape/rdoc/classes/TestEscapeHTML.src/M000011.html
198
+ - vendor/escape/rdoc/classes/TestEscapePercentEncoded.html
199
+ - vendor/escape/rdoc/classes/TestEscapePercentEncoded.src/M000012.html
200
+ - vendor/escape/rdoc/classes/TestEscapePercentEncoded.src/M000013.html
201
+ - vendor/escape/rdoc/classes/TestEscapePercentEncoded.src/M000014.html
202
+ - vendor/escape/rdoc/classes/TestEscapePercentEncoded.src/M000015.html
203
+ - vendor/escape/rdoc/classes/TestEscapeShellEscaped.html
204
+ - vendor/escape/rdoc/classes/TestEscapeShellEscaped.src/M000016.html
205
+ - vendor/escape/rdoc/classes/TestEscapeShellEscaped.src/M000017.html
206
+ - vendor/escape/rdoc/classes/TestEscapeShellEscaped.src/M000018.html
207
+ - vendor/escape/rdoc/classes/TestEscapeStringWrapper.html
208
+ - vendor/escape/rdoc/classes/TestEscapeStringWrapper.src/M000019.html
209
+ - vendor/escape/rdoc/classes/TestEscapeStringWrapper.src/M000020.html
210
+ - vendor/escape/rdoc/classes/TestEscapeStringWrapper.src/M000021.html
211
+ - vendor/escape/rdoc/files/escape_rb.html
212
+ - vendor/escape/rdoc/files/install_rb.html
213
+ - vendor/escape/rdoc/files/install_rb.src/M000001.html
214
+ - vendor/escape/rdoc/files/install_rb.src/M000002.html
215
+ - vendor/escape/rdoc/files/install_rb.src/M000003.html
216
+ - vendor/escape/rdoc/files/install_rb.src/M000004.html
217
+ - vendor/escape/rdoc/files/install_rb.src/M000005.html
218
+ - vendor/escape/rdoc/files/install_rb.src/M000006.html
219
+ - vendor/escape/rdoc/files/install_rb.src/M000007.html
220
+ - vendor/escape/rdoc/files/test/test-escape_rb.html
221
+ - vendor/escape/rdoc/fr_class_index.html
222
+ - vendor/escape/rdoc/fr_file_index.html
223
+ - vendor/escape/rdoc/fr_method_index.html
224
+ - vendor/escape/rdoc/index.html
225
+ - vendor/escape/rdoc/rdoc-style.css
226
+ - vendor/escape/test/test-escape.rb
227
+ homepage: https://github.com/joshwand/campfire-bot
228
+ licenses: []
229
+ post_install_message:
230
+ rdoc_options: []
231
+ require_paths:
232
+ - lib
233
+ - plugins
234
+ required_ruby_version: !ruby/object:Gem::Requirement
235
+ none: false
236
+ requirements:
237
+ - - ! '>='
238
+ - !ruby/object:Gem::Version
239
+ version: '0'
240
+ required_rubygems_version: !ruby/object:Gem::Requirement
241
+ none: false
242
+ requirements:
243
+ - - ! '>='
244
+ - !ruby/object:Gem::Version
245
+ version: '0'
246
+ requirements: []
247
+ rubyforge_project:
248
+ rubygems_version: 1.8.10
249
+ signing_key:
250
+ specification_version: 3
251
+ summary: This is a bot for 37 Signals’ Campfire chat service.
252
+ test_files:
253
+ - spec/beer_spec.rb
254
+ - spec/bugzilla_spec.rb
255
+ - spec/command_spec.rb
256
+ - spec/jira_spec.rb
257
+ - spec/our_quotes_spec.rb
258
+ - spec/plugin_spec.rb
259
+ - spec/spec.opts