telnyx 0.0.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 (69) hide show
  1. checksums.yaml +7 -0
  2. data/.gitattributes +4 -0
  3. data/.github/ISSUE_TEMPLATE.md +5 -0
  4. data/.gitignore +9 -0
  5. data/.rubocop.yml +32 -0
  6. data/.rubocop_todo.yml +50 -0
  7. data/.travis.yml +42 -0
  8. data/CHANGELOG.md +2 -0
  9. data/CONTRIBUTORS +0 -0
  10. data/Gemfile +40 -0
  11. data/Guardfile +8 -0
  12. data/LICENSE +22 -0
  13. data/README.md +173 -0
  14. data/Rakefile +28 -0
  15. data/VERSION +1 -0
  16. data/bin/telnyx-console +16 -0
  17. data/lib/telnyx.rb +151 -0
  18. data/lib/telnyx/api_operations/create.rb +12 -0
  19. data/lib/telnyx/api_operations/delete.rb +13 -0
  20. data/lib/telnyx/api_operations/list.rb +29 -0
  21. data/lib/telnyx/api_operations/nested_resource.rb +63 -0
  22. data/lib/telnyx/api_operations/request.rb +57 -0
  23. data/lib/telnyx/api_operations/save.rb +103 -0
  24. data/lib/telnyx/api_resource.rb +69 -0
  25. data/lib/telnyx/available_phone_number.rb +9 -0
  26. data/lib/telnyx/errors.rb +166 -0
  27. data/lib/telnyx/event.rb +9 -0
  28. data/lib/telnyx/list_object.rb +155 -0
  29. data/lib/telnyx/message.rb +9 -0
  30. data/lib/telnyx/messaging_phone_number.rb +10 -0
  31. data/lib/telnyx/messaging_profile.rb +32 -0
  32. data/lib/telnyx/messaging_sender_id.rb +12 -0
  33. data/lib/telnyx/messaging_short_code.rb +10 -0
  34. data/lib/telnyx/number_order.rb +11 -0
  35. data/lib/telnyx/number_reservation.rb +11 -0
  36. data/lib/telnyx/public_key.rb +7 -0
  37. data/lib/telnyx/singleton_api_resource.rb +24 -0
  38. data/lib/telnyx/telnyx_client.rb +545 -0
  39. data/lib/telnyx/telnyx_object.rb +521 -0
  40. data/lib/telnyx/telnyx_response.rb +50 -0
  41. data/lib/telnyx/util.rb +328 -0
  42. data/lib/telnyx/version.rb +5 -0
  43. data/lib/telnyx/webhook.rb +66 -0
  44. data/telnyx.gemspec +25 -0
  45. data/test/api_stub_helpers.rb +1 -0
  46. data/test/openapi/README.md +9 -0
  47. data/test/telnyx/api_operations_test.rb +85 -0
  48. data/test/telnyx/api_resource_test.rb +293 -0
  49. data/test/telnyx/available_phone_number_test.rb +14 -0
  50. data/test/telnyx/errors_test.rb +23 -0
  51. data/test/telnyx/list_object_test.rb +244 -0
  52. data/test/telnyx/message_test.rb +19 -0
  53. data/test/telnyx/messaging_phone_number_test.rb +33 -0
  54. data/test/telnyx/messaging_profile_test.rb +70 -0
  55. data/test/telnyx/messaging_sender_id_test.rb +46 -0
  56. data/test/telnyx/messaging_short_code_test.rb +33 -0
  57. data/test/telnyx/number_order_test.rb +39 -0
  58. data/test/telnyx/number_reservation_test.rb +12 -0
  59. data/test/telnyx/public_key_test.rb +13 -0
  60. data/test/telnyx/telnyx_client_test.rb +631 -0
  61. data/test/telnyx/telnyx_object_test.rb +497 -0
  62. data/test/telnyx/telnyx_response_test.rb +49 -0
  63. data/test/telnyx/util_test.rb +380 -0
  64. data/test/telnyx/webhook_test.rb +108 -0
  65. data/test/telnyx_mock.rb +78 -0
  66. data/test/telnyx_test.rb +40 -0
  67. data/test/test_data.rb +149 -0
  68. data/test/test_helper.rb +73 -0
  69. metadata +162 -0
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Telnyx
4
+ class TelnyxMock
5
+ include Singleton
6
+
7
+ PATH_SPEC = "#{::File.dirname(__FILE__)}/openapi/spec3.json".freeze
8
+ PATH_FIXTURES = "#{::File.dirname(__FILE__)}/openapi/fixtures3.json".freeze
9
+
10
+ @pid = nil
11
+ @port = -1
12
+
13
+ # Starts telnyx-mock, if necessary. Returns the port on which telnyx-mock is listening.
14
+ def self.start
15
+ unless ::File.exist?(PATH_SPEC)
16
+ port = ENV["TELNYX_MOCK_PORT"] || 12_111
17
+ puts("No custom spec file found, assuming telnyx-mock is already running on port #{port}")
18
+ return port
19
+ end
20
+
21
+ unless @pid.nil?
22
+ puts("telnyx-mock already running on port #{@port}")
23
+ return @port
24
+ end
25
+
26
+ @port = find_available_port
27
+
28
+ puts("Starting telnyx-mock on port #{@port}...")
29
+
30
+ @stdout, @child_stdout = ::IO.pipe
31
+ @stderr, @child_stderr = ::IO.pipe
32
+
33
+ @pid = ::Process.spawn(
34
+ ["telnyx-mock", "telnyx-mock"],
35
+ "-http-port",
36
+ @port.to_s,
37
+ "-spec",
38
+ PATH_SPEC,
39
+ "-fixtures",
40
+ PATH_FIXTURES,
41
+ out: @child_stdout,
42
+ err: @child_stderr
43
+ )
44
+
45
+ [@child_stdout, @child_stderr].each(&:close)
46
+
47
+ sleep 1
48
+
49
+ status = (::Process.wait2(@pid, ::Process::WNOHANG) || []).last
50
+ if status.nil?
51
+ puts("Started telnyx-mock, PID = #{@pid}")
52
+ else
53
+ abort("telnyx-mock terminated early: #{status}")
54
+ end
55
+
56
+ @port
57
+ end
58
+
59
+ # Stops telnyx-mock, if necessary.
60
+ def self.stop
61
+ return if @pid.nil?
62
+ puts("Stopping telnyx-mock...")
63
+ ::Process.kill(:SIGTERM, @pid)
64
+ ::Process.waitpid2(@pid)
65
+ @pid = nil
66
+ @port = -1
67
+ puts("Stopped telnyx-mock")
68
+ end
69
+
70
+ # Finds and returns an available TCP port
71
+ private_class_method def self.find_available_port
72
+ server = TCPServer.new("localhost", 0)
73
+ port = server.addr[1]
74
+ server.close
75
+ port
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require ::File.expand_path("../test_helper", __FILE__)
4
+
5
+ class TelnyxTest < Test::Unit::TestCase
6
+ should "allow app_info to be configured" do
7
+ begin
8
+ old = Telnyx.app_info
9
+ Telnyx.set_app_info(
10
+ "MyAwesomePlugin",
11
+ partner_id: "partner_1234",
12
+ url: "https://myawesomeplugin.info",
13
+ version: "1.2.34"
14
+ )
15
+ assert_equal({
16
+ name: "MyAwesomePlugin",
17
+ partner_id: "partner_1234",
18
+ url: "https://myawesomeplugin.info",
19
+ version: "1.2.34",
20
+ }, Telnyx.app_info)
21
+ ensure
22
+ Telnyx.app_info = old
23
+ end
24
+ end
25
+
26
+ should "allow max_network_retries to be configured" do
27
+ begin
28
+ old = Telnyx.max_network_retries
29
+ Telnyx.max_network_retries = 99
30
+ assert_equal 99, Telnyx.max_network_retries
31
+ ensure
32
+ Telnyx.max_network_retries = old
33
+ end
34
+ end
35
+
36
+ should "have default open and read timeouts" do
37
+ assert_equal Telnyx.open_timeout, 30
38
+ assert_equal Telnyx.read_timeout, 80
39
+ end
40
+ end
data/test/test_data.rb ADDED
@@ -0,0 +1,149 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Telnyx
4
+ module TestData
5
+ def make_error(code, title, detail)
6
+ {
7
+ errors: [
8
+ {
9
+ code: code,
10
+ title: title,
11
+ detail: detail,
12
+ },
13
+ ],
14
+ }
15
+ end
16
+
17
+ def make_invalid_api_key_error
18
+ {
19
+ errors: [
20
+ {
21
+ title: "Authentication failed",
22
+ detail: "The required authentication headers were either invalid or not included in the request.",
23
+ code: "10009",
24
+ },
25
+ ],
26
+ }
27
+ end
28
+
29
+ def make_invalid_id_error
30
+ {
31
+ errors: [
32
+ {
33
+ code: "10006",
34
+ title: "Invalid ID",
35
+ detail: "The resource ID provided was invalid.",
36
+ },
37
+ ],
38
+ }
39
+ end
40
+
41
+ def make_authentication_failed_error
42
+ {
43
+ errors: [
44
+ {
45
+ title: "Authentication failed",
46
+ detail: "The required authentication headers were either invalid or not included in the request.",
47
+ code: "10009",
48
+ },
49
+ ],
50
+ }
51
+ end
52
+
53
+ def make_authorization_failed_error
54
+ {
55
+ errors: [
56
+ {
57
+ title: "Authorization failed",
58
+ detail: "You do not have permission to perform the requested action on the specified resource or resources.",
59
+ code: "10010",
60
+ },
61
+ ],
62
+ }
63
+ end
64
+
65
+ def make_resource_not_found_error
66
+ {
67
+ errors: [
68
+ {
69
+ title: "Resource not found",
70
+ detail: "The requested resource or URL could not be found.",
71
+ code: "10005",
72
+ },
73
+ ],
74
+ }
75
+ end
76
+
77
+ def make_method_not_supported_error
78
+ {
79
+ errors: [
80
+ {
81
+ title: "Method not allowed",
82
+ detail: "The URL is valid, but the method is not allowed.",
83
+ code: "10030",
84
+ },
85
+ ],
86
+ }
87
+ end
88
+
89
+ def make_rate_limit_error
90
+ {
91
+ errors: [
92
+ {
93
+ title: "Too many requests",
94
+ detail: "You have exceeded the maximum number of allowed requests.",
95
+ code: "10011",
96
+ },
97
+ ],
98
+ }
99
+ end
100
+
101
+ def make_timeout_error
102
+ {
103
+ errors: [
104
+ {
105
+ title: "Request timeout",
106
+ detail: "The request timed out.",
107
+ code: "10008",
108
+ },
109
+ ],
110
+ }
111
+ end
112
+
113
+ def make_parameters_error
114
+ {
115
+ errors: [
116
+ {
117
+ title: "Missing required parameter",
118
+ detail: "A required parameter was missing.",
119
+ code: "10004",
120
+ },
121
+ ],
122
+ }
123
+ end
124
+
125
+ def make_service_unavailable_error
126
+ {
127
+ errors: [
128
+ {
129
+ title: "Service unavailable",
130
+ detail: "The service is not available.",
131
+ code: "",
132
+ },
133
+ ],
134
+ }
135
+ end
136
+
137
+ def make_api_error
138
+ {
139
+ errors: [
140
+ {
141
+ title: "Unexpected error",
142
+ detail: "An unexpected error occured.",
143
+ code: "10007",
144
+ },
145
+ ],
146
+ }
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "coveralls"
4
+ Coveralls.wear!("test_frameworks")
5
+
6
+ require "telnyx"
7
+ require "test/unit"
8
+ require "mocha/setup"
9
+ require "stringio"
10
+ require "shoulda/context"
11
+ require "timecop"
12
+ require "webmock/test_unit"
13
+
14
+ PROJECT_ROOT = ::File.expand_path("../../", __FILE__)
15
+
16
+ require ::File.expand_path("../test_data", __FILE__)
17
+ require ::File.expand_path("../telnyx_mock", __FILE__)
18
+
19
+ # If changing this number, please also change it in `.travis.yml`.
20
+ MOCK_MINIMUM_VERSION = "0.40.1".freeze
21
+ MOCK_PORT = Telnyx::TelnyxMock.start
22
+
23
+ # Disable all real network connections except those that are outgoing to
24
+ # telnyx-mock.
25
+ WebMock.disable_net_connect!(allow: "localhost:#{MOCK_PORT}")
26
+
27
+ # Try one initial test connection to telnyx-mock so that if there's a problem
28
+ # we can print one error and fail fast so that it's more clear to the user how
29
+ # they should fix the problem.
30
+ begin
31
+ conn = Faraday::Connection.new("http://localhost:#{MOCK_PORT}")
32
+ resp = conn.get("/")
33
+ version = resp.headers["Telnyx-Mock-Version"]
34
+ if version != "master" &&
35
+ Gem::Version.new(version) < Gem::Version.new(MOCK_MINIMUM_VERSION)
36
+ abort("Your version of telnyx-mock (#{version}) is too old. The minimum " \
37
+ "version to run this test suite is #{MOCK_MINIMUM_VERSION}. Please " \
38
+ "see its repository for upgrade instructions.")
39
+ end
40
+ rescue Faraday::ConnectionFailed
41
+ abort("Couldn't reach telnyx-mock at `localhost:#{MOCK_PORT}`. Is " \
42
+ "it running? Please see README for setup instructions.")
43
+ end
44
+
45
+ Test::Unit.at_exit do
46
+ Telnyx::TelnyxMock.stop
47
+ end
48
+
49
+ module Test
50
+ module Unit
51
+ class TestCase
52
+ include Telnyx::TestData
53
+ include Mocha
54
+
55
+ setup do
56
+ Telnyx.api_key = "KEYSUPERSECRET"
57
+ Telnyx.api_base = "http://localhost:#{MOCK_PORT}"
58
+
59
+ # stub_connect
60
+ end
61
+
62
+ teardown do
63
+ Telnyx.api_key = nil
64
+ end
65
+
66
+ private
67
+
68
+ def stub_connect
69
+ stub_request(:any, /^#{Telnyx.api_base}/).to_return(body: "{}")
70
+ end
71
+ end
72
+ end
73
+ end
metadata ADDED
@@ -0,0 +1,162 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: telnyx
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Telnyx
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-07-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.13'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.13'
27
+ - !ruby/object:Gem::Dependency
28
+ name: net-http-persistent
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ description: Telnyx. See https://www.telnyx.com for details.
42
+ email: support@telnyx.com
43
+ executables:
44
+ - telnyx-console
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitattributes"
49
+ - ".github/ISSUE_TEMPLATE.md"
50
+ - ".gitignore"
51
+ - ".rubocop.yml"
52
+ - ".rubocop_todo.yml"
53
+ - ".travis.yml"
54
+ - CHANGELOG.md
55
+ - CONTRIBUTORS
56
+ - Gemfile
57
+ - Guardfile
58
+ - LICENSE
59
+ - README.md
60
+ - Rakefile
61
+ - VERSION
62
+ - bin/telnyx-console
63
+ - lib/telnyx.rb
64
+ - lib/telnyx/api_operations/create.rb
65
+ - lib/telnyx/api_operations/delete.rb
66
+ - lib/telnyx/api_operations/list.rb
67
+ - lib/telnyx/api_operations/nested_resource.rb
68
+ - lib/telnyx/api_operations/request.rb
69
+ - lib/telnyx/api_operations/save.rb
70
+ - lib/telnyx/api_resource.rb
71
+ - lib/telnyx/available_phone_number.rb
72
+ - lib/telnyx/errors.rb
73
+ - lib/telnyx/event.rb
74
+ - lib/telnyx/list_object.rb
75
+ - lib/telnyx/message.rb
76
+ - lib/telnyx/messaging_phone_number.rb
77
+ - lib/telnyx/messaging_profile.rb
78
+ - lib/telnyx/messaging_sender_id.rb
79
+ - lib/telnyx/messaging_short_code.rb
80
+ - lib/telnyx/number_order.rb
81
+ - lib/telnyx/number_reservation.rb
82
+ - lib/telnyx/public_key.rb
83
+ - lib/telnyx/singleton_api_resource.rb
84
+ - lib/telnyx/telnyx_client.rb
85
+ - lib/telnyx/telnyx_object.rb
86
+ - lib/telnyx/telnyx_response.rb
87
+ - lib/telnyx/util.rb
88
+ - lib/telnyx/version.rb
89
+ - lib/telnyx/webhook.rb
90
+ - telnyx.gemspec
91
+ - test/api_stub_helpers.rb
92
+ - test/openapi/README.md
93
+ - test/telnyx/api_operations_test.rb
94
+ - test/telnyx/api_resource_test.rb
95
+ - test/telnyx/available_phone_number_test.rb
96
+ - test/telnyx/errors_test.rb
97
+ - test/telnyx/list_object_test.rb
98
+ - test/telnyx/message_test.rb
99
+ - test/telnyx/messaging_phone_number_test.rb
100
+ - test/telnyx/messaging_profile_test.rb
101
+ - test/telnyx/messaging_sender_id_test.rb
102
+ - test/telnyx/messaging_short_code_test.rb
103
+ - test/telnyx/number_order_test.rb
104
+ - test/telnyx/number_reservation_test.rb
105
+ - test/telnyx/public_key_test.rb
106
+ - test/telnyx/telnyx_client_test.rb
107
+ - test/telnyx/telnyx_object_test.rb
108
+ - test/telnyx/telnyx_response_test.rb
109
+ - test/telnyx/util_test.rb
110
+ - test/telnyx/webhook_test.rb
111
+ - test/telnyx_mock.rb
112
+ - test/telnyx_test.rb
113
+ - test/test_data.rb
114
+ - test/test_helper.rb
115
+ homepage: https://developers.telnyx.com/docs/api/ruby
116
+ licenses:
117
+ - MIT
118
+ metadata: {}
119
+ post_install_message:
120
+ rdoc_options: []
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: 2.1.0
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ requirements: []
134
+ rubygems_version: 3.0.4
135
+ signing_key:
136
+ specification_version: 4
137
+ summary: Ruby bindings for the Telnyx API
138
+ test_files:
139
+ - test/api_stub_helpers.rb
140
+ - test/openapi/README.md
141
+ - test/telnyx/api_operations_test.rb
142
+ - test/telnyx/api_resource_test.rb
143
+ - test/telnyx/available_phone_number_test.rb
144
+ - test/telnyx/errors_test.rb
145
+ - test/telnyx/list_object_test.rb
146
+ - test/telnyx/message_test.rb
147
+ - test/telnyx/messaging_phone_number_test.rb
148
+ - test/telnyx/messaging_profile_test.rb
149
+ - test/telnyx/messaging_sender_id_test.rb
150
+ - test/telnyx/messaging_short_code_test.rb
151
+ - test/telnyx/number_order_test.rb
152
+ - test/telnyx/number_reservation_test.rb
153
+ - test/telnyx/public_key_test.rb
154
+ - test/telnyx/telnyx_client_test.rb
155
+ - test/telnyx/telnyx_object_test.rb
156
+ - test/telnyx/telnyx_response_test.rb
157
+ - test/telnyx/util_test.rb
158
+ - test/telnyx/webhook_test.rb
159
+ - test/telnyx_mock.rb
160
+ - test/telnyx_test.rb
161
+ - test/test_data.rb
162
+ - test/test_helper.rb