neverbounce-api 1.0.0

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 (108) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +8 -0
  3. data/.gitignore +21 -0
  4. data/.rspec +4 -0
  5. data/.rubocop.yml +1161 -0
  6. data/.travis.yml +27 -0
  7. data/.yardopts +2 -0
  8. data/Gemfile +17 -0
  9. data/Gemfile.lock +48 -0
  10. data/LICENSE +9 -0
  11. data/README.md +235 -0
  12. data/lib/never_bounce/api/client.rb +259 -0
  13. data/lib/never_bounce/api/error.rb +21 -0
  14. data/lib/never_bounce/api/feature/basic_initialize.rb +20 -0
  15. data/lib/never_bounce/api/feature/eigencache.rb +48 -0
  16. data/lib/never_bounce/api/feature/igetset.rb +41 -0
  17. data/lib/never_bounce/api/feature/oattrs.rb +100 -0
  18. data/lib/never_bounce/api/feature/require_attr.rb +27 -0
  19. data/lib/never_bounce/api/request/account_info.rb +29 -0
  20. data/lib/never_bounce/api/request/base.rb +102 -0
  21. data/lib/never_bounce/api/request/jobs_create.rb +90 -0
  22. data/lib/never_bounce/api/request/jobs_delete.rb +34 -0
  23. data/lib/never_bounce/api/request/jobs_download.rb +34 -0
  24. data/lib/never_bounce/api/request/jobs_parse.rb +55 -0
  25. data/lib/never_bounce/api/request/jobs_results.rb +53 -0
  26. data/lib/never_bounce/api/request/jobs_search.rb +57 -0
  27. data/lib/never_bounce/api/request/jobs_start.rb +47 -0
  28. data/lib/never_bounce/api/request/jobs_status.rb +37 -0
  29. data/lib/never_bounce/api/request/single_check.rb +67 -0
  30. data/lib/never_bounce/api/response/account_info.rb +39 -0
  31. data/lib/never_bounce/api/response/account_info/job_counts.rb +26 -0
  32. data/lib/never_bounce/api/response/address_info.rb +43 -0
  33. data/lib/never_bounce/api/response/base.rb +15 -0
  34. data/lib/never_bounce/api/response/container.rb +126 -0
  35. data/lib/never_bounce/api/response/credits_info/base.rb +30 -0
  36. data/lib/never_bounce/api/response/credits_info/monthly.rb +16 -0
  37. data/lib/never_bounce/api/response/credits_info/paid.rb +20 -0
  38. data/lib/never_bounce/api/response/error_message.rb +17 -0
  39. data/lib/never_bounce/api/response/feature/job_status_fields.rb +68 -0
  40. data/lib/never_bounce/api/response/feature/job_status_fields/total.rb +46 -0
  41. data/lib/never_bounce/api/response/jobs_create.rb +10 -0
  42. data/lib/never_bounce/api/response/jobs_delete.rb +8 -0
  43. data/lib/never_bounce/api/response/jobs_download.rb +19 -0
  44. data/lib/never_bounce/api/response/jobs_parse.rb +10 -0
  45. data/lib/never_bounce/api/response/jobs_results.rb +34 -0
  46. data/lib/never_bounce/api/response/jobs_results/item.rb +65 -0
  47. data/lib/never_bounce/api/response/jobs_results/query.rb +20 -0
  48. data/lib/never_bounce/api/response/jobs_search.rb +33 -0
  49. data/lib/never_bounce/api/response/jobs_search/query.rb +16 -0
  50. data/lib/never_bounce/api/response/jobs_search/result.rb +13 -0
  51. data/lib/never_bounce/api/response/jobs_start.rb +10 -0
  52. data/lib/never_bounce/api/response/jobs_status.rb +11 -0
  53. data/lib/never_bounce/api/response/message.rb +32 -0
  54. data/lib/never_bounce/api/response/single_check.rb +68 -0
  55. data/lib/never_bounce/api/response/status_message.rb +17 -0
  56. data/lib/never_bounce/api/response/success_message.rb +12 -0
  57. data/lib/never_bounce/api/session.rb +141 -0
  58. data/lib/never_bounce/api/version.rb +4 -0
  59. data/lib/neverbounce-api.rb +4 -0
  60. data/lib/neverbounce.rb +3 -0
  61. data/neverbounce-api.gemspec +20 -0
  62. data/spec/lib/never_bounce/api/client_spec.rb +199 -0
  63. data/spec/lib/never_bounce/api/feature/basic_initialize_spec.rb +25 -0
  64. data/spec/lib/never_bounce/api/feature/eigencache_spec.rb +28 -0
  65. data/spec/lib/never_bounce/api/feature/igetset_spec.rb +45 -0
  66. data/spec/lib/never_bounce/api/feature/oattrs_spec.rb +72 -0
  67. data/spec/lib/never_bounce/api/feature/require_attr_spec.rb +25 -0
  68. data/spec/lib/never_bounce/api/request/account_info_spec.rb +29 -0
  69. data/spec/lib/never_bounce/api/request/base_spec.rb +6 -0
  70. data/spec/lib/never_bounce/api/request/jobs_create_spec.rb +89 -0
  71. data/spec/lib/never_bounce/api/request/jobs_delete_spec.rb +31 -0
  72. data/spec/lib/never_bounce/api/request/jobs_download_spec.rb +31 -0
  73. data/spec/lib/never_bounce/api/request/jobs_parse_spec.rb +44 -0
  74. data/spec/lib/never_bounce/api/request/jobs_results_spec.rb +42 -0
  75. data/spec/lib/never_bounce/api/request/jobs_search_spec.rb +40 -0
  76. data/spec/lib/never_bounce/api/request/jobs_start_spec.rb +44 -0
  77. data/spec/lib/never_bounce/api/request/jobs_status_spec.rb +31 -0
  78. data/spec/lib/never_bounce/api/request/single_check_spec.rb +44 -0
  79. data/spec/lib/never_bounce/api/response/account_info/job_counts_spec.rb +7 -0
  80. data/spec/lib/never_bounce/api/response/account_info_spec.rb +9 -0
  81. data/spec/lib/never_bounce/api/response/address_info_spec.rb +7 -0
  82. data/spec/lib/never_bounce/api/response/base_spec.rb +6 -0
  83. data/spec/lib/never_bounce/api/response/container_spec.rb +142 -0
  84. data/spec/lib/never_bounce/api/response/credits_info/base_spec.rb +31 -0
  85. data/spec/lib/never_bounce/api/response/credits_info/monthly_spec.rb +11 -0
  86. data/spec/lib/never_bounce/api/response/credits_info/paid_spec.rb +11 -0
  87. data/spec/lib/never_bounce/api/response/feature/job_status_fields/total_spec.rb +7 -0
  88. data/spec/lib/never_bounce/api/response/feature/job_status_fields_spec.rb +42 -0
  89. data/spec/lib/never_bounce/api/response/jobs_create_spec.rb +7 -0
  90. data/spec/lib/never_bounce/api/response/jobs_delete_spec.rb +7 -0
  91. data/spec/lib/never_bounce/api/response/jobs_download_spec.rb +7 -0
  92. data/spec/lib/never_bounce/api/response/jobs_parse_spec.rb +7 -0
  93. data/spec/lib/never_bounce/api/response/jobs_results/jobs_results_item_spec.rb +7 -0
  94. data/spec/lib/never_bounce/api/response/jobs_results/jobs_results_query_spec.rb +7 -0
  95. data/spec/lib/never_bounce/api/response/jobs_results_spec.rb +7 -0
  96. data/spec/lib/never_bounce/api/response/jobs_search/jobs_search_query_spec.rb +7 -0
  97. data/spec/lib/never_bounce/api/response/jobs_search/jobs_search_result_spec.rb +7 -0
  98. data/spec/lib/never_bounce/api/response/jobs_search_spec.rb +7 -0
  99. data/spec/lib/never_bounce/api/response/jobs_start_spec.rb +7 -0
  100. data/spec/lib/never_bounce/api/response/jobs_status_spec.rb +7 -0
  101. data/spec/lib/never_bounce/api/response/single_check_spec.rb +7 -0
  102. data/spec/lib/never_bounce/api/response/spec_helper.rb +8 -0
  103. data/spec/lib/never_bounce/api/session_spec.rb +140 -0
  104. data/spec/lib/never_bounce/api_spec.rb +8 -0
  105. data/spec/spec_helper.rb +49 -0
  106. data/spec/spec_support/include_dir_context.rb +22 -0
  107. data/spec/spec_support/simplecov.rb +18 -0
  108. metadata +210 -0
@@ -0,0 +1,34 @@
1
+
2
+ require "never_bounce/api/response/jobs_delete"
3
+
4
+ require_relative "base"
5
+
6
+ module NeverBounce; module API; module Request
7
+ class JobsDelete < Base
8
+ # @return [Integer]
9
+ attr_accessor :job_id
10
+
11
+ # @return [Symbol]
12
+ def self.http_method
13
+ :post
14
+ end
15
+
16
+ # @return [String]
17
+ def self.path
18
+ "jobs/delete"
19
+ end
20
+
21
+ # @return [Response::Jobs::Delete]
22
+ def self.response_klass
23
+ Response::JobsDelete
24
+ end
25
+
26
+ # @return [Hash]
27
+ def to_h
28
+ {
29
+ job_id: require_attr(:job_id),
30
+ key: require_attr(:api_key),
31
+ }
32
+ end
33
+ end
34
+ end; end; end
@@ -0,0 +1,34 @@
1
+
2
+ require "never_bounce/api/response/jobs_download"
3
+
4
+ require_relative "base"
5
+
6
+ module NeverBounce; module API; module Request
7
+ class JobsDownload < Base
8
+ # @return [Integer]
9
+ attr_accessor :job_id
10
+
11
+ # @return [Symbol]
12
+ def self.http_method
13
+ :get
14
+ end
15
+
16
+ # @return [String]
17
+ def self.path
18
+ "jobs/download"
19
+ end
20
+
21
+ # @return [Response::JobsDownload]
22
+ def self.response_klass
23
+ Response::JobsDownload
24
+ end
25
+
26
+ # @return [Hash]
27
+ def to_h
28
+ {
29
+ job_id: require_attr(:job_id),
30
+ key: require_attr(:api_key),
31
+ }
32
+ end
33
+ end
34
+ end; end; end
@@ -0,0 +1,55 @@
1
+
2
+ require "never_bounce/api/response/jobs_parse"
3
+
4
+ require_relative "base"
5
+
6
+ module NeverBounce; module API; module Request
7
+ class JobsParse < Base
8
+ # @return [Integer]
9
+ attr_accessor :job_id
10
+
11
+ # @return [Boolean]
12
+ attr_accessor :auto_start
13
+
14
+ # @return [Symbol]
15
+ def self.http_method
16
+ :post
17
+ end
18
+
19
+ # @return [String]
20
+ def self.path
21
+ "jobs/parse"
22
+ end
23
+
24
+ # @return [Response::JobsParse]
25
+ def self.response_klass
26
+ Response::JobsParse
27
+ end
28
+
29
+ # Return a ready-to-merge mode attributes hash.
30
+ # @return [Hash]
31
+ def mode_h
32
+ @mode_h ||= {}.tap do |_|
33
+ unless (v = auto_start).nil?
34
+ _[:auto_start] = v
35
+ end
36
+ end
37
+ end
38
+
39
+ # @return [Hash]
40
+ def to_h
41
+ {
42
+ job_id: require_attr(:job_id),
43
+ key: require_attr(:api_key),
44
+ }.merge(mode_h)
45
+ end
46
+ end
47
+ end; end; end
48
+
49
+ #
50
+ # Implementation notes:
51
+ #
52
+ # * A convention for all classes working with mode attributes like `auto_start`.
53
+ # * `to_h[:auto_start]` is present if value is not `nil`.
54
+ # * Passing `request.auto_start = nil` from the outside doesn't affect `to_h` result.
55
+ # Thus `nil` value renders the request to use server defaults.
@@ -0,0 +1,53 @@
1
+
2
+ require "never_bounce/api/response/jobs_results"
3
+
4
+ require_relative "base"
5
+
6
+ module NeverBounce; module API; module Request
7
+ class JobsResults < Base
8
+ # @return [Integer]
9
+ attr_accessor :job_id
10
+
11
+ # @return [Integer]
12
+ attr_accessor :page
13
+
14
+ # @return [Integer]
15
+ attr_accessor :per_page
16
+
17
+ # @return [Symbol]
18
+ def self.http_method
19
+ :get
20
+ end
21
+
22
+ # @return [String]
23
+ def self.path
24
+ "jobs/results"
25
+ end
26
+
27
+ # @return [Response::JobsResults]
28
+ def self.response_klass
29
+ Response::JobsResults
30
+ end
31
+
32
+ # @return [Hash]
33
+ def mode_h
34
+ @mode_h ||= {}.tap do |_|
35
+ unless (v = per_page).nil?
36
+ _[:items_per_page] = v
37
+ end
38
+
39
+ unless (v = page).nil?
40
+ _[:page] = v
41
+ end
42
+ end
43
+ end
44
+
45
+ # @return [Hash]
46
+ def to_h
47
+ {
48
+ job_id: require_attr(:job_id),
49
+ key: require_attr(:api_key),
50
+ }.merge(mode_h)
51
+ end
52
+ end
53
+ end; end; end
@@ -0,0 +1,57 @@
1
+
2
+ require "never_bounce/api/response/jobs_search"
3
+
4
+ require_relative "base"
5
+
6
+ module NeverBounce; module API; module Request
7
+ class JobsSearch < Base
8
+ # @return [Integer]
9
+ attr_accessor :job_id
10
+
11
+ # @return [Integer]
12
+ attr_accessor :page
13
+
14
+ # @return [Integer]
15
+ attr_accessor :per_page
16
+
17
+ # @return [Symbol]
18
+ def self.http_method
19
+ :get
20
+ end
21
+
22
+ # @return [String]
23
+ def self.path
24
+ "jobs/search"
25
+ end
26
+
27
+ # @return [Response::JobsSearch]
28
+ def self.response_klass
29
+ Response::JobsSearch
30
+ end
31
+
32
+ # Return a ready-to-merge mode attributes hash.
33
+ # @return [Hash]
34
+ def mode_h
35
+ @mode_h ||= {}.tap do |_|
36
+ unless (v = job_id).nil?
37
+ _[:job_id] = v
38
+ end
39
+
40
+ unless (v = page).nil?
41
+ _[:page] = v
42
+ end
43
+
44
+ unless (v = per_page).nil?
45
+ _[:items_per_page] = v
46
+ end
47
+ end
48
+ end
49
+
50
+ # @return [Hash]
51
+ def to_h
52
+ {
53
+ key: require_attr(:api_key),
54
+ }.merge(mode_h)
55
+ end
56
+ end
57
+ end; end; end
@@ -0,0 +1,47 @@
1
+
2
+ require "never_bounce/api/response/jobs_start"
3
+
4
+ require_relative "base"
5
+
6
+ module NeverBounce; module API; module Request
7
+ class JobsStart < Base
8
+ # @return [Integer]
9
+ attr_accessor :job_id
10
+
11
+ # @return [Boolean]
12
+ attr_accessor :run_sample
13
+
14
+ # @return [Symbol]
15
+ def self.http_method
16
+ :post
17
+ end
18
+
19
+ # @return [String]
20
+ def self.path
21
+ "jobs/start"
22
+ end
23
+
24
+ # @return [Response::JobsStart]
25
+ def self.response_klass
26
+ Response::JobsStart
27
+ end
28
+
29
+ # Return a ready-to-merge mode attributes hash.
30
+ # @return [Hash]
31
+ def mode_h
32
+ @mode_h ||= {}.tap do |_|
33
+ unless (v = run_sample).nil?
34
+ _[:run_sample] = v
35
+ end
36
+ end
37
+ end
38
+
39
+ # @return [Hash]
40
+ def to_h
41
+ {
42
+ job_id: require_attr(:job_id),
43
+ key: require_attr(:api_key),
44
+ }.merge(mode_h)
45
+ end
46
+ end
47
+ end; end; end
@@ -0,0 +1,37 @@
1
+
2
+ require "never_bounce/api/response/jobs_status"
3
+
4
+ require_relative "base"
5
+
6
+ module NeverBounce; module API; module Request
7
+ class JobsStatus < Base
8
+ # @return [Integer]
9
+ attr_accessor :job_id
10
+
11
+ # @return [Boolean]
12
+ attr_accessor :auto_start
13
+
14
+ # @return [Symbol]
15
+ def self.http_method
16
+ :get
17
+ end
18
+
19
+ # @return [String]
20
+ def self.path
21
+ "jobs/status"
22
+ end
23
+
24
+ # @return [Response::JobsStatus]
25
+ def self.response_klass
26
+ Response::JobsStatus
27
+ end
28
+
29
+ # @return [Hash]
30
+ def to_h
31
+ {
32
+ job_id: require_attr(:job_id),
33
+ key: require_attr(:api_key),
34
+ }
35
+ end
36
+ end
37
+ end; end; end
@@ -0,0 +1,67 @@
1
+
2
+ require "never_bounce/api/response/single_check"
3
+
4
+ require_relative "base"
5
+
6
+ module NeverBounce; module API; module Request
7
+ class SingleCheck < Base
8
+ # @return [String]
9
+ attr_accessor :email
10
+
11
+ # @return [Boolean]
12
+ attr_accessor :address_info
13
+
14
+ # @return [Boolean]
15
+ attr_accessor :credits_info
16
+
17
+ # @return [Integer]
18
+ attr_accessor :timeout
19
+
20
+ # @return [Symbol]
21
+ def self.http_method
22
+ :get
23
+ end
24
+
25
+ # @return [String]
26
+ def self.path
27
+ "single/check"
28
+ end
29
+
30
+ # @return [Response::SingleCheck]
31
+ def self.response_klass
32
+ Response::SingleCheck
33
+ end
34
+
35
+ # Return a ready-to-merge mode attributes hash.
36
+ # @return [Hash]
37
+ def mode_h
38
+ @mode_h ||= {}.tap do |_|
39
+ unless (v = address_info).nil?
40
+ _[:address_info] = v
41
+ end
42
+
43
+ unless (v = credits_info).nil?
44
+ _[:credits_info] = v
45
+ end
46
+
47
+ unless (v = timeout).nil?
48
+ _[:timeout] = v
49
+ end
50
+ end
51
+ end
52
+
53
+ # @return [Hash]
54
+ def to_h
55
+ {
56
+ email: require_attr(:email),
57
+ key: require_attr(:api_key),
58
+ }.merge(mode_h)
59
+ end
60
+ end
61
+ end; end; end
62
+
63
+ #
64
+ # Implementation notes:
65
+ #
66
+ # * `address_info` and `credits_info` have ugly names for bools, but I keep them for consistency
67
+ # with the server protocol. We've got the docs stating their type, too.
@@ -0,0 +1,39 @@
1
+
2
+ require "never_bounce/api/response/credits_info/monthly"
3
+ require "never_bounce/api/response/credits_info/paid"
4
+
5
+ require_relative "success_message"
6
+
7
+ module NeverBounce; module API; module Response
8
+ class AccountInfo < SuccessMessage
9
+ require_relative "account_info/job_counts"
10
+
11
+ # @!attribute [rw]
12
+ oattr :credits_info, :writer
13
+
14
+ # @!attribute [rw]
15
+ oattr :job_counts, :writer
16
+
17
+ # @return [CreditsInfo::Monthly]
18
+ # @return [CreditsInfo::Paid]
19
+ def credits_info
20
+ @credits_info ||= begin
21
+ h = body_hash.fetch("credits_info")
22
+ klass = if h.has_key? "monthly_api_usage"
23
+ CreditsInfo::Monthly
24
+ elsif h.has_key? "paid_credits_remaining"
25
+ CreditsInfo::Paid
26
+ else
27
+ raise "Unknown `credits_info`: #{h.inspect}"
28
+ end
29
+
30
+ klass.new(h)
31
+ end
32
+ end
33
+
34
+ # @return [JobCounts]
35
+ def job_counts
36
+ @job_counts ||= JobCounts.new(body_hash: body_hash.fetch("job_counts"))
37
+ end
38
+ end
39
+ end; end; end
@@ -0,0 +1,26 @@
1
+
2
+ require_relative "../account_info"
3
+
4
+ module NeverBounce; module API; module Response; class AccountInfo
5
+ class JobCounts < Container
6
+ # @!attribute completed
7
+ # Number of completed jobs.
8
+ # @return [Integer]
9
+ oattr :completed, :scalar, type: :integer
10
+
11
+ # @!attribute processing
12
+ # Number of jobs in processing.
13
+ # @return [Integer]
14
+ oattr :processing, :scalar, type: :integer #:nodoc:
15
+
16
+ # @!attribute queued
17
+ # Number of queued jobs.
18
+ # @return [Integer]
19
+ oattr :queued, :scalar, type: :integer
20
+
21
+ # @!attribute under_review
22
+ # Number of items under review.
23
+ # @return [Integer]
24
+ oattr :under_review, :scalar, type: :integer
25
+ end
26
+ end; end; end; end