my_john_deere_api 2.1.1 → 2.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
  SHA256:
3
- metadata.gz: b404eb35593809c27e7f5932317e89a182416efbbf5c9ab017a2eb98a0a2b28a
4
- data.tar.gz: 6b051603fecfa6893230de4fb2a4e5828b4e42ebd4ed59709e46e5681888964a
3
+ metadata.gz: 3f611ef5d6785246196c22bc5e453374da5a4a513a689ad649ba1907de39c93f
4
+ data.tar.gz: 773b32b36229740d1d7885f4e8728cff83f32cb7b19d1ae65847b1bbdd8bea4a
5
5
  SHA512:
6
- metadata.gz: 0b46d15e4f6e5321eed51f4855a10aa618c3637dc7179faae2e4545d7dc3eec41aceaf4f5c08642257f550b60ae2bdfd44d6161be4bd97ae7be150c7eb0617e6
7
- data.tar.gz: 05faaa3f5d5784797a53a96c2dea408fdc844b8c14120054c6ff9f6e594de3a1278aece5fc3ac13e03bc3e7a4290f381131a4e3f28bd2dd3fe0f2e9795e5ab09
6
+ metadata.gz: 7cd73bbcea8e2615b5bbf4bbf4c91531a991b5c09566f1e7917fbb77d26309b9d4b8f5c532f081c3dd0f463e004ea716f687b2a953420798a7f71f98ee5de16e
7
+ data.tar.gz: 316d9852d79c9f86c6ec55b6bf5417dcaf47ca06da5eb391b79e19d18c9e20541c625aaa098102dec981ade2e503c673f10267a263069d2f355fcdd06ff46a11
data/README.md CHANGED
@@ -154,6 +154,7 @@ client
154
154
  | ├── all
155
155
  | ├── first
156
156
  | └── find(asset_id)
157
+ | ├── save
157
158
  | ├── update(attributes)
158
159
  | └── locations
159
160
  | ├── create(attributes)
@@ -381,6 +382,14 @@ asset.title
381
382
  # => 'New Title', also John Deere record is updated
382
383
  ```
383
384
 
385
+ The `save` method updates John Deere with any local changes that have been made.
386
+
387
+ ```ruby
388
+ asset.title = 'New Title'
389
+ asset.save
390
+ # => Successful Net::HTTPNoContent object
391
+ ```
392
+
384
393
 
385
394
  ### Direct API Requests
386
395
 
@@ -18,6 +18,24 @@ module MyJohnDeereApi
18
18
  }
19
19
  end
20
20
 
21
+ ##
22
+ # Change the title, locally
23
+
24
+ def title=(value)
25
+ mark_as_unsaved
26
+ @title = value
27
+ end
28
+
29
+ ##
30
+ # Save any attribute changes to John Deere
31
+
32
+ def save
33
+ if unsaved?
34
+ mark_as_saved
35
+ Request::Update::Asset.new(client, self, attributes).request
36
+ end
37
+ end
38
+
21
39
  ##
22
40
  # Update the attributes in John Deere
23
41
 
@@ -21,6 +21,7 @@ module MyJohnDeereApi
21
21
  @id = record['id']
22
22
  @record_type = record['@type']
23
23
  @client = client
24
+ @unsaved = false
24
25
 
25
26
  map_attributes(record)
26
27
 
@@ -65,5 +66,32 @@ module MyJohnDeereApi
65
66
  raise TypeMismatchError, "Expected record of type '#{expected_record_type}', but received type '#{type}'"
66
67
  end
67
68
  end
69
+
70
+ ##
71
+ # Mark as unsaved, so we know to save it later
72
+
73
+ def mark_as_unsaved
74
+ @unsaved = true
75
+ end
76
+
77
+ ##
78
+ # Mark as saved, so we don't try to save it later
79
+
80
+ def mark_as_saved
81
+ @unsaved = false
82
+ end
83
+
84
+ ##
85
+ # Are changes to this model synced with JD?
86
+ def saved?
87
+ !@unsaved
88
+ end
89
+
90
+ ##
91
+ # Are there pending changes to send to JD?
92
+
93
+ def unsaved?
94
+ @unsaved
95
+ end
68
96
  end
69
97
  end
@@ -1,3 +1,3 @@
1
1
  module MyJohnDeereApi
2
- VERSION='2.1.1'
2
+ VERSION='2.2.0'
3
3
  end
@@ -65,6 +65,37 @@ describe 'MyJohnDeereApi::Model::Asset' do
65
65
  end
66
66
  end
67
67
 
68
+ describe '#save' do
69
+ it 'sends any recent updates to John Deere' do
70
+ asset = klass.new(record, client)
71
+ new_title = 'i REALLY like turtles!'
72
+
73
+ asset.title = new_title
74
+ assert_equal new_title, asset.title
75
+
76
+ response = VCR.use_cassette('put_asset') { asset.save }
77
+ assert_kind_of Net::HTTPNoContent, response
78
+ end
79
+
80
+ it 'does not make a JD request if nothing has changed' do
81
+ asset = klass.new(record, client)
82
+ response = asset.save
83
+
84
+ assert_nil response
85
+ end
86
+
87
+ it 'marks the record as saved' do
88
+ asset = klass.new(record, client)
89
+ asset.title = 'i REALLY like turtles!'
90
+
91
+ response = VCR.use_cassette('put_asset') { asset.save }
92
+ assert_kind_of Net::HTTPNoContent, response
93
+
94
+ response = asset.save
95
+ assert_nil response
96
+ end
97
+ end
98
+
68
99
  describe '#update' do
69
100
  it 'updates the attributes' do
70
101
  asset = klass.new(record, client)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: my_john_deere_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jaime Bellmyer