bullhorn 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 (65) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +64 -0
  5. data/Rakefile +56 -0
  6. data/VERSION +1 -0
  7. data/examples/foobar/README +243 -0
  8. data/examples/foobar/Rakefile +10 -0
  9. data/examples/foobar/app/controllers/application_controller.rb +10 -0
  10. data/examples/foobar/app/controllers/raiser_controller.rb +7 -0
  11. data/examples/foobar/app/helpers/application_helper.rb +3 -0
  12. data/examples/foobar/app/helpers/raiser_helper.rb +2 -0
  13. data/examples/foobar/config/boot.rb +110 -0
  14. data/examples/foobar/config/database.yml +22 -0
  15. data/examples/foobar/config/environment.rb +48 -0
  16. data/examples/foobar/config/environments/development.rb +17 -0
  17. data/examples/foobar/config/environments/production.rb +28 -0
  18. data/examples/foobar/config/environments/test.rb +28 -0
  19. data/examples/foobar/config/initializers/backtrace_silencers.rb +7 -0
  20. data/examples/foobar/config/initializers/bullhorn.rb +4 -0
  21. data/examples/foobar/config/initializers/inflections.rb +10 -0
  22. data/examples/foobar/config/initializers/mime_types.rb +5 -0
  23. data/examples/foobar/config/initializers/new_rails_defaults.rb +21 -0
  24. data/examples/foobar/config/initializers/session_store.rb +15 -0
  25. data/examples/foobar/config/locales/en.yml +5 -0
  26. data/examples/foobar/config/routes.rb +43 -0
  27. data/examples/foobar/db/seeds.rb +7 -0
  28. data/examples/foobar/doc/README_FOR_APP +2 -0
  29. data/examples/foobar/log/development.log +530 -0
  30. data/examples/foobar/log/production.log +141 -0
  31. data/examples/foobar/log/server.log +0 -0
  32. data/examples/foobar/log/test.log +0 -0
  33. data/examples/foobar/public/404.html +30 -0
  34. data/examples/foobar/public/422.html +30 -0
  35. data/examples/foobar/public/500.html +30 -0
  36. data/examples/foobar/public/favicon.ico +0 -0
  37. data/examples/foobar/public/images/rails.png +0 -0
  38. data/examples/foobar/public/index.html +275 -0
  39. data/examples/foobar/public/javascripts/application.js +2 -0
  40. data/examples/foobar/public/javascripts/controls.js +963 -0
  41. data/examples/foobar/public/javascripts/dragdrop.js +973 -0
  42. data/examples/foobar/public/javascripts/effects.js +1128 -0
  43. data/examples/foobar/public/javascripts/prototype.js +4320 -0
  44. data/examples/foobar/public/robots.txt +5 -0
  45. data/examples/foobar/script/about +4 -0
  46. data/examples/foobar/script/console +3 -0
  47. data/examples/foobar/script/dbconsole +3 -0
  48. data/examples/foobar/script/destroy +3 -0
  49. data/examples/foobar/script/generate +3 -0
  50. data/examples/foobar/script/performance/benchmarker +3 -0
  51. data/examples/foobar/script/performance/profiler +3 -0
  52. data/examples/foobar/script/plugin +3 -0
  53. data/examples/foobar/script/runner +3 -0
  54. data/examples/foobar/script/server +3 -0
  55. data/examples/foobar/test/functional/raiser_controller_test.rb +8 -0
  56. data/examples/foobar/test/performance/browsing_test.rb +9 -0
  57. data/examples/foobar/test/test_helper.rb +38 -0
  58. data/examples/foobar/test/unit/helpers/raiser_helper_test.rb +4 -0
  59. data/lib/bullhorn.rb +41 -0
  60. data/lib/bullhorn/plugin.rb +34 -0
  61. data/lib/bullhorn/sender.rb +57 -0
  62. data/test/helper.rb +12 -0
  63. data/test/test_bullhorn.rb +104 -0
  64. data/test/test_bullhorn_plugin.rb +61 -0
  65. metadata +196 -0
@@ -0,0 +1,5 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-Agent: *
5
+ # Disallow: /
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ $LOAD_PATH.unshift "#{RAILTIES_PATH}/builtin/rails_info"
4
+ require 'commands/about'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/console'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/dbconsole'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/destroy'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/generate'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../../config/boot', __FILE__)
3
+ require 'commands/performance/benchmarker'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../../config/boot', __FILE__)
3
+ require 'commands/performance/profiler'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/plugin'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/runner'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/server'
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class RaiserControllerTest < ActionController::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+ require 'performance_test_help'
3
+
4
+ # Profiling results for each test method are written to tmp/performance.
5
+ class BrowsingTest < ActionController::PerformanceTest
6
+ def test_homepage
7
+ get '/'
8
+ end
9
+ end
@@ -0,0 +1,38 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
3
+ require 'test_help'
4
+
5
+ class ActiveSupport::TestCase
6
+ # Transactional fixtures accelerate your tests by wrapping each test method
7
+ # in a transaction that's rolled back on completion. This ensures that the
8
+ # test database remains unchanged so your fixtures don't have to be reloaded
9
+ # between every test method. Fewer database queries means faster tests.
10
+ #
11
+ # Read Mike Clark's excellent walkthrough at
12
+ # http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
13
+ #
14
+ # Every Active Record database supports transactions except MyISAM tables
15
+ # in MySQL. Turn off transactional fixtures in this case; however, if you
16
+ # don't care one way or the other, switching from MyISAM to InnoDB tables
17
+ # is recommended.
18
+ #
19
+ # The only drawback to using transactional fixtures is when you actually
20
+ # need to test transactions. Since your test is bracketed by a transaction,
21
+ # any transactions started in your code will be automatically rolled back.
22
+ self.use_transactional_fixtures = true
23
+
24
+ # Instantiated fixtures are slow, but give you @david where otherwise you
25
+ # would need people(:david). If you don't want to migrate your existing
26
+ # test cases which use the @david style and don't mind the speed hit (each
27
+ # instantiated fixtures translates to a database query per test method),
28
+ # then set this back to true.
29
+ self.use_instantiated_fixtures = false
30
+
31
+ # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
32
+ #
33
+ # Note: You'll currently still have to declare fixtures explicitly in integration tests
34
+ # -- they do not yet inherit this setting
35
+ fixtures :all
36
+
37
+ # Add more helper methods to be used by all tests here...
38
+ end
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class RaiserHelperTest < ActionView::TestCase
4
+ end
@@ -0,0 +1,41 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'base64'
4
+ require 'json'
5
+ require 'cgi'
6
+
7
+ class Bullhorn
8
+ autoload :Plugin, "bullhorn/plugin"
9
+ autoload :Sender, "bullhorn/sender"
10
+
11
+ VERSION = "0.0.1"
12
+
13
+ URL = "http://bullhorn.it/api/v1/exception"
14
+
15
+ FILTERING = %(['"]?\[?%s\]?['"]?=>?([^&\s]*))
16
+
17
+ attr :filters
18
+ attr :api_key
19
+ attr :url
20
+
21
+ include Sender
22
+
23
+ def initialize(app, options = {})
24
+ @app = app
25
+ @api_key = options[:api_key] || raise(ArgumentError, ":api_key is required")
26
+ @filters = Array(options[:filters])
27
+ @url = options[:url] || URL
28
+ end
29
+
30
+ def call(env)
31
+ status, headers, body =
32
+ begin
33
+ @app.call(env)
34
+ rescue Exception => ex
35
+ notify ex, env
36
+ raise ex
37
+ end
38
+
39
+ [status, headers, body]
40
+ end
41
+ end
@@ -0,0 +1,34 @@
1
+ class Bullhorn
2
+ module Plugin
3
+ class << self
4
+ attr_accessor :options
5
+
6
+ attr :ignored_exceptions
7
+ end
8
+
9
+ def self.ignored_exceptions
10
+ [].tap do |ex|
11
+ ex << ActiveRecord::RecordNotFound if defined? ActiveRecord
12
+ if defined? ActionController
13
+ ex << ActionController::UnknownController
14
+ ex << ActionController::UnknownAction
15
+ ex << ActionController::RoutingError if ActionController.const_defined?(:RoutingError)
16
+ end
17
+ end
18
+ end
19
+
20
+ protected
21
+ def rescue_action_in_public(exception)
22
+ notify_with_bullhorn!(exception)
23
+
24
+ super
25
+ end
26
+
27
+ def notify_with_bullhorn!(exception)
28
+ unless Bullhorn::Plugin.ignored_exceptions.include?(exception)
29
+ bullhorn = Bullhorn.new(self, Bullhorn::Plugin.options)
30
+ bullhorn.notify(exception, request.env)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,57 @@
1
+ class Bullhorn
2
+ module Sender
3
+ extend self
4
+
5
+ def serialize(str)
6
+ str # CGI.escape(Base64.encode64(str.to_json).strip)
7
+ end
8
+
9
+ def notify(exception, env)
10
+ Net::HTTP.post_form(URI(url), {
11
+ :api_key => api_key,
12
+ :message => exception.message,
13
+ :backtrace => serialize(exception.backtrace),
14
+ :env => serialize(whitelist(env)),
15
+ :request_body => serialize(whitelist(request_body(env)))
16
+ })
17
+ end
18
+
19
+ protected
20
+ def request_body(env)
21
+ if io = env['rack.input']
22
+ io.rewind if io.respond_to?(:rewind)
23
+ io.read
24
+ end
25
+ rescue
26
+ ""
27
+ end
28
+
29
+ def whitelist(str_or_hash)
30
+ case str_or_hash
31
+ when Hash
32
+ str_or_hash.dup.tap do |h|
33
+ h.keys.each do |key|
34
+ if h[key].respond_to?(:gsub)
35
+ h[key] = sanitize(h[key])
36
+ else
37
+ h[key] = h[key].inspect
38
+ end
39
+ end
40
+ end
41
+
42
+ when String
43
+ sanitize(str_or_hash)
44
+ end
45
+ end
46
+
47
+ def sanitize(str)
48
+ str.dup.tap do |ret|
49
+ @filters.each do |filter|
50
+ ret.gsub!(Regexp.new(FILTERING % filter)) { |m|
51
+ m.gsub($1, '[FILTERED]')
52
+ }
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'contest'
4
+ require 'mocha'
5
+ require 'fakeweb'
6
+
7
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
9
+ require 'bullhorn'
10
+
11
+ class Test::Unit::TestCase
12
+ end
@@ -0,0 +1,104 @@
1
+ require 'helper'
2
+
3
+ class TestBullhorn < Test::Unit::TestCase
4
+ setup do
5
+ @app = lambda { |env| [200, { "Content-Type" => "text/plain" }, ["Hello"]] }
6
+ end
7
+
8
+ test "raises when no api_key" do
9
+ assert_raise ArgumentError do
10
+ Bullhorn.new(@app)
11
+ end
12
+ end
13
+
14
+ test "accepts a filter of string arrays" do
15
+ bullhorn = Bullhorn.new(@app, :api_key => "key", :filters => ['a', 'b'])
16
+ assert_equal ['a', 'b'], bullhorn.filters
17
+ end
18
+
19
+ test "accepts a filter as a single string" do
20
+ bullhorn = Bullhorn.new(@app, :api_key => "key", :filters => "password")
21
+ assert_equal ['password'], bullhorn.filters
22
+ end
23
+
24
+ context "on raise" do
25
+ Fail = Class.new(StandardError)
26
+
27
+ setup do
28
+ @fail = Fail.new("Fail!!!")
29
+ @fail.stubs(:backtrace).returns(["line1", "line2"])
30
+ @app = lambda { |env| raise @fail }
31
+
32
+ @bullhorn = Bullhorn.new(@app, :api_key => "_key_",
33
+ :url => "http://test.host/api/v1")
34
+ end
35
+
36
+ should "send a notification and raise the failure" do
37
+ @bullhorn.expects(:notify)
38
+
39
+ assert_raise Fail do
40
+ @bullhorn.call({})
41
+ end
42
+ end
43
+
44
+ should "send the proper request parameters" do
45
+ uri = URI("http://test.host/api/v1")
46
+ io = stub("IO", :read => "FooBar")
47
+
48
+ expected = {
49
+ :api_key => '_key_',
50
+ :message => 'Fail!!!',
51
+ :backtrace => Bullhorn::Sender.serialize(['line1', 'line2']),
52
+ :env => Bullhorn::Sender.serialize("params" => "a&b", "rack.input" => io.inspect),
53
+ :request_body => Bullhorn::Sender.serialize("FooBar")
54
+ }
55
+
56
+ Net::HTTP.expects(:post_form).with() { |u, hash|
57
+ u == uri && hash == expected
58
+ }
59
+
60
+ begin
61
+ @bullhorn.call({ "params" => "a&b", "rack.input" => io })
62
+ rescue Fail
63
+ end
64
+ end
65
+ end
66
+
67
+ context "given filtering password / password_confirmation" do
68
+ Fail = Class.new(StandardError)
69
+
70
+ setup do
71
+ @fail = Fail.new("Fail!!!")
72
+ @fail.stubs(:backtrace).returns(["line1", "line2"])
73
+ @app = lambda { |env| raise @fail }
74
+
75
+ @bullhorn = Bullhorn.new(@app, :api_key => "_key_",
76
+ :url => "http://test.host/api/v1",
77
+ :filters => ["password"])
78
+ end
79
+
80
+ should "remove all traces of password param value in the env" do
81
+ uri = URI("http://test.host/api/v1")
82
+ io = stub("IO", :read => "password=test&user[password]=test")
83
+
84
+ expected = {
85
+ :api_key => '_key_',
86
+ :message => 'Fail!!!',
87
+ :backtrace => Bullhorn::Sender.serialize(['line1', 'line2']),
88
+ :env => Bullhorn::Sender.serialize("params" => "password=[FILTERED]&user[password]=[FILTERED]",
89
+ "rack.input" => io.inspect),
90
+ :request_body => Bullhorn::Sender.serialize("password=[FILTERED]&user[password]=[FILTERED]")
91
+ }
92
+
93
+ Net::HTTP.expects(:post_form).with() { |u, hash|
94
+ u == uri && hash == expected
95
+ }
96
+
97
+ begin
98
+ @bullhorn.call("params" => "password=test&user[password]=test",
99
+ "rack.input" => io)
100
+ rescue Fail
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,61 @@
1
+ require "helper"
2
+ require "rack/test"
3
+
4
+ Bullhorn::Plugin.options = {
5
+ :api_key => '_key_',
6
+ :filters => 'password'
7
+ }
8
+
9
+ class RescueAction
10
+
11
+ protected
12
+ def rescue_action_in_public(ex)
13
+ raise ex
14
+ end
15
+ end
16
+
17
+ class FakeRailsController < RescueAction
18
+ Fail = Class.new(StandardError)
19
+
20
+ include Bullhorn::Plugin
21
+
22
+ attr :request
23
+
24
+ def initialize(request, response)
25
+ @request, @response = request, response
26
+ end
27
+
28
+ def index
29
+ raise Fail, "Failure"
30
+ rescue => ex
31
+ rescue_action_in_public(ex)
32
+ end
33
+ end
34
+
35
+ class TestBullhornPlugin < Test::Unit::TestCase
36
+ def app
37
+ @request = Rack::Request.new({})
38
+ @app = FakeRailsController.new(@request, @response)
39
+ end
40
+
41
+ setup do
42
+ FakeWeb.allow_net_connect = false
43
+ end
44
+
45
+ test "notifies on error" do
46
+ FakeWeb.register_uri(:post, "http://bullhorn.it/api/v1/exception", :body => "OK")
47
+
48
+ begin
49
+ app.index
50
+ rescue
51
+ end
52
+ end
53
+
54
+ test "still raises original error" do
55
+ FakeWeb.register_uri(:post, "http://bullhorn.it/api/v1/exception", :body => "OK")
56
+
57
+ assert_raise FakeRailsController::Fail do
58
+ app.index
59
+ end
60
+ end
61
+ end
metadata ADDED
@@ -0,0 +1,196 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bullhorn
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Cyril David
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-05-16 00:00:00 +08:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: contest
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :development
31
+ version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: mocha
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
41
+ version: "0"
42
+ type: :development
43
+ version_requirements: *id002
44
+ - !ruby/object:Gem::Dependency
45
+ name: rack-test
46
+ prerelease: false
47
+ requirement: &id003 !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ segments:
52
+ - 0
53
+ version: "0"
54
+ type: :development
55
+ version_requirements: *id003
56
+ - !ruby/object:Gem::Dependency
57
+ name: fakeweb
58
+ prerelease: false
59
+ requirement: &id004 !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ type: :development
67
+ version_requirements: *id004
68
+ description: drop in rack middleware for bullhorn.it
69
+ email: cyx.ucron@gmail.com
70
+ executables: []
71
+
72
+ extensions: []
73
+
74
+ extra_rdoc_files:
75
+ - LICENSE
76
+ - README.rdoc
77
+ files:
78
+ - .document
79
+ - .gitignore
80
+ - LICENSE
81
+ - README.rdoc
82
+ - Rakefile
83
+ - VERSION
84
+ - examples/foobar/README
85
+ - examples/foobar/Rakefile
86
+ - examples/foobar/app/controllers/application_controller.rb
87
+ - examples/foobar/app/controllers/raiser_controller.rb
88
+ - examples/foobar/app/helpers/application_helper.rb
89
+ - examples/foobar/app/helpers/raiser_helper.rb
90
+ - examples/foobar/config/boot.rb
91
+ - examples/foobar/config/database.yml
92
+ - examples/foobar/config/environment.rb
93
+ - examples/foobar/config/environments/development.rb
94
+ - examples/foobar/config/environments/production.rb
95
+ - examples/foobar/config/environments/test.rb
96
+ - examples/foobar/config/initializers/backtrace_silencers.rb
97
+ - examples/foobar/config/initializers/bullhorn.rb
98
+ - examples/foobar/config/initializers/inflections.rb
99
+ - examples/foobar/config/initializers/mime_types.rb
100
+ - examples/foobar/config/initializers/new_rails_defaults.rb
101
+ - examples/foobar/config/initializers/session_store.rb
102
+ - examples/foobar/config/locales/en.yml
103
+ - examples/foobar/config/routes.rb
104
+ - examples/foobar/db/seeds.rb
105
+ - examples/foobar/doc/README_FOR_APP
106
+ - examples/foobar/log/development.log
107
+ - examples/foobar/log/production.log
108
+ - examples/foobar/log/server.log
109
+ - examples/foobar/log/test.log
110
+ - examples/foobar/public/404.html
111
+ - examples/foobar/public/422.html
112
+ - examples/foobar/public/500.html
113
+ - examples/foobar/public/favicon.ico
114
+ - examples/foobar/public/images/rails.png
115
+ - examples/foobar/public/index.html
116
+ - examples/foobar/public/javascripts/application.js
117
+ - examples/foobar/public/javascripts/controls.js
118
+ - examples/foobar/public/javascripts/dragdrop.js
119
+ - examples/foobar/public/javascripts/effects.js
120
+ - examples/foobar/public/javascripts/prototype.js
121
+ - examples/foobar/public/robots.txt
122
+ - examples/foobar/script/about
123
+ - examples/foobar/script/console
124
+ - examples/foobar/script/dbconsole
125
+ - examples/foobar/script/destroy
126
+ - examples/foobar/script/generate
127
+ - examples/foobar/script/performance/benchmarker
128
+ - examples/foobar/script/performance/profiler
129
+ - examples/foobar/script/plugin
130
+ - examples/foobar/script/runner
131
+ - examples/foobar/script/server
132
+ - examples/foobar/test/functional/raiser_controller_test.rb
133
+ - examples/foobar/test/performance/browsing_test.rb
134
+ - examples/foobar/test/test_helper.rb
135
+ - examples/foobar/test/unit/helpers/raiser_helper_test.rb
136
+ - lib/bullhorn.rb
137
+ - lib/bullhorn/plugin.rb
138
+ - lib/bullhorn/sender.rb
139
+ - test/helper.rb
140
+ - test/test_bullhorn.rb
141
+ - test/test_bullhorn_plugin.rb
142
+ has_rdoc: true
143
+ homepage: http://github.com/sinefunc/bullhorn
144
+ licenses: []
145
+
146
+ post_install_message:
147
+ rdoc_options:
148
+ - --charset=UTF-8
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ segments:
156
+ - 0
157
+ version: "0"
158
+ required_rubygems_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ segments:
163
+ - 0
164
+ version: "0"
165
+ requirements: []
166
+
167
+ rubyforge_project:
168
+ rubygems_version: 1.3.6
169
+ signing_key:
170
+ specification_version: 3
171
+ summary: rack middleware client for bullhorn.it
172
+ test_files:
173
+ - test/helper.rb
174
+ - test/test_bullhorn.rb
175
+ - test/test_bullhorn_plugin.rb
176
+ - examples/foobar/app/controllers/application_controller.rb
177
+ - examples/foobar/app/controllers/raiser_controller.rb
178
+ - examples/foobar/app/helpers/application_helper.rb
179
+ - examples/foobar/app/helpers/raiser_helper.rb
180
+ - examples/foobar/config/boot.rb
181
+ - examples/foobar/config/environment.rb
182
+ - examples/foobar/config/environments/development.rb
183
+ - examples/foobar/config/environments/production.rb
184
+ - examples/foobar/config/environments/test.rb
185
+ - examples/foobar/config/initializers/backtrace_silencers.rb
186
+ - examples/foobar/config/initializers/bullhorn.rb
187
+ - examples/foobar/config/initializers/inflections.rb
188
+ - examples/foobar/config/initializers/mime_types.rb
189
+ - examples/foobar/config/initializers/new_rails_defaults.rb
190
+ - examples/foobar/config/initializers/session_store.rb
191
+ - examples/foobar/config/routes.rb
192
+ - examples/foobar/db/seeds.rb
193
+ - examples/foobar/test/functional/raiser_controller_test.rb
194
+ - examples/foobar/test/performance/browsing_test.rb
195
+ - examples/foobar/test/test_helper.rb
196
+ - examples/foobar/test/unit/helpers/raiser_helper_test.rb