usps-imis-api 0.6.16 → 0.7.1

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -3
  3. data/Gemfile.lock +36 -30
  4. data/Readme.md +39 -15
  5. data/lib/usps/imis/api.rb +8 -7
  6. data/lib/usps/imis/business_object.rb +55 -34
  7. data/lib/usps/imis/config.rb +1 -1
  8. data/lib/usps/imis/error.rb +51 -0
  9. data/lib/usps/imis/errors/api_error.rb +11 -0
  10. data/lib/usps/imis/errors/config_error.rb +11 -0
  11. data/lib/usps/imis/errors/locked_id_error.rb +15 -0
  12. data/lib/usps/imis/errors/mapper_error.rb +29 -0
  13. data/lib/usps/imis/errors/not_found_error.rb +11 -0
  14. data/lib/usps/imis/errors/panel_unimplemented_error.rb +34 -0
  15. data/lib/usps/imis/{error → errors}/response_error.rb +4 -7
  16. data/lib/usps/imis/errors/unexpected_property_type_error.rb +31 -0
  17. data/lib/usps/imis/mapper.rb +1 -5
  18. data/lib/usps/imis/mocks/business_object.rb +37 -0
  19. data/lib/usps/imis/mocks.rb +11 -0
  20. data/lib/usps/imis/{panel → panels}/base_panel.rb +26 -22
  21. data/lib/usps/imis/{panel → panels}/education.rb +1 -1
  22. data/lib/usps/imis/{panel → panels}/vsc.rb +1 -1
  23. data/lib/usps/imis/panels.rb +25 -0
  24. data/lib/usps/imis/properties.rb +1 -1
  25. data/lib/usps/imis/requests.rb +1 -1
  26. data/lib/usps/imis/version.rb +1 -1
  27. data/lib/usps/imis.rb +5 -15
  28. data/spec/lib/usps/imis/api_spec.rb +5 -5
  29. data/spec/lib/usps/imis/business_object_spec.rb +35 -13
  30. data/spec/lib/usps/imis/config_spec.rb +1 -1
  31. data/spec/lib/usps/imis/{error/api_error_spec.rb → error_spec.rb} +1 -1
  32. data/spec/lib/usps/imis/{error → errors}/response_error_spec.rb +4 -4
  33. data/spec/lib/usps/imis/mapper_spec.rb +2 -2
  34. data/spec/lib/usps/imis/{business_object_mock_spec.rb → mocks/business_object_spec.rb} +1 -1
  35. data/spec/lib/usps/imis/panels/base_panel_spec.rb +33 -0
  36. data/spec/lib/usps/imis/{panel → panels}/education_spec.rb +12 -2
  37. data/spec/lib/usps/imis/{panel → panels}/vsc_spec.rb +2 -2
  38. data/spec/lib/usps/imis/properties_spec.rb +1 -1
  39. data/usps-imis-api.gemspec +1 -1
  40. metadata +23 -16
  41. data/lib/ext/hash.rb +0 -10
  42. data/lib/usps/imis/business_object_mock.rb +0 -35
  43. data/lib/usps/imis/error/api_error.rb +0 -44
  44. data/lib/usps/imis/error/mapper_error.rb +0 -11
  45. data/spec/lib/usps/imis/panel/base_panel_spec.rb +0 -32
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: usps-imis-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.16
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Fiander
@@ -41,37 +41,44 @@ files:
41
41
  - Readme.md
42
42
  - bin/console
43
43
  - bin/setup
44
- - lib/ext/hash.rb
45
44
  - lib/usps/imis.rb
46
45
  - lib/usps/imis/api.rb
47
46
  - lib/usps/imis/business_object.rb
48
- - lib/usps/imis/business_object_mock.rb
49
47
  - lib/usps/imis/config.rb
50
- - lib/usps/imis/error/api_error.rb
51
- - lib/usps/imis/error/mapper_error.rb
52
- - lib/usps/imis/error/response_error.rb
48
+ - lib/usps/imis/error.rb
49
+ - lib/usps/imis/errors/api_error.rb
50
+ - lib/usps/imis/errors/config_error.rb
51
+ - lib/usps/imis/errors/locked_id_error.rb
52
+ - lib/usps/imis/errors/mapper_error.rb
53
+ - lib/usps/imis/errors/not_found_error.rb
54
+ - lib/usps/imis/errors/panel_unimplemented_error.rb
55
+ - lib/usps/imis/errors/response_error.rb
56
+ - lib/usps/imis/errors/unexpected_property_type_error.rb
53
57
  - lib/usps/imis/mapper.rb
54
- - lib/usps/imis/panel/base_panel.rb
55
- - lib/usps/imis/panel/education.rb
56
- - lib/usps/imis/panel/vsc.rb
58
+ - lib/usps/imis/mocks.rb
59
+ - lib/usps/imis/mocks/business_object.rb
60
+ - lib/usps/imis/panels.rb
61
+ - lib/usps/imis/panels/base_panel.rb
62
+ - lib/usps/imis/panels/education.rb
63
+ - lib/usps/imis/panels/vsc.rb
57
64
  - lib/usps/imis/properties.rb
58
65
  - lib/usps/imis/requests.rb
59
66
  - lib/usps/imis/version.rb
60
67
  - spec/lib/usps/imis/api_spec.rb
61
- - spec/lib/usps/imis/business_object_mock_spec.rb
62
68
  - spec/lib/usps/imis/business_object_spec.rb
63
69
  - spec/lib/usps/imis/config_spec.rb
64
- - spec/lib/usps/imis/error/api_error_spec.rb
65
- - spec/lib/usps/imis/error/response_error_spec.rb
70
+ - spec/lib/usps/imis/error_spec.rb
71
+ - spec/lib/usps/imis/errors/response_error_spec.rb
66
72
  - spec/lib/usps/imis/mapper_spec.rb
67
- - spec/lib/usps/imis/panel/base_panel_spec.rb
68
- - spec/lib/usps/imis/panel/education_spec.rb
69
- - spec/lib/usps/imis/panel/vsc_spec.rb
73
+ - spec/lib/usps/imis/mocks/business_object_spec.rb
74
+ - spec/lib/usps/imis/panels/base_panel_spec.rb
75
+ - spec/lib/usps/imis/panels/education_spec.rb
76
+ - spec/lib/usps/imis/panels/vsc_spec.rb
70
77
  - spec/lib/usps/imis/properties_spec.rb
71
78
  - spec/lib/usps/imis_spec.rb
72
79
  - spec/spec_helper.rb
73
80
  - usps-imis-api.gemspec
74
- homepage: http://rubygems.org/gems/usps-imis-api
81
+ homepage: https://github.com/unitedstatespowersquadrons/imis-api-ruby
75
82
  licenses: []
76
83
  metadata:
77
84
  rubygems_mfa_required: 'true'
data/lib/ext/hash.rb DELETED
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Import a simplified version of to_query from Rails if not already defined
4
- class Hash
5
- def to_query
6
- map do |key, value|
7
- "#{CGI.escape(key.to_s)}=#{CGI.escape(value.to_s)}"
8
- end.sort * '&'
9
- end
10
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Usps
4
- module Imis
5
- # Mock data response for testing
6
- #
7
- class BusinessObjectMock
8
- attr_reader :fields
9
-
10
- def initialize(**fields)
11
- @fields = fields.transform_keys(&:to_s)
12
- end
13
-
14
- def get_field(name) = fields[name]
15
-
16
- def get
17
- Usps::Imis::Properties.build do |props|
18
- fields.each { |name, value| props.add(name, value) }
19
- end
20
- end
21
-
22
- def put_fields(data)
23
- Usps::Imis::Properties.build do |props|
24
- fields.merge(data.transform_keys(&:to_s)).each { |name, value| props.add(name, value) }
25
- end
26
- end
27
-
28
- def put(data) = data
29
-
30
- def post(data) = data
31
-
32
- def delete = ''
33
- end
34
- end
35
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Usps
4
- module Imis
5
- module Error
6
- # Base error class for all internal exceptions
7
- #
8
- class ApiError < StandardError
9
- # Additional call-specific metadata to pass through to Bugsnag
10
- #
11
- attr_accessor :metadata
12
-
13
- # A new instance of +ApiError+
14
- #
15
- # @param message [String] The base exception message
16
- # @param metadata [Hash] Additional call-specific metadata to pass through to Bugsnag
17
- #
18
- def initialize(message, metadata = {})
19
- super(message)
20
- @metadata = metadata
21
- end
22
-
23
- # Additional metadata to include in Bugsnag reports
24
- #
25
- # Can include fields at the top level, which will be shows on the custom tab
26
- #
27
- # Can include fields nested under a top-level key, which will be shown on a tab with the
28
- # top-level key as its name
29
- #
30
- # @return [Hash]
31
- #
32
- def bugsnag_meta_data
33
- metadata == {} ? {} : base_metadata
34
- end
35
-
36
- private
37
-
38
- def base_metadata
39
- { api: metadata }
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Usps
4
- module Imis
5
- module Error
6
- # Exception raised by a +Mapper+
7
- #
8
- class MapperError < ApiError; end
9
- end
10
- end
11
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- module Usps
6
- module Imis
7
- module Panel
8
- class InvalidPanel < BasePanel; end
9
-
10
- class InvalidPanelWithBusinessObject < BasePanel
11
- private
12
-
13
- def business_object = 'Something'
14
- end
15
- end
16
- end
17
- end
18
-
19
- describe Usps::Imis::Panel::BasePanel do
20
- it 'requires #business_object to be defined' do
21
- expect { Usps::Imis::Panel::InvalidPanel.new.get(1) }.to raise_error(
22
- Usps::Imis::Error::ApiError, 'Usps::Imis::Panel::InvalidPanel must implement #business_object'
23
- )
24
- end
25
-
26
- it 'requires #payload(data) to be defined' do
27
- expect { Usps::Imis::Panel::InvalidPanelWithBusinessObject.new.create({}) }.to raise_error(
28
- Usps::Imis::Error::ApiError,
29
- 'Usps::Imis::Panel::InvalidPanelWithBusinessObject must implement #payload(data)'
30
- )
31
- end
32
- end