myob-api 0.1.0 → 0.2.0

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: b370acb331a1b9161cedebced417265b558b137b
4
- data.tar.gz: 6fb248ba9b4fcc05087079bd30065519cd22c5c4
3
+ metadata.gz: df2831ae79d4a7fe595b41d880ae810a3056661e
4
+ data.tar.gz: a2f14d8e44951ef9299b967eb326d82658a92e23
5
5
  SHA512:
6
- metadata.gz: 7a3a9cd31720a5c71e803c9b576c51c75a042f8aa9525f3b87eeeb6d1222b0e7aec4077f8fd648cce61e26d8be2d608b9620cd8488c0335a62de30e1a5e3d971
7
- data.tar.gz: 338e562661aa6fe09b8f8266d3ef145c331dbd17b7fb2bdc8b0437452446d61a793b49538a82eb7206ea957a11b01bc63f29b8cfdc3a2d9c673fcc8c5c9afe3d
6
+ metadata.gz: 24bf1a9394ab64e65d8b261d2469af77a97dcdc9648dfe9b38a83e7caa68d053a2eeefc9e5d2751d1263e6c625e7084cbf838d991f287db81fb429a6bb64e896
7
+ data.tar.gz: f0ed4e36b247ecebf5abdddcfd02d69f70683aa35a3e50002c8c05f94683cbb1216db2b5d1621014e07240b88cdff1d78322d2b0cd78bc8bb8db316cd5695032
data/README.md CHANGED
@@ -86,11 +86,11 @@ Or if you know which Company File you want to access too:
86
86
 
87
87
  ### API Methods
88
88
 
89
- Before using the majority of API methods you will need to have selected a Company File. If you've already selected one when creating the client, feel free to ignore this.
90
-
91
89
  #### Company Files
92
90
 
93
- Return a list of company files
91
+ Before using the majority of API methods you will need to have selected a Company File. If you've already selected one when creating the client, feel free to ignore this.
92
+
93
+ Return a list of company files:
94
94
 
95
95
  api_client.company_file.all
96
96
 
@@ -120,6 +120,20 @@ Return a list of all employees
120
120
 
121
121
  api_client.employee.all
122
122
 
123
+ #### Creating an entity
124
+
125
+ To create a new entity, call #save on its model, passing through a hash that represents the entity. Refer to the MYOB API documentation for required fields.
126
+
127
+ api_client.employee.save({'FirstName' => 'John', 'LastName' => 'Smith', 'IsIndividual' => true})
128
+
129
+ #### Updating an entity
130
+
131
+ To update an existing entity, call #save on its model, passing through a hash you got from the API. This hash should include a `UID` parameter (which is included by default when you get the data).
132
+
133
+ user = api_client.employee.all["Items"].last
134
+ user['FirstName'] = 'New First Name'
135
+ api_client.employee.save(user)
136
+
123
137
 
124
138
  ## Todo
125
139
 
@@ -54,6 +54,7 @@ module Myob
54
54
  'x-myobapi-key' => @consumer[:key],
55
55
  'x-myobapi-version' => 'v2',
56
56
  'x-myobapi-cftoken' => @current_company_file[:token] || '',
57
+ 'Content-Type' => 'application/json'
57
58
  }
58
59
  end
59
60
 
@@ -32,15 +32,50 @@ module Myob
32
32
  model_data[0] if model_data.length > 0
33
33
  end
34
34
 
35
- def url
35
+ def save(object)
36
+ new_record?(object) ? create(object) : update(object)
37
+ end
38
+
39
+ def url(object = nil)
36
40
  if self.model_route == ''
37
41
  "#{API_URL}"
38
42
  else
39
- "#{API_URL}#{@client.current_company_file[:id]}/#{self.model_route}"
43
+ "#{API_URL}#{@client.current_company_file[:id]}/#{self.model_route}#{"/#{object['UID']}" if object && object['UID']}"
40
44
  end
41
45
  end
42
46
 
47
+ def new_record?(object)
48
+ object["UID"].nil? || object["UID"] == ""
49
+ end
50
+
43
51
  private
52
+ def create(object)
53
+ object = typecast(object)
54
+ response = @client.connection.post(self.url, {:headers => @client.headers, :body => object.to_json})
55
+ response.status == 201
56
+ end
57
+
58
+ def update(object)
59
+ object = typecast(object)
60
+ response = @client.connection.put(self.url(object), {:headers => @client.headers, :body => object.to_json})
61
+ response.status == 200
62
+ end
63
+
64
+ def typecast(object)
65
+ returned_object = object.dup # don't change the original object
66
+
67
+ returned_object.each do |key, value|
68
+ if value.respond_to?(:strftime)
69
+ returned_object[key] = value.strftime(date_formatter)
70
+ end
71
+ end
72
+
73
+ returned_object
74
+ end
75
+
76
+ def date_formatter
77
+ "%Y-%m-%dT%H:%M:%S"
78
+ end
44
79
 
45
80
  def parse_response(response)
46
81
  JSON.parse(response.body)
@@ -48,7 +83,7 @@ module Myob
48
83
 
49
84
  def process_query(data, query)
50
85
  query.each do |property, value|
51
- data.select!{|x| x[property] == value}
86
+ data.select! {|x| x[property] == value}
52
87
  end
53
88
  data
54
89
  end
@@ -5,6 +5,22 @@ module Myob
5
5
  def model_route
6
6
  'Payroll/Timesheet'
7
7
  end
8
+
9
+ # http://developer.myob.com/api/accountright/v2/payroll/timesheet/
10
+ # we always want to PUT timesheets, so they are never a "new" record
11
+ def new_record?(object)
12
+ false
13
+ end
14
+
15
+ # a timesheet is identified based on an employee UID as well as its start and end date
16
+ # it does not have a UID of its own
17
+ def url(object = nil)
18
+ if object
19
+ "#{super()}/#{object['Employee']['UID']}?StartDate=#{object['StartDate']}&EndDate=#{object['EndDate']}"
20
+ else
21
+ super
22
+ end
23
+ end
8
24
  end
9
25
  end
10
26
  end
@@ -1,5 +1,5 @@
1
1
  module Myob
2
2
  module Api
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
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.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Lumley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-26 00:00:00.000000000 Z
11
+ date: 2014-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oauth2