jemquarie 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 34388f2aec3d3af4a4821cf685cc5fae4b6cd54e
4
- data.tar.gz: 037df292b05aee50342735b33d205ab5d71119da
3
+ metadata.gz: 4a28a851bb5b04394d353f9f93be6ab95415f29e
4
+ data.tar.gz: 3bce6fa5363daaea2e6b2aacc2fd60eb95df1327
5
5
  SHA512:
6
- metadata.gz: 5eed3dd6865208966b511fdb72e34f7c97ab35b346a857080bb1210cf166aeac0e1fc6d4a69b96824261a84ec9f81cbcb7e091bbb005b43b5f4926e3dcd9a2fb
7
- data.tar.gz: d3c8f58db1d1df2d16812f022dbe968b57f83c5e941a161f2e3c7f77cc2e31b0353ba390675899cf9e214615b06eceb267131c62b0458691ad578d5bf84f33e3
6
+ metadata.gz: 9988e37be3a4de4168b64c06f455e0f96855188863bc9c6a96db95cf504e0f94753d350e090efd82edd781d48486a19a27562cf3ffe5ed25d1fe5181d8a9352a
7
+ data.tar.gz: d2e7ccaf4614d8749bdb386da54c924c1430896c519a5b4720d7f2c5443194f3b83fda6c18ee59866464689681f21932f26726798660d59de57b74cc699ef4f9
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jemquarie (0.0.4)
4
+ jemquarie (0.0.5)
5
5
  activesupport (>= 3.0)
6
6
  savon (~> 2.0)
7
7
 
data/README.md CHANGED
@@ -41,12 +41,10 @@ The auth code and password need to be the unhashed values.
41
41
  Jemquarie::Importer.new(username, password).cash_transactions(10.years.ago.to_date, Date.today, account_number)
42
42
  ```
43
43
 
44
- ### Results
45
-
46
44
  ## Success with data
47
45
 
48
46
  The gem should return an array with formatted data. Here an example:
49
- ```
47
+ ```ruby
50
48
  [
51
49
  {
52
50
  :foreign_identifier => "123456",
@@ -71,6 +69,13 @@ It just returns an empty Array
71
69
  It returns an Hash {:error => "Invalid credentials"} .
72
70
 
73
71
 
72
+ ### Other available calls are:
73
+
74
+ - client balances
75
+ - account details
76
+ - expiry of credentials
77
+
78
+
74
79
  ## Authors ##
75
80
 
76
81
  * [Claudio Contin](http://github.com/clod81)
@@ -0,0 +1,36 @@
1
+ module Jemquarie
2
+
3
+ class AccountDetails < Base
4
+
5
+ include Parser::AccountDetails
6
+
7
+ def details(date_from = (Date.today - 1.day), date_to = Date.today, account_number = '', include_closed = 'Y')
8
+ response = @client.call(:generate_xml_extract, :message => create_message(date_from, date_to, account_number, include_closed))
9
+ return parse_account_details(response) if response.success?
10
+ {:error => "An error has occured, please try again later"}
11
+ end
12
+
13
+ private
14
+
15
+ def create_message(date_from, date_to, account_number, include_closed)
16
+ {
17
+ :string => hash_key(Jemquarie.api_key), # base64 encoded of the sha1 hashed api key
18
+ :string0 => Jemquarie.app_key,
19
+ :string1 => hash_key(@username),
20
+ :string2 => hash_key(@password),
21
+ :string3 => 'your.clients Account Details',
22
+ :string4 => 'V1.3',
23
+ :strings => [
24
+ {
25
+ :item0 => account_number, # Account Number
26
+ :item1 => date_from.strftime("%Y-%m-%dT%H:%M:%S"), # START DATE
27
+ :item2 => date_to.strftime("%Y-%m-%dT%H:%M:%S"), # TO DATE
28
+ :item3 => include_closed # Include closed accounts flag
29
+ }
30
+ ]
31
+ }
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,36 @@
1
+ module Jemquarie
2
+
3
+ class Balance < Base
4
+
5
+ include Parser::Balance
6
+
7
+ def balance(account_number = '')
8
+ response = @client.call(:generate_xml_extract, :message => create_message(account_number))
9
+ return parse_balance_response(response) if response.success?
10
+ {:error => "An error has occured, please try again later"}
11
+ end
12
+
13
+ private
14
+
15
+ def create_message(account_number)
16
+ {
17
+ :string => hash_key(Jemquarie.api_key), # base64 encoded of the sha1 hashed api key
18
+ :string0 => Jemquarie.app_key,
19
+ :string1 => hash_key(@username),
20
+ :string2 => hash_key(@password),
21
+ :string3 => 'your.clients Balances',
22
+ :string4 => 'V1.3',
23
+ :strings => [
24
+ {
25
+ :item0 => account_number, # Account Number
26
+ :item1 => '',
27
+ :item2 => '',
28
+ :item3 => ''
29
+ }
30
+ ]
31
+ }
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,28 @@
1
+ require 'openssl'
2
+ require 'base64'
3
+
4
+ module Jemquarie
5
+
6
+ class Base
7
+
8
+ include Parser::Generic
9
+
10
+ def initialize(username, password)
11
+ @username = username
12
+ @password = password
13
+ @client = ::Savon.client do
14
+ endpoint Jemquarie::BASE_URI
15
+ wsdl File.expand_path("../extract.wsdl", __FILE__)
16
+ pretty_print_xml true
17
+ end
18
+ end
19
+
20
+ protected
21
+
22
+ def hash_key(key)
23
+ Base64.strict_encode64(OpenSSL::Digest::SHA1.digest(key))
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,29 @@
1
+ module Jemquarie
2
+
3
+ class Expiry < Base
4
+
5
+ include Parser::Expiry
6
+
7
+ def credentials_expiry
8
+ response = @client.call(:generate_xml_extract, :message => create_message)
9
+ return parse_expiry_response(response) if response.success?
10
+ {:error => "An error has occured, please try again later"}
11
+ end
12
+
13
+ private
14
+
15
+ def create_message
16
+ {
17
+ :string => hash_key(Jemquarie.api_key), # base64 encoded of the sha1 hashed api key
18
+ :string0 => Jemquarie.app_key,
19
+ :string1 => hash_key(@username),
20
+ :string2 => hash_key(@password),
21
+ :string3 => 'Authentication Expiry',
22
+ :string4 => 'V1.0',
23
+ :strings => ''
24
+ }
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -1,34 +1,21 @@
1
- require 'openssl'
2
- require 'base64'
3
-
4
1
  module Jemquarie
5
2
 
6
- class Importer
7
-
8
- include Jemquarie::Parser::CashTransactions
3
+ class Importer < Base
9
4
 
10
- def initialize(username, password)
11
- @username = username
12
- @password = password
13
- @client = ::Savon.client do
14
- endpoint Jemquarie::BASE_URI
15
- wsdl File.expand_path("../extract.wsdl", __FILE__)
16
- pretty_print_xml true
17
- end
18
- end
5
+ include Parser::CashTransactions
19
6
 
20
- def cash_transactions(date_from = (Date.today - 1.day), date_to = Date.today, account_number = '')
7
+ def cash_transactions(date_from = (Date.today - 1.day), date_to = Date.today, account_number = '', include_closed = 'Y')
21
8
  if account_number.blank? && ((date_to - date_from).days > 2.days) # if no account specified, ESI api doesn't allow to ask more than 2 days of transactions
22
9
  return {:error => "Cannot request more than 2 days of transactions if not account is specified"}
23
10
  end
24
- response = @client.call(:generate_xml_extract, :message => create_message(date_from, date_to, account_number))
11
+ response = @client.call(:generate_xml_extract, :message => create_message(date_from, date_to, account_number, include_closed))
25
12
  return parse_cash_transactions_response(response) if response.success?
26
13
  {:error => "An error has occured, please try again later"}
27
14
  end
28
15
 
29
16
  private
30
17
 
31
- def create_message(date_from, date_to, account_number)
18
+ def create_message(date_from, date_to, account_number, include_closed)
32
19
  {
33
20
  :string => hash_key(Jemquarie.api_key), # base64 encoded of the sha1 hashed api key
34
21
  :string0 => Jemquarie.app_key,
@@ -41,16 +28,12 @@ private
41
28
  :item0 => account_number, # Account Number
42
29
  :item1 => date_from.strftime("%Y-%m-%dT%H:%M:%S"), # START DATE
43
30
  :item2 => date_to.strftime("%Y-%m-%dT%H:%M:%S"), # TO DATE
44
- :item3 => 'Y' # Include closed accounts flag
31
+ :item3 => include_closed # Include closed accounts flag
45
32
  }
46
33
  ]
47
34
  }
48
35
  end
49
36
 
50
- def hash_key(key)
51
- Base64.strict_encode64(OpenSSL::Digest::SHA1.digest(key))
52
- end
53
-
54
37
  end
55
38
 
56
39
  end
@@ -0,0 +1,46 @@
1
+ module Jemquarie
2
+ module Parser
3
+ module AccountDetails
4
+
5
+ def parse_account_details(response)
6
+ result = generic_request_response(response)
7
+ return result if result[:error]
8
+ details = []
9
+ return details unless result["XMLExtract"]["yourclientsAccountDetails"] && result["XMLExtract"]["yourclientsAccountDetails"]["yourclientsAccountDetail"]
10
+ xml_details = if result["XMLExtract"]["yourclientsAccountDetails"]["yourclientsAccountDetail"].is_a?(Hash)
11
+ [result["XMLExtract"]["yourclientsAccountDetails"]["yourclientsAccountDetail"]]
12
+ else
13
+ result["XMLExtract"]["yourclientsAccountDetails"]["yourclientsAccountDetail"]
14
+ end
15
+ xml_details.each do |detail|
16
+ details << parse_single_detail(detail)
17
+ end
18
+ details
19
+ end
20
+
21
+ private
22
+
23
+ def parse_single_detail(detail)
24
+ {
25
+ :account_number => detail["AccountNumber"],
26
+ :account_name => detail["AccountName"],
27
+ :account_short_name => detail["AccountShortName"],
28
+ :product => detail["Product"],
29
+ :product_name => detail["ProductName"],
30
+ :address_line_1 => detail["AddressLine1"],
31
+ :address_line_4 => detail["AddressLine4"],
32
+ :address_line_5 => detail["AddressLine5"],
33
+ :address_line_6 => detail["AddressLine6"],
34
+ :dealer_code => detail["DealerCode"],
35
+ :adviser_code => detail["AdviserCode"],
36
+ :account_status => detail["AccountStatus"],
37
+ :date_modified => Time.parse(detail["DateModified"] + " UTC"),
38
+ :bsb => detail["Bsb"],
39
+ :primary_broker_name => detail["PrimaryBrokerName"],
40
+ :primary_adviser_name => detail["PrimaryAdviserName"]
41
+ }
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,34 @@
1
+ module Jemquarie
2
+ module Parser
3
+ module Balance
4
+
5
+ def parse_balance_response(response)
6
+ result = generic_request_response(response)
7
+ return result if result[:error]
8
+ balances = []
9
+ return balances unless result["XMLExtract"] && result["XMLExtract"]["yourclientsBalances"] && result["XMLExtract"]["yourclientsBalances"]["yourclientsBalance"]
10
+ xml_balances = if result["XMLExtract"]["yourclientsBalances"]["yourclientsBalance"].is_a?(Hash)
11
+ [result["XMLExtract"]["yourclientsBalances"]["yourclientsBalance"]]
12
+ else
13
+ result["XMLExtract"]["yourclientsBalances"]["yourclientsBalance"]
14
+ end
15
+ xml_balances.each do |balance|
16
+ balances << parse_single_balance(balance)
17
+ end
18
+ balances
19
+ end
20
+
21
+ private
22
+
23
+ def parse_single_balance(balance)
24
+ {
25
+ :account_number => balance["AccountNumber"],
26
+ :ledger_balance => balance["LedgerBalance"],
27
+ :available_balance => balance["AvailableBalance"],
28
+ :as_at_date => Time.parse(balance["AsAtDate"] + " UTC")
29
+ }
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -3,11 +3,8 @@ module Jemquarie
3
3
  module CashTransactions
4
4
 
5
5
  def parse_cash_transactions_response(response)
6
- body = response.body
7
- return {:error => "Invalid Authentication Code or Authentication Password"} unless
8
- body[:generate_xml_extract_response] && body[:generate_xml_extract_response][:result] && body[:generate_xml_extract_response][:result].is_a?(String)
9
- result = Hash.from_xml(Nokogiri::XML.fragment(body[:generate_xml_extract_response][:result]).to_s)
10
- return {error: result["XMLExtract"]["RequestDetails"]["RequestErrorDetails"]} if result["XMLExtract"]["RequestDetails"]["RequestStatus"] == "Failure"
6
+ result = generic_request_response(response)
7
+ return result if result[:error]
11
8
  transactions = []
12
9
  return transactions unless result["XMLExtract"] && result["XMLExtract"]["yourclientsTransactions"] && result["XMLExtract"]["yourclientsTransactions"]["yourclientsTransaction"]
13
10
  xml_transactions = if result["XMLExtract"]["yourclientsTransactions"]["yourclientsTransaction"].is_a?(Hash)
@@ -0,0 +1,14 @@
1
+ module Jemquarie
2
+ module Parser
3
+ module Expiry
4
+
5
+ def parse_expiry_response(response)
6
+ result = generic_request_response(response)
7
+ return result if result[:error]
8
+ result["XMLExtract"]["ExpiryDate"]
9
+ Time.parse(result["XMLExtract"]["ExpiryDate"] + " UTC")
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ module Jemquarie
2
+ module Parser
3
+ module Generic
4
+
5
+ def generic_request_response(response)
6
+ body = response.body
7
+ return {:error => "Invalid Authentication Code or Authentication Password"} unless
8
+ body[:generate_xml_extract_response] && body[:generate_xml_extract_response][:result] && body[:generate_xml_extract_response][:result].is_a?(String)
9
+ result = Hash.from_xml(Nokogiri::XML.fragment(body[:generate_xml_extract_response][:result]).to_s)
10
+ return {error: result["XMLExtract"]["RequestDetails"]["RequestErrorDetails"]} if result["XMLExtract"]["RequestDetails"]["RequestStatus"] == "Failure"
11
+ result
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -1,3 +1,3 @@
1
1
  module Jemquarie
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/lib/jemquarie.rb CHANGED
@@ -1,8 +1,15 @@
1
1
  require 'savon'
2
2
  require 'active_support/core_ext/hash'
3
-
4
- Dir.glob(File.join(File.expand_path(File.dirname(__FILE__)), "jemquarie/parser/*.rb")).each {|f| require f}
5
- Dir.glob(File.join(File.expand_path(File.dirname(__FILE__)), "jemquarie/*.rb")).each {|f| require f}
3
+ require 'jemquarie/parser/generic'
4
+ require 'jemquarie/parser/cash_transactions'
5
+ require 'jemquarie/parser/expiry'
6
+ require 'jemquarie/parser/account_details'
7
+ require 'jemquarie/parser/balance'
8
+ require 'jemquarie/base'
9
+ require 'jemquarie/importer'
10
+ require 'jemquarie/expiry'
11
+ require 'jemquarie/account_details'
12
+ require 'jemquarie/balance'
6
13
 
7
14
  module Jemquarie
8
15