lib/toadhopper.rb in toadhopper-0.3 vs lib/toadhopper.rb in toadhopper-0.4

- old
+ new

@@ -1,78 +1,78 @@ require 'net/http' require 'yaml' module Toadhopper - class << self - # Set the API key - def api_key=(key) - @@api_key = key +class << self + # Set the API key + def api_key=(key) + @@api_key = key + end + # Returns the key set by Toadhopper.api_key= + def api_key + @@api_key + end + # Sets patterns to [FILTER] out sensitive data such as passwords, emails and credit card numbers. + # + # Toadhopper.filters = /password/, /email/, /credit_card_number/ + def filters=(*filters) + @@filters = filters.flatten + end + # Returns the filters set by Toadhopper.filters= + def filters + [@@filters].flatten.compact + end + # Replaces the values of the keys matching Toadhopper.filters with [FILTERED]. Typically used on the params and environment hashes. + def filter(hash) + hash.inject({}) do |acc, (key, val)| + acc[key] = filters.any? {|f| key.to_s =~ Regexp.new(f)} ? "[FILTERED]" : val + acc end - # Returns the key set by Toadhopper.api_key= - def api_key - @@api_key - end - # Sets patterns to [FILTER] out sensitive data such as passwords, emails and credit card numbers. - # - # Toadhopper.filters = /password/, /email/, /credit_card_number/ - def filters=(*filters) - @@filters = filters.flatten - end - # Returns the filters set by Toadhopper.filters= - def filters - [@@filters].flatten.compact - end - # Replaces the values of the keys matching Toadhopper.filters with [FILTERED]. Typically used on the params and environment hashes. - def filter(hash) - hash.inject({}) do |acc, (key, val)| - acc[key] = filters.any? {|f| key.to_s =~ Regexp.new(f)} ? "[FILTERED]" : val - acc + end + # Posts an error to Hoptoad + def post!(error, options={}, header_options={}) + uri = URI.parse("http://hoptoadapp.com/notices/") + Net::HTTP.start(uri.host, uri.port) do |http| + headers = { + 'Content-type' => 'application/x-yaml', + 'Accept' => 'text/xml, application/xml', + 'X-Hoptoad-Client-Name' => 'Toadhopper', + }.merge(header_options) + http.read_timeout = 5 # seconds + http.open_timeout = 2 # seconds + begin + http.post uri.path, {"notice" => notice_params(error, options)}.to_yaml, headers + rescue TimeoutError => e end + end + end + def notice_params(error, options={}) # :nodoc: + clean_non_serializable_data(stringify_keys( + { + :api_key => api_key, + :error_class => error.class.name, + :error_message => error.message, + :backtrace => error.backtrace, + }.merge(options) + )) + end + def stringify_keys(hash) #:nodoc: + hash.inject({}) do |h, pair| + h[pair.first.to_s] = pair.last.is_a?(Hash) ? stringify_keys(pair.last) : pair.last + h end - # Posts an error to Hoptoad - def post!(error, options={}, header_options={}) - uri = URI.parse("http://hoptoadapp.com/notices/") - Net::HTTP.start(uri.host, uri.port) do |http| - headers = { - 'Content-type' => 'application/x-yaml', - 'Accept' => 'text/xml, application/xml', - 'X-Hoptoad-Client-Name' => 'Toadhopper', - }.merge(header_options) - http.read_timeout = 5 # seconds - http.open_timeout = 2 # seconds - begin - http.post uri.path, {"notice" => notice_params(error, options)}.to_yaml, headers - rescue TimeoutError => e - end - end + end + def serializable?(value) #:nodoc: + value.is_a?(Fixnum) || + value.is_a?(Array) || + value.is_a?(String) || + value.is_a?(Hash) || + value.is_a?(Bignum) + end + def clean_non_serializable_data(data) #:nodoc: + data.select{|k,v| serializable?(v) }.inject({}) do |h, pair| + h[pair.first] = pair.last.is_a?(Hash) ? clean_non_serializable_data(pair.last) : pair.last + h end - def notice_params(error, options={}) # :nodoc: - clean_non_serializable_data(stringify_keys( - { - :api_key => api_key, - :error_class => error.class.name, - :error_message => error.message, - :backtrace => error.backtrace, - }.merge(options) - )) - end - def stringify_keys(hash) #:nodoc: - hash.inject({}) do |h, pair| - h[pair.first.to_s] = pair.last.is_a?(Hash) ? stringify_keys(pair.last) : pair.last - h - end - end - def serializable?(value) #:nodoc: - value.is_a?(Fixnum) || - value.is_a?(Array) || - value.is_a?(String) || - value.is_a?(Hash) || - value.is_a?(Bignum) - end - def clean_non_serializable_data(data) #:nodoc: - data.select{|k,v| serializable?(v) }.inject({}) do |h, pair| - h[pair.first] = pair.last.is_a?(Hash) ? clean_non_serializable_data(pair.last) : pair.last - h - end - end end +end end \ No newline at end of file