module GridRest::GridRestExtensions
Public Instance Methods
add_parameters_to_uri(uri, params)
click to toggle source
# File lib/grid_rest.rb, line 244 def add_parameters_to_uri(uri, params) uri << '?' unless uri.include?('?') uri << '&' unless ['?', '&'].include?(uri.last) uri_params = params.reject{|k, v| RESERVED_REQUEST_PARAMETERS.include?(k.to_s)} uri << uri_params.map{|k, v| URI.encode("#{k}=#{v}")}.join('&') uri_params.each{|k, v| params.delete(k)} # Remove added get parameters from the header params uri end
additional_grid_rest_parameters()
click to toggle source
Getter of additional parameters. Contains defaults and namespace specific versions
# File lib/grid_rest.rb, line 136 def additional_grid_rest_parameters GridRest.additional_parameters end
current_namespace()
click to toggle source
This will get the current namespace or nil during grid_rest_request
processing
# File lib/grid_rest.rb, line 100 def current_namespace @current_namespace end
default_grid_rest_parameters(params, request_types = :global)
click to toggle source
Global setter valid for all request/namespaces
# File lib/grid_rest.rb, line 105 def default_grid_rest_parameters(params, request_types = :global) set_namespaced_default_grid_rest_parameters(:default, params, request_types) end
Also aliased as: set_default_grid_rest_parameters
generate_url(url, rparams = {})
click to toggle source
# File lib/grid_rest.rb, line 253 def generate_url(url, rparams = {}) host = GridRest.grid_config.namespaces[rparams[:grid_rest_namespace]].try('[]', 'host') || GridRest.grid_config['host'] port = GridRest.grid_config.namespaces[rparams[:grid_rest_namespace]].try('[]', 'port') || GridRest.grid_config['port'] || 80 url_prefix = GridRest.grid_config.namespaces[rparams[:grid_rest_namespace]].try('[]', 'url_prefix') || GridRest.grid_config['url_prefix'] || '' raise "No host specified for GridRest" unless host gurl = File.join( "#{host}:#{port}", url_prefix, URI.encode(url) ) gurl = "http://#{gurl}" unless gurl =~ /^http/ gurl end
get_accept_header(f)
click to toggle source
# File lib/grid_rest.rb, line 277 def get_accept_header(f) case f when :json then :json #'application/json' when :xml then :xml #'application/xml' else :json #'application/json' end end
get_additional_grid_rest_parameters()
click to toggle source
Return an array of additional parameters. This request is namespace aware It will return an array given the additional default parameters for:
ALL, GET, POST, PUT and DELETE
requests in that order
# File lib/grid_rest.rb, line 114 def get_additional_grid_rest_parameters globals = get_request_specific_additional_grid_rest_parameters(:global) return [ globals, globals.merge(get_request_specific_additional_grid_rest_parameters(:get)), globals.merge(get_request_specific_additional_grid_rest_parameters(:post)), globals.merge(get_request_specific_additional_grid_rest_parameters(:put)), globals.merge(get_request_specific_additional_grid_rest_parameters(:delete)) ] end
get_request_specific_additional_grid_rest_parameters(request = :global)
click to toggle source
Get all the global parameters. The defaults, extended/overwritten by the namespace specific ones
# File lib/grid_rest.rb, line 127 def get_request_specific_additional_grid_rest_parameters(request = :global) if current_namespace additional_grid_rest_parameters[:default][request].merge(additional_grid_rest_parameters[current_namespace.to_sym][request] || {}) else additional_grid_rest_parameters[:default][request] end end
grid_rest?(rparams = {})
click to toggle source
This one is on the deprication list
# File lib/grid_rest.rb, line 92 def grid_rest?(rparams = {}) ns = rparams[:grid_rest_namespace].present? ? "grid_rest_#{rparams[:grid_rest_namespace]}" : 'grid_rest' raise "APP_CONFIG not available, make sure that config/config.yml and config/initializers/load_config.rb are available" unless defined?(APP_CONFIG) raise "Namespace #{ns} not available in config/config.yml" unless APP_CONFIG[ns] @grid_rest_active ||= Net::HTTP.new(APP_CONFIG[ns]['host'], APP_CONFIG[ns]['port']).start rescue nil end
grid_rest_delete(url, rparams = {})
click to toggle source
# File lib/grid_rest.rb, line 271 def grid_rest_delete(url, rparams = {}) grid_rest_request(:delete, url, rparams) end
grid_rest_get(url, rparams = {})
click to toggle source
# File lib/grid_rest.rb, line 263 def grid_rest_get(url, rparams = {}) return grid_rest_request(:get, url, rparams) end
grid_rest_log(method, url, rparams = {}, emsg = "")
click to toggle source
Wrapper for grid_rest_log_message
to write a log message in a consitant manner given the request parameters
# File lib/grid_rest.rb, line 149 def grid_rest_log(method, url, rparams = {}, emsg = "") if current_namespace return unless GridRest.grid_config.namespaces[current_namespace]['logging'] else return unless GridRest.grid_config['logging'] end grid_rest_log_message(rparams.any? ? "#{Time.now.to_s(:db)} #{method.to_s.upcase} #{url} with #{rparams.inspect} #{emsg}" : "#{Time.now.to_s(:db)} #{method.to_s.upcase} #{url} #{emsg}") end
grid_rest_log_message(msg)
click to toggle source
Write msg to the log file. Should only be called from grid_rest_log
unless you know what you are doing
# File lib/grid_rest.rb, line 159 def grid_rest_log_message(msg) GridRest.log_file ||= File.open(File.join(Rails.root, 'log', "#{Rails.env}_grid_rest.log"), 'a+') GridRest.log_file.puts msg GridRest.log_file.flush unless Rails.env == 'production' end
grid_rest_post(url, rparams={})
click to toggle source
# File lib/grid_rest.rb, line 274 def grid_rest_post(url, rparams={}) return grid_rest_request(:post, url, rparams) end
grid_rest_put(url, rparams = {})
click to toggle source
# File lib/grid_rest.rb, line 267 def grid_rest_put(url, rparams = {}) grid_rest_request(:put, url, rparams) end
grid_rest_request(method, relative_url, rparams = {})
click to toggle source
# File lib/grid_rest.rb, line 165 def grid_rest_request(method, relative_url, rparams = {}) #return DummyResponse.new # test return rest_url = generate_url(relative_url, rparams) #return Error.new('unavailable', :url => rest_url) unless grid_rest?(rparams) # Specify defaults per method for format format = rparams.delete(:format) || {:get => :json, :post => :json, :put => :json}[method] accept = get_accept_header(format) @current_namespace = rparams.delete(:grid_rest_namespace) # Remove this setting from request parameters additional_get_parameters, additional_post_parameters, additional_put_parameters, additional_delete_parameters = get_additional_grid_rest_parameters begin r = benchmark "Fetching #{method.to_s.upcase} #{relative_url} #{rparams.inspect}", :level => :debug do case method when :get then RestClient.get rest_url, :params => rparams.update(additional_get_parameters), :accept => accept when :post then if rparams[:json_data] rparams[:json_data] = rparams[:json_data].merge(additional_post_parameters).to_json if rparams[:json_data].is_a?(Hash) rparams[:json_data] = rparams[:json_data].to_json if rparams[:json_data].is_a?(Array) RestClient.post rest_url, rparams[:json_data], :content_type => :json, :accept => :json elsif rparams[:xml_data] rparams[:xml_data] = rparams[:xml_data].merge(additional_post_parameters).to_xml if rparams[:xml_data].is_a?(Hash) rparams[:xml_data] = rparams[:xml_data].to_xml if rparams[:xml_data].is_a?(Array) RestClient.post rest_url, rparams[:xml_data], :content_type => :xml, :accept => :xml elsif rparams[:binary] RestClient.post rest_url, rparams[:binary], :content_type => 'binary/octet-stream' else rparams[:headers] ||= {} rparams[:headers][:accept] = accept rparams[:multipart] = true RestClient.post rest_url, rparams.update(additional_post_parameters) end when :put then if rparams[:json_data] rparams[:json_data] = rparams[:json_data].merge(additional_put_parameters).to_json if rparams[:json_data].is_a?(Hash) rparams[:json_data] = rparams[:json_data].to_json if rparams[:json_data].is_a?(Array) RestClient.put rest_url, rparams[:json_data], :content_type => :json, :accept => :json elsif rparams[:xml_data] rparams[:xml_data] = rparams[:xml_data].merge(additional_put_parameters).to_xml if rparams[:xml_data].is_a?(Hash) rparams[:xml_data] = rparams[:xml_data].to_xml if rparams[:xml_data].is_a?(Array) RestClient.put rest_url, rparams[:xml_data], :content_type => :xml, :accept => :xml elsif rparams[:binary] RestClient.put rest_url, rparams[:binary], :content_type => 'binary/octet-stream' else rparams[:headers] ||= {} rparams[:headers][:accept] = accept rparams[:multipart] = true RestClient.put rest_url, rparams.update(additional_put_parameters) end when :delete then rparams[:headers] ||= {} rparams[:headers][:accept] = accept new_uri = add_parameters_to_uri(rest_url, rparams.update(additional_delete_parameters)) RestClient.delete(new_uri, rparams) else raise "No proper method (#{method}) for a grid_rest_request call" end end grid_rest_log method, rest_url, rparams, "response code: #{r.code}" if format == :json #r = benchmark("decoding response JSON", :level => :debug ){ ActiveSupport::JSON.decode(r.body) rescue r } # Slow r = benchmark("decoding response JSON", :level => :debug ){ JSON.parse(r.body) rescue r } end # Singleton class extensions r = "" if r == false # RestClient problem giving false on empty 204 def r.valid? true end rescue RestClient::ResourceNotFound => e r = Error.new(e, :url => rest_url, :method => method) grid_rest_log method, rest_url, rparams, "resource not found response" rescue Errno::ECONNREFUSED => e r = Error.new(e, :url => rest_url, :method => method) grid_rest_log method, rest_url, rparams, "connection refused response" rescue => e r = Error.new e, :url => rest_url, :method => method grid_rest_log method, rest_url, rparams, "error in request" end r end
logger()
click to toggle source
# File lib/grid_rest.rb, line 87 def logger Rails.logger end
set_default_grid_rest_parameters(params, request_types = :global)
Alias for: default_grid_rest_parameters
set_namespaced_default_grid_rest_parameters(ns, params, request_types = :global)
click to toggle source
# File lib/grid_rest.rb, line 140 def set_namespaced_default_grid_rest_parameters(ns, params, request_types = :global) additional_grid_rest_parameters[ns] ||= {} for request_type in Array.wrap(request_types).map(&:to_sym) additional_grid_rest_parameters[ns][request_type] ||= {} additional_grid_rest_parameters[ns][request_type].update(params) end end