module Opium::Model::Connectable::ClassMethods
Public Instance Methods
as_resource( name, &block )
click to toggle source
# File lib/opium/model/connectable.rb, line 51 def as_resource( name, &block ) fail ArgumentError, 'no block given' unless block_given? @masked_resource_name = name.to_s.freeze block.call ensure @masked_resource_name = nil end
connection()
click to toggle source
# File lib/opium/model/connectable.rb, line 26 def connection @@connection ||= Faraday.new( url: parse_server_url ) do |faraday| faraday.request :multipart faraday.request :url_encoded faraday.request :json faraday.response :logger if Opium.config.log_network_responses faraday.response :json, content_type: /\bjson$/ faraday.headers[:x_parse_application_id] = Opium.config.app_id faraday.adapter Faraday.default_adapter end end
has_a_master_complex?()
click to toggle source
# File lib/opium/model/connectable.rb, line 106 def has_a_master_complex? !@always_heightened_privileges.nil? end
http_delete( id, options = {} )
click to toggle source
# File lib/opium/model/connectable.rb, line 81 def http_delete( id, options = {} ) http( :delete, deeply_merge( options, id: id ) ) end
http_get( options = {} )
click to toggle source
# File lib/opium/model/connectable.rb, line 65 def http_get( options = {} ) http( :get, options ) do |request| options.fetch(:query, {}).each do |key, value| request.params[key] = key.to_s == 'where' ? value.to_json : value end end end
http_post( data, options = {} )
click to toggle source
# File lib/opium/model/connectable.rb, line 73 def http_post( data, options = {} ) http( :post, deeply_merge( options, content_type_json ), &infuse_request_with( data ) ) end
http_put( id, data, options = {} )
click to toggle source
# File lib/opium/model/connectable.rb, line 77 def http_put( id, data, options = {} ) http( :put, deeply_merge( options, content_type_json, id: id ), &infuse_request_with( data ) ) end
no_object_prefix!()
click to toggle source
Parse doesn't route User
objects through /classes/, instead treating them as a top-level class.
# File lib/opium/model/connectable.rb, line 47 def no_object_prefix! @object_prefix = '' end
no_really_i_need_master!()
click to toggle source
# File lib/opium/model/connectable.rb, line 102 def no_really_i_need_master! @always_heightened_privileges = true end
object_prefix()
click to toggle source
# File lib/opium/model/connectable.rb, line 42 def object_prefix @object_prefix ||= 'classes' end
parse_server_url()
click to toggle source
# File lib/opium/model/connectable.rb, line 22 def parse_server_url ::URI.join( ::Opium.config.server_url, ::Opium.config.mount_point ).to_s end
requires_heightened_privileges!()
click to toggle source
# File lib/opium/model/connectable.rb, line 85 def requires_heightened_privileges! @requires_heightened_privileges = true end
requires_heightened_privileges?()
click to toggle source
# File lib/opium/model/connectable.rb, line 89 def requires_heightened_privileges? !@requires_heightened_privileges.nil? end
Also aliased as: has_heightened_privileges?
reset_connection!()
click to toggle source
# File lib/opium/model/connectable.rb, line 38 def reset_connection! @@connection = nil end
resource_name( resource_id = nil )
click to toggle source
# File lib/opium/model/connectable.rb, line 59 def resource_name( resource_id = nil ) return @masked_resource_name if @masked_resource_name @resource_name ||= Pathname.new( object_prefix ).join( map_name_to_resource( model_name ) ) ( resource_id ? @resource_name.join( resource_id ) : @resource_name ).to_s end
with_heightened_privileges(&block)
click to toggle source
# File lib/opium/model/connectable.rb, line 95 def with_heightened_privileges(&block) previous, @requires_heightened_privileges = @requires_heightened_privileges, true block.call if block_given? ensure @requires_heightened_privileges = previous end
Private Instance Methods
apply_headers_to_request( method, options, &further_operations )
click to toggle source
# File lib/opium/model/connectable.rb, line 144 def apply_headers_to_request( method, options, &further_operations ) lambda do |request| request.headers.update options[:headers] if options[:headers] if use_master_key?( request, method ) request.headers[:x_parse_master_key] = Opium.config.master_key else request.headers[:x_parse_rest_api_key] = Opium.config.api_key end further_operations.call( request ) if block_given? end end
check_for_error( options = {} ) { || ... }
click to toggle source
# File lib/opium/model/connectable.rb, line 164 def check_for_error( options = {}, &block ) fail ArgumentError, 'no block given' unless block_given? result = yield if options[:raw_response] || options[:sent_headers] result else result = result.body result = result.is_a?(Hash) ? result.with_indifferent_access : {} fail ParseError.new( result[:code], result[:error] ) if result[:code] && result[:error] result end end
content_type_json()
click to toggle source
# File lib/opium/model/connectable.rb, line 129 def content_type_json @content_type_json ||= { headers: { content_type: 'application/json' } } end
deeply_merge( *args )
click to toggle source
# File lib/opium/model/connectable.rb, line 125 def deeply_merge( *args ) args.reduce {|a, e| a.deep_merge e } end
http( method, options, &block )
click to toggle source
# File lib/opium/model/connectable.rb, line 112 def http( method, options, &block ) check_for_error( options ) do if options[:sent_headers] applier = apply_headers_to_request( method, options, &block ) request = connection.build_request( method ) applier.call( request ) request.headers else connection.send( method, resource_name( options[:id] ), &apply_headers_to_request( method, options, &block ) ) end end end
infuse_request_with( data )
click to toggle source
# File lib/opium/model/connectable.rb, line 138 def infuse_request_with( data ) lambda do |request| request.body = data end end
map_name_to_resource( model_name )
click to toggle source
# File lib/opium/model/connectable.rb, line 133 def map_name_to_resource( model_name ) name = model_name.name.demodulize @object_prefix.empty? ? name.tableize : name end
use_master_key?( request, method )
click to toggle source
# File lib/opium/model/connectable.rb, line 158 def use_master_key?( request, method ) !request.headers[:x_parse_session_token] && ( @always_heightened_privileges || method != :get ) && requires_heightened_privileges? && Opium.config.master_key end