textbelt 0.1.0 → 0.1.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.
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: