my_john_deere_api 2.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +813 -0
  3. data/Rakefile +9 -0
  4. data/lib/my_john_deere_api.rb +17 -0
  5. data/lib/my_john_deere_api/authorize.rb +69 -0
  6. data/lib/my_john_deere_api/client.rb +151 -0
  7. data/lib/my_john_deere_api/consumer.rb +90 -0
  8. data/lib/my_john_deere_api/errors.rb +7 -0
  9. data/lib/my_john_deere_api/errors/invalid_record_error.rb +29 -0
  10. data/lib/my_john_deere_api/errors/missing_contribution_definition_id_error.rb +12 -0
  11. data/lib/my_john_deere_api/errors/not_yet_implemented_error.rb +12 -0
  12. data/lib/my_john_deere_api/errors/type_mismatch_error.rb +12 -0
  13. data/lib/my_john_deere_api/errors/unsupported_environment_error.rb +18 -0
  14. data/lib/my_john_deere_api/helpers.rb +6 -0
  15. data/lib/my_john_deere_api/helpers/case_conversion.rb +37 -0
  16. data/lib/my_john_deere_api/helpers/environment_helper.rb +25 -0
  17. data/lib/my_john_deere_api/helpers/uri_helpers.rb +19 -0
  18. data/lib/my_john_deere_api/helpers/validate_contribution_definition.rb +18 -0
  19. data/lib/my_john_deere_api/model.rb +10 -0
  20. data/lib/my_john_deere_api/model/asset.rb +69 -0
  21. data/lib/my_john_deere_api/model/asset_location.rb +19 -0
  22. data/lib/my_john_deere_api/model/base.rb +97 -0
  23. data/lib/my_john_deere_api/model/contribution_definition.rb +15 -0
  24. data/lib/my_john_deere_api/model/contribution_product.rb +33 -0
  25. data/lib/my_john_deere_api/model/field.rb +40 -0
  26. data/lib/my_john_deere_api/model/flag.rb +36 -0
  27. data/lib/my_john_deere_api/model/organization.rb +43 -0
  28. data/lib/my_john_deere_api/net_http_retry.rb +2 -0
  29. data/lib/my_john_deere_api/net_http_retry/decorator.rb +53 -0
  30. data/lib/my_john_deere_api/net_http_retry/max_retries_exceeded_error.rb +20 -0
  31. data/lib/my_john_deere_api/request.rb +6 -0
  32. data/lib/my_john_deere_api/request/collection.rb +10 -0
  33. data/lib/my_john_deere_api/request/collection/asset_locations.rb +27 -0
  34. data/lib/my_john_deere_api/request/collection/assets.rb +34 -0
  35. data/lib/my_john_deere_api/request/collection/base.rb +91 -0
  36. data/lib/my_john_deere_api/request/collection/contribution_definitions.rb +26 -0
  37. data/lib/my_john_deere_api/request/collection/contribution_products.rb +26 -0
  38. data/lib/my_john_deere_api/request/collection/fields.rb +26 -0
  39. data/lib/my_john_deere_api/request/collection/flags.rb +33 -0
  40. data/lib/my_john_deere_api/request/collection/organizations.rb +26 -0
  41. data/lib/my_john_deere_api/request/create.rb +5 -0
  42. data/lib/my_john_deere_api/request/create/asset.rb +57 -0
  43. data/lib/my_john_deere_api/request/create/asset_location.rb +110 -0
  44. data/lib/my_john_deere_api/request/create/base.rb +67 -0
  45. data/lib/my_john_deere_api/request/individual.rb +8 -0
  46. data/lib/my_john_deere_api/request/individual/asset.rb +19 -0
  47. data/lib/my_john_deere_api/request/individual/base.rb +52 -0
  48. data/lib/my_john_deere_api/request/individual/contribution_definition.rb +19 -0
  49. data/lib/my_john_deere_api/request/individual/contribution_product.rb +19 -0
  50. data/lib/my_john_deere_api/request/individual/field.rb +19 -0
  51. data/lib/my_john_deere_api/request/individual/organization.rb +19 -0
  52. data/lib/my_john_deere_api/request/update.rb +4 -0
  53. data/lib/my_john_deere_api/request/update/asset.rb +40 -0
  54. data/lib/my_john_deere_api/request/update/base.rb +67 -0
  55. data/lib/my_john_deere_api/validators.rb +5 -0
  56. data/lib/my_john_deere_api/validators/asset.rb +35 -0
  57. data/lib/my_john_deere_api/validators/asset_location.rb +34 -0
  58. data/lib/my_john_deere_api/validators/base.rb +67 -0
  59. data/lib/my_john_deere_api/version.rb +3 -0
  60. data/test/lib/my_john_deere_api/authorize_test.rb +81 -0
  61. data/test/lib/my_john_deere_api/client_test.rb +225 -0
  62. data/test/lib/my_john_deere_api/consumer_test.rb +58 -0
  63. data/test/lib/my_john_deere_api/errors/invalid_record_error_test.rb +26 -0
  64. data/test/lib/my_john_deere_api/errors/max_retries_exceeded_error_test.rb +13 -0
  65. data/test/lib/my_john_deere_api/errors/missing_contribution_definition_id_error_test.rb +14 -0
  66. data/test/lib/my_john_deere_api/errors/not_yet_implemented_error_test.rb +13 -0
  67. data/test/lib/my_john_deere_api/errors/type_mismatch_error_test.rb +13 -0
  68. data/test/lib/my_john_deere_api/errors/unsupported_environment_error_test.rb +18 -0
  69. data/test/lib/my_john_deere_api/errors_test.rb +25 -0
  70. data/test/lib/my_john_deere_api/helpers/case_conversion_test.rb +100 -0
  71. data/test/lib/my_john_deere_api/helpers/environment_helper_test.rb +67 -0
  72. data/test/lib/my_john_deere_api/helpers/uri_helpers_test.rb +58 -0
  73. data/test/lib/my_john_deere_api/helpers/validate_contribution_definition_test.rb +74 -0
  74. data/test/lib/my_john_deere_api/helpers_test.rb +21 -0
  75. data/test/lib/my_john_deere_api/model/asset_location_test.rb +38 -0
  76. data/test/lib/my_john_deere_api/model/asset_test.rb +133 -0
  77. data/test/lib/my_john_deere_api/model/base_test.rb +76 -0
  78. data/test/lib/my_john_deere_api/model/contribution_definition_test.rb +52 -0
  79. data/test/lib/my_john_deere_api/model/contribution_product_test.rb +82 -0
  80. data/test/lib/my_john_deere_api/model/field_test.rb +65 -0
  81. data/test/lib/my_john_deere_api/model/flag_test.rb +48 -0
  82. data/test/lib/my_john_deere_api/model/organization_test.rb +84 -0
  83. data/test/lib/my_john_deere_api/model_test.rb +37 -0
  84. data/test/lib/my_john_deere_api/net_http_retry/decorator_test.rb +163 -0
  85. data/test/lib/my_john_deere_api/request/collection/asset_locations_test.rb +102 -0
  86. data/test/lib/my_john_deere_api/request/collection/assets_test.rb +99 -0
  87. data/test/lib/my_john_deere_api/request/collection/base_test.rb +27 -0
  88. data/test/lib/my_john_deere_api/request/collection/contribution_definitions_test.rb +88 -0
  89. data/test/lib/my_john_deere_api/request/collection/contribution_products_test.rb +88 -0
  90. data/test/lib/my_john_deere_api/request/collection/fields_test.rb +86 -0
  91. data/test/lib/my_john_deere_api/request/collection/flags_test.rb +92 -0
  92. data/test/lib/my_john_deere_api/request/collection/organizations_test.rb +87 -0
  93. data/test/lib/my_john_deere_api/request/collection_test.rb +37 -0
  94. data/test/lib/my_john_deere_api/request/create/asset_location_test.rb +163 -0
  95. data/test/lib/my_john_deere_api/request/create/asset_test.rb +182 -0
  96. data/test/lib/my_john_deere_api/request/create/base_test.rb +29 -0
  97. data/test/lib/my_john_deere_api/request/create_test.rb +17 -0
  98. data/test/lib/my_john_deere_api/request/individual/asset_test.rb +33 -0
  99. data/test/lib/my_john_deere_api/request/individual/base_test.rb +18 -0
  100. data/test/lib/my_john_deere_api/request/individual/contribution_definition_test.rb +33 -0
  101. data/test/lib/my_john_deere_api/request/individual/contribution_product_test.rb +33 -0
  102. data/test/lib/my_john_deere_api/request/individual/field_test.rb +37 -0
  103. data/test/lib/my_john_deere_api/request/individual/organization_test.rb +33 -0
  104. data/test/lib/my_john_deere_api/request/individual_test.rb +29 -0
  105. data/test/lib/my_john_deere_api/request/update/asset_test.rb +99 -0
  106. data/test/lib/my_john_deere_api/request/update/base_test.rb +60 -0
  107. data/test/lib/my_john_deere_api/request/update_test.rb +13 -0
  108. data/test/lib/my_john_deere_api/request_test.rb +21 -0
  109. data/test/lib/my_john_deere_api/validators/asset_location_test.rb +61 -0
  110. data/test/lib/my_john_deere_api/validators/asset_test.rb +93 -0
  111. data/test/lib/my_john_deere_api/validators/base_test.rb +92 -0
  112. data/test/lib/my_john_deere_api/validators_test.rb +17 -0
  113. data/test/lib/my_john_deere_api/version_test.rb +9 -0
  114. data/test/my_john_deere_api_test.rb +37 -0
  115. data/test/support/helper.rb +97 -0
  116. data/test/support/vcr/accessor/delete_failed.yml +327 -0
  117. data/test/support/vcr/accessor/delete_max_failed.yml +615 -0
  118. data/test/support/vcr/accessor/delete_retry.yml +191 -0
  119. data/test/support/vcr/accessor/delete_retry_too_soon.yml +191 -0
  120. data/test/support/vcr/accessor/get_failed.yml +390 -0
  121. data/test/support/vcr/accessor/get_max_failed.yml +734 -0
  122. data/test/support/vcr/accessor/get_retry.yml +226 -0
  123. data/test/support/vcr/accessor/get_retry_too_soon.yml +226 -0
  124. data/test/support/vcr/accessor/post_failed.yml +417 -0
  125. data/test/support/vcr/accessor/post_max_failed.yml +785 -0
  126. data/test/support/vcr/accessor/post_retry.yml +241 -0
  127. data/test/support/vcr/accessor/post_retry_too_soon.yml +241 -0
  128. data/test/support/vcr/accessor/put_failed.yml +372 -0
  129. data/test/support/vcr/accessor/put_max_failed.yml +700 -0
  130. data/test/support/vcr/accessor/put_retry.yml +216 -0
  131. data/test/support/vcr/accessor/put_retry_too_soon.yml +216 -0
  132. data/test/support/vcr/catalog.yml +89 -0
  133. data/test/support/vcr/delete_asset.yml +82 -0
  134. data/test/support/vcr/get_access_token.yml +41 -0
  135. data/test/support/vcr/get_asset.yml +144 -0
  136. data/test/support/vcr/get_asset_locations.yml +196 -0
  137. data/test/support/vcr/get_assets.yml +152 -0
  138. data/test/support/vcr/get_contribution_definition.yml +90 -0
  139. data/test/support/vcr/get_contribution_definitions.yml +91 -0
  140. data/test/support/vcr/get_contribution_product.yml +91 -0
  141. data/test/support/vcr/get_contribution_products.yml +91 -0
  142. data/test/support/vcr/get_field.yml +144 -0
  143. data/test/support/vcr/get_fields.yml +146 -0
  144. data/test/support/vcr/get_flags.yml +47 -0
  145. data/test/support/vcr/get_organization.yml +90 -0
  146. data/test/support/vcr/get_organizations.yml +149 -0
  147. data/test/support/vcr/get_request_token.yml +83 -0
  148. data/test/support/vcr/post_asset_locations.yml +244 -0
  149. data/test/support/vcr/post_assets.yml +192 -0
  150. data/test/support/vcr/put_asset.yml +87 -0
  151. data/test/support/vcr/warning.txt +28 -0
  152. data/test/support/vcr_setup.rb +488 -0
  153. metadata +277 -0
@@ -0,0 +1,9 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.libs << 'test'
5
+ t.pattern = 'test/**/*_test.rb'
6
+ end
7
+
8
+ desc "Run tests"
9
+ task :default => :test
@@ -0,0 +1,17 @@
1
+ require 'oauth'
2
+ require 'uri'
3
+ require 'json'
4
+
5
+ module MyJohnDeereApi
6
+ autoload :VERSION, 'my_john_deere_api/version'
7
+ autoload :Authorize, 'my_john_deere_api/authorize'
8
+ autoload :Client, 'my_john_deere_api/client'
9
+ autoload :Consumer, 'my_john_deere_api/consumer'
10
+ autoload :Request, 'my_john_deere_api/request'
11
+ autoload :Model, 'my_john_deere_api/model'
12
+ autoload :Helpers, 'my_john_deere_api/helpers'
13
+ autoload :Validators, 'my_john_deere_api/validators'
14
+
15
+ require 'my_john_deere_api/errors'
16
+ require 'my_john_deere_api/net_http_retry'
17
+ end
@@ -0,0 +1,69 @@
1
+ module MyJohnDeereApi
2
+ class Authorize
3
+ include Helpers::EnvironmentHelper
4
+
5
+ attr_reader :api_key, :api_secret,
6
+ :request_token, :request_secret,
7
+ :access_token, :access_secret,
8
+ :environment, :options
9
+
10
+ DEFAULTS = {
11
+ environment: :live
12
+ }
13
+
14
+ ##
15
+ # Create an Authorize object.
16
+ #
17
+ # This is used to obtain authentication an access key/secret
18
+ # on behalf of a user.
19
+
20
+ def initialize(api_key, api_secret, options = {})
21
+ @options = DEFAULTS.merge(options)
22
+
23
+ @api_key = api_key
24
+ @api_secret = api_secret
25
+ self.environment = @options[:environment]
26
+ end
27
+
28
+ ##
29
+ # Url which may be used to obtain a verification
30
+ # code from the oauth server.
31
+
32
+ def authorize_url
33
+ return @authorize_url if defined?(@authorize_url)
34
+
35
+ request_options = options.slice(:oauth_callback)
36
+
37
+ requester = consumer.get_request_token(request_options)
38
+ @request_token = requester.token
39
+ @request_secret = requester.secret
40
+
41
+ @authorize_url = requester.authorize_url(request_options)
42
+ end
43
+
44
+ ##
45
+ # API consumer that makes non-user-specific GET requests
46
+
47
+ def consumer
48
+ return @consumer if defined?(@consumer)
49
+ @consumer = MyJohnDeereApi::Consumer.new(@api_key, @api_secret, environment: environment).app_get
50
+ end
51
+
52
+ ##
53
+ # Turn a verification code into access tokens. If this is
54
+ # run from a separate process than the one that created
55
+ # the initial RequestToken, the request token/secret
56
+ # can be passed in.
57
+
58
+ def verify(code, token=nil, secret=nil)
59
+ token ||= request_token
60
+ secret ||= request_secret
61
+
62
+ requester = OAuth::RequestToken.new(consumer, token, secret)
63
+ access_object = requester.get_access_token(oauth_verifier: code)
64
+ @access_token = access_object.token
65
+ @access_secret = access_object.secret
66
+ nil
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,151 @@
1
+ module MyJohnDeereApi
2
+ class Client
3
+ include Helpers::EnvironmentHelper
4
+ include Helpers::CaseConversion
5
+
6
+ attr_accessor :contribution_definition_id
7
+ attr_reader :api_key, :api_secret, :access_token, :access_secret, :http_retry_options
8
+
9
+ DEFAULTS = {
10
+ environment: :live,
11
+ http_retry: {}
12
+ }
13
+
14
+ ##
15
+ # Creates the client with everything it needs to perform API requests.
16
+ # User-specific credentials are optional, but user-specific API
17
+ # requests are only possible if they are supplied.
18
+ #
19
+ # options:
20
+ #
21
+ # [:environment] :sandbox or :live
22
+ #
23
+ # [:contribution_definition_id] optional, but needed for some requests
24
+ # like asset create/update.
25
+ #
26
+ # [:access] an array with two elements, the access_token
27
+ # and the access_secret of the given user
28
+
29
+ def initialize(api_key, api_secret, options = {})
30
+ options = DEFAULTS.merge(options)
31
+
32
+ @api_key = api_key
33
+ @api_secret = api_secret
34
+
35
+ if options.has_key?(:access) && options[:access].is_a?(Array)
36
+ @access_token, @access_secret = options[:access]
37
+ end
38
+
39
+ self.environment = options[:environment]
40
+ @contribution_definition_id = options[:contribution_definition_id]
41
+ @http_retry_options = options[:http_retry]
42
+ end
43
+
44
+ ##
45
+ # Returns an oAuth AccessToken object which can be used to make
46
+ # user-specific API requests
47
+
48
+ def accessor
49
+ return @accessor if defined?(@accessor)
50
+
51
+ @accessor = NetHttpRetry::Decorator.new(
52
+ OAuth::AccessToken.new(
53
+ consumer.user_get,
54
+ access_token,
55
+ access_secret
56
+ ),
57
+ http_retry_options
58
+ )
59
+ end
60
+
61
+ ##
62
+ # generic user-specific GET request method that returns JSON
63
+
64
+ def get resource
65
+ resource = resource.to_s
66
+ resource = "/#{resource}" unless resource =~ /^\//
67
+ response = accessor.get(resource, headers)
68
+
69
+ JSON.parse(response.body)
70
+ end
71
+
72
+ ##
73
+ # generic user-specific POST request method that returns JSON or response
74
+
75
+ def post resource, body
76
+ resource = resource.to_s
77
+ resource = "/#{resource}" unless resource =~ /^\//
78
+ response = accessor.post(resource, camelize(body).to_json, post_headers)
79
+
80
+ if response.body && response.body.size > 0
81
+ JSON.parse(response.body)
82
+ else
83
+ response
84
+ end
85
+ end
86
+
87
+ ##
88
+ # generic user-specific PUT request method that returns JSON or response
89
+
90
+ def put resource, body
91
+ resource = resource.to_s
92
+ resource = "/#{resource}" unless resource =~ /^\//
93
+ response = accessor.put(resource, camelize(body).to_json, post_headers)
94
+
95
+ if response.body && response.body.size > 0
96
+ JSON.parse(response.body)
97
+ else
98
+ response
99
+ end
100
+ end
101
+
102
+ ##
103
+ # generic user-specific DELETE request method that returns JSON or response
104
+
105
+ def delete resource
106
+ resource = resource.to_s
107
+ resource = "/#{resource}" unless resource =~ /^\//
108
+ response = accessor.delete(resource, headers)
109
+
110
+ if response.body && response.body.size > 0
111
+ JSON.parse(response.body)
112
+ else
113
+ response
114
+ end
115
+ end
116
+
117
+ ##
118
+ # organizations associated with this access
119
+
120
+ def organizations
121
+ return @organizations if defined?(@organizations)
122
+ @organizations = MyJohnDeereApi::Request::Collection::Organizations.new(self)
123
+ end
124
+
125
+ ##
126
+ # contribution products associated with this app (not user-specific)
127
+
128
+ def contribution_products
129
+ return @contribution_products if defined?(@contribution_products)
130
+ @contribution_products = MyJohnDeereApi::Request::Collection::ContributionProducts.new(self)
131
+ end
132
+
133
+ private
134
+
135
+ ##
136
+ # Returns an oAuth consumer which can be used to build requests
137
+
138
+ def consumer
139
+ return @consumer if defined?(@consumer)
140
+ @consumer = MyJohnDeereApi::Consumer.new(@api_key, @api_secret, environment: environment)
141
+ end
142
+
143
+ def headers
144
+ @headers ||= {accept: 'application/vnd.deere.axiom.v3+json'}
145
+ end
146
+
147
+ def post_headers
148
+ @post_headers ||= headers.merge({'Content-Type' => 'application/vnd.deere.axiom.v3+json'})
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,90 @@
1
+ module MyJohnDeereApi
2
+ class Consumer
3
+ include Helpers::CaseConversion
4
+ include Helpers::EnvironmentHelper
5
+
6
+ attr_reader :api_key, :api_secret, :environment, :base_url
7
+
8
+ # valid API urls
9
+ URLS = {
10
+ sandbox: 'https://sandboxapi.deere.com',
11
+ live: 'https://api.soa-proxy.deere.com',
12
+ }
13
+
14
+ DEFAULTS = {
15
+ environment: :live
16
+ }
17
+
18
+ def initialize(api_key, api_secret, options={})
19
+ options = DEFAULTS.merge(options)
20
+
21
+ @api_key = api_key
22
+ @api_secret = api_secret
23
+
24
+ self.environment = options[:environment]
25
+ @base_url = options[:base_url] || URLS[@environment]
26
+ end
27
+
28
+ ##
29
+ # oAuth Consumer which uses just the base url, for
30
+ # app-wide, non user-specific GET requests.
31
+
32
+ def app_get
33
+ @app_get ||= consumer(base_url)
34
+ end
35
+
36
+ ##
37
+ # oAuth Consumer which uses the proper url for user-specific GET requests.
38
+
39
+ def user_get
40
+ @user_get ||= consumer("#{base_url}/platform")
41
+ end
42
+
43
+ private
44
+
45
+ def consumer(site)
46
+ OAuth::Consumer.new(
47
+ api_key,
48
+ api_secret,
49
+ site: site,
50
+ header: header,
51
+ http_method: :get,
52
+ request_token_url: links[:request_token],
53
+ access_token_url: links[:access_token],
54
+ authorize_url: links[:authorize_request_token]
55
+ )
56
+ end
57
+
58
+ def links
59
+ return @links if defined?(@links)
60
+
61
+ catalog = OAuth::Consumer.new(api_key, api_secret)
62
+ .request(
63
+ :get,
64
+ "#{base_url}/platform/",
65
+ nil,
66
+ {},
67
+ header
68
+ ).body
69
+
70
+ @links = {}
71
+
72
+ JSON.parse(catalog)['links'].each do |link|
73
+ uri = URI.parse(link['uri'])
74
+ uri.query = nil
75
+
76
+ @links[keyify(link['rel'])] = uri.to_s
77
+ end
78
+
79
+ @links
80
+ end
81
+
82
+ def header
83
+ @header ||= {accept: 'application/vnd.deere.axiom.v3+json'}
84
+ end
85
+
86
+ def keyify key_name
87
+ underscore(key_name.gsub(/^oauth/, '')).to_sym
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,7 @@
1
+ module MyJohnDeereApi::Errors
2
+ require 'my_john_deere_api/errors/invalid_record_error'
3
+ require 'my_john_deere_api/errors/missing_contribution_definition_id_error'
4
+ require 'my_john_deere_api/errors/not_yet_implemented_error'
5
+ require 'my_john_deere_api/errors/type_mismatch_error'
6
+ require 'my_john_deere_api/errors/unsupported_environment_error'
7
+ end
@@ -0,0 +1,29 @@
1
+ module MyJohnDeereApi
2
+ ##
3
+ # This error is used in a context that will fail in the absence of
4
+ # a valid oAuth access token. We have classes that may only need
5
+ # access tokens for some use cases.
6
+
7
+ class InvalidRecordError < StandardError
8
+
9
+ ##
10
+ # argument is a hash of attributes and their error messages,
11
+ # which will be built into the raised message.
12
+
13
+ def initialize(errors = {})
14
+ message = 'Record is invalid'
15
+
16
+ unless errors.empty?
17
+ attribute_messages = []
18
+
19
+ errors.each do |attribute, message|
20
+ attribute_messages << "#{attribute} #{message}"
21
+ end
22
+
23
+ message = "#{message}: #{attribute_messages.join('; ')}"
24
+ end
25
+
26
+ super(message)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,12 @@
1
+ module MyJohnDeereApi
2
+ ##
3
+ # This error is used in a context that will fail in the absence of
4
+ # a valid oAuth access token. We have classes that may only need
5
+ # access tokens for some use cases.
6
+
7
+ class MissingContributionDefinitionIdError < StandardError
8
+ def initialize(message = "Contribution Definition ID must be set in the client to use this feature.")
9
+ super
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module MyJohnDeereApi
2
+ ##
3
+ # This error is used in a context that will fail in the absence of
4
+ # a valid oAuth access token. We have classes that may only need
5
+ # access tokens for some use cases.
6
+
7
+ class NotYetImplementedError < StandardError
8
+ def initialize(message = 'This is not yet implemented. View README to help make this gem better!')
9
+ super
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module MyJohnDeereApi
2
+ ##
3
+ # This error is used in a context that will fail in the absence of
4
+ # a valid oAuth access token. We have classes that may only need
5
+ # access tokens for some use cases.
6
+
7
+ class TypeMismatchError < StandardError
8
+ def initialize(message = "Record type does not match what was expected")
9
+ super
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,18 @@
1
+ module MyJohnDeereApi
2
+ ##
3
+ # This error is used when an unsupported environment has been requested.
4
+ # Supported environments currently include :sandbox, :live, and :production
5
+ # as a synonym for :live.
6
+
7
+ class UnsupportedEnvironmentError < StandardError
8
+ def initialize(environment = nil)
9
+ message = if environment
10
+ "The #{environment.inspect} environment is not supported."
11
+ else
12
+ 'This environment is not supported.'
13
+ end
14
+
15
+ super(message)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,6 @@
1
+ module MyJohnDeereApi::Helpers
2
+ autoload :UriHelpers, 'my_john_deere_api/helpers/uri_helpers'
3
+ autoload :CaseConversion, 'my_john_deere_api/helpers/case_conversion'
4
+ autoload :EnvironmentHelper, 'my_john_deere_api/helpers/environment_helper'
5
+ autoload :ValidateContributionDefinition, 'my_john_deere_api/helpers/validate_contribution_definition'
6
+ end