sms_aero 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 (58) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +7 -0
  3. data/.gitignore +9 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +12 -0
  6. data/.travis.yml +17 -0
  7. data/Gemfile +12 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +126 -0
  10. data/Rakefile +6 -0
  11. data/lib/sms_aero.rb +55 -0
  12. data/lib/sms_aero/models/answer.rb +8 -0
  13. data/lib/sms_aero/models/sms.rb +15 -0
  14. data/lib/sms_aero/models/tariff.rb +8 -0
  15. data/lib/sms_aero/operations/add_blacklist.rb +11 -0
  16. data/lib/sms_aero/operations/add_group.rb +11 -0
  17. data/lib/sms_aero/operations/add_phone.rb +17 -0
  18. data/lib/sms_aero/operations/check_balance.rb +11 -0
  19. data/lib/sms_aero/operations/check_groups.rb +12 -0
  20. data/lib/sms_aero/operations/check_senders.rb +15 -0
  21. data/lib/sms_aero/operations/check_sending.rb +11 -0
  22. data/lib/sms_aero/operations/check_sign.rb +15 -0
  23. data/lib/sms_aero/operations/check_status.rb +11 -0
  24. data/lib/sms_aero/operations/check_tariff.rb +12 -0
  25. data/lib/sms_aero/operations/delete_group.rb +11 -0
  26. data/lib/sms_aero/operations/delete_phone.rb +12 -0
  27. data/lib/sms_aero/operations/send_sms.rb +17 -0
  28. data/lib/sms_aero/operations/send_to_group.rb +15 -0
  29. data/lib/sms_aero/types/birthday.rb +20 -0
  30. data/lib/sms_aero/types/channel.rb +4 -0
  31. data/lib/sms_aero/types/digital.rb +8 -0
  32. data/lib/sms_aero/types/filled_string.rb +3 -0
  33. data/lib/sms_aero/types/future.rb +16 -0
  34. data/lib/sms_aero/types/phone.rb +12 -0
  35. data/lib/sms_aero/types/sign_status.rb +9 -0
  36. data/sms_aero.gemspec +23 -0
  37. data/spec/sms_aero/operations/add_blacklist_spec.rb +88 -0
  38. data/spec/sms_aero/operations/add_group_spec.rb +88 -0
  39. data/spec/sms_aero/operations/add_phone_spec.rb +221 -0
  40. data/spec/sms_aero/operations/check_balance_spec.rb +85 -0
  41. data/spec/sms_aero/operations/check_groups_spec.rb +72 -0
  42. data/spec/sms_aero/operations/check_senders_spec.rb +98 -0
  43. data/spec/sms_aero/operations/check_sending_spec.rb +88 -0
  44. data/spec/sms_aero/operations/check_sign_spec.rb +87 -0
  45. data/spec/sms_aero/operations/check_status_spec.rb +88 -0
  46. data/spec/sms_aero/operations/check_tariff_spec.rb +72 -0
  47. data/spec/sms_aero/operations/delete_group_spec.rb +88 -0
  48. data/spec/sms_aero/operations/delete_phone_spec.rb +118 -0
  49. data/spec/sms_aero/operations/send_sms_spec.rb +179 -0
  50. data/spec/sms_aero/operations/send_to_group_spec.rb +171 -0
  51. data/spec/sms_aero/types/birthday_spec.rb +33 -0
  52. data/spec/sms_aero/types/channel_spec.rb +19 -0
  53. data/spec/sms_aero/types/digital_spec.rb +15 -0
  54. data/spec/sms_aero/types/future_spec.rb +38 -0
  55. data/spec/sms_aero/types/phone_spec.rb +21 -0
  56. data/spec/sms_aero/types/sign_status_spec.rb +19 -0
  57. data/spec/spec_helper.rb +20 -0
  58. metadata +205 -0
@@ -0,0 +1,171 @@
1
+ RSpec.describe SmsAero, "#send_to_group" do
2
+ let(:settings) { { user: "BAZ", password: "QUX" } }
3
+ let(:client) { described_class.new(settings) }
4
+ let(:params) { { text: "Hi" } }
5
+ let(:answer) { { id: 3898, result: "accepted" } }
6
+
7
+ before { stub_request(:any, //).to_return(body: answer.to_json) }
8
+ subject { client.send_to_group(params) }
9
+
10
+ context "using ssl via POST:" do
11
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
12
+ let(:query) do
13
+ "answer=json&group=all&password=QUX&text=Hi&type=2&user=BAZ"
14
+ end
15
+
16
+ it "sends a request" do
17
+ subject
18
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
19
+ end
20
+
21
+ it "returns success" do
22
+ expect(subject).to be_kind_of SmsAero::Answer
23
+ expect(subject.result).to eq "accepted"
24
+ end
25
+ end
26
+
27
+ context "via GET:" do
28
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
29
+ let(:query) do
30
+ "answer=json&group=all&password=QUX&text=Hi&type=2&user=BAZ"
31
+ end
32
+
33
+ before { settings[:use_post] = false }
34
+
35
+ it "sends a request" do
36
+ subject
37
+ expect(a_request(:get, "#{host}?#{query}")).to have_been_made
38
+ end
39
+ end
40
+
41
+ context "not using ssl:" do
42
+ let(:host) { "http://gate.smsaero.ru/sendtogroup" }
43
+ let(:query) do
44
+ "answer=json&group=all&password=QUX&text=Hi&type=2&user=BAZ"
45
+ end
46
+
47
+ before { settings[:use_ssl] = false }
48
+
49
+ it "sends a request" do
50
+ subject
51
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
52
+ end
53
+ end
54
+
55
+ context "with custom user:" do
56
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
57
+ let(:query) do
58
+ "answer=json&group=all&password=QUX&text=Hi&type=2&user=USER"
59
+ end
60
+
61
+ before { params[:user] = "USER" }
62
+
63
+ it "sends a request" do
64
+ subject
65
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
66
+ end
67
+ end
68
+
69
+ context "with custom password:" do
70
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
71
+ let(:query) do
72
+ "answer=json&group=all&password=PSWD&text=Hi&type=2&user=BAZ"
73
+ end
74
+
75
+ before { params[:password] = "PSWD" }
76
+
77
+ it "sends a request" do
78
+ subject
79
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
80
+ end
81
+ end
82
+
83
+ context "with custom group:" do
84
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
85
+ let(:query) do
86
+ "answer=json&group=foo&password=QUX&text=Hi&type=2&user=BAZ"
87
+ end
88
+
89
+ before { params[:group] = "foo" }
90
+
91
+ it "sends a request" do
92
+ subject
93
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
94
+ end
95
+ end
96
+
97
+ context "with invalid group:" do
98
+ before { params[:group] = "" }
99
+
100
+ it "raises an exception" do
101
+ expect { subject }.to raise_error(TypeError)
102
+ end
103
+ end
104
+
105
+ context "with valid date:" do
106
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
107
+ let(:query) do
108
+ "answer=json&group=all&date=4122144000" \
109
+ "&password=QUX&text=Hi&type=2&user=BAZ"
110
+ end
111
+
112
+ before { params[:date] = DateTime.parse("2100-08-17 00:00:00 UTC") }
113
+
114
+ it "sends a request" do
115
+ subject
116
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
117
+ end
118
+ end
119
+
120
+ context "with old date:" do
121
+ before { params[:date] = (Date.today - 1) }
122
+
123
+ it "raises an exception" do
124
+ expect { subject }.to raise_error(TypeError)
125
+ end
126
+ end
127
+
128
+ context "with invalid date:" do
129
+ before { params[:date] = "foo" }
130
+
131
+ it "raises an exception" do
132
+ expect { subject }.to raise_error(TypeError, /foo/)
133
+ end
134
+ end
135
+
136
+ context "with digital channel:" do
137
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
138
+ let(:query) do
139
+ "answer=json&group=all&digital=1&password=QUX&text=Hi&user=BAZ"
140
+ end
141
+
142
+ before { params[:digital] = true }
143
+
144
+ it "sends a request" do
145
+ subject
146
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
147
+ end
148
+ end
149
+
150
+ context "with valid type:" do
151
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
152
+ let(:query) do
153
+ "answer=json&group=all&password=QUX&text=Hi&type=3&user=BAZ"
154
+ end
155
+
156
+ before { params[:type] = 3 }
157
+
158
+ it "sends a request" do
159
+ subject
160
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
161
+ end
162
+ end
163
+
164
+ context "with invalid type:" do
165
+ before { params[:type] = 11 }
166
+
167
+ it "raises an exception" do
168
+ expect { subject }.to raise_error(TypeError, /11/)
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe SmsAero::Types::Birthday do
4
+ subject { described_class[source] }
5
+
6
+ context "date:" do
7
+ let(:source) { Date.parse "1901-08-17" }
8
+ it { is_expected.to eq "1901-08-17" }
9
+ end
10
+
11
+ context "datetime:" do
12
+ let(:source) { DateTime.parse "1901-08-17 10:00:00" }
13
+ it { is_expected.to eq "1901-08-17" }
14
+ end
15
+
16
+ context "time:" do
17
+ let(:source) { Time.parse "1901-08-17 10:00:00" }
18
+ it { is_expected.to eq "1901-08-17" }
19
+ end
20
+
21
+ context "parceable string:" do
22
+ let(:source) { "1901/08/17" }
23
+ it { is_expected.to eq "1901-08-17" }
24
+ end
25
+
26
+ context "imparceable string:" do
27
+ let(:source) { "Foobar" }
28
+
29
+ it "fails" do
30
+ expect { subject }.to raise_error(TypeError, /Foobar/)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe SmsAero::Types::Channel do
4
+ context "valid code:" do
5
+ let(:codes) { [1, 2, 3, 4, 6] }
6
+
7
+ it "returns a code" do
8
+ codes.each { |code| expect(described_class[code]).to eq code }
9
+ end
10
+ end
11
+
12
+ context "invalid code:" do
13
+ let(:code) { 5 }
14
+
15
+ it "fails" do
16
+ expect { described_class[code] }.to raise_error(StandardError, /5/)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe SmsAero::Types::Digital do
4
+ subject { described_class[source] }
5
+
6
+ context "false:" do
7
+ let(:source) { false }
8
+ it { is_expected.to eq 0 }
9
+ end
10
+
11
+ context "true:" do
12
+ let(:source) { true }
13
+ it { is_expected.to eq 1 }
14
+ end
15
+ end
@@ -0,0 +1,38 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe SmsAero::Types::Future do
4
+ subject { described_class[source] }
5
+
6
+ context "time in future:" do
7
+ let(:source) { Time.now + 3600 }
8
+
9
+ it "returns UNIX time in seconds" do
10
+ expect(subject).to eq source.to_i
11
+ end
12
+ end
13
+
14
+ context "parseable string for time in future:" do
15
+ let(:time) { Time.now + 3600 }
16
+ let(:source) { time.strftime "%Y-%m-%d %H:%M:%S" }
17
+
18
+ it "returns UNIX time in seconds" do
19
+ expect(subject).to eq time.to_i
20
+ end
21
+ end
22
+
23
+ context "time in the past:" do
24
+ let(:source) { Time.now - 3600 }
25
+
26
+ it "fails" do
27
+ expect { subject }.to raise_error(TypeError)
28
+ end
29
+ end
30
+
31
+ context "not a time:" do
32
+ let(:source) { "foobar" }
33
+
34
+ it "fails" do
35
+ expect { subject }.to raise_error(TypeError, /foobar/)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe SmsAero::Types::Phone do
4
+ subject { described_class[source] }
5
+
6
+ context "valid phone:" do
7
+ let(:source) { "+007 (203) 899-899-0" }
8
+
9
+ it "returns formatted phone" do
10
+ expect(subject).to eq "72038998990"
11
+ end
12
+ end
13
+
14
+ context "invalid phone:" do
15
+ let(:source) { "+0 (111)" }
16
+
17
+ it "fails" do
18
+ expect { subject }.to raise_error(StandardError, /111/)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe SmsAero::Types::SignStatus do
4
+ context "valid status:" do
5
+ let(:values) { %w(accepted approved rejected pending) }
6
+
7
+ it "returns a status" do
8
+ values.each { |value| expect(described_class[value]).to eq value }
9
+ end
10
+ end
11
+
12
+ context "invalid status:" do
13
+ let(:value) { "wrong" }
14
+
15
+ it "fails" do
16
+ expect { described_class[value] }.to raise_error(StandardError, /wrong/)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ begin
2
+ require "pry"
3
+ rescue LoadError
4
+ nil
5
+ end
6
+
7
+ require "sms_aero"
8
+ require "dry-types"
9
+ require "webmock/rspec"
10
+
11
+ RSpec.configure do |config|
12
+ config.order = :random
13
+ config.filter_run focus: true
14
+ config.run_all_when_everything_filtered = true
15
+
16
+ config.around(:each) do |example|
17
+ stub_request(:any, //)
18
+ example.run
19
+ end
20
+ end
metadata ADDED
@@ -0,0 +1,205 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sms_aero
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Andrew Kozin (nepalez)
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-11-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dry-types
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.9.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.9.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: evil-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.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: 0.3.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '11.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '11.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.42'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.42'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.1'
97
+ description:
98
+ email: andrew.kozin@gmail.com
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files:
102
+ - README.md
103
+ files:
104
+ - ".codeclimate.yml"
105
+ - ".gitignore"
106
+ - ".rspec"
107
+ - ".rubocop.yml"
108
+ - ".travis.yml"
109
+ - Gemfile
110
+ - LICENSE.txt
111
+ - README.md
112
+ - Rakefile
113
+ - lib/sms_aero.rb
114
+ - lib/sms_aero/models/answer.rb
115
+ - lib/sms_aero/models/sms.rb
116
+ - lib/sms_aero/models/tariff.rb
117
+ - lib/sms_aero/operations/add_blacklist.rb
118
+ - lib/sms_aero/operations/add_group.rb
119
+ - lib/sms_aero/operations/add_phone.rb
120
+ - lib/sms_aero/operations/check_balance.rb
121
+ - lib/sms_aero/operations/check_groups.rb
122
+ - lib/sms_aero/operations/check_senders.rb
123
+ - lib/sms_aero/operations/check_sending.rb
124
+ - lib/sms_aero/operations/check_sign.rb
125
+ - lib/sms_aero/operations/check_status.rb
126
+ - lib/sms_aero/operations/check_tariff.rb
127
+ - lib/sms_aero/operations/delete_group.rb
128
+ - lib/sms_aero/operations/delete_phone.rb
129
+ - lib/sms_aero/operations/send_sms.rb
130
+ - lib/sms_aero/operations/send_to_group.rb
131
+ - lib/sms_aero/types/birthday.rb
132
+ - lib/sms_aero/types/channel.rb
133
+ - lib/sms_aero/types/digital.rb
134
+ - lib/sms_aero/types/filled_string.rb
135
+ - lib/sms_aero/types/future.rb
136
+ - lib/sms_aero/types/phone.rb
137
+ - lib/sms_aero/types/sign_status.rb
138
+ - sms_aero.gemspec
139
+ - spec/sms_aero/operations/add_blacklist_spec.rb
140
+ - spec/sms_aero/operations/add_group_spec.rb
141
+ - spec/sms_aero/operations/add_phone_spec.rb
142
+ - spec/sms_aero/operations/check_balance_spec.rb
143
+ - spec/sms_aero/operations/check_groups_spec.rb
144
+ - spec/sms_aero/operations/check_senders_spec.rb
145
+ - spec/sms_aero/operations/check_sending_spec.rb
146
+ - spec/sms_aero/operations/check_sign_spec.rb
147
+ - spec/sms_aero/operations/check_status_spec.rb
148
+ - spec/sms_aero/operations/check_tariff_spec.rb
149
+ - spec/sms_aero/operations/delete_group_spec.rb
150
+ - spec/sms_aero/operations/delete_phone_spec.rb
151
+ - spec/sms_aero/operations/send_sms_spec.rb
152
+ - spec/sms_aero/operations/send_to_group_spec.rb
153
+ - spec/sms_aero/types/birthday_spec.rb
154
+ - spec/sms_aero/types/channel_spec.rb
155
+ - spec/sms_aero/types/digital_spec.rb
156
+ - spec/sms_aero/types/future_spec.rb
157
+ - spec/sms_aero/types/phone_spec.rb
158
+ - spec/sms_aero/types/sign_status_spec.rb
159
+ - spec/spec_helper.rb
160
+ homepage: https://github.com/nepalez/sms_aero
161
+ licenses:
162
+ - MIT
163
+ metadata: {}
164
+ post_install_message:
165
+ rdoc_options: []
166
+ require_paths:
167
+ - lib
168
+ required_ruby_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '2.2'
173
+ required_rubygems_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ requirements: []
179
+ rubyforge_project:
180
+ rubygems_version: 2.6.4
181
+ signing_key:
182
+ specification_version: 4
183
+ summary: HTTP(s) client to SMS Aero API
184
+ test_files:
185
+ - spec/sms_aero/operations/add_blacklist_spec.rb
186
+ - spec/sms_aero/operations/add_group_spec.rb
187
+ - spec/sms_aero/operations/add_phone_spec.rb
188
+ - spec/sms_aero/operations/check_balance_spec.rb
189
+ - spec/sms_aero/operations/check_groups_spec.rb
190
+ - spec/sms_aero/operations/check_senders_spec.rb
191
+ - spec/sms_aero/operations/check_sending_spec.rb
192
+ - spec/sms_aero/operations/check_sign_spec.rb
193
+ - spec/sms_aero/operations/check_status_spec.rb
194
+ - spec/sms_aero/operations/check_tariff_spec.rb
195
+ - spec/sms_aero/operations/delete_group_spec.rb
196
+ - spec/sms_aero/operations/delete_phone_spec.rb
197
+ - spec/sms_aero/operations/send_sms_spec.rb
198
+ - spec/sms_aero/operations/send_to_group_spec.rb
199
+ - spec/sms_aero/types/birthday_spec.rb
200
+ - spec/sms_aero/types/channel_spec.rb
201
+ - spec/sms_aero/types/digital_spec.rb
202
+ - spec/sms_aero/types/future_spec.rb
203
+ - spec/sms_aero/types/phone_spec.rb
204
+ - spec/sms_aero/types/sign_status_spec.rb
205
+ - spec/spec_helper.rb