textbelt 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7de6ab396ff78777875207b7315451beaf23f774
4
- data.tar.gz: cfc7e29b6a77b7c9034625daf3e7743ddf21f0bf
3
+ metadata.gz: 38297e46bd3eae49514cf2c8f7bccae3f255dbdf
4
+ data.tar.gz: 8d1b3ab5d96f98aa37a6592cc89456c4da139671
5
5
  SHA512:
6
- metadata.gz: b5b2750c761f31eab2b0a73b98f54aa474d9a44a83208ba8d3835aca44869190130808f20c07db8704b9b9de196095d887e510c5d72f2ab55a6e25ad3be6647b
7
- data.tar.gz: b14840ec6d2a39932c7b10a1403148c27c30f6bc3ae00e3a7380c68ef821206daccf957f782c2414d2ab729c3cc69964b923142bd786ed057f1fe29d38f38030
6
+ metadata.gz: 3a1db7d63484bb4c3861708901db6fe1cbdf8a4f3ab205e591a12445a09a73dbc56b892e3df2b57dbde4635185f8b31993579febea2a03957890f980eaf53b62
7
+ data.tar.gz: b28735b08948bc4be828a64777f55931f134bb9de12530619b0def08407082af7c126ef278db51ac10c48a0f2aa4aea29aa41dd836148e0fb95413d188f7b572
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Textbelt
2
2
 
3
3
  [![Build Status](https://travis-ci.org/djds23/textbelt-gem.svg?branch=master)](https://travis-ci.org/djds23/textbelt-gem)
4
+ [![Gem Version](https://badge.fury.io/rb/textbelt.svg)](https://rubygems.org/gems/textbelt)
4
5
 
5
6
  A ruby interface for sending texts free of charge through [TextBelt](http://textbelt.com/).
6
7
 
@@ -22,10 +23,27 @@ Or install it yourself as:
22
23
 
23
24
  ## Usage
24
25
 
26
+ The main API is [`TextBelt.text`](http://www.rubydoc.info/github/djds23/textbelt-gem/master/TextBelt.text). Sending messages should be as simple as passing a number & message, then watching it go!
27
+
25
28
  ```ruby
26
29
  TextBelt.text('01234567', 'Hello, World!') #=> Your favorite cell phone number gets a text message
27
30
  ```
28
31
 
32
+ If there are any errors that happen server side, we raise then as exceptions locally, see the documentation for `text` for a look at the different errors that might be raised.
33
+
34
+ ```ruby
35
+ require 'textbelt'
36
+
37
+ def send_cats(number)
38
+ TextBelt.text(number, 'https://www.youtube.com/watch?v=tntOCGkgt98')
39
+ rescue TextBelt::Errors::PhoneQuotaExceededError => e
40
+ puts 'too many cats!!!!'
41
+ rescue TextBelt::Errors::BlackListedNumberError => e
42
+ puts 'can not send any more cats to that number :('
43
+ end
44
+ ```
45
+
46
+ [See the full documentation here.](http://www.rubydoc.info/github/djds23/textbelt-gem/master)
29
47
  ## Development
30
48
 
31
49
  After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/Rakefile CHANGED
@@ -5,3 +5,4 @@ RSpec::Core::RakeTask.new(:spec)
5
5
 
6
6
  task :default => :spec
7
7
  task :test => :spec
8
+
@@ -2,6 +2,7 @@
2
2
  module TextBelt
3
3
  require 'textbelt/validators/response_validator'
4
4
  require 'textbelt/validators/phone_validator'
5
+ require 'textbelt/textutils'
5
6
  require 'textbelt/version'
6
7
  require 'textbelt/errors'
7
8
  require 'net/http'
@@ -28,34 +29,13 @@ module TextBelt
28
29
  #
29
30
  def text(phone_number, message, country = 'US')
30
31
  PhoneValidator.validate(phone_number, country)
31
- url = url_for(country)
32
+ url = TextUtils.url_for(country)
32
33
  res = Net::HTTP.post_form(url, number: phone_number, message: message)
33
34
  body = JSON.parse(res.body)
34
35
  ResponseValidator.validate(phone_number, body)
35
36
  body['success'.freeze]
36
37
  end
37
38
 
38
- # @private
39
- def url_for(country)
40
- url_string =
41
- case country
42
- when 'US'
43
- base_url + 'text'
44
- when 'CA'
45
- base_url + 'canada'
46
- else
47
- base_url + 'intl'
48
- end
49
-
50
- URI(url_string)
51
- end
52
-
53
- # @private
54
- def base_url
55
- 'http://textbelt.com/'
56
- end
57
-
58
39
  module_function :text
59
- module_function :base_url
60
- module_function :url_for
61
40
  end
41
+
@@ -0,0 +1,34 @@
1
+ # @author Dean Silfen
2
+ module TextBelt
3
+ class TextUtils
4
+ class << self
5
+
6
+ # Return the correct URL for the correct country code
7
+ #
8
+ # @param country [String] ISO 3166 Country code for destination country
9
+ #
10
+ # @return [URI] URI object holding the url to match the country code
11
+ def url_for(country)
12
+ url_string =
13
+ case country
14
+ when 'US'
15
+ base_url + 'text'
16
+ when 'CA'
17
+ base_url + 'canada'
18
+ else
19
+ base_url + 'intl'
20
+ end
21
+
22
+ URI(url_string)
23
+ end
24
+
25
+ private
26
+
27
+ # @private
28
+ def base_url
29
+ 'http://textbelt.com/'
30
+ end
31
+ end
32
+ end
33
+ end
34
+
@@ -1,9 +1,9 @@
1
- # File to hold all the errors for TextBelt
2
- #
3
- # @author Dean Silfen
4
1
  module TextBelt
5
2
  require 'phonelib'
6
3
 
4
+ # Validator for outgoing phone numbers
5
+ #
6
+ # @author Dean Silfen
7
7
  class PhoneValidator
8
8
  class << self
9
9
 
@@ -12,6 +12,9 @@ module TextBelt
12
12
  # @param phone_number [String] number to send the text to
13
13
  # @param country [String] ISO 3166 Country code for destination country
14
14
  #
15
+ # @raise [Errors::IntegerPhoneError] error raised if phone number is passed as an integer
16
+ # @raise [Errors::InvalidPhoneNumberError] error raised if phone number is not valid
17
+ #
15
18
  # @return [Boolean] true if TextBelt successfully passed on the message,
16
19
  # false if not
17
20
  def validate(phone_number, country)
@@ -1,6 +1,25 @@
1
1
  module TextBelt
2
+
3
+ # Validator for incoming http responses
4
+ #
5
+ # @author Dean Silfen
2
6
  class ResponseValidator
3
7
  class << self
8
+
9
+ # Validate the response from http service
10
+ #
11
+ # @param phone_number [String] number to send the text to
12
+ # @param body [Hash] The body of the server's http response
13
+ #
14
+ # @raise [Errors::BlackListedNumberError] http server says number is blacklisted
15
+ # @raise [Errors::GatewayFailureError] http server had a gateway error communicating with carrier
16
+ # @raise [Errors::PhoneCouldNotValidateError] http server cannot validate the phone\'s quota
17
+ # @raise [Errors::IPCouldNotValidateError] http server cannot validate the ip's quota
18
+ # @raise [Errors::PhoneQuotaExceededError] the phone's quota has been exceeded
19
+ # @raise [Errors::IPQuotaExceededError] IP's quota has been exceeded
20
+ #
21
+ # @return [Boolean] true if body is valid
22
+ #
4
23
  def validate(phone_number, body)
5
24
  return true if body['message'].nil? && body['success']
6
25
  message = body['message']
@@ -27,6 +46,8 @@ module TextBelt
27
46
  if message.include? 'Exceeded quota for this IP address.'
28
47
  raise TextBelt::Errors::IPQuotaExceededError, message
29
48
  end
49
+
50
+ true
30
51
  end
31
52
  end
32
53
  end
@@ -1,4 +1,4 @@
1
1
  module TextBelt
2
2
  # @private
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
@@ -10,8 +10,8 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["dean.silfen@gmail.com"]
11
11
 
12
12
  spec.summary = %q{A ruby interface for sending texts with http://textbelt.com/}
13
- spec.description = %q{A ruby interface for sending texts with http://textbelt.com/. Complete with configurable textbelt endpoint, in case you are hosting your own instance.}
14
- spec.homepage = "http://www.rubydoc.info/github/djds23/textbelt"
13
+ spec.description = %q{A ruby interface for sending texts with http://textbelt.com/}
14
+ spec.homepage = "https://github.com/djds23/textbelt-gem"
15
15
 
16
16
  # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
17
17
  # delete this section to allow pushing this gem to any host.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: textbelt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dean Silfen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-31 00:00:00.000000000 Z
11
+ date: 2016-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: phonelib
@@ -94,8 +94,7 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description: A ruby interface for sending texts with http://textbelt.com/. Complete
98
- with configurable textbelt endpoint, in case you are hosting your own instance.
97
+ description: A ruby interface for sending texts with http://textbelt.com/
99
98
  email:
100
99
  - dean.silfen@gmail.com
101
100
  executables: []
@@ -112,11 +111,12 @@ files:
112
111
  - bin/setup
113
112
  - lib/textbelt.rb
114
113
  - lib/textbelt/errors.rb
114
+ - lib/textbelt/textutils.rb
115
115
  - lib/textbelt/validators/phone_validator.rb
116
116
  - lib/textbelt/validators/response_validator.rb
117
117
  - lib/textbelt/version.rb
118
118
  - textbelt.gemspec
119
- homepage: http://www.rubydoc.info/github/djds23/textbelt
119
+ homepage: https://github.com/djds23/textbelt-gem
120
120
  licenses: []
121
121
  metadata: {}
122
122
  post_install_message: