Skip to content

Commit 13af02c

Browse files
Merge pull request #136 from sparkapi/RUBYAPI-40
Rubyapi 40
2 parents ec32151 + e4bb938 commit 13af02c

File tree

10 files changed

+69
-6
lines changed

10 files changed

+69
-6
lines changed

lib/spark_api.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
require 'spark_api/connection'
1414
require 'spark_api/client'
1515
require 'spark_api/faraday_middleware'
16+
require 'spark_api/reso_faraday_middleware'
1617
require 'spark_api/primary_array'
1718
require 'spark_api/options_hash'
1819
require 'spark_api/models'

lib/spark_api/authentication/api_auth.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def authenticate
1919
sig = sign("#{@client.api_secret}ApiKey#{@client.api_key}")
2020
SparkApi.logger.debug { "Authenticating to #{@client.endpoint}" }
2121
start_time = Time.now
22-
request_path = "/#{@client.version}/session?ApiKey=#{@client.api_key}&ApiSig=#{sig}"
22+
request_path = "#{SparkApi::Configuration::DEFAULT_SESSION_PATH}?ApiKey=#{@client.api_key}&ApiSig=#{sig}"
2323
resp = @client.connection(true).post request_path, ""
2424
request_time = Time.now - start_time
2525
SparkApi.logger.info { "[#{(request_time * 1000).to_i}ms] Api: POST #{request_path}" }

lib/spark_api/cli.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class ConsoleCLI
3131
:api_user => "API_USER",
3232
# OTHER
3333
:debug=> "DEBUG",
34+
:middleware => "SPARK_MIDDLEWARE",
3435
:console => "SPARK_API_CONSOLE" # not a public option, meant to distinguish bin/spark_api and script/console
3536
}
3637

@@ -69,7 +70,8 @@ def self.setup_options(stdout,arguments)
6970
:api_secret => ENV[OPTIONS_ENV[:api_secret]],
7071
:api_user => ENV[OPTIONS_ENV[:api_user]],
7172
:ssl_verify => ENV.fetch(OPTIONS_ENV[:ssl_verify], true),
72-
:console => ENV[OPTIONS_ENV[:console]]
73+
:console => ENV[OPTIONS_ENV[:console]],
74+
:middleware => ENV[OPTIONS_ENV[:middleware]]
7375
}
7476
cli_options = {}
7577
file_options = {}
@@ -128,7 +130,10 @@ def self.setup_options(stdout,arguments)
128130
opts.on("--api_user API_USER",
129131
"ID of the Spark user to run the client as.",
130132
"Default: ENV['#{OPTIONS_ENV[:api_user]}']") { |arg| cli_options[:api_user] = arg }
131-
133+
opts.on("--middleware SPARK_MIDDLEWARE",
134+
"spark_api for accessing spark, reso_api for accessing reso adapter",
135+
"Default: spark_api") { |arg| cli_options[:middleware] = arg }
136+
132137
# General
133138
opts.on("-f", "--file FILE",
134139
"Load configuration for yaml file.") { |arg| file_options = parse_file_options(arg) }

lib/spark_api/cli/api_auth.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66
config.api_user = ENV["API_USER"] if ENV["API_USER"]
77
config.endpoint = ENV["API_ENDPOINT"] if ENV["API_ENDPOINT"]
88
config.ssl_verify = ENV["SSL_VERIFY"].downcase != 'false' if ENV["SSL_VERIFY"]
9+
config.middleware = ENV["SPARK_MIDDLEWARE"] if ENV["SPARK_MIDDLEWARE"]
910
end

lib/spark_api/cli/oauth2.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
config.authentication_mode = SparkApi::Authentication::OAuth2
2020
config.endpoint = ENV["API_ENDPOINT"] if ENV["API_ENDPOINT"]
2121
config.ssl_verify = ENV["SSL_VERIFY"].downcase != 'false' if ENV["SSL_VERIFY"]
22+
config.middleware = ENV["SPARK_MIDDLEWARE"] if ENV["SPARK_MIDDLEWARE"]
2223
end
2324

2425
# Enables saving and loading serialized oauth2 sessions for the system user.

lib/spark_api/configuration.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module Configuration
1111
# valid configuration options
1212
VALID_OPTION_KEYS = [:api_key, :api_secret, :api_user, :endpoint,
1313
:user_agent, :version, :ssl, :ssl_verify, :oauth2_provider, :authentication_mode,
14-
:auth_endpoint, :callback, :compress, :timeout].freeze
14+
:auth_endpoint, :callback, :compress, :timeout, :middleware].freeze
1515
OAUTH2_KEYS = [:authorization_uri, :access_uri, :client_id, :client_secret,
1616
# Requirements for authorization_code grant type
1717
:redirect_uri,
@@ -36,12 +36,14 @@ module Configuration
3636
DEFAULT_AUTHORIZATION_URI = 'https://sparkplatform.com/oauth2'
3737
DEFAULT_VERSION = 'v1'
3838
DEFAULT_ACCESS_URI = "#{DEFAULT_ENDPOINT}/#{DEFAULT_VERSION}/oauth2/grant"
39+
DEFAULT_SESSION_PATH = "/#{DEFAULT_VERSION}/session"
3940
DEFAULT_USER_AGENT = "Spark API Ruby Gem #{VERSION}"
4041
DEFAULT_SSL = true
4142
DEFAULT_SSL_VERIFY = true
4243
DEFAULT_OAUTH2 = nil
4344
DEFAULT_COMPRESS = false
4445
DEFAULT_TIMEOUT = 5 # seconds
46+
DEFAULT_MIDDLEWARE = 'spark_api'
4547

4648
X_SPARK_API_USER_AGENT = "X-SparkApi-User-Agent"
4749

@@ -75,6 +77,7 @@ def reset_configuration
7577
self.version = DEFAULT_VERSION
7678
self.compress = DEFAULT_COMPRESS
7779
self.timeout = DEFAULT_TIMEOUT
80+
self.middleware = DEFAULT_MIDDLEWARE
7881
self
7982
end
8083
end

lib/spark_api/connection.rb

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def connection(force_ssl = false)
2323
end
2424

2525
conn = Faraday.new(opts) do |conn|
26-
conn.response :spark_api
26+
conn.response self.middleware.to_sym
2727
conn.options[:timeout] = self.timeout
2828
conn.adapter Faraday.default_adapter
2929
end
@@ -33,13 +33,29 @@ def connection(force_ssl = false)
3333

3434
# HTTP request headers for client requests
3535
def headers
36+
if self.middleware.to_sym == :reso_api
37+
reso_headers
38+
else
39+
spark_headers
40+
end
41+
end
42+
43+
def spark_headers
3644
{
3745
:accept => 'application/json',
3846
:content_type => 'application/json',
3947
:user_agent => Configuration::DEFAULT_USER_AGENT,
4048
Configuration::X_SPARK_API_USER_AGENT => user_agent
4149
}
4250
end
51+
52+
def reso_headers
53+
{
54+
:accept => 'application/json, application/xml',
55+
:user_agent => Configuration::DEFAULT_USER_AGENT,
56+
Configuration::X_SPARK_API_USER_AGENT => user_agent
57+
}
58+
end
4359

4460
end
4561
end

lib/spark_api/faraday_middleware.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ def decompress_body(env)
8686
end
8787

8888
end
89+
8990
Faraday::Response.register_middleware :spark_api => FaradayMiddleware
9091

9192
end
93+

lib/spark_api/request.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,11 @@ def request(method, path, body, options)
6565
begin
6666
request_opts = {}
6767
request_opts.merge!(options)
68-
request_path = "/#{version}#{path}"
68+
request_path = if middleware && middleware.to_sym == :reso_api
69+
"/Reso/OData#{path}"
70+
else
71+
"/#{version}#{path}"
72+
end
6973
start_time = Time.now
7074
if [:get, :delete, :head].include?(method.to_sym)
7175
response = authenticator.request(method, request_path, nil, request_opts)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
2+
module SparkApi
3+
4+
class ResoFaradayMiddleware < FaradayMiddleware
5+
6+
def on_complete(env)
7+
8+
body = decompress_body(env)
9+
10+
begin
11+
body = MultiJson.decode(body)
12+
13+
if body["D"]
14+
super(env)
15+
return
16+
end
17+
18+
env[:body] = body
19+
rescue MultiJson::ParseError => e
20+
# We will allow the client to choose their XML parser, but should do
21+
# some minor format verification
22+
raise e if body.strip[/\A<\?xml/].nil?
23+
end
24+
25+
end
26+
27+
end
28+
29+
Faraday::Response.register_middleware :reso_api => ResoFaradayMiddleware
30+
end

0 commit comments

Comments
 (0)