sms77 0.4.0 → 0.5.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 (103) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +6 -4
  3. data/.idea/.gitignore +8 -0
  4. data/.idea/inspectionProfiles/Project_Default.xml +6 -0
  5. data/.idea/modules.xml +8 -0
  6. data/.idea/ruby-client.iml +18 -0
  7. data/.idea/vcs.xml +6 -0
  8. data/Gemfile +2 -2
  9. data/LICENSE +20 -20
  10. data/README.md +41 -35
  11. data/Rakefile +5 -5
  12. data/doc/Sms77/Client.html +230 -0
  13. data/doc/Sms77/Contacts/Action.html +131 -0
  14. data/doc/Sms77/Contacts.html +126 -0
  15. data/doc/Sms77/Endpoint.html +187 -0
  16. data/doc/Sms77/Hooks/Action.html +131 -0
  17. data/doc/Sms77/Hooks/EventType.html +146 -0
  18. data/doc/Sms77/Hooks/RequestMethod.html +131 -0
  19. data/doc/Sms77/Hooks/Validator.html +598 -0
  20. data/doc/Sms77/Hooks.html +126 -0
  21. data/doc/Sms77/Journal/Type.html +136 -0
  22. data/doc/Sms77/Journal/Validator.html +394 -0
  23. data/doc/Sms77/Journal.html +126 -0
  24. data/doc/Sms77/Lookup/Type.html +136 -0
  25. data/doc/Sms77/Lookup.html +126 -0
  26. data/doc/Sms77/Resource.html +870 -0
  27. data/doc/Sms77/Resources/Analytics.html +263 -0
  28. data/doc/Sms77/Resources/Balance.html +246 -0
  29. data/doc/Sms77/Resources/Contacts.html +449 -0
  30. data/doc/Sms77/Resources/Hooks.html +457 -0
  31. data/doc/Sms77/Resources/Journal.html +261 -0
  32. data/doc/Sms77/Resources/Lookup.html +540 -0
  33. data/doc/Sms77/Resources/Pricing.html +263 -0
  34. data/doc/Sms77/Resources/Sms.html +261 -0
  35. data/doc/Sms77/Resources/Status.html +261 -0
  36. data/doc/Sms77/Resources/Subaccounts.html +651 -0
  37. data/doc/Sms77/Resources/ValidateForVoice.html +261 -0
  38. data/doc/Sms77/Resources/Voice.html +261 -0
  39. data/doc/Sms77/Resources.html +128 -0
  40. data/doc/Sms77/Sms/Type.html +126 -0
  41. data/doc/Sms77/Sms.html +126 -0
  42. data/doc/Sms77/Subaccounts/Action.html +141 -0
  43. data/doc/Sms77/Subaccounts/Validator.html +490 -0
  44. data/doc/Sms77/Subaccounts.html +126 -0
  45. data/doc/Sms77/Util.html +1033 -0
  46. data/doc/Sms77.html +146 -0
  47. data/doc/_index.html +444 -0
  48. data/doc/class_list.html +51 -0
  49. data/doc/css/common.css +1 -0
  50. data/doc/css/full_list.css +58 -0
  51. data/doc/css/style.css +497 -0
  52. data/doc/file.README.html +112 -0
  53. data/doc/file_list.html +56 -0
  54. data/doc/frames.html +17 -0
  55. data/doc/index.html +112 -0
  56. data/doc/js/app.js +314 -0
  57. data/doc/js/full_list.js +216 -0
  58. data/doc/js/jquery.js +4 -0
  59. data/doc/method_list.html +563 -0
  60. data/doc/top-level-namespace.html +110 -0
  61. data/lib/sms77/client.rb +30 -29
  62. data/lib/sms77/contacts.rb +10 -9
  63. data/lib/sms77/endpoint.rb +17 -15
  64. data/lib/sms77/hooks.rb +67 -64
  65. data/lib/sms77/journal.rb +39 -38
  66. data/lib/sms77/lookup.rb +11 -10
  67. data/lib/sms77/resource.rb +94 -93
  68. data/lib/sms77/resources/analytics.rb +21 -16
  69. data/lib/sms77/resources/balance.rb +19 -15
  70. data/lib/sms77/resources/contacts.rb +38 -25
  71. data/lib/sms77/resources/hooks.rb +40 -29
  72. data/lib/sms77/resources/journal.rb +20 -15
  73. data/lib/sms77/resources/lookup.rb +47 -29
  74. data/lib/sms77/resources/pricing.rb +20 -15
  75. data/lib/sms77/resources/sms.rb +20 -15
  76. data/lib/sms77/resources/status.rb +20 -15
  77. data/lib/sms77/resources/subaccounts.rb +66 -0
  78. data/lib/sms77/resources/validate_for_voice.rb +20 -15
  79. data/lib/sms77/resources/voice.rb +20 -15
  80. data/lib/sms77/sms.rb +9 -8
  81. data/lib/sms77/subaccounts.rb +55 -0
  82. data/lib/sms77/util.rb +68 -67
  83. data/lib/sms77/version.rb +5 -5
  84. data/lib/sms77.rb +6 -6
  85. data/release.sh +4 -7
  86. data/sms77.gemspec +21 -21
  87. data/spec/EnvKeyStore.rb +14 -14
  88. data/spec/matchers.rb +22 -22
  89. data/spec/sms77/balance_spec.rb +12 -12
  90. data/spec/sms77/client_spec.rb +15 -15
  91. data/spec/sms77/contacts_spec.rb +129 -116
  92. data/spec/sms77/hooks_spec.rb +108 -105
  93. data/spec/sms77/instance_spec.rb +22 -20
  94. data/spec/sms77/journal_spec.rb +86 -86
  95. data/spec/sms77/lookup_spec.rb +179 -179
  96. data/spec/sms77/pricing_spec.rb +76 -76
  97. data/spec/sms77/sms_spec.rb +103 -103
  98. data/spec/sms77/subaccounts_spec.rb +121 -0
  99. data/spec/sms77/validate_for_voice_spec.rb +19 -19
  100. data/spec/sms77/voice_spec.rb +51 -51
  101. data/spec/sms77_spec.rb +9 -7
  102. data/spec/spec_helper.rb +53 -53
  103. metadata +75 -17
@@ -1,106 +1,109 @@
1
- # frozen_string_literal: true
2
-
3
- require 'securerandom'
4
- require 'sms77/hooks'
5
- require 'sms77/util'
6
- require 'sms77/resources/hooks'
7
- require 'spec_helper'
8
-
9
- RSpec.describe Sms77, 'hooks' do
10
- HOOK_ID = EnvKeyStore.new('HOOK_ID')
11
- HELPER = Helper.new(Sms77::Resources::Hooks)
12
-
13
- def alter_action_stub
14
- {
15
- :code => nil,
16
- :success => true
17
- }
18
- end
19
-
20
- def request(fn, stub, extra_params = {})
21
- res = HELPER.request(fn, stub, extra_params)
22
-
23
- expect(res).to be_a(Hash)
24
-
25
- stub_keys = stub.keys
26
-
27
- res.each do |k, v|
28
- expect(stub_keys).to include(k)
29
- expect(v.class).to match(stub[:"#{k}"].class)
30
- end
31
-
32
- res
33
- end
34
-
35
- it 'returns all hooks' do
36
- res = request(HELPER.resource.method(:read), {
37
- :code => nil,
38
- :hooks => [
39
- {
40
- :created => "2020-11-04 23:04:15",
41
- :event_type => "sms_mo",
42
- :id => "30",
43
- :request_method => "GET",
44
- :target_url => "http://my.tld/testHook"
45
- }
46
- ],
47
- :success => true
48
- })
49
-
50
- expect(res).to include(:code, :hooks, :success)
51
- expect(res[:code]).to eq(nil)
52
- expect(res[:hooks]).to be_a(Array)
53
- expect(res[:success]).to be_boolean
54
-
55
- res[:hooks].each do |hook|
56
- expect(hook).to include(:created, :event_type, :id, :request_method, :target_url)
57
-
58
- expect(Sms77::Util::is_valid_datetime?(hook[:created])).to be
59
- expect(hook[:created]).to match(/^\d\d\d\d-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01]) (1[0-9]|2[0-3]|0[0-9]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])$/)
60
- expect(Sms77::Hooks::Validator::event_type?(hook[:event_type])).to be
61
- expect(Sms77::Util::is_positive_integer?(hook[:id])).to be
62
- expect(Sms77::Hooks::Validator::request_method?(hook[:request_method])).to be
63
- expect(Sms77::Hooks::Validator::target_url?(hook[:target_url])).to be
64
- end
65
- end
66
-
67
- =begin
68
- it 'subscribes' do
69
- stub = alter_action_stub.merge({ :id => rand(1...1000000) })
70
-
71
- res = request(HELPER.resource.method(:subscribe), stub, {
72
- :event_type => Sms77::Hooks::EventType::NEW_INBOUND_SMS,
73
- :request_method => Sms77::Hooks::RequestMethod::GET,
74
- :target_url => "http://ruby.tld/#{SecureRandom.uuid}"
75
- })
76
-
77
- expect(Sms77::Util::is_positive_integer?(res[:id])).to be
78
- expect(res[:id]).to be_a(Integer)
79
- expect(stub[:id]).to match(res[:id]) unless Helper::IS_HTTP
80
-
81
- assert_alter_response(res)
82
-
83
- puts "Subscribed ID: #{Helper::IS_HTTP ? res[:id] : stub[:id]}"
84
-
85
- HOOK_ID.set(res[:id])
86
- end
87
-
88
- it 'unsubscribes' do
89
- id = HOOK_ID.get
90
- res = request(HELPER.resource.method(:unubscribe), alter_action_stub, { :id => id })
91
-
92
- assert_alter_response(res)
93
-
94
- expect(res[:success]).to be_boolean
95
-
96
- puts "Unsubscribed ID #{id}: #{res[:success]}"
97
-
98
- res[:success]
99
- end
100
- =end
101
-
102
- def assert_alter_response(res)
103
- expect(res[:code]).to match(nil)
104
- expect(res[:success]).to be_boolean
105
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'securerandom'
5
+ require 'sms77/hooks'
6
+ require 'sms77/util'
7
+ require 'sms77/resources/hooks'
8
+
9
+ RSpec.describe Sms77, 'hooks' do
10
+ HOOK_ID = EnvKeyStore.new('HOOK_ID')
11
+
12
+ def alter_action_stub
13
+ {
14
+ :code => nil,
15
+ :success => true
16
+ }
17
+ end
18
+
19
+ def request(fn, stub, extra_params = {})
20
+ helper = Helper.new(Sms77::Resources::Hooks)
21
+
22
+ res = helper.request(helper.resource.method(fn), stub, extra_params)
23
+
24
+ expect(res).to be_a(Hash)
25
+
26
+ stub_keys = stub.keys
27
+
28
+ res.each do |k, v|
29
+ expect(stub_keys).to include(k)
30
+ expect(v.class).to match(stub[:"#{k}"].class)
31
+ end
32
+
33
+ res
34
+ end
35
+
36
+ it 'returns all hooks' do
37
+ res = request(:read, {
38
+ :code => nil,
39
+ :hooks => [
40
+ {
41
+ :created => "2020-11-04 23:04:15",
42
+ :event_type => "sms_mo",
43
+ :id => "30",
44
+ :request_method => "GET",
45
+ :target_url => "http://my.tld/testHook"
46
+ }
47
+ ],
48
+ :success => true
49
+ })
50
+
51
+ expect(res).to include(:code, :hooks, :success)
52
+ expect(res[:code]).to eq(nil)
53
+ expect(res[:hooks]).to be_a(Array)
54
+ expect(res[:success]).to be_boolean
55
+
56
+ res[:hooks].each do |hook|
57
+ expect(hook).to include(:created, :event_type, :id, :request_method, :target_url)
58
+
59
+ expect(Sms77::Util::is_valid_datetime?(hook[:created])).to be
60
+ expect(hook[:created]).to match(/^\d\d\d\d-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01]) (1[0-9]|2[0-3]|0[0-9]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])$/)
61
+ expect(Sms77::Hooks::Validator::event_type?(hook[:event_type])).to be
62
+ expect(Sms77::Util::is_positive_integer?(hook[:id])).to be
63
+ expect(Sms77::Hooks::Validator::request_method?(hook[:request_method])).to be
64
+ expect(Sms77::Hooks::Validator::target_url?(hook[:target_url])).to be
65
+ end
66
+ end
67
+
68
+ =begin
69
+ it 'subscribes' do
70
+ helper = Helper.new(Sms77::Resources::Hooks)
71
+ stub = alter_action_stub.merge({ :id => rand(1...1000000) })
72
+
73
+ res = request(helper.resource.method(:subscribe), stub, {
74
+ :event_type => Sms77::Hooks::EventType::NEW_INBOUND_SMS,
75
+ :request_method => Sms77::Hooks::RequestMethod::GET,
76
+ :target_url => "http://ruby.tld/#{SecureRandom.uuid}"
77
+ })
78
+
79
+ expect(Sms77::Util::is_positive_integer?(res[:id])).to be
80
+ expect(res[:id]).to be_a(Integer)
81
+ expect(stub[:id]).to match(res[:id]) unless Helper::IS_HTTP
82
+
83
+ assert_alter_response(res)
84
+
85
+ puts "Subscribed ID: #{Helper::IS_HTTP ? res[:id] : stub[:id]}"
86
+
87
+ HOOK_ID.set(res[:id])
88
+ end
89
+
90
+ it 'unsubscribes' do
91
+ helper = Helper.new(Sms77::Resources::Hooks)
92
+ id = HOOK_ID.get
93
+ res = request(helper.resource.method(:unubscribe), alter_action_stub, { :id => id })
94
+
95
+ assert_alter_response(res)
96
+
97
+ expect(res[:success]).to be_boolean
98
+
99
+ puts "Unsubscribed ID #{id}: #{res[:success]}"
100
+
101
+ res[:success]
102
+ end
103
+ =end
104
+
105
+ def assert_alter_response(res)
106
+ expect(res[:code]).to match(nil)
107
+ expect(res[:success]).to be_boolean
108
+ end
106
109
  end
@@ -1,20 +1,22 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'sms77/resource'
5
-
6
- RSpec.describe Sms77, 'instance' do
7
- helper = Helper.new(Sms77::Resource)
8
-
9
- it 'checks api key' do
10
- expect(helper.resource.api_key).to be_lengthy_string
11
- end
12
-
13
- it 'checks sentWith' do
14
- expect(helper.resource.sent_with).to be_lengthy_string
15
- end
16
-
17
- it 'fails authentication' do
18
- expect { Sms77::Resource.new('') }.to raise_error(RuntimeError)
19
- end
20
- end
1
+ # frozen_string_literal: true
2
+
3
+ #noinspection RubyResolve
4
+ require 'spec_helper'
5
+ require 'sms77/resource'
6
+
7
+ #noinspection RubyResolve
8
+ RSpec.describe Sms77, 'instance' do
9
+ helper = Helper.new(Sms77::Resource)
10
+
11
+ it 'checks api key' do
12
+ expect(helper.resource.api_key).to be_lengthy_string
13
+ end
14
+
15
+ it 'checks sentWith' do
16
+ expect(helper.resource.sent_with).to be_lengthy_string
17
+ end
18
+
19
+ it 'fails authentication' do
20
+ expect { Sms77::Resource.new('') }.to raise_error(RuntimeError)
21
+ end
22
+ end
@@ -1,86 +1,86 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'sms77/journal'
5
- require 'sms77/resources/journal'
6
- require 'sms77/sms'
7
-
8
- RSpec.describe Sms77, 'journal' do
9
- def valid_timestamp?(str)
10
- str.match(/[\d]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][\d]|3[0-1]) (2[0-3]|[01][\d]):[0-5][\d]/)
11
- end
12
-
13
- def request(type)
14
- stub = [{
15
- :from => "SMS",
16
- :id => "123456789",
17
- :price => "1.2",
18
- :text => "Hey my friend!",
19
- :timestamp => "2020-10-14 14:25:04",
20
- :to => "49170123456789",
21
- }]
22
-
23
- helper = Helper.new(Sms77::Resources::Journal)
24
- res = helper.request(helper.resource.method(:retrieve), stub, { type: type })
25
-
26
- expect(res).to be_a(Array)
27
-
28
- res.each do |journal|
29
- expect(journal).to be_a(Hash)
30
- expect(journal[:from]).to be_lengthy_string
31
- expect(journal[:id]).to be_numeric
32
- expect(Sms77::Util::valid_float?(journal[:price])).to be_truthy
33
- expect(journal[:text]).to be_lengthy_string
34
- expect(valid_timestamp?(journal[:timestamp])).to be_truthy
35
- expect(journal[:to]).to be_lengthy_string
36
- end
37
-
38
- res
39
- end
40
-
41
- it 'returns all inbound messages' do
42
- request(Sms77::Journal::Type::INBOUND)
43
- end
44
-
45
- it 'returns all outbound messages' do
46
- request(Sms77::Journal::Type::OUTBOUND).each do |journal|
47
- journal.merge!({
48
- :connection => "http",
49
- :dlr => "DELIVERED",
50
- :dlr_timestamp => "2020-10-04 09:26:10.000",
51
- :foreign_id => "MyForeignId",
52
- :label => "MyCustomLabel",
53
- :latency => "5.1060",
54
- :mccmnc => "26207",
55
- :type => "direct",
56
- })
57
- expect(journal[:connection]).to be_lengthy_string
58
- expect(journal[:dlr]).to be_nil_or_lengthy_string
59
- expect(valid_timestamp?(journal[:dlr_timestamp])).to be_truthy
60
- expect(journal[:foreign_id]).to be_nil_or_lengthy_string
61
- expect(journal[:label]).to be_nil_or_lengthy_string
62
- expect(journal[:latency]).to be_nil_or_lengthy_string
63
- expect(journal[:mccmnc]).to be_nil_or_lengthy_string
64
- expect(Sms77::Util::in_module_constants?(journal[:type], Sms77::Sms::Type)).to be_truthy
65
- end
66
- end
67
-
68
- it 'returns all voice messages' do
69
- request(Sms77::Journal::Type::VOICE).each do |journal|
70
- journal.merge!({
71
- :duration => "2",
72
- :error => "",
73
- :status => "completed",
74
- :xml => false,
75
- })
76
- expect(journal[:duration]).to be_numeric
77
- expect(journal[:error]).to be_nil_or_lengthy_string
78
- expect(journal[:status]).to be_lengthy_string
79
- expect(journal[:xml]).to be_boolean
80
- end
81
- end
82
-
83
- it 'returns all reply messages' do
84
- request(Sms77::Journal::Type::REPLIES)
85
- end
86
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'sms77/journal'
5
+ require 'sms77/resources/journal'
6
+ require 'sms77/sms'
7
+
8
+ RSpec.describe Sms77, 'journal' do
9
+ def valid_timestamp?(str)
10
+ str.match(/[\d]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][\d]|3[0-1]) (2[0-3]|[01][\d]):[0-5][\d]/)
11
+ end
12
+
13
+ def request(type)
14
+ stub = [{
15
+ :from => "SMS",
16
+ :id => "123456789",
17
+ :price => "1.2",
18
+ :text => "Hey my friend!",
19
+ :timestamp => "2020-10-14 14:25:04",
20
+ :to => "49170123456789",
21
+ }]
22
+
23
+ helper = Helper.new(Sms77::Resources::Journal)
24
+ res = helper.request(helper.resource.method(:retrieve), stub, { type: type })
25
+
26
+ expect(res).to be_a(Array)
27
+
28
+ res.each do |journal|
29
+ expect(journal).to be_a(Hash)
30
+ expect(journal[:from]).to be_lengthy_string
31
+ expect(journal[:id]).to be_numeric
32
+ expect(Sms77::Util::valid_float?(journal[:price])).to be_truthy
33
+ expect(journal[:text]).to be_lengthy_string
34
+ expect(valid_timestamp?(journal[:timestamp])).to be_truthy
35
+ expect(journal[:to]).to be_lengthy_string
36
+ end
37
+
38
+ res
39
+ end
40
+
41
+ it 'returns all inbound messages' do
42
+ request(Sms77::Journal::Type::INBOUND)
43
+ end
44
+
45
+ it 'returns all outbound messages' do
46
+ request(Sms77::Journal::Type::OUTBOUND).each do |journal|
47
+ journal.merge!({
48
+ :connection => "http",
49
+ :dlr => "DELIVERED",
50
+ :dlr_timestamp => "2020-10-04 09:26:10.000",
51
+ :foreign_id => "MyForeignId",
52
+ :label => "MyCustomLabel",
53
+ :latency => "5.1060",
54
+ :mccmnc => "26207",
55
+ :type => "direct",
56
+ })
57
+ expect(journal[:connection]).to be_lengthy_string
58
+ expect(journal[:dlr]).to be_nil_or_lengthy_string
59
+ expect(valid_timestamp?(journal[:dlr_timestamp])).to be_truthy
60
+ expect(journal[:foreign_id]).to be_nil_or_lengthy_string
61
+ expect(journal[:label]).to be_nil_or_lengthy_string
62
+ expect(journal[:latency]).to be_nil_or_lengthy_string
63
+ expect(journal[:mccmnc]).to be_nil_or_lengthy_string
64
+ expect(Sms77::Util::in_module_constants?(journal[:type], Sms77::Sms::Type)).to be_truthy
65
+ end
66
+ end
67
+
68
+ it 'returns all voice messages' do
69
+ request(Sms77::Journal::Type::VOICE).each do |journal|
70
+ journal.merge!({
71
+ :duration => "2",
72
+ :error => "",
73
+ :status => "completed",
74
+ :xml => false,
75
+ })
76
+ expect(journal[:duration]).to be_numeric
77
+ expect(journal[:error]).to be_nil_or_lengthy_string
78
+ expect(journal[:status]).to be_lengthy_string
79
+ expect(journal[:xml]).to be_boolean
80
+ end
81
+ end
82
+
83
+ it 'returns all reply messages' do
84
+ request(Sms77::Journal::Type::REPLIES)
85
+ end
86
+ end