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
has_heightened_privileges?()
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