artemis_api 0.5.1 → 0.7.4
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 +4 -4
- data/.ruby-version +1 -0
- data/Gemfile.lock +15 -7
- data/artemis_api.gemspec +6 -6
- data/bin/console +2 -6
- data/lib/artemis_api.rb +5 -0
- data/lib/artemis_api/batch.rb +2 -0
- data/lib/artemis_api/client.rb +75 -23
- data/lib/artemis_api/crop_variety.rb +5 -0
- data/lib/artemis_api/custom_data.rb +5 -0
- data/lib/artemis_api/custom_fields.rb +5 -0
- data/lib/artemis_api/facility.rb +20 -12
- data/lib/artemis_api/model.rb +64 -21
- data/lib/artemis_api/resource_unit.rb +1 -0
- data/lib/artemis_api/stage.rb +15 -0
- data/lib/artemis_api/sub_stage.rb +5 -0
- data/lib/artemis_api/subscription.rb +2 -2
- data/lib/artemis_api/user.rb +1 -1
- data/lib/artemis_api/version.rb +1 -1
- data/lib/artemis_api/zone.rb +1 -0
- data/test/resource_unit_test.rb +12 -3
- data/test/stage_test.rb +39 -0
- data/test/subscription_test.rb +2 -2
- metadata +40 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '028bbc37f004d68e6513d33cd96c577933d05a0690de059cb737f26a19d8405c'
|
|
4
|
+
data.tar.gz: 5d403657733f1e76b2dd4f3416126f9f06484c402ec3fc544e33725d935200ea
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f6cb7bbf6da754d24ab0b9e5cbc3bd83391d4cdb13268a99c81c9c244ba2671dc82b7fa3bf62b91cf97c05a8b3a1f4cf5045be2854463f9e52587915e2c2f063
|
|
7
|
+
data.tar.gz: ba63182e17d76c7d90224a0d87a6073b8314203cbffc7422ecde68937eb11084fcd8cfb8d56058d71143c852d3d8cf6f34a0d6ac704144f4956bcaf1b002e8f8
|
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.6.0
|
data/Gemfile.lock
CHANGED
|
@@ -1,28 +1,31 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
artemis_api (0.
|
|
4
|
+
artemis_api (0.7.4)
|
|
5
5
|
oauth2
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: https://rubygems.org/
|
|
9
9
|
specs:
|
|
10
|
-
activesupport (
|
|
10
|
+
activesupport (6.0.3.1)
|
|
11
11
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
12
12
|
i18n (>= 0.7, < 2)
|
|
13
13
|
minitest (~> 5.1)
|
|
14
14
|
tzinfo (~> 1.1)
|
|
15
|
+
zeitwerk (~> 2.2, >= 2.2.2)
|
|
15
16
|
addressable (2.6.0)
|
|
16
17
|
public_suffix (>= 2.0.2, < 4.0)
|
|
17
|
-
|
|
18
|
+
coderay (1.1.2)
|
|
19
|
+
concurrent-ruby (1.1.6)
|
|
18
20
|
crack (0.4.3)
|
|
19
21
|
safe_yaml (~> 1.0.0)
|
|
20
22
|
faraday (1.0.1)
|
|
21
23
|
multipart-post (>= 1.2, < 3)
|
|
22
24
|
hashdiff (0.4.0)
|
|
23
|
-
i18n (1.
|
|
25
|
+
i18n (1.8.2)
|
|
24
26
|
concurrent-ruby (~> 1.0)
|
|
25
27
|
jwt (2.2.1)
|
|
28
|
+
method_source (1.0.0)
|
|
26
29
|
minitest (5.11.3)
|
|
27
30
|
multi_json (1.14.1)
|
|
28
31
|
multi_xml (0.6.0)
|
|
@@ -33,17 +36,21 @@ GEM
|
|
|
33
36
|
multi_json (~> 1.3)
|
|
34
37
|
multi_xml (~> 0.5)
|
|
35
38
|
rack (>= 1.2, < 3)
|
|
39
|
+
pry (0.13.1)
|
|
40
|
+
coderay (~> 1.1)
|
|
41
|
+
method_source (~> 1.0)
|
|
36
42
|
public_suffix (3.1.1)
|
|
37
|
-
rack (2.2.
|
|
43
|
+
rack (2.2.3)
|
|
38
44
|
rake (13.0.1)
|
|
39
45
|
safe_yaml (1.0.5)
|
|
40
46
|
thread_safe (0.3.6)
|
|
41
|
-
tzinfo (1.2.
|
|
47
|
+
tzinfo (1.2.7)
|
|
42
48
|
thread_safe (~> 0.1)
|
|
43
49
|
webmock (3.6.0)
|
|
44
50
|
addressable (>= 2.3.6)
|
|
45
51
|
crack (>= 0.3.2)
|
|
46
52
|
hashdiff (>= 0.4.0, < 2.0.0)
|
|
53
|
+
zeitwerk (2.3.0)
|
|
47
54
|
|
|
48
55
|
PLATFORMS
|
|
49
56
|
ruby
|
|
@@ -53,8 +60,9 @@ DEPENDENCIES
|
|
|
53
60
|
artemis_api!
|
|
54
61
|
bundler (~> 1.16)
|
|
55
62
|
minitest (~> 5.0)
|
|
63
|
+
pry
|
|
56
64
|
rake (~> 13.0)
|
|
57
65
|
webmock
|
|
58
66
|
|
|
59
67
|
BUNDLED WITH
|
|
60
|
-
1.17.
|
|
68
|
+
1.17.3
|
data/artemis_api.gemspec
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
lib = File.expand_path("../lib", __FILE__)
|
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
3
|
require "artemis_api/version"
|
|
@@ -6,10 +5,10 @@ require "artemis_api/version"
|
|
|
6
5
|
Gem::Specification.new do |spec|
|
|
7
6
|
spec.name = "artemis_api"
|
|
8
7
|
spec.version = ArtemisApi::VERSION
|
|
9
|
-
spec.authors = ["Jamey Hampton"]
|
|
10
|
-
spec.email = ["jhampton@artemisag.com"]
|
|
8
|
+
spec.authors = ["Jamey Hampton", "Carlos Betancourt Carrero"]
|
|
9
|
+
spec.email = ["jhampton@artemisag.com", "cbetancourt@artemisag.com"]
|
|
11
10
|
|
|
12
|
-
spec.summary =
|
|
11
|
+
spec.summary = "An API wrapper for the ArtemisAg API"
|
|
13
12
|
spec.homepage = "https://github.com/artemis-ag/artemis_api/"
|
|
14
13
|
spec.license = "MIT"
|
|
15
14
|
|
|
@@ -23,9 +22,10 @@ Gem::Specification.new do |spec|
|
|
|
23
22
|
|
|
24
23
|
spec.add_dependency "oauth2"
|
|
25
24
|
|
|
25
|
+
spec.add_development_dependency "activesupport"
|
|
26
26
|
spec.add_development_dependency "bundler", "~> 1.16"
|
|
27
|
-
spec.add_development_dependency "rake", "~> 13.0"
|
|
28
27
|
spec.add_development_dependency "minitest", "~> 5.0"
|
|
28
|
+
spec.add_development_dependency "pry"
|
|
29
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
|
29
30
|
spec.add_development_dependency "webmock"
|
|
30
|
-
spec.add_development_dependency "activesupport"
|
|
31
31
|
end
|
data/bin/console
CHANGED
|
@@ -6,9 +6,5 @@ require "artemis_api"
|
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
# Pry.start
|
|
12
|
-
|
|
13
|
-
require "irb"
|
|
14
|
-
IRB.start(__FILE__)
|
|
9
|
+
require 'pry'
|
|
10
|
+
Pry.start
|
data/lib/artemis_api.rb
CHANGED
|
@@ -12,8 +12,13 @@ require 'artemis_api/harvest'
|
|
|
12
12
|
require 'artemis_api/seeding_unit'
|
|
13
13
|
require 'artemis_api/harvest_unit'
|
|
14
14
|
require 'artemis_api/resource_unit'
|
|
15
|
+
require 'artemis_api/crop_variety'
|
|
15
16
|
require 'artemis_api/item'
|
|
16
17
|
require 'artemis_api/subscription'
|
|
18
|
+
require 'artemis_api/stage'
|
|
19
|
+
require 'artemis_api/sub_stage'
|
|
20
|
+
require 'artemis_api/custom_fields'
|
|
21
|
+
require 'artemis_api/custom_data'
|
|
17
22
|
|
|
18
23
|
module ArtemisApi
|
|
19
24
|
# Your code goes here...
|
data/lib/artemis_api/batch.rb
CHANGED
|
@@ -4,6 +4,8 @@ module ArtemisApi
|
|
|
4
4
|
related_to_one :zone
|
|
5
5
|
related_to_one :seeding_unit
|
|
6
6
|
related_to_one :harvest_unit
|
|
7
|
+
related_to_many :custom_data
|
|
8
|
+
related_to_many :custom_fields
|
|
7
9
|
|
|
8
10
|
def self.find(id:, client:, facility_id:, include: nil, force: false)
|
|
9
11
|
client.find_one(self.json_type, id, facility_id: facility_id, include: include, force: force)
|
data/lib/artemis_api/client.rb
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
module ArtemisApi
|
|
2
2
|
class Client
|
|
3
3
|
require 'oauth2'
|
|
4
|
-
attr_reader :options, :objects,
|
|
5
|
-
:
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
attr_reader :options, :objects,
|
|
5
|
+
:oauth_client, :oauth_token,
|
|
6
|
+
:access_token, :refresh_token, :expires_at,
|
|
7
|
+
:on_token_refreshed, :on_token_failed
|
|
8
|
+
|
|
9
|
+
def initialize(
|
|
10
|
+
access_token: nil,
|
|
11
|
+
refresh_token: nil,
|
|
12
|
+
expires_at: nil,
|
|
13
|
+
auth_code: nil,
|
|
14
|
+
redirect_uri: nil,
|
|
15
|
+
on_token_refreshed: nil,
|
|
16
|
+
on_token_failed: nil,
|
|
17
|
+
options: {}
|
|
18
|
+
)
|
|
8
19
|
unless (access_token && refresh_token && expires_at) || auth_code
|
|
9
20
|
raise ArgumentError.new('You must either provide your access token, refresh token & expires at time, or an authorization code.')
|
|
10
21
|
end
|
|
@@ -15,8 +26,29 @@ module ArtemisApi
|
|
|
15
26
|
@options = options
|
|
16
27
|
@objects = {}
|
|
17
28
|
|
|
29
|
+
@on_token_refreshed = on_token_refreshed
|
|
30
|
+
@on_token_failed = on_token_failed
|
|
31
|
+
|
|
18
32
|
@oauth_client = OAuth2::Client.new(@options[:app_id], @options[:app_secret], site: @options[:base_uri])
|
|
19
33
|
|
|
34
|
+
if auth_code
|
|
35
|
+
redirect_uri ||= 'urn:ietf:wg:oauth:2.0:oob'
|
|
36
|
+
|
|
37
|
+
@oauth_token = @oauth_client.auth_code.get_token(auth_code, redirect_uri: redirect_uri)
|
|
38
|
+
|
|
39
|
+
@access_token = @oauth_token.token
|
|
40
|
+
@refresh_token = @oauth_token.refresh_token
|
|
41
|
+
@expires_at = @oauth_token.expires_at
|
|
42
|
+
else
|
|
43
|
+
set_oauth_token_from_parts(
|
|
44
|
+
access_token: access_token,
|
|
45
|
+
refresh_token: refresh_token,
|
|
46
|
+
expires_at: expires_at
|
|
47
|
+
)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def set_oauth_token_from_parts(access_token:, refresh_token:, expires_at:)
|
|
20
52
|
if access_token && refresh_token && expires_at
|
|
21
53
|
@access_token = access_token
|
|
22
54
|
@refresh_token = refresh_token
|
|
@@ -25,23 +57,15 @@ module ArtemisApi
|
|
|
25
57
|
@oauth_token = OAuth2::AccessToken.from_hash(
|
|
26
58
|
oauth_client,
|
|
27
59
|
{access_token: @access_token,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
elsif auth_code
|
|
31
|
-
redirect_uri ||= 'urn:ietf:wg:oauth:2.0:oob'
|
|
32
|
-
|
|
33
|
-
@oauth_token = @oauth_client.auth_code.get_token(auth_code, redirect_uri: redirect_uri)
|
|
34
|
-
|
|
35
|
-
@access_token = @oauth_token.token
|
|
36
|
-
@refresh_token = @oauth_token.refresh_token
|
|
37
|
-
@expires_at = @oauth_token.expires_at
|
|
60
|
+
refresh_token: @refresh_token,
|
|
61
|
+
expires_at: @expires_at})
|
|
38
62
|
end
|
|
39
63
|
end
|
|
40
64
|
|
|
41
65
|
def find_one(type, id, facility_id: nil, include: nil, force: false)
|
|
42
66
|
obj = get_record(type, id)
|
|
43
67
|
if !obj || force
|
|
44
|
-
|
|
68
|
+
auto_refresh!
|
|
45
69
|
|
|
46
70
|
path = if facility_id
|
|
47
71
|
"/api/v3/facilities/#{facility_id}/#{type}/#{id}"
|
|
@@ -62,7 +86,7 @@ module ArtemisApi
|
|
|
62
86
|
|
|
63
87
|
def find_all(type, facility_id: nil, batch_id: nil, include: nil, filters: nil, page: nil)
|
|
64
88
|
records = []
|
|
65
|
-
|
|
89
|
+
auto_refresh!
|
|
66
90
|
|
|
67
91
|
path = if facility_id && batch_id
|
|
68
92
|
"/api/v3/facilities/#{facility_id}/batches/#{batch_id}/#{type}"
|
|
@@ -91,9 +115,9 @@ module ArtemisApi
|
|
|
91
115
|
@options[:base_uri] + uri.to_s
|
|
92
116
|
end
|
|
93
117
|
|
|
94
|
-
def store_record(type, id, data)
|
|
118
|
+
def store_record(type, id, data, included = nil)
|
|
95
119
|
@objects[type] ||= {}
|
|
96
|
-
@objects[type][id.to_i] = ArtemisApi::Model.instance_for(type, data, self)
|
|
120
|
+
@objects[type][id.to_i] = ArtemisApi::Model.instance_for(type, data, included, self)
|
|
97
121
|
end
|
|
98
122
|
|
|
99
123
|
def get_record(type, id)
|
|
@@ -104,8 +128,26 @@ module ArtemisApi
|
|
|
104
128
|
@objects[type]&.delete(id.to_i)
|
|
105
129
|
end
|
|
106
130
|
|
|
107
|
-
def
|
|
131
|
+
def auto_refresh!
|
|
132
|
+
refresh! if @oauth_token.expired?
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def refresh!
|
|
136
|
+
old_refresh_token = @oauth_token.refresh_token
|
|
137
|
+
|
|
108
138
|
@oauth_token = @oauth_token.refresh!
|
|
139
|
+
|
|
140
|
+
if old_refresh_token != @oauth_token.refresh_token
|
|
141
|
+
on_token_refreshed && on_token_refreshed.call(self, @oauth_token, old_refresh_token)
|
|
142
|
+
end
|
|
143
|
+
@oauth_token
|
|
144
|
+
rescue OAuth2::Error => err
|
|
145
|
+
if on_token_failed
|
|
146
|
+
on_token_failed.call(self, @oauth_token, err)
|
|
147
|
+
@oauth_token
|
|
148
|
+
else
|
|
149
|
+
raise err
|
|
150
|
+
end
|
|
109
151
|
end
|
|
110
152
|
|
|
111
153
|
def facilities(include: nil)
|
|
@@ -130,8 +172,8 @@ module ArtemisApi
|
|
|
130
172
|
|
|
131
173
|
def process_response(response, type)
|
|
132
174
|
json = JSON.parse(response.body)
|
|
133
|
-
|
|
134
|
-
|
|
175
|
+
included = process_included_objects(json['included']) if json['included']
|
|
176
|
+
obj = store_record(type, json['data']['id'].to_i, json['data'], included)
|
|
135
177
|
|
|
136
178
|
obj
|
|
137
179
|
end
|
|
@@ -144,20 +186,30 @@ module ArtemisApi
|
|
|
144
186
|
record = store_record(type, obj['id'], obj)
|
|
145
187
|
records << record
|
|
146
188
|
end
|
|
189
|
+
|
|
147
190
|
process_included_objects(json['included']) if json['included']
|
|
148
191
|
|
|
149
192
|
records
|
|
150
193
|
end
|
|
151
194
|
|
|
152
195
|
def process_included_objects(included_array)
|
|
196
|
+
included = {}
|
|
153
197
|
included_array.each do |included_obj|
|
|
154
|
-
|
|
198
|
+
type = included_obj['type']
|
|
199
|
+
obj = store_record(type, included_obj['id'], included_obj)
|
|
200
|
+
|
|
201
|
+
next unless obj
|
|
202
|
+
|
|
203
|
+
included[type.to_sym] = [] unless included.key?(type.to_sym)
|
|
204
|
+
included[type.to_sym].push(obj)
|
|
155
205
|
end
|
|
206
|
+
|
|
207
|
+
included
|
|
156
208
|
end
|
|
157
209
|
|
|
158
210
|
def format_filters(filter_hash, query_hash)
|
|
159
211
|
filter_hash.each do |k, v|
|
|
160
|
-
if v.
|
|
212
|
+
if v.is_a?(Array)
|
|
161
213
|
query_hash[:"filter[#{k}][]"] = v
|
|
162
214
|
else
|
|
163
215
|
query_hash[:"filter[#{k}]"] = v
|
data/lib/artemis_api/facility.rb
CHANGED
|
@@ -14,48 +14,48 @@ module ArtemisApi
|
|
|
14
14
|
ArtemisApi::Zone.find_all(facility_id: id, client: client, include: include)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def zone(zone_id, include: nil)
|
|
18
|
-
ArtemisApi::Zone.find(id: zone_id, facility_id: id, client: client, include: include)
|
|
17
|
+
def zone(zone_id, include: nil, force: false)
|
|
18
|
+
ArtemisApi::Zone.find(id: zone_id, facility_id: id, client: client, include: include, force: force)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def batches(include: nil)
|
|
22
22
|
ArtemisApi::Batch.find_all(facility_id: id, client: client, include: include)
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
def batch(batch_id, include: nil)
|
|
26
|
-
ArtemisApi::Batch.find(id: batch_id, facility_id: id, client: client, include: include)
|
|
25
|
+
def batch(batch_id, include: nil, force: false)
|
|
26
|
+
ArtemisApi::Batch.find(id: batch_id, facility_id: id, client: client, include: include, force: force)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def users(include: nil)
|
|
30
30
|
ArtemisApi::User.find_all(facility_id: id, client: client, include: include)
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
def user(user_id, include: nil)
|
|
34
|
-
ArtemisApi::User.find(id: user_id, facility_id: id, client: client, include: include)
|
|
33
|
+
def user(user_id, include: nil, force: false)
|
|
34
|
+
ArtemisApi::User.find(id: user_id, facility_id: id, client: client, include: include, force: force)
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def seeding_units(include: nil)
|
|
38
38
|
ArtemisApi::SeedingUnit.find_all(facility_id: id, client: client, include: include)
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
def seeding_unit(unit_id, include: nil)
|
|
42
|
-
ArtemisApi::SeedingUnit.find(id: unit_id, facility_id: id, client: client, include: include)
|
|
41
|
+
def seeding_unit(unit_id, include: nil, force: false)
|
|
42
|
+
ArtemisApi::SeedingUnit.find(id: unit_id, facility_id: id, client: client, include: include, force: force)
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
def resource_units(include: nil)
|
|
46
46
|
ArtemisApi::ResourceUnit.find_all(facility_id: id, client: client, include: include)
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
-
def resource_unit(unit_id, include: nil)
|
|
50
|
-
ArtemisApi::ResourceUnit.find(id: unit_id, facility_id: id, client: client, include: include)
|
|
49
|
+
def resource_unit(unit_id, include: nil, force: false)
|
|
50
|
+
ArtemisApi::ResourceUnit.find(id: unit_id, facility_id: id, client: client, include: include, force: force)
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
def harvest_units(include: nil)
|
|
54
54
|
ArtemisApi::HarvestUnit.find_all(facility_id: id, client: client, include: include)
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
-
def harvest_unit(unit_id, include: nil)
|
|
58
|
-
ArtemisApi::HarvestUnit.find(id: unit_id, facility_id: id, client: client, include: include)
|
|
57
|
+
def harvest_unit(unit_id, include: nil, force: false)
|
|
58
|
+
ArtemisApi::HarvestUnit.find(id: unit_id, facility_id: id, client: client, include: include, force: force)
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
def subscriptions
|
|
@@ -66,6 +66,14 @@ module ArtemisApi
|
|
|
66
66
|
ArtemisApi::Subscription.find(id: subscription_id, facility_id: id, client: client)
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
+
def stages
|
|
70
|
+
ArtemisApi::Stage.find_all(id, client)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def stage(stage_id)
|
|
74
|
+
ArtemisApi::Stage.find(stage_id, id, client)
|
|
75
|
+
end
|
|
76
|
+
|
|
69
77
|
def create_subscription(subject:, destination:)
|
|
70
78
|
ArtemisApi::Subscription.create(facility_id: id, subject: subject, destination: destination, client: client)
|
|
71
79
|
end
|
data/lib/artemis_api/model.rb
CHANGED
|
@@ -1,42 +1,85 @@
|
|
|
1
1
|
module ArtemisApi
|
|
2
2
|
class Model
|
|
3
|
-
attr_reader :client, :id, :attributes, :relationships
|
|
3
|
+
attr_reader :client, :id, :attributes, :relationships, :included
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
class << self
|
|
6
|
+
def related_to_one(name)
|
|
7
|
+
register_relationship(name)
|
|
8
|
+
|
|
9
|
+
send(:define_method, name.to_sym) do
|
|
10
|
+
related_id = relationships.dig(name.to_s, 'data', 'id')
|
|
11
|
+
included = client.get_record(name.to_s, related_id)
|
|
12
|
+
|
|
13
|
+
return included if included&.present?
|
|
14
|
+
|
|
15
|
+
relationship = relationships.dig(name.to_s, 'data')
|
|
16
|
+
return if relationship.nil?
|
|
17
|
+
|
|
18
|
+
@client.find_one(relationship['type'], relationship['id']) unless relationship['id'].to_s.empty? || relationship['id'].nil?
|
|
19
|
+
end
|
|
9
20
|
end
|
|
10
|
-
end
|
|
11
21
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
22
|
+
def related_to_many(name)
|
|
23
|
+
register_relationship(name)
|
|
24
|
+
|
|
25
|
+
send(:define_method, name.to_sym) do
|
|
26
|
+
included = relationships.dig(name.to_s, 'data')&.map do |related|
|
|
27
|
+
client.get_record(name.to_s, related['id'])
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
return included if included&.present?
|
|
31
|
+
|
|
32
|
+
@client.find_all(
|
|
33
|
+
relationships.dig(name.to_s, 'data', 0, 'type') || name.to_s,
|
|
34
|
+
filters: { name => id }
|
|
35
|
+
)
|
|
36
|
+
end
|
|
15
37
|
end
|
|
16
|
-
end
|
|
17
38
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
39
|
+
def json_type(type = nil)
|
|
40
|
+
if type
|
|
41
|
+
@json_type = type
|
|
42
|
+
@@registered_classes ||= {}
|
|
43
|
+
@@registered_classes[type] = self
|
|
44
|
+
end
|
|
45
|
+
@json_type
|
|
23
46
|
end
|
|
24
|
-
@json_type
|
|
25
|
-
end
|
|
26
47
|
|
|
27
|
-
|
|
28
|
-
|
|
48
|
+
def instance_for(type, data, included, client)
|
|
49
|
+
@@registered_classes[type]&.new(client, data, included)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def relationships
|
|
53
|
+
@relationships ||= []
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
private
|
|
57
|
+
|
|
58
|
+
def register_relationship(name)
|
|
59
|
+
relationships << name.to_sym
|
|
60
|
+
end
|
|
29
61
|
end
|
|
30
62
|
|
|
31
63
|
def method_missing(name)
|
|
32
|
-
attributes[name.to_s]
|
|
64
|
+
respond_to_missing?(name) ? attributes[name.to_s] : super
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def respond_to_missing?(name)
|
|
68
|
+
attributes.key?(name.to_s)
|
|
33
69
|
end
|
|
34
70
|
|
|
35
|
-
def initialize(client, data)
|
|
71
|
+
def initialize(client, data, included = nil)
|
|
36
72
|
@client = client
|
|
37
73
|
@id = data['id'].to_i
|
|
38
74
|
@attributes = data['attributes']
|
|
39
75
|
@relationships = data['relationships']
|
|
76
|
+
@included = included
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def inspect
|
|
80
|
+
vars = %i[id attributes].map { |v| "#{v}=#{send(v).inspect}" }.join(', ')
|
|
81
|
+
vars << ", relationships={#{self.class.relationships.join(', ')}}"
|
|
82
|
+
"<#{self.class}: #{vars}>"
|
|
40
83
|
end
|
|
41
84
|
end
|
|
42
85
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
module ArtemisApi
|
|
2
2
|
class ResourceUnit < ArtemisApi::Model
|
|
3
3
|
json_type 'resource_units'
|
|
4
|
+
related_to_one :crop_variety
|
|
4
5
|
|
|
5
6
|
def self.find(id:, facility_id:, client:, include: nil, force: false)
|
|
6
7
|
client.find_one(self.json_type, id, facility_id: facility_id, include: include, force: force)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module ArtemisApi
|
|
2
|
+
class Stage < ArtemisApi::Model
|
|
3
|
+
json_type 'stages'
|
|
4
|
+
related_to_many :sub_stages
|
|
5
|
+
related_to_many :zones
|
|
6
|
+
|
|
7
|
+
def self.find(id, facility_id, client, include: 'sub_stages,zones', force: false)
|
|
8
|
+
client.find_one(self.json_type, id, facility_id: facility_id, include: include, force: force)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.find_all(facility_id, client, include: 'sub_stages,zones')
|
|
12
|
+
client.find_all(self.json_type, facility_id: facility_id, include: include)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -11,7 +11,7 @@ module ArtemisApi
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def self.create(facility_id:, subject:, destination:, client:)
|
|
14
|
-
client.
|
|
14
|
+
client.auto_refresh!
|
|
15
15
|
|
|
16
16
|
url = "#{client.options[:base_uri]}/api/v3/facilities/#{facility_id}/subscriptions"
|
|
17
17
|
params = { body: { subscription: { subject: subject, destination: destination } } }
|
|
@@ -22,7 +22,7 @@ module ArtemisApi
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def self.delete(id:, facility_id:, client:)
|
|
25
|
-
client.
|
|
25
|
+
client.auto_refresh!
|
|
26
26
|
|
|
27
27
|
url = "#{client.options[:base_uri]}/api/v3/facilities/#{facility_id}/subscriptions/#{id}"
|
|
28
28
|
|
data/lib/artemis_api/user.rb
CHANGED
|
@@ -5,7 +5,7 @@ module ArtemisApi
|
|
|
5
5
|
|
|
6
6
|
def self.get_current(client:, include: nil)
|
|
7
7
|
self.json_type
|
|
8
|
-
client.
|
|
8
|
+
client.auto_refresh!
|
|
9
9
|
url = "#{client.options[:base_uri]}/api/v3/user"
|
|
10
10
|
url = "#{url}?include=#{include}" if include
|
|
11
11
|
response = client.oauth_token.get(url)
|
data/lib/artemis_api/version.rb
CHANGED
data/lib/artemis_api/zone.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
module ArtemisApi
|
|
2
2
|
class Zone < ArtemisApi::Model
|
|
3
3
|
json_type 'zones'
|
|
4
|
+
related_to_one 'sub_stage'
|
|
4
5
|
|
|
5
6
|
def self.find(id:, facility_id:, client:, include: nil, force: false)
|
|
6
7
|
client.find_one(self.json_type, id, facility_id: facility_id, include: include, force: force)
|
data/test/resource_unit_test.rb
CHANGED
|
@@ -5,20 +5,29 @@ class ResourceUnitTest < Minitest::Test
|
|
|
5
5
|
get_client
|
|
6
6
|
get_facility
|
|
7
7
|
|
|
8
|
-
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/resource_units")
|
|
9
|
-
.to_return(body: {data: [{id: '1', type: 'resource_units', attributes: {id: 1, name: 'Bunch', kind: 'count', conversion_si: 1.0}}, {id: '2', type: 'resource_units', attributes: {id: 2, name: 'grams', kind: 'weight', conversion_si: 1.0}}]}.to_json)
|
|
8
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/resource_units?include=crop_variety")
|
|
9
|
+
.to_return(body: {data: [{id: '1', type: 'resource_units', attributes: {id: 1, name: 'Bunch', kind: 'count', conversion_si: 1.0}}, {id: '2', type: 'resource_units', attributes: {id: 2, name: 'grams', kind: 'weight', conversion_si: 1.0}, relationships: { crop_variety: { data: { type: 'crop_varieties', id: 1 }}}}], included: [{ type: 'crop_varieties', id: 1, attributes: { name: '5th Element' } }]}.to_json)
|
|
10
10
|
|
|
11
11
|
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/resource_units/2")
|
|
12
12
|
.to_return(body: {data: {id: '2', type: 'resource_units', attributes: {id: 2, name: 'grams', kind: 'weight', conversion_is: 1.0}}}.to_json)
|
|
13
|
+
|
|
14
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/resource_units/3?include=crop_variety")
|
|
15
|
+
.to_return(body: {data: {id: '2', type: 'resource_units', attributes: {id: 3, name: 'grams', kind: 'weight', conversion_is: 1.0}, relationships: { crop_variety: { data: { type: 'crop_varieties', id: 2 } } }}, included: [{ type: 'crop_varieties', id: 2, attributes: { name: 'Boss Hog' } }]}.to_json)
|
|
13
16
|
end
|
|
14
17
|
|
|
15
18
|
def test_finding_all_resource_units
|
|
16
|
-
resource_units = ArtemisApi::ResourceUnit.find_all(facility_id: @facility.id, client: @client)
|
|
19
|
+
resource_units = ArtemisApi::ResourceUnit.find_all(facility_id: @facility.id, client: @client, include: 'crop_variety')
|
|
17
20
|
assert_equal 2, resource_units.count
|
|
21
|
+
assert_equal '5th Element', resource_units.last.crop_variety.name
|
|
18
22
|
end
|
|
19
23
|
|
|
20
24
|
def test_finding_a_specific_resource_unit
|
|
21
25
|
resource_unit = ArtemisApi::ResourceUnit.find(id: 2, facility_id: @facility.id, client: @client)
|
|
22
26
|
assert_equal 'grams', resource_unit.name
|
|
23
27
|
end
|
|
28
|
+
|
|
29
|
+
def test_resource_unit_has_crop_variety
|
|
30
|
+
resource_unit = ArtemisApi::ResourceUnit.find(id: 3, facility_id: @facility.id, client: @client, include: 'crop_variety')
|
|
31
|
+
assert_equal 'Boss Hog', resource_unit.crop_variety.name
|
|
32
|
+
end
|
|
24
33
|
end
|
data/test/stage_test.rb
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class StageTest < Minitest::Test
|
|
4
|
+
def setup
|
|
5
|
+
get_client
|
|
6
|
+
get_facility
|
|
7
|
+
|
|
8
|
+
stub_request(:get, 'http://localhost:3000/api/v3/facilities/2')
|
|
9
|
+
.to_return(body: {data: {id: '2', type: 'facilities', attributes: {id: 2, name: 'Rare Dankness'}}}.to_json)
|
|
10
|
+
|
|
11
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/stages?include=sub_stages,zones")
|
|
12
|
+
.to_return(body: {data: [{id: '1', type: 'stages', attributes: {id: 1, name: 'Growth', stage_type: 'growth'}}, {id: '2', type: 'stages', attributes: {id: 2, name: 'Stage 2', stage_type: 'stage_2'}}]}.to_json)
|
|
13
|
+
|
|
14
|
+
stub_request(:get, "http://localhost:3000/api/v3/facilities/#{@facility.id}/stages/1?include=sub_stages,zones")
|
|
15
|
+
.to_return(body: {data: {id: '1', type: 'stages', attributes: {id: 1, name: 'Growth', stage_type: 'growth'}}}.to_json)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_finding_all_stages
|
|
19
|
+
stages = ArtemisApi::Stage.find_all(@facility.id, @client)
|
|
20
|
+
assert_equal 2, stages.count
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_finding_all_stages_through_facility
|
|
24
|
+
stages = @facility.stages
|
|
25
|
+
assert_equal 2, stages.count
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_finding_a_specific_stage
|
|
29
|
+
stage = ArtemisApi::Stage.find(1, @facility.id, @client)
|
|
30
|
+
assert_equal 'Growth', stage.name
|
|
31
|
+
assert_equal 'growth', stage.stage_type
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_finding_a_specific_stage_through_facility
|
|
35
|
+
stage = @facility.stage(1)
|
|
36
|
+
assert_equal 'Growth', stage.name
|
|
37
|
+
assert_equal 'growth', stage.stage_type
|
|
38
|
+
end
|
|
39
|
+
end
|
data/test/subscription_test.rb
CHANGED
|
@@ -53,11 +53,11 @@ class SubscriptionTest < Minitest::Test
|
|
|
53
53
|
|
|
54
54
|
def test_deleting_a_subscription
|
|
55
55
|
# find the subscription first to ensure it's in the objects hash
|
|
56
|
-
|
|
56
|
+
ArtemisApi::Subscription.find(id: 2, facility_id: @facility.id, client: @client)
|
|
57
57
|
assert_equal 1, @client.objects['subscriptions'].count
|
|
58
58
|
|
|
59
59
|
# then delete it and ensure it has been removed from the objects hash
|
|
60
|
-
|
|
60
|
+
ArtemisApi::Subscription.delete(id: 2, facility_id: @facility.id, client: @client)
|
|
61
61
|
assert_equal 0, @client.objects['subscriptions'].count
|
|
62
62
|
end
|
|
63
63
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: artemis_api
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jamey Hampton
|
|
8
|
-
|
|
8
|
+
- Carlos Betancourt Carrero
|
|
9
|
+
autorequire:
|
|
9
10
|
bindir: exe
|
|
10
11
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
12
|
+
date: 2020-08-14 00:00:00.000000000 Z
|
|
12
13
|
dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
|
14
15
|
name: oauth2
|
|
@@ -25,33 +26,33 @@ dependencies:
|
|
|
25
26
|
- !ruby/object:Gem::Version
|
|
26
27
|
version: '0'
|
|
27
28
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
29
|
+
name: activesupport
|
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
|
30
31
|
requirements:
|
|
31
|
-
- - "
|
|
32
|
+
- - ">="
|
|
32
33
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
34
|
+
version: '0'
|
|
34
35
|
type: :development
|
|
35
36
|
prerelease: false
|
|
36
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
38
|
requirements:
|
|
38
|
-
- - "
|
|
39
|
+
- - ">="
|
|
39
40
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
41
|
+
version: '0'
|
|
41
42
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
43
|
+
name: bundler
|
|
43
44
|
requirement: !ruby/object:Gem::Requirement
|
|
44
45
|
requirements:
|
|
45
46
|
- - "~>"
|
|
46
47
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
48
|
+
version: '1.16'
|
|
48
49
|
type: :development
|
|
49
50
|
prerelease: false
|
|
50
51
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
52
|
requirements:
|
|
52
53
|
- - "~>"
|
|
53
54
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
55
|
+
version: '1.16'
|
|
55
56
|
- !ruby/object:Gem::Dependency
|
|
56
57
|
name: minitest
|
|
57
58
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -67,7 +68,7 @@ dependencies:
|
|
|
67
68
|
- !ruby/object:Gem::Version
|
|
68
69
|
version: '5.0'
|
|
69
70
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
71
|
+
name: pry
|
|
71
72
|
requirement: !ruby/object:Gem::Requirement
|
|
72
73
|
requirements:
|
|
73
74
|
- - ">="
|
|
@@ -81,7 +82,21 @@ dependencies:
|
|
|
81
82
|
- !ruby/object:Gem::Version
|
|
82
83
|
version: '0'
|
|
83
84
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
85
|
+
name: rake
|
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
|
87
|
+
requirements:
|
|
88
|
+
- - "~>"
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
version: '13.0'
|
|
91
|
+
type: :development
|
|
92
|
+
prerelease: false
|
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
94
|
+
requirements:
|
|
95
|
+
- - "~>"
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: '13.0'
|
|
98
|
+
- !ruby/object:Gem::Dependency
|
|
99
|
+
name: webmock
|
|
85
100
|
requirement: !ruby/object:Gem::Requirement
|
|
86
101
|
requirements:
|
|
87
102
|
- - ">="
|
|
@@ -94,14 +109,16 @@ dependencies:
|
|
|
94
109
|
- - ">="
|
|
95
110
|
- !ruby/object:Gem::Version
|
|
96
111
|
version: '0'
|
|
97
|
-
description:
|
|
112
|
+
description:
|
|
98
113
|
email:
|
|
99
114
|
- jhampton@artemisag.com
|
|
115
|
+
- cbetancourt@artemisag.com
|
|
100
116
|
executables: []
|
|
101
117
|
extensions: []
|
|
102
118
|
extra_rdoc_files: []
|
|
103
119
|
files:
|
|
104
120
|
- ".gitignore"
|
|
121
|
+
- ".ruby-version"
|
|
105
122
|
- ".travis.yml"
|
|
106
123
|
- CODE_OF_CONDUCT.md
|
|
107
124
|
- Gemfile
|
|
@@ -117,6 +134,9 @@ files:
|
|
|
117
134
|
- lib/artemis_api/batch.rb
|
|
118
135
|
- lib/artemis_api/client.rb
|
|
119
136
|
- lib/artemis_api/completion.rb
|
|
137
|
+
- lib/artemis_api/crop_variety.rb
|
|
138
|
+
- lib/artemis_api/custom_data.rb
|
|
139
|
+
- lib/artemis_api/custom_fields.rb
|
|
120
140
|
- lib/artemis_api/discard.rb
|
|
121
141
|
- lib/artemis_api/facility.rb
|
|
122
142
|
- lib/artemis_api/harvest.rb
|
|
@@ -126,6 +146,8 @@ files:
|
|
|
126
146
|
- lib/artemis_api/organization.rb
|
|
127
147
|
- lib/artemis_api/resource_unit.rb
|
|
128
148
|
- lib/artemis_api/seeding_unit.rb
|
|
149
|
+
- lib/artemis_api/stage.rb
|
|
150
|
+
- lib/artemis_api/sub_stage.rb
|
|
129
151
|
- lib/artemis_api/subscription.rb
|
|
130
152
|
- lib/artemis_api/user.rb
|
|
131
153
|
- lib/artemis_api/version.rb
|
|
@@ -142,6 +164,7 @@ files:
|
|
|
142
164
|
- test/organization_test.rb
|
|
143
165
|
- test/resource_unit_test.rb
|
|
144
166
|
- test/seeding_unit_test.rb
|
|
167
|
+
- test/stage_test.rb
|
|
145
168
|
- test/subscription_test.rb
|
|
146
169
|
- test/test_helper.rb
|
|
147
170
|
- test/user_test.rb
|
|
@@ -150,7 +173,7 @@ homepage: https://github.com/artemis-ag/artemis_api/
|
|
|
150
173
|
licenses:
|
|
151
174
|
- MIT
|
|
152
175
|
metadata: {}
|
|
153
|
-
post_install_message:
|
|
176
|
+
post_install_message:
|
|
154
177
|
rdoc_options: []
|
|
155
178
|
require_paths:
|
|
156
179
|
- lib
|
|
@@ -165,8 +188,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
165
188
|
- !ruby/object:Gem::Version
|
|
166
189
|
version: '0'
|
|
167
190
|
requirements: []
|
|
168
|
-
rubygems_version: 3.0.
|
|
169
|
-
signing_key:
|
|
191
|
+
rubygems_version: 3.0.8
|
|
192
|
+
signing_key:
|
|
170
193
|
specification_version: 4
|
|
171
194
|
summary: An API wrapper for the ArtemisAg API
|
|
172
195
|
test_files: []
|