myob-api 0.9.5 → 0.10.1

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: 2a697621522acb62c1242ba5ccdec10372b9e950
4
- data.tar.gz: 61b3ca85bf3824c07f209bd5b164514e0dc898e2
3
+ metadata.gz: a5e048f96fb5846bce047fe559ef780bbad33602
4
+ data.tar.gz: ef9f5324aaf724ccf29f85fe865bec18bbfe4ac6
5
5
  SHA512:
6
- metadata.gz: d855db5829da5bf1d73b7f8a5aff3797261c8d68e93b10952c314782d6ab6b292754b1027e6b37f4fb7f2d2edc8188c3f177dff2b2ad0f4929bda0a7a5d932e5
7
- data.tar.gz: d994ded4f98afc2e716fa67f7e03cdfaaccb1d6927bea7e74e5253286087bbb510a8e33efea80c904a982b3b3b1d0133346c9c98f4ea6db1e17fb9392e887e49
6
+ metadata.gz: 35941ab08da89b63a24c8ec10d04c3c76e007e6c2c12860d16343e80a38adcce7026f0e426a76bf8ddb804bd6c7a695d0fe106e5a6d1c0d19fb75e2de4d9d116
7
+ data.tar.gz: 1ceee23871eadc95c7a9223f30fa24027d31733c7b61f1f247f2c49c9a49ced7f515e41750f399a502c0b586c27a2ffb587ff7a7597839eb25d15d7f1c333706
data/README.md CHANGED
@@ -84,6 +84,8 @@ Or if you know which Company File you want to access too:
84
84
  },
85
85
  })
86
86
 
87
+ If you provide a company file, the gem will attempt to connect to MYOB to get the base API subdomain to use for future requests ([learn more](http://developer.myob.com/api/accountright/best-practice-guides/hypermedia-and-uris/)).
88
+
87
89
  ### API Methods
88
90
 
89
91
  #### Company Files
@@ -16,6 +16,7 @@ require 'myob/api/models/employee_standard_pay'
16
16
 
17
17
  require 'myob/api/models/employee_payroll_advice'
18
18
 
19
+ require 'myob/api/models/customer_payment'
19
20
  require 'myob/api/models/invoice'
20
21
  require 'myob/api/models/invoice_item'
21
22
 
@@ -6,7 +6,7 @@ module Myob
6
6
  class Client
7
7
  include Myob::Api::Helpers
8
8
 
9
- attr_reader :current_company_file, :client
9
+ attr_reader :current_company_file, :client, :current_company_file_url
10
10
 
11
11
  def initialize(options)
12
12
  Myob::Api::Model::Base.subclasses.each {|c| model(c.name.split("::").last)}
@@ -15,16 +15,17 @@ module Myob
15
15
  @consumer = options[:consumer]
16
16
  @access_token = options[:access_token]
17
17
  @refresh_token = options[:refresh_token]
18
- @current_company_file = options[:selected_company_file] || {}
18
+
19
19
  @client = OAuth2::Client.new(@consumer[:key], @consumer[:secret], {
20
20
  :site => 'https://secure.myob.com',
21
21
  :authorize_url => '/oauth2/account/authorize',
22
22
  :token_url => '/oauth2/v1/authorize',
23
23
  })
24
24
 
25
- if options[:company_file]
26
- @current_company_file = select_company_file(options[:company_file])
27
- end
25
+ # on client init, if we have a company file already, get the appropriate base URL for this company file from MYOB
26
+ provided_company_file = options[:selected_company_file] || options[:company_file]
27
+ select_company_file(provided_company_file) if provided_company_file
28
+ @current_company_file ||= {}
28
29
  end
29
30
 
30
31
  def get_access_code_url(params = {})
@@ -40,7 +41,7 @@ module Myob
40
41
  end
41
42
 
42
43
  def headers
43
- token = @current_company_file[:token]
44
+ token = (@current_company_file || {})[:token]
44
45
  if token.nil? || token == ''
45
46
  # if token is blank assume we are using federated login - http://myobapi.tumblr.com/post/109848079164/2015-1-release-notes
46
47
  {
@@ -58,18 +59,39 @@ module Myob
58
59
  end
59
60
  end
60
61
 
62
+ # given some company file credentials, connect to MYOB and get the appropriate company file object.
63
+ # store its ID and token for auth'ing requests, and its URL to ensure we talk to the right MYOB server.
64
+ #
65
+ # `company_file` should be hash. accepted forms:
66
+ #
67
+ # {name: String, username: String, password: String}
68
+ # {id: String, token: String}
61
69
  def select_company_file(company_file)
62
- company_file_id = (company_files.find {|file| file['Name'] == company_file[:name]} || [])['Id']
63
- if company_file_id
70
+ # store the provided company file as an ivar so we can use it for subsequent requests
71
+ # we need the token from it to make the initial request to get company files
72
+ @current_company_file ||= company_file if company_file[:token]
73
+
74
+ selected_company_file = company_files.find {|file|
75
+ if company_file[:name]
76
+ file['Name'] == company_file[:name]
77
+ elsif company_file[:id]
78
+ file['Id'] == company_file[:id]
79
+ end
80
+ }
81
+
82
+ if selected_company_file
64
83
  token = company_file[:token]
65
84
  if (token.nil? || token == '') && !company_file[:username].nil? && company_file[:username] != '' && !company_file[:password].nil?
66
85
  # if we have been given login details, encode them into a token
67
86
  token = Base64.encode64("#{company_file[:username]}:#{company_file[:password]}")
68
87
  end
69
88
  @current_company_file = {
70
- :id => company_file_id,
89
+ :id => selected_company_file['Id'],
71
90
  :token => token
72
91
  }
92
+ @current_company_file_url = selected_company_file['Uri']
93
+ else
94
+ @current_company_file = {}
73
95
  end
74
96
  end
75
97
 
@@ -3,7 +3,7 @@ module Myob
3
3
  module Model
4
4
  class Base
5
5
 
6
- API_URL = 'https://api.myob.com/accountright/'
6
+ API_URL = 'https://api.myob.com/accountright/' # deprecated except for initial requests - should read from API instead - http://myobapi.tumblr.com/post/141169146113/important-update-accountright-live-cloud-api
7
7
  QUERY_OPTIONS = [:orderby, :top, :skip, :filter]
8
8
 
9
9
  def initialize(client, model_name)
@@ -61,9 +61,13 @@ module Myob
61
61
 
62
62
  def url(object = nil, params = nil)
63
63
  url = if self.model_route == ''
64
- "#{API_URL}"
64
+ API_URL
65
65
  else
66
- "#{API_URL}#{@client.current_company_file[:id]}/#{self.model_route}#{"/#{object['UID']}" if object && object['UID']}"
66
+ if @client && @client.current_company_file_url
67
+ "#{@client.current_company_file_url}/#{self.model_route}#{"/#{object['UID']}" if object && object['UID']}"
68
+ else
69
+ "#{API_URL}#{@client.current_company_file[:id]}/#{self.model_route}#{"/#{object['UID']}" if object && object['UID']}"
70
+ end
67
71
  end
68
72
 
69
73
  if params.is_a?(Hash)
@@ -106,7 +110,11 @@ module Myob
106
110
  end
107
111
 
108
112
  def resource_url
109
- "#{API_URL}#{@client.current_company_file[:id]}/#{self.model_route}"
113
+ if @client && @client.current_company_file_url
114
+ "#{@client.current_company_file_url}/#{self.model_route}"
115
+ else
116
+ "#{API_URL}#{@client.current_company_file[:id]}/#{self.model_route}"
117
+ end
110
118
  end
111
119
 
112
120
  def perform_request(url)
@@ -0,0 +1,11 @@
1
+ module Myob
2
+ module Api
3
+ module Model
4
+ class CustomerPayment < Base
5
+ def model_route
6
+ 'Sale/CustomerPayment'
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  module Myob
2
2
  module Api
3
- VERSION = "0.9.5"
3
+ VERSION = "0.10.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: myob-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Lumley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-20 00:00:00.000000000 Z
11
+ date: 2016-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oauth2
@@ -74,6 +74,7 @@ files:
74
74
  - lib/myob/api/models/contact.rb
75
75
  - lib/myob/api/models/current_user.rb
76
76
  - lib/myob/api/models/customer.rb
77
+ - lib/myob/api/models/customer_payment.rb
77
78
  - lib/myob/api/models/employee.rb
78
79
  - lib/myob/api/models/employee_payroll_advice.rb
79
80
  - lib/myob/api/models/employee_payroll_details.rb
@@ -107,9 +108,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
108
  version: '0'
108
109
  requirements: []
109
110
  rubyforge_project:
110
- rubygems_version: 2.2.5
111
+ rubygems_version: 2.4.5.1
111
112
  signing_key:
112
113
  specification_version: 4
113
114
  summary: MYOB AccountRight Live API V2
114
115
  test_files: []
115
- has_rdoc: