action-texter 0.0.1 → 0.1.2.ALPHA
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 +4 -4
- data/.gitignore +1 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +13 -3
- data/action-texter.gemspec +5 -2
- data/lib/action_texter.rb +18 -1
- data/lib/action_texter/configuration.rb +2 -1
- data/lib/action_texter/delivery_methods.rb +80 -0
- data/lib/action_texter/gem_version.rb +3 -3
- data/lib/action_texter/message.rb +13 -18
- data/lib/action_texter/provider/messagebird/delivery.rb +31 -0
- data/lib/action_texter/provider/messagebird/response.rb +33 -0
- data/lib/action_texter/provider/messagebird/response_error.rb +33 -0
- data/lib/action_texter/provider/messagebird/response_success.rb +75 -0
- data/lib/action_texter/provider/test_message/delivery.rb +24 -0
- metadata +44 -12
- data/lib/action_texter/validator/message.rb +0 -53
- data/lib/action_texter/validator/request.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 45e843e360fc7a106fd3dfe21bb8610a2c5ed871
|
4
|
+
data.tar.gz: d28db3155f8faceb11f91c8b9495400adf2785e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e00fde1bd22e3d68d28701faae5eeb4e46b330114a9cb66340c2141b23d2588e35eb9351831de9dc0689ea0e12b0d900e95473b8417888a471d44753017fa302
|
7
|
+
data.tar.gz: 2924abaedaba3c1020e41b0c819494d0404765238564c024fc0e4eb1951dba018d5239aa6851fa9caa907fd984a4da870925f70494b8fc82c2e84260d702c808
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
action-texter (0.
|
4
|
+
action-texter (0.1.2.ALPHA)
|
5
|
+
class_attribute (~> 0.1)
|
6
|
+
facets (~> 3.0)
|
5
7
|
json
|
6
|
-
phony (~> 2.12)
|
7
8
|
|
8
9
|
GEM
|
9
10
|
remote: https://rubygems.org/
|
10
11
|
specs:
|
11
12
|
addressable (2.3.8)
|
13
|
+
class_attribute (0.1.3)
|
14
|
+
coderay (1.1.0)
|
12
15
|
coveralls (0.8.5)
|
13
16
|
json (~> 1.8)
|
14
17
|
rest-client (>= 1.6.8, < 2)
|
@@ -21,13 +24,18 @@ GEM
|
|
21
24
|
docile (1.1.5)
|
22
25
|
domain_name (0.5.25)
|
23
26
|
unf (>= 0.0.5, < 1.0.0)
|
27
|
+
facets (3.0.0)
|
24
28
|
hashdiff (0.2.3)
|
25
29
|
http-cookie (1.0.2)
|
26
30
|
domain_name (~> 0.5)
|
27
31
|
json (1.8.3)
|
32
|
+
method_source (0.8.2)
|
28
33
|
mime-types (2.99)
|
29
34
|
netrc (0.11.0)
|
30
|
-
|
35
|
+
pry (0.10.3)
|
36
|
+
coderay (~> 1.1.0)
|
37
|
+
method_source (~> 0.8.1)
|
38
|
+
slop (~> 3.4)
|
31
39
|
rake (10.4.2)
|
32
40
|
rest-client (1.8.0)
|
33
41
|
http-cookie (>= 1.0.2, < 2.0)
|
@@ -52,6 +60,7 @@ GEM
|
|
52
60
|
json (~> 1.8)
|
53
61
|
simplecov-html (~> 0.10.0)
|
54
62
|
simplecov-html (0.10.0)
|
63
|
+
slop (3.6.0)
|
55
64
|
term-ansicolor (1.3.2)
|
56
65
|
tins (~> 1.0)
|
57
66
|
thor (0.19.1)
|
@@ -71,6 +80,7 @@ DEPENDENCIES
|
|
71
80
|
action-texter!
|
72
81
|
bundler (~> 1.10)
|
73
82
|
coveralls
|
83
|
+
pry
|
74
84
|
rake (~> 10.0)
|
75
85
|
rspec (~> 3.0)
|
76
86
|
simplecov
|
data/action-texter.gemspec
CHANGED
@@ -23,12 +23,15 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency 'rake', '~> 10.0'
|
24
24
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
25
25
|
spec.add_development_dependency 'webmock', '~> 1.0'
|
26
|
+
spec.add_development_dependency 'pry'
|
26
27
|
|
27
28
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0')
|
28
|
-
|
29
|
+
|
29
30
|
spec.add_runtime_dependency 'json'
|
31
|
+
spec.add_runtime_dependency 'facets', '~> 3.0'
|
32
|
+
spec.add_runtime_dependency 'class_attribute', '~> 0.1'
|
30
33
|
else
|
31
|
-
spec.
|
34
|
+
spec.add_runtime_dependency 'facets', '~> 3.0'
|
32
35
|
spec.add_dependency 'json'
|
33
36
|
end
|
34
37
|
end
|
data/lib/action_texter.rb
CHANGED
@@ -1,13 +1,29 @@
|
|
1
1
|
require 'action_texter/configuration'
|
2
|
-
|
2
|
+
require 'pry'
|
3
3
|
module ActionTexter
|
4
|
+
|
4
5
|
autoload :Messenger, 'action_texter/messenger'
|
5
6
|
autoload :Message, 'action_texter/message'
|
6
7
|
autoload :Request, 'action_texter/request'
|
7
8
|
autoload :Helper, 'action_texter/helper'
|
8
9
|
autoload :MessageDelivery, 'action_texter/message_delivery'
|
10
|
+
autoload :DeliveryMethods, 'action_texter/delivery_methods'
|
11
|
+
|
12
|
+
module Provider
|
13
|
+
module Messagebird
|
14
|
+
autoload :Delivery, 'action_texter/provider/messagebird/delivery'
|
15
|
+
autoload :Response, 'action_texter/provider/messagebird/response'
|
16
|
+
autoload :ErrorResponse, 'action_texter/provider/messagebird/response_error'
|
17
|
+
autoload :SuccessMessagebird, 'action_texter/provider/messagebird/response_success'
|
18
|
+
end
|
19
|
+
|
20
|
+
module TestMessage
|
21
|
+
autoload :Delivery, 'action_texter/provider/test_message/delivery'
|
22
|
+
end
|
23
|
+
end
|
9
24
|
|
10
25
|
class << self
|
26
|
+
|
11
27
|
def configure
|
12
28
|
yield(configuration)
|
13
29
|
end
|
@@ -17,5 +33,6 @@ module ActionTexter
|
|
17
33
|
end
|
18
34
|
|
19
35
|
alias_method :config, :configuration
|
36
|
+
|
20
37
|
end
|
21
38
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module ActionTexter
|
2
2
|
class Configuration
|
3
|
-
attr_accessor :from, :to, :endpoint, :path, :product_token, :content_type
|
3
|
+
attr_accessor :from, :to, :endpoint, :path, :product_token, :content_type, :delivery_method
|
4
4
|
|
5
5
|
alias_method :api_key=, :product_token=
|
6
6
|
|
@@ -12,6 +12,7 @@ module ActionTexter
|
|
12
12
|
@endpoint = 'https://rest.sms-service.com'
|
13
13
|
@path = '/messages'
|
14
14
|
@content_type = 'application/json'
|
15
|
+
@delivery_method = :test
|
15
16
|
end
|
16
17
|
end
|
17
18
|
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
require 'facets/module/cattr'
|
3
|
+
require 'class_attribute'
|
4
|
+
|
5
|
+
module ActionTexter
|
6
|
+
# This module handles everything related to mail delivery, from registering new
|
7
|
+
# delivery methods to configuring the mail object to be sent.
|
8
|
+
module DeliveryMethods
|
9
|
+
def self.included(base)
|
10
|
+
base.extend ClassMethods
|
11
|
+
base.include ClassAttribute
|
12
|
+
base.class_eval do
|
13
|
+
# Do not make this inheritable, because we always want it to propagate
|
14
|
+
cattr_accessor :raise_delivery_errors
|
15
|
+
self.raise_delivery_errors = true
|
16
|
+
|
17
|
+
cattr_accessor :perform_deliveries
|
18
|
+
self.perform_deliveries = true
|
19
|
+
|
20
|
+
self.delivery_methods = {}.freeze
|
21
|
+
|
22
|
+
# add_delivery_method :file, ActionTexter::FileDelivery,
|
23
|
+
#:location => defined?(Rails.root) ? "#{Rails.root}/tmp/texts" : "#{Dir.tmpdir}/texts"
|
24
|
+
add_delivery_method :test, ActionTexter::Provider::TestMessage::Delivery
|
25
|
+
add_delivery_method :messagebird, ActionTexter::Provider::Messagebird::Delivery, { endpoint: 'https://rest.messagebird.com', path: '/messages' }
|
26
|
+
# add_delivery_method :twilio, ActionTexter::TwilioDelivery
|
27
|
+
# add_delivery_method :whitelist_proxy, ActionTexter::WhitelistProxyDelivery
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module ClassMethods
|
32
|
+
extend Forwardable
|
33
|
+
cattr_accessor :delivery_methods, :delivery_method
|
34
|
+
# attr_accessor
|
35
|
+
# Provides a list of SMS messages that have been delivered by ActionTexter::TestDelivery
|
36
|
+
delegate deliveries: ActionTexter::Provider::TestMessage::Delivery
|
37
|
+
delegate :deliveries= => ActionTexter::Provider::TestMessage::Delivery
|
38
|
+
|
39
|
+
# Adds a new delivery method through the given class using the given symbol
|
40
|
+
# as alias and the default options supplied:
|
41
|
+
#
|
42
|
+
# Example:
|
43
|
+
#
|
44
|
+
# add_delivery_method :sendmail, Mail::Sendmail,
|
45
|
+
# :location => '/usr/sbin/sendmail',
|
46
|
+
# :arguments => '-i -t'
|
47
|
+
#
|
48
|
+
def add_delivery_method(symbol, klass, default_options = {})
|
49
|
+
class_attribute(:"#{symbol}_settings") unless respond_to?(:"#{symbol}_settings")
|
50
|
+
send(:"#{symbol}_settings=", default_options)
|
51
|
+
self.delivery_methods = delivery_methods.merge(symbol.to_sym => klass).freeze
|
52
|
+
end
|
53
|
+
|
54
|
+
def wrap_delivery_behavior(message, method = nil) #:nodoc:
|
55
|
+
method ||= delivery_method
|
56
|
+
message.delivery_handler = self
|
57
|
+
|
58
|
+
case method
|
59
|
+
when NilClass
|
60
|
+
fail 'Delivery method cannot be nil'
|
61
|
+
when Symbol
|
62
|
+
if klass = delivery_methods[method.to_sym]
|
63
|
+
message.delivery_method(klass, send(:"#{method}_settings"))
|
64
|
+
else
|
65
|
+
fail "Invalid delivery method #{method.inspect}"
|
66
|
+
end
|
67
|
+
else
|
68
|
+
message.delivery_method(method)
|
69
|
+
end
|
70
|
+
|
71
|
+
message.perform_deliveries = perform_deliveries
|
72
|
+
message.raise_delivery_errors = raise_delivery_errors
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def wrap_delivery_behavior!(*args) #:nodoc:
|
77
|
+
self.class.wrap_delivery_behavior(*args)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -1,38 +1,33 @@
|
|
1
|
-
require 'phony'
|
2
|
-
require 'action_texter/request'
|
3
|
-
require 'action_texter/validator/message'
|
4
1
|
|
5
2
|
module ActionTexter
|
6
3
|
class Message
|
7
|
-
|
4
|
+
include DeliveryMethods
|
5
|
+
attr_accessor :from, :to, :body, :reference, :delivery_handler
|
6
|
+
attr_reader :delivery_method, :delivery_options
|
8
7
|
|
9
8
|
def initialize(attributes = {})
|
10
9
|
@from = attributes[:from]
|
11
10
|
@to = attributes[:to]
|
12
11
|
@body = attributes[:body]
|
13
12
|
@reference = attributes[:reference]
|
14
|
-
|
15
|
-
|
16
|
-
def request
|
17
|
-
Request.new(to_json)
|
13
|
+
wrap_delivery_behavior!(self, ActionTexter.config.delivery_method)
|
18
14
|
end
|
19
15
|
|
20
16
|
def deliver
|
21
|
-
|
17
|
+
@delivery_method.deliver(self)
|
18
|
+
# request.perform if valid?
|
22
19
|
end
|
23
20
|
|
24
21
|
def deliver!
|
25
|
-
deliver
|
26
|
-
end
|
27
|
-
|
28
|
-
def valid?
|
29
|
-
ActionTexter::Validator::Message.new self
|
22
|
+
deliver
|
30
23
|
end
|
31
24
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
|
25
|
+
def delivery_method(method = nil, opts = {})
|
26
|
+
unless method
|
27
|
+
@delivery_method
|
28
|
+
else
|
29
|
+
@delivery_method = method.new(opts)
|
30
|
+
end
|
36
31
|
end
|
37
32
|
end
|
38
33
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'json'
|
2
|
+
module ActionTexter
|
3
|
+
module Provider
|
4
|
+
module Messagebird
|
5
|
+
class Delivery
|
6
|
+
attr_accessor :body
|
7
|
+
attr_reader :response
|
8
|
+
|
9
|
+
def initialize(settings)
|
10
|
+
@endpoint = settings[:endpoint]
|
11
|
+
@path = settings[:path]
|
12
|
+
end
|
13
|
+
|
14
|
+
def deliver message
|
15
|
+
binding.pry
|
16
|
+
uri = URI.parse( @endpoint )
|
17
|
+
Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
|
18
|
+
@response = Response.new(http.post(@path, to_json(message), 'Authorization' => "AccessKey #{ActionTexter.config.product_token}", 'Content-Type' => 'application/json'))
|
19
|
+
end
|
20
|
+
response
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_json message
|
24
|
+
JSON.generate(recipients: message.to,
|
25
|
+
originator: message.from,
|
26
|
+
body: message.body)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module ActionTexter
|
2
|
+
module Provider
|
3
|
+
module Messagebird
|
4
|
+
|
5
|
+
class Response
|
6
|
+
attr_reader :net_http_response, :body, :code
|
7
|
+
|
8
|
+
def initialize(net_http_response)
|
9
|
+
@net_http_response = net_http_response
|
10
|
+
@body = @net_http_response.body
|
11
|
+
@code = @net_http_response.code
|
12
|
+
end
|
13
|
+
|
14
|
+
def success?
|
15
|
+
code.to_i == 201
|
16
|
+
end
|
17
|
+
|
18
|
+
def failure?
|
19
|
+
!success?
|
20
|
+
end
|
21
|
+
|
22
|
+
def body
|
23
|
+
if success?
|
24
|
+
SuccessResponse.new(@body)
|
25
|
+
else
|
26
|
+
ErrorResponse.new(@body)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'json'
|
2
|
+
module ActionTexter
|
3
|
+
module Provider
|
4
|
+
module Messagebird
|
5
|
+
class ErrorResponse
|
6
|
+
|
7
|
+
attr_reader :code, :description
|
8
|
+
|
9
|
+
ERROR_CODES = {
|
10
|
+
2 => 'Request not allowed',
|
11
|
+
9 => 'Missing params',
|
12
|
+
10 => 'Invalid params',
|
13
|
+
20 => 'Not found',
|
14
|
+
25 => 'Not enough balance',
|
15
|
+
98 => 'API not found',
|
16
|
+
99 => 'Internal error'
|
17
|
+
}
|
18
|
+
|
19
|
+
def initialize(error)
|
20
|
+
@errors = JSON.parse(error, symbolize_names: true)[:errors]
|
21
|
+
end
|
22
|
+
|
23
|
+
def errors
|
24
|
+
@errors.map { |e| e.merge(error_message: ERROR_CODES[e[:code]]) }
|
25
|
+
end
|
26
|
+
|
27
|
+
def count
|
28
|
+
@errors.count
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# rubocop:disable Metrics/AbcSize
|
2
|
+
# rubocop:disable MethodLength
|
3
|
+
require 'json'
|
4
|
+
module MessagebirdTexter
|
5
|
+
class Response
|
6
|
+
class Body
|
7
|
+
attr_reader :id,
|
8
|
+
:href,
|
9
|
+
:direction,
|
10
|
+
:type,
|
11
|
+
:originator,
|
12
|
+
:content,
|
13
|
+
:reference,
|
14
|
+
:validity,
|
15
|
+
:gateway,
|
16
|
+
:datacoding,
|
17
|
+
:mclass,
|
18
|
+
:scheduled_datetime,
|
19
|
+
:created_datetime,
|
20
|
+
:recipients
|
21
|
+
|
22
|
+
def initialize(body)
|
23
|
+
parsed_body = JSON.parse(body, symbolize_names: true)
|
24
|
+
@id = parsed_body[:id]
|
25
|
+
@href = parsed_body[:href]
|
26
|
+
@direction = parsed_body[:direction]
|
27
|
+
@type = parsed_body[:type]
|
28
|
+
@originator = parsed_body[:originator]
|
29
|
+
@content = parsed_body[:body]
|
30
|
+
@reference = parsed_body[:reference]
|
31
|
+
@validity = parsed_body[:validity]
|
32
|
+
@gateway = parsed_body[:gateway]
|
33
|
+
@datacoding = parsed_body[:datacoding]
|
34
|
+
@mclass = parsed_body[:mclass]
|
35
|
+
@scheduled_datetime = parsed_body[:scheduledDatetime]
|
36
|
+
@created_datetime = parsed_body[:createdDatetime]
|
37
|
+
@recipients = parsed_body[:recipients]
|
38
|
+
end
|
39
|
+
|
40
|
+
def scheduled_datetime
|
41
|
+
Date.parse(@scheduled_datetime) unless @scheduled_datetime.nil?
|
42
|
+
end
|
43
|
+
|
44
|
+
def created_datetime
|
45
|
+
Date.parse(@created_datetime) unless @created_datetime.nil?
|
46
|
+
end
|
47
|
+
|
48
|
+
def recipients
|
49
|
+
OpenStruct.new(
|
50
|
+
total_count: @recipients[:totalCount],
|
51
|
+
total_sent_count: @recipients[:totalSentCount],
|
52
|
+
total_delivered_count: @recipients[:totalDeliveredCount],
|
53
|
+
items: items
|
54
|
+
|
55
|
+
) unless @recipients.nil?
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def items
|
61
|
+
@recipients[:items].map do |i|
|
62
|
+
OpenStruct.new(item(i))
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def item(item)
|
67
|
+
{
|
68
|
+
recipient: item[:recipient],
|
69
|
+
status: item[:status],
|
70
|
+
status_datetime: Date.parse(item[:statusDatetime])
|
71
|
+
}
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'class_attribute'
|
2
|
+
module ActionTexter
|
3
|
+
module Provider
|
4
|
+
module TestMessage
|
5
|
+
class Delivery
|
6
|
+
include ClassAttribute
|
7
|
+
cattr_accessor :deliveries
|
8
|
+
self.deliveries = []
|
9
|
+
|
10
|
+
def initialize(config = {})
|
11
|
+
end
|
12
|
+
|
13
|
+
def deliver(message)
|
14
|
+
self.class.deliveries << message
|
15
|
+
deliveries
|
16
|
+
end
|
17
|
+
|
18
|
+
def truncate
|
19
|
+
self.class.deliveries = []
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: action-texter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.2.ALPHA
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- oliverzeyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -67,19 +67,19 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: pry
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
76
|
-
type: :
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: json
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +94,34 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: facets
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: class_attribute
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.1'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.1'
|
97
125
|
description: Send text messages by means of the HTTP protocol via a HTTP driven sms
|
98
126
|
provider
|
99
127
|
email:
|
@@ -117,15 +145,19 @@ files:
|
|
117
145
|
- bin/setup
|
118
146
|
- lib/action_texter.rb
|
119
147
|
- lib/action_texter/configuration.rb
|
148
|
+
- lib/action_texter/delivery_methods.rb
|
120
149
|
- lib/action_texter/gem_version.rb
|
121
150
|
- lib/action_texter/helper.rb
|
122
151
|
- lib/action_texter/message.rb
|
123
152
|
- lib/action_texter/message_delivery.rb
|
124
153
|
- lib/action_texter/messenger.rb
|
154
|
+
- lib/action_texter/provider/messagebird/delivery.rb
|
155
|
+
- lib/action_texter/provider/messagebird/response.rb
|
156
|
+
- lib/action_texter/provider/messagebird/response_error.rb
|
157
|
+
- lib/action_texter/provider/messagebird/response_success.rb
|
158
|
+
- lib/action_texter/provider/test_message/delivery.rb
|
125
159
|
- lib/action_texter/request.rb
|
126
160
|
- lib/action_texter/response.rb
|
127
|
-
- lib/action_texter/validator/message.rb
|
128
|
-
- lib/action_texter/validator/request.rb
|
129
161
|
- lib/action_texter/version.rb
|
130
162
|
homepage: https://github.com/HitFox/action-texter
|
131
163
|
licenses:
|
@@ -142,9 +174,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
142
174
|
version: '0'
|
143
175
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
176
|
requirements:
|
145
|
-
- - "
|
177
|
+
- - ">"
|
146
178
|
- !ruby/object:Gem::Version
|
147
|
-
version:
|
179
|
+
version: 1.3.1
|
148
180
|
requirements: []
|
149
181
|
rubyforge_project:
|
150
182
|
rubygems_version: 2.4.8
|
@@ -1,53 +0,0 @@
|
|
1
|
-
module ActionTexter
|
2
|
-
module Validator
|
3
|
-
class Message
|
4
|
-
class FromTooLong < ArgumentError; end
|
5
|
-
class FromMissing < ArgumentError; end
|
6
|
-
class ToMissing < ArgumentError; end
|
7
|
-
class BodyMissing < ArgumentError; end
|
8
|
-
class BodyTooLong < ArgumentError; end
|
9
|
-
class ToUnplausible < ArgumentError; end
|
10
|
-
|
11
|
-
attr_reader :message
|
12
|
-
|
13
|
-
def initialize(message)
|
14
|
-
@message = message
|
15
|
-
|
16
|
-
fail FromMissing, 'The value for the from attribute is missing.' unless sender_present?
|
17
|
-
fail FromTooLong, 'The value for the sender attribute must contain 1..11 characters.' unless sender_length?
|
18
|
-
fail ToMissing, 'The value for the to attribute is missing.' unless receiver_present?
|
19
|
-
fail BodyMissing, 'The body of the message is missing.' unless body_present?
|
20
|
-
fail BodyTooLong, 'The body of the message has a length greater than 160.' unless body_correct_length?
|
21
|
-
fail ToUnplausible, "The given value for the to attribute is not a plausible phone number.\nMaybe the country code is missing." unless receiver_plausible?
|
22
|
-
end
|
23
|
-
|
24
|
-
def receiver_plausible?
|
25
|
-
receiver_present? && Phony.plausible?(message.to)
|
26
|
-
end
|
27
|
-
|
28
|
-
def receiver_present?
|
29
|
-
!message.to.nil? && !message.to.empty?
|
30
|
-
end
|
31
|
-
|
32
|
-
def sender_present?
|
33
|
-
!message.from.nil? && !message.from.empty?
|
34
|
-
end
|
35
|
-
|
36
|
-
def sender_length?
|
37
|
-
sender_present? && message.from.length <= 11
|
38
|
-
end
|
39
|
-
|
40
|
-
def body_present?
|
41
|
-
!message.body.nil? && !message.body.empty?
|
42
|
-
end
|
43
|
-
|
44
|
-
def body_correct_length?
|
45
|
-
body_present? && message.body.length <= 160
|
46
|
-
end
|
47
|
-
|
48
|
-
def product_token_present?
|
49
|
-
!ActionTexter.config.product_token.nil? && !ActionTexter.config.product_token.empty?
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module ActionTexter
|
2
|
-
module Validator
|
3
|
-
class Request
|
4
|
-
class ProductTokenMissing < ArgumentError; end
|
5
|
-
class EndpointMissing < ArgumentError; end
|
6
|
-
class PathMissing < ArgumentError; end
|
7
|
-
class ContentTypeMissing < ArgumentError; end
|
8
|
-
|
9
|
-
def initialize
|
10
|
-
@endpoint = ActionTexter.config.endpoint
|
11
|
-
@path = ActionTexter.config.path
|
12
|
-
@content_type = ActionTexter.config.content_type
|
13
|
-
@api_key = ActionTexter.config.product_token
|
14
|
-
|
15
|
-
validate
|
16
|
-
end
|
17
|
-
|
18
|
-
def validate
|
19
|
-
fail EndpointMissing, "Please provide an valid api endpoint.\nIf you leave this config blank, the default will be set to https://rest.sms-service.org ." if @endpoint.nil? || @endpoint.empty?
|
20
|
-
fail ContentTypeMissing, 'Please provide a valid content_type! Defaults to application/json' if @content_type.nil? || @content_type.empty?
|
21
|
-
fail PathMissing, "Please provide an valid api path.\nIf you leave this config blank, the default will be set to /message." if @path.nil? || @path.empty?
|
22
|
-
fail ProductTokenMissing, "Please provide an valid product key.\nAfter signup at https://www.messagebird.com/, you will find one in your settings." if @api_key.nil?
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|