nuncium 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.overcommit.yml +49 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +26 -0
  6. data/.ruby-gemset +1 -0
  7. data/.ruby-version +1 -0
  8. data/CODE_OF_CONDUCT.md +74 -0
  9. data/DOCS.md +133 -0
  10. data/Gemfile +6 -0
  11. data/Gemfile.lock +136 -0
  12. data/Guardfile +7 -0
  13. data/LICENSE.txt +21 -0
  14. data/README.md +281 -0
  15. data/Rakefile +6 -0
  16. data/_config.yml +1 -0
  17. data/bin/console +7 -0
  18. data/lib/nuncium.rb +87 -0
  19. data/lib/nuncium/configuration.rb +82 -0
  20. data/lib/nuncium/data_box.rb +41 -0
  21. data/lib/nuncium/data_message.rb +136 -0
  22. data/lib/nuncium/request.rb +120 -0
  23. data/lib/nuncium/response.rb +18 -0
  24. data/lib/nuncium/responses/body.rb +19 -0
  25. data/lib/nuncium/responses/data_box.rb +14 -0
  26. data/lib/nuncium/responses/db/body.rb +9 -0
  27. data/lib/nuncium/responses/db/status.rb +13 -0
  28. data/lib/nuncium/responses/dm/body.rb +9 -0
  29. data/lib/nuncium/responses/dm/status.rb +13 -0
  30. data/lib/nuncium/responses/message.rb +21 -0
  31. data/lib/nuncium/responses/messages/attachment.rb +24 -0
  32. data/lib/nuncium/responses/messages/collection.rb +29 -0
  33. data/lib/nuncium/responses/messages/delivery_info.rb +23 -0
  34. data/lib/nuncium/responses/messages/envelope.rb +23 -0
  35. data/lib/nuncium/responses/messages/event.rb +14 -0
  36. data/lib/nuncium/responses/status.rb +19 -0
  37. data/lib/nuncium/utils/errors.rb +18 -0
  38. data/lib/nuncium/version.rb +3 -0
  39. data/lib/nuncium/web_services/db_access/.gitkeep +0 -0
  40. data/lib/nuncium/web_services/db_access/change_isds_password.rb +21 -0
  41. data/lib/nuncium/web_services/db_access/get_owner_info_from_login.rb +19 -0
  42. data/lib/nuncium/web_services/db_search/check_data_box.rb +17 -0
  43. data/lib/nuncium/web_services/db_search/d_t_info.rb +17 -0
  44. data/lib/nuncium/web_services/db_search/data_box_credit_info.rb +17 -0
  45. data/lib/nuncium/web_services/db_search/find_data_box.rb +25 -0
  46. data/lib/nuncium/web_services/db_search/find_personal_data_box.rb +22 -0
  47. data/lib/nuncium/web_services/db_search/get_data_box_activity_status.rb +17 -0
  48. data/lib/nuncium/web_services/db_search/get_data_box_list.rb +20 -0
  49. data/lib/nuncium/web_services/db_search/isds_search_2.rb +18 -0
  50. data/lib/nuncium/web_services/db_search/p_d_z_info.rb +17 -0
  51. data/lib/nuncium/web_services/db_search/p_d_z_send_info.rb +17 -0
  52. data/lib/nuncium/web_services/db_search/request.rb +19 -0
  53. data/lib/nuncium/web_services/db_search/response.rb +13 -0
  54. data/lib/nuncium/web_services/dm_info/confirm_delivery.rb +17 -0
  55. data/lib/nuncium/web_services/dm_info/erase_message.rb +17 -0
  56. data/lib/nuncium/web_services/dm_info/get_delivery_info.rb +25 -0
  57. data/lib/nuncium/web_services/dm_info/get_list_of_received_messages.rb +26 -0
  58. data/lib/nuncium/web_services/dm_info/get_list_of_sent_messages.rb +26 -0
  59. data/lib/nuncium/web_services/dm_info/get_message_author.rb +17 -0
  60. data/lib/nuncium/web_services/dm_info/get_message_state_changes.rb +17 -0
  61. data/lib/nuncium/web_services/dm_info/get_signed_delivery_info.rb +17 -0
  62. data/lib/nuncium/web_services/dm_info/mark_message_as_downloaded.rb +17 -0
  63. data/lib/nuncium/web_services/dm_info/message_envelope_download.rb +25 -0
  64. data/lib/nuncium/web_services/dm_info/request.rb +19 -0
  65. data/lib/nuncium/web_services/dm_info/response.rb +13 -0
  66. data/lib/nuncium/web_services/dm_info/verify_message.rb +17 -0
  67. data/lib/nuncium/web_services/dm_operations/authenticate_message.rb +17 -0
  68. data/lib/nuncium/web_services/dm_operations/create_message.rb +30 -0
  69. data/lib/nuncium/web_services/dm_operations/create_multiple_messages.rb +30 -0
  70. data/lib/nuncium/web_services/dm_operations/message_download.rb +25 -0
  71. data/lib/nuncium/web_services/dm_operations/ping.rb +15 -0
  72. data/lib/nuncium/web_services/dm_operations/request.rb +19 -0
  73. data/lib/nuncium/web_services/dm_operations/resign_isds_document.rb +17 -0
  74. data/lib/nuncium/web_services/dm_operations/response.rb +13 -0
  75. data/lib/nuncium/web_services/dm_operations/signed_message_download.rb +17 -0
  76. data/lib/nuncium/web_services/dm_operations/signed_sent_message_download.rb +17 -0
  77. data/nuncium.gemspec +47 -0
  78. data/wercker.yml +12 -0
  79. metadata +303 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e8a2f5ce5664a918df37610529347b82ff119e485f2095f99b724a03c25bff62
4
+ data.tar.gz: 13d2148502ad9356fb3fe789e5fc42e898b02dff7d3228ec0f72c282074b5995
5
+ SHA512:
6
+ metadata.gz: 730c534ea6486065ec484f56bdb4072d664a62154154c853ffab0acd9a464954517e77a462c6a3b51bf1bc8dbea14b21e9476596e98c6ce6a168e08baea43811
7
+ data.tar.gz: d0c2075453279a3b9e0397d850f7404ec7309207719b0952e08fd6470541af2e51bfe3d6c8c2a35eeb04615b504f0e400b0bbb01e732757fd31ffc066fedd093
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
12
+
13
+ bin/debug_console
14
+
15
+ .DS_Store
@@ -0,0 +1,49 @@
1
+ # Use this file to configure the Overcommit hooks you wish to use. This will
2
+ # extend the default configuration defined in:
3
+ # https://github.com/brigade/overcommit/blob/master/config/default.yml
4
+ #
5
+ # At the topmost level of this YAML file is a key representing type of hook
6
+ # being run (e.g. pre-commit, commit-msg, etc.). Within each type you can
7
+ # customize each hook, such as whether to only run it on certain files (via
8
+ # `include`), whether to only display output if it fails (via `quiet`), etc.
9
+ #
10
+ # For a complete list of hooks, see:
11
+ # https://github.com/brigade/overcommit/tree/master/lib/overcommit/hook
12
+ #
13
+ # For a complete list of options that you can use to customize hooks, see:
14
+ # https://github.com/brigade/overcommit#configuration
15
+ #
16
+ # Uncomment the following lines to make the configuration take effect.
17
+
18
+ #PreCommit:
19
+ # RuboCop:
20
+ # enabled: true
21
+ # on_warn: fail # Treat all warnings as failures
22
+ #
23
+ # TrailingWhitespace:
24
+ # enabled: true
25
+ # exclude:
26
+ # - '**/db/structure.sql' # Ignore trailing whitespace in generated files
27
+ #
28
+ #PostCheckout:
29
+ # ALL: # Special hook name that customizes all hooks of this type
30
+ # quiet: true # Change all post-checkout hooks to only display output on failure
31
+ #
32
+ # IndexTags:
33
+ # enabled: true # Generate a tags file with `ctags` each time HEAD changes
34
+ PreCommit:
35
+ Reek:
36
+ enabled: false
37
+
38
+ RuboCop:
39
+ enabled: true
40
+ command: ['bundle', 'exec', 'rubocop']
41
+
42
+ TrailingWhitespace:
43
+ enabled: true
44
+ exclude:
45
+ - 'spec/**/*'
46
+
47
+ BundleAudit:
48
+ enabled: true
49
+
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
@@ -0,0 +1,26 @@
1
+ AllCops:
2
+ Exclude:
3
+ - 'ruby_isds.gemspec'
4
+ - 'spec/**/*'
5
+ TargetRubyVersion: 2.3
6
+
7
+ Style/FrozenStringLiteralComment:
8
+ Enabled: false
9
+
10
+ Metrics/LineLength:
11
+ Max: 98
12
+
13
+ Style/Documentation:
14
+ Enabled: false
15
+
16
+ Naming/VariableName:
17
+ Enabled: false
18
+
19
+ Naming/UncommunicativeMethodParamName:
20
+ Enabled: false
21
+
22
+ Style/MultilineIfModifier:
23
+ Enabled: false
24
+
25
+ Layout/EmptyLineAfterGuardClause:
26
+ Enabled: false
@@ -0,0 +1 @@
1
+ isds
@@ -0,0 +1 @@
1
+ 2.5.3
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at andrej@antas.cz. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [http://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: http://contributor-covenant.org
74
+ [version]: http://contributor-covenant.org/version/1/4/
data/DOCS.md ADDED
@@ -0,0 +1,133 @@
1
+ # Compiled useful information around ISDS
2
+
3
+ ## Data Box
4
+
5
+ ### Types
6
+
7
+ Symbol | Number | Description
8
+ ------------|---------|------------
9
+ -- | 0 | ISDS system
10
+ OVM | 10 | Standard government (state or municipality or similar) office
11
+ OVM_NOTAR | 11 | Notary (stopped being used, replaced with OVM_PFO)
12
+ OVM_EXEKUT | 12 | Executor (stopped being used, replaced with OVM_PFO)
13
+ OVM_REQ | 13 | Subsidiary office with OVM status assigned on request (section 6 and 7 of act)
14
+ OVM_FO | 14 | Natural person with OVM status (without identification number)
15
+ OVM_PFO | 15 | Natural person in business with OVM status (e.g. notary or executor)
16
+ OVM_PO | 16 | Juridical person with OVM status (arisen from previously existing PO or PO_REQ)
17
+ PO | 20 | Standard commercial organization (in trade registry)
18
+ PO_ZAK | 21 | Other organization based on law (stopped being used, replaced with PO)
19
+ PO_REQ | 22 | Organization with box assigned on request
20
+ PFO | 30 | Person in business
21
+ PFO_ADVOK | 31 | Lawyer
22
+ PFO_DANPOR | 32 | Tax consultant
23
+ PFO_INSSPR | 33 | Administrator of insolvency
24
+ PFO_AUDITOR | 34 | Statutory auditor
25
+ FO | 40 | Standard person
26
+
27
+ ### States
28
+
29
+ Value | Description
30
+ -----------|-------------
31
+ 0 or empty | Error occurred while retrieving box state
32
+ 1 | Box is accessible.
33
+ 2 | Temporarily inaccessible (on owner's request)
34
+ 3 | Not yet active
35
+ 4 | Permanently inaccessible
36
+ 5 | Box has been removed
37
+ 6 | Temporarily inaccessible (by law)
38
+
39
+
40
+
41
+ ## Data Message
42
+
43
+ Missing `@dmType` attribute means noncommercial standard message.
44
+
45
+ ### Commercial messages
46
+
47
+ #### @dmType
48
+
49
+ Value | Meaning
50
+ -------|----------
51
+ I | Commercial message offering paying the response instead of the recipient (so called initiatory message)
52
+ K | Commercial message
53
+ O | Commercial message as a response paid by sender of initiatory message
54
+ V | Noncommercial standard message
55
+
56
+ ### Incomming or downloaded sent
57
+
58
+ #### @dmType
59
+
60
+ Value | Meaning
61
+ -------|---------
62
+ A | Subsidized initiatory commercial message which can pay a response
63
+ B | Subsidized initiatory commercial message which has already paid the response
64
+ C | Subsidized initiatory commercial message where the response offer has expired
65
+ D | Externally subsidized commercial messsage
66
+ E | Prepaid stamp
67
+ G | Paid by a sponsor
68
+ I | Initiatory commercial message which can pay a response
69
+ K | Commercial message paid by sender
70
+ O | Commercial message as a response paid by sended of initiatory message
71
+ X | Initiatory commercial message where the response offer has expired
72
+ Y | Initiatory commercial message which has already paid the response
73
+ Z | Limitedly subsidized commercial message
74
+
75
+ ### States
76
+
77
+ Value | Meaning
78
+ -------|-------------------------------------------------------------------------
79
+ 1 | Message has been put into ISDS
80
+ 2 | Message stamped by TSA
81
+ 3 | Message included viruses, infected document has been removed
82
+ 4 | Message delivered (dmDeliveryTime stored)
83
+ 5 | Message delivered through fiction (dmAcceptanceTime stored)
84
+ 6 | Message delivered by user log-in or user explicit request (in case of commercial message) (dmAcceptanceTime stored)
85
+ 7 | Message has been read by user
86
+ 8 | Message could not been delivered (e.g. recipient box has been made inaccessible meantime)
87
+ 9 | Message content deleted (thus can not be obtained on-line)
88
+ 10 | Message saved in long term storage (this is optional commercial service)
89
+
90
+ ### System messages
91
+
92
+ There exists special message type initiated by ISDS (i.e. from system, not
93
+ from other box). Such message has reserved from-box `aaaaaaa` (7 × `a`) value
94
+ and sender type `0` and it always contains a document of type HTML and
95
+ sometimes a document of type XML. The XML one provides structured reason of
96
+ sending the system message, the HTML one is a human-readable form. There are
97
+ following cases defined:
98
+
99
+ Case | Meaning
100
+ -------|--------
101
+ 1 | Outgoing message contained malicious code.
102
+ 2 | You, administrator, deleted other user.
103
+ 3 | Outgoing message could not been delivered because recipient box had been made inaccessible retrospectively.
104
+ 4 | Outgoing commercial message has been deleted before accepting it by the recipient.
105
+ 5 | User has been added to your box.
106
+ 6 | User permissions has been changed.
107
+ 7 | Box has been made temporary inaccessible on court desicion (e.g. user has been found eligable unresponsible).
108
+ 8 | Box has been made temporary inaccessible on box owner or administrator request.
109
+ 9 | Box has been made permanently inaccessible because organization does not exist anymore.
110
+ 10 | Box has been made permanently inaccessible because owner has died.
111
+ 11 | Personal data of box owner does not match central register.
112
+
113
+ The XML document has following structures:
114
+
115
+ SystemMessage – Attribute `type` is a number of case 1, or 4.
116
+ - dmID – message ID
117
+ - dbIDRecipient – recipient box ID
118
+
119
+ SystemMessage – Attribute `type` is a number of case 2, 5, or 6.
120
+ - userID – user ID
121
+ - userName – user proper name
122
+
123
+ SystemMessage – Attribute `type` is a number of case 3.
124
+ - dmID – undeliverable message ID
125
+ - dbIDRecipient – inaccessible recipient box ID
126
+ - dbName – recipent box name
127
+ - undelivDate – date when the box was made inaccessible
128
+ - dmAnnotation – message subject
129
+ - dmSenderRefNumber – sender's reference number of the message
130
+ - dmSenderIdent – sender's identity number of the message
131
+
132
+ SystemMessage – Attribute `type` is a number of case 7, 8, 9, 10, or 11.
133
+ - No elements are defined.
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in nuncium.gemspec
6
+ gemspec
@@ -0,0 +1,136 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ nuncium (0.13.0)
5
+ activesupport
6
+ nokogiri
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activesupport (6.0.0)
12
+ concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ i18n (>= 0.7, < 2)
14
+ minitest (~> 5.1)
15
+ tzinfo (~> 1.1)
16
+ zeitwerk (~> 2.1, >= 2.1.8)
17
+ addressable (2.7.0)
18
+ public_suffix (>= 2.0.2, < 5.0)
19
+ ast (2.4.0)
20
+ childprocess (3.0.0)
21
+ coderay (1.1.2)
22
+ concurrent-ruby (1.1.5)
23
+ crack (0.4.3)
24
+ safe_yaml (~> 1.0.0)
25
+ diff-lcs (1.3)
26
+ docile (1.3.2)
27
+ ffi (1.11.1)
28
+ formatador (0.2.5)
29
+ guard (2.15.1)
30
+ formatador (>= 0.2.4)
31
+ listen (>= 2.7, < 4.0)
32
+ lumberjack (>= 1.0.12, < 2.0)
33
+ nenv (~> 0.1)
34
+ notiffany (~> 0.0)
35
+ pry (>= 0.9.12)
36
+ shellany (~> 0.0)
37
+ thor (>= 0.18.1)
38
+ guard-compat (1.2.1)
39
+ guard-rspec (4.7.3)
40
+ guard (~> 2.1)
41
+ guard-compat (~> 1.1)
42
+ rspec (>= 2.99.0, < 4.0)
43
+ hashdiff (1.0.0)
44
+ i18n (1.7.0)
45
+ concurrent-ruby (~> 1.0)
46
+ iniparse (1.4.4)
47
+ jaro_winkler (1.5.3)
48
+ json (2.2.0)
49
+ listen (3.2.0)
50
+ rb-fsevent (~> 0.10, >= 0.10.3)
51
+ rb-inotify (~> 0.9, >= 0.9.10)
52
+ lumberjack (1.0.13)
53
+ method_source (0.9.2)
54
+ mini_portile2 (2.4.0)
55
+ minitest (5.12.2)
56
+ nenv (0.3.0)
57
+ nokogiri (1.10.4)
58
+ mini_portile2 (~> 2.4.0)
59
+ notiffany (0.1.3)
60
+ nenv (~> 0.1)
61
+ shellany (~> 0.0)
62
+ overcommit (0.51.0)
63
+ childprocess (>= 0.6.3, < 4)
64
+ iniparse (~> 1.4)
65
+ parallel (1.17.0)
66
+ parser (2.6.5.0)
67
+ ast (~> 2.4.0)
68
+ pry (0.12.2)
69
+ coderay (~> 1.1.0)
70
+ method_source (~> 0.9.0)
71
+ public_suffix (4.0.1)
72
+ rainbow (3.0.0)
73
+ rake (10.5.0)
74
+ rb-fsevent (0.10.3)
75
+ rb-inotify (0.10.0)
76
+ ffi (~> 1.0)
77
+ rspec (3.8.0)
78
+ rspec-core (~> 3.8.0)
79
+ rspec-expectations (~> 3.8.0)
80
+ rspec-mocks (~> 3.8.0)
81
+ rspec-core (3.8.2)
82
+ rspec-support (~> 3.8.0)
83
+ rspec-expectations (3.8.5)
84
+ diff-lcs (>= 1.2.0, < 2.0)
85
+ rspec-support (~> 3.8.0)
86
+ rspec-mocks (3.8.2)
87
+ diff-lcs (>= 1.2.0, < 2.0)
88
+ rspec-support (~> 3.8.0)
89
+ rspec-support (3.8.3)
90
+ rubocop (0.75.0)
91
+ jaro_winkler (~> 1.5.1)
92
+ parallel (~> 1.10)
93
+ parser (>= 2.6)
94
+ rainbow (>= 2.2.2, < 4.0)
95
+ ruby-progressbar (~> 1.7)
96
+ unicode-display_width (>= 1.4.0, < 1.7)
97
+ ruby-progressbar (1.10.1)
98
+ safe_yaml (1.0.5)
99
+ shellany (0.0.1)
100
+ simplecov (0.17.1)
101
+ docile (~> 1.1)
102
+ json (>= 1.8, < 3)
103
+ simplecov-html (~> 0.10.0)
104
+ simplecov-html (0.10.2)
105
+ thor (0.20.3)
106
+ thread_safe (0.3.6)
107
+ timecop (0.9.1)
108
+ tzinfo (1.2.5)
109
+ thread_safe (~> 0.1)
110
+ unicode-display_width (1.6.0)
111
+ vcr (3.0.3)
112
+ webmock (3.7.6)
113
+ addressable (>= 2.3.6)
114
+ crack (>= 0.3.2)
115
+ hashdiff (>= 0.4.0, < 2.0.0)
116
+ zeitwerk (2.1.10)
117
+
118
+ PLATFORMS
119
+ ruby
120
+
121
+ DEPENDENCIES
122
+ bundler
123
+ guard-rspec
124
+ nuncium!
125
+ overcommit
126
+ pry
127
+ rake (~> 10.0)
128
+ rspec (~> 3.0)
129
+ rubocop (~> 0.49)
130
+ simplecov (~> 0.14)
131
+ timecop
132
+ vcr (~> 3.0)
133
+ webmock (~> 3.0)
134
+
135
+ BUNDLED WITH
136
+ 1.17.3