my_john_deere_api 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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