artemis_api 0.3.0 → 0.4.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: 0e8888de9d53b67758011986d95da48078a539d1
4
- data.tar.gz: 70e7223008c998a11c2e8c195bb9ab2e44048167
3
+ metadata.gz: 0ddb2f3f02a23e8af40bb40ac71a3ce9a5a6c37e
4
+ data.tar.gz: 1e63ef8698d8bed206674ff165a82f7fe404a64d
5
5
  SHA512:
6
- metadata.gz: 2f0afda52acc388593a3c704fea8593e09af8713c8d9cfa64c7ec6a9b7e99960465a732202c2b69358371f8f77f5fd59ae48033737e609428073a1d7e41bbd97
7
- data.tar.gz: 77da6377c501a342397d87438d1fa41f9d44d21dfd67e434b188bb147d50e5e1768ed8b9070dafc9f3a4c1f1fc38620a834bbf1a4c5c4dc2771820c83191debe
6
+ metadata.gz: a50bcb4e50699bd837c933bbea113b33454ec61a00233c6ae5e204bf7a5f4cbd00cb4d1225537da8df8d65a382d1704c73fb9ac4571763f1c9e8314a4b29d7d1
7
+ data.tar.gz: 3a1d56165f91ac90ed852f39e5e355efc946e18d8f22ce8a1032560bdd9fb4d54570bbd518bcdfa25e017ae30d79ac7edcb6e913c059013b021dd6ebd9ae9261
data/README.md CHANGED
@@ -166,8 +166,10 @@ ArtemisApi::Batch.find(id: 22, facility_id: 2, client: client, include: "complet
166
166
  We also support filtering on several models: Batch, Completion, Discard, Harvest, Zone, Item. It is another optional param and it expects a hash. Here's what that should look like.
167
167
 
168
168
  ```ruby
169
- ArtemisApi::Batch.find_all(facility_id: 2, client: client, filters: {view: 'all_batches', search: 'genovese basil'})
169
+ ArtemisApi::Batch.find_all(facility_id: 2, client: client, filters: {search: 'genovese basil'})
170
170
  ArtemisApi::Batch.find_all(facility_id: 2, client: client, filters: {ids: [2, 4, 6, 11]})
171
+ ArtemisApi::Batch.find_all(facility_id: 2, client: client, filters: {date_type: 'seeded_at', date_window: "2019-10-31 17:06:42 -0400,2019-11-15 17:06:42 -0500"})
172
+
171
173
  ArtemisApi::Completion.find_all(facility_id: 2, client: client, filters: {crop_batch_ids: [5]})
172
174
  ArtemisApi::Harvest.find_all(facility_id: 2, client: client, filters: {crop_batch_ids: [5, 7]})
173
175
  ArtemisApi::Discard.find_all(facility_id: 2, client: client, filters: {crop_batch_ids: [6, 7, 9]})
@@ -177,6 +179,12 @@ ArtemisApi::Item.find_all(facility_id: 2, batch_id: 22, client: client, filters:
177
179
 
178
180
  Note that when you filter by ids or crop_batch_ids, you must pass in an array even if it only has one element.
179
181
 
182
+ Pagination is also supported on batches, and is also an optional param that expects a hash. We use the limit/offset method of pagination.
183
+
184
+ ```ruby
185
+ ArtemisApi::Batch.find_all(facility_id: 2, client: client, page: {limit: 10, offset: 60})
186
+ ```
187
+
180
188
  The Artemis API is currently mainly read only, but we do support the creation of Subscriptions. These are used to set up webhooks that will make a callback to you whenever a Completion or Batch gets created or updated in the given facility. They require a `subject`, which can currently be either `completions` or `batches`, and a `destination`, which is the url that you want the callback to hit. There are two ways to make that call:
181
189
 
182
190
  ```ruby
@@ -9,8 +9,8 @@ module ArtemisApi
9
9
  client.find_one(self.json_type, id, facility_id: facility_id, include: include, force: force)
10
10
  end
11
11
 
12
- def self.find_all(client:, facility_id:, include: nil, filters: nil)
13
- client.find_all(self.json_type, facility_id: facility_id, include: include, filters: filters)
12
+ def self.find_all(client:, facility_id:, include: nil, filters: nil, page: nil)
13
+ client.find_all(self.json_type, facility_id: facility_id, include: include, filters: filters, page: page)
14
14
  end
15
15
 
16
16
  def completions(include: nil)
@@ -60,7 +60,7 @@ module ArtemisApi
60
60
  obj
61
61
  end
62
62
 
63
- def find_all(type, facility_id: nil, batch_id: nil, include: nil, filters: nil)
63
+ def find_all(type, facility_id: nil, batch_id: nil, include: nil, filters: nil, page: nil)
64
64
  records = []
65
65
  refresh if @oauth_token.expired?
66
66
 
@@ -75,6 +75,7 @@ module ArtemisApi
75
75
  query = {}
76
76
  query[:include] = include if include
77
77
  format_filters(filters, query) if filters
78
+ format_pagination(page, query) if page
78
79
 
79
80
  url = build_url(path: path, query: URI.encode_www_form(query))
80
81
 
@@ -163,5 +164,11 @@ module ArtemisApi
163
164
  end
164
165
  end
165
166
  end
167
+
168
+ def format_pagination(page_hash, query_hash)
169
+ page_hash.each do |k, v|
170
+ query_hash[:"page[#{k}]"] = v
171
+ end
172
+ end
166
173
  end
167
174
  end
@@ -6,8 +6,8 @@ module ArtemisApi
6
6
  client.find_one(self.json_type, id, facility_id: facility_id, include: include, force: force)
7
7
  end
8
8
 
9
- def self.find_all(facility_id:, client:, include: nil, filters: nil)
10
- client.find_all(self.json_type, facility_id: facility_id, include: include, filters: filters)
9
+ def self.find_all(facility_id:, client:, include: nil)
10
+ client.find_all(self.json_type, facility_id: facility_id, include: include)
11
11
  end
12
12
 
13
13
  def self.create(facility_id:, subject:, destination:, client:)
@@ -1,3 +1,3 @@
1
1
  module ArtemisApi
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/test/batch_test.rb CHANGED
@@ -19,6 +19,15 @@ class BatchTest < Minitest::Test
19
19
  relationships: {zone: {data: {id: 1, type: 'zones'}}}
20
20
  },
21
21
  included: [{id: '1', type: 'zones', attributes: {id: 1, name: 'Germination'}}]}.to_json)
22
+
23
+ stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/batches?filter[search]=oct")
24
+ .to_return(body: {data: [{id: '1', type: 'batches', attributes: {id: 1, arbitrary_id: 'Oct16-Gem-Let'}}, {id: '2', type: 'batches', attributes: {id: 2, name: 'Oct19-Bok-Cho'}}]}.to_json)
25
+
26
+ stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/batches?filter[ids][]=2&filter[ids][]=3")
27
+ .to_return(body: {data: [{id: '2', type: 'batches', attributes: {id: 2, name: 'Oct19-Bok-Cho'}}]}.to_json)
28
+
29
+ stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/batches?page[limit]=1&page[offset]=4")
30
+ .to_return(body: {data: [{id: '2', type: 'batches', attributes: {id: 2, name: 'Oct19-Bok-Cho'}}]}.to_json)
22
31
  end
23
32
 
24
33
  def test_finding_all_batches
@@ -55,4 +64,32 @@ class BatchTest < Minitest::Test
55
64
  zone = batch.zone
56
65
  assert_equal zone.name, 'Germination'
57
66
  end
67
+
68
+ def test_filtering_by_search_term
69
+ batches = ArtemisApi::Batch.find_all(facility_id: @facility.id, client: @client, filters: {search: "oct"})
70
+ assert_equal 2, batches.count
71
+ end
72
+
73
+ def test_filtering_by_ids
74
+ batches = ArtemisApi::Batch.find_all(facility_id: @facility.id, client: @client, filters: {ids: [2, 3]})
75
+ assert_equal 1, batches.count
76
+ end
77
+
78
+ def test_filtering_by_date_window
79
+ ending = Time.now + 2.day
80
+ beginning = ending - 15.days
81
+ date_window = [beginning, ending].join(',')
82
+
83
+ # TODO: Figure out how the filtering syntax goes.
84
+ stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/batches?filter[date_type]=seeded_at&filter[date_window]=#{date_window}")
85
+ .to_return(body: {data: [{id: '1', type: 'batches', attributes: {id: 1, arbitrary_id: 'Oct16-Gem-Let'}}, {id: '2', type: 'batches', attributes: {id: 2, name: 'Oct19-Bok-Cho'}}]}.to_json)
86
+
87
+ batches = ArtemisApi::Batch.find_all(facility_id: @facility.id, client: @client, filters: {date_type: "seeded_at", date_window: date_window})
88
+ assert_equal 2, batches.count
89
+ end
90
+
91
+ def test_pagination
92
+ batches = ArtemisApi::Batch.find_all(facility_id: @facility.id, client: @client, page: {limit: 1, offset: 4})
93
+ assert_equal 1, batches.count
94
+ end
58
95
  end
@@ -10,6 +10,9 @@ class CompletionTest < Minitest::Test
10
10
 
11
11
  stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/completions/2")
12
12
  .to_return(body: {data: {id: '2', type: 'completions', attributes: {id: 2, action_type: 'move'}}}.to_json)
13
+
14
+ stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/completions?filter[crop_batch_ids][]=2&filter[crop_batch_ids][]=3")
15
+ .to_return(body: {data: [{id: '1', type: 'completions', attributes: {id: 1, action_type: 'start'}}]}.to_json)
13
16
  end
14
17
 
15
18
  def test_finding_all_completions
@@ -21,4 +24,9 @@ class CompletionTest < Minitest::Test
21
24
  completion = ArtemisApi::Completion.find(id: 2, facility_id: @facility.id, client: @client)
22
25
  assert_equal 'move', completion.action_type
23
26
  end
27
+
28
+ def test_filtering_completion_by_crop_batch_ids
29
+ completions = ArtemisApi::Completion.find_all(facility_id: @facility.id, client: @client, filters: {crop_batch_ids: [2, 3]})
30
+ assert_equal 1, completions.count
31
+ end
24
32
  end
data/test/discard_test.rb CHANGED
@@ -60,6 +60,9 @@ class DiscardTest < Minitest::Test
60
60
 
61
61
  stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/discards")
62
62
  .to_return(body: {data: [{id: '1', type: 'discards', attributes: {id: 1, reason_type: 'disease', quantity: 20}}, {id: '2', type: 'discards', attributes: {id: 2, reason_type: 'pests', quantity: 5}}]}.to_json)
63
+
64
+ stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/discards?filter[crop_batch_ids][]=2&filter[crop_batch_ids][]=3")
65
+ .to_return(body: {data: [{id: '1', type: 'discards', attributes: {id: 1, quantity: 4, reason_type: 'pests'}}]}.to_json)
63
66
  end
64
67
 
65
68
  def test_finding_a_specific_discard
@@ -82,4 +85,9 @@ class DiscardTest < Minitest::Test
82
85
  discards = ArtemisApi::Discard.find_all(facility_id: @facility.id, client: @client)
83
86
  assert_equal 2, discards.count
84
87
  end
88
+
89
+ def test_filtering_discard_by_crop_batch_ids
90
+ discards = ArtemisApi::Discard.find_all(facility_id: @facility.id, client: @client, filters: {crop_batch_ids: [2, 3]})
91
+ assert_equal 1, discards.count
92
+ end
85
93
  end
data/test/zone_test.rb CHANGED
@@ -10,6 +10,9 @@ class ZoneTest < Minitest::Test
10
10
 
11
11
  stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/zones/2")
12
12
  .to_return(body: {data: {id: '2', type: 'zones', attributes: {id: 2, name: 'Propagation'}}}.to_json)
13
+
14
+ stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/zones?filter[seeding_unit_id]=100")
15
+ .to_return(body: {data: [{id: '2', type: 'zones', attributes: {id: 2, name: 'Propagation'}}]}.to_json)
13
16
  end
14
17
 
15
18
  def test_finding_all_zones
@@ -31,4 +34,9 @@ class ZoneTest < Minitest::Test
31
34
  zone = @facility.zone(2)
32
35
  assert_equal 'Propagation', zone.name
33
36
  end
37
+
38
+ def test_filtering_zones_by_seeding_unit_id
39
+ zones = ArtemisApi::Zone.find_all(facility_id: @facility.id, client: @client, filters: {seeding_unit_id: 100})
40
+ assert_equal 1, zones.count
41
+ end
34
42
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: artemis_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamey Hampton
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-04 00:00:00.000000000 Z
11
+ date: 2019-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler