tms_client 0.0.2
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.
- data/Gemfile +2 -0
- data/README.md +134 -0
- data/Rakefile +8 -0
- data/lib/tms_client/base.rb +28 -0
- data/lib/tms_client/client.rb +80 -0
- data/lib/tms_client/collection_resource.rb +53 -0
- data/lib/tms_client/connection.rb +30 -0
- data/lib/tms_client/instance_resource.rb +175 -0
- data/lib/tms_client/logger.rb +34 -0
- data/lib/tms_client/request.rb +17 -0
- data/lib/tms_client/resource/collections.rb +49 -0
- data/lib/tms_client/resource/command.rb +24 -0
- data/lib/tms_client/resource/command_type.rb +19 -0
- data/lib/tms_client/resource/commands.rb +3 -0
- data/lib/tms_client/resource/email.rb +9 -0
- data/lib/tms_client/resource/email_recipient.rb +7 -0
- data/lib/tms_client/resource/inbound_message.rb +7 -0
- data/lib/tms_client/resource/keyword.rb +22 -0
- data/lib/tms_client/resource/recipient.rb +8 -0
- data/lib/tms_client/resource/sms_message.rb +9 -0
- data/lib/tms_client/resource/voice_message.rb +13 -0
- data/lib/tms_client/util/core_ext.rb +27 -0
- data/lib/tms_client/util/hal_link_parser.rb +50 -0
- data/lib/tms_client/version.rb +3 -0
- data/lib/tms_client.rb +30 -0
- data/spec/client_spec.rb +25 -0
- data/spec/command_types_spec.rb +20 -0
- data/spec/inbound_messages_spec.rb +19 -0
- data/spec/keyword_spec.rb +58 -0
- data/spec/keywords_spec.rb +21 -0
- data/spec/message_spec.rb +55 -0
- data/spec/messages_spec.rb +21 -0
- data/spec/spec_helper.rb +30 -0
- data/spec/tms_client_spec.rb +7 -0
- data/tms_client.gemspec +37 -0
- metadata +208 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
module TMS #:nodoc:
|
2
|
+
# A Keyword is a word that TMS will detect in an incoming SMS message. Keywords can have Commands, and
|
3
|
+
# when an incoming text message has a keyword, TMS will execute the keyword's Commands.
|
4
|
+
#
|
5
|
+
# ==== Attributes
|
6
|
+
#
|
7
|
+
# * +name+ - The name of the keyword.
|
8
|
+
#
|
9
|
+
# === Examples
|
10
|
+
# keyword = client.keywords.build(:name => "HOWDY")
|
11
|
+
# keyword.post
|
12
|
+
# keyword.name = "DOODY"
|
13
|
+
# keyword.put
|
14
|
+
# keyword.delete
|
15
|
+
class Keyword
|
16
|
+
include InstanceResource
|
17
|
+
|
18
|
+
writeable_attributes :name
|
19
|
+
collection_attributes :commands
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module TMS::CoreExt
|
4
|
+
def demodulize(path)
|
5
|
+
ActiveSupport::Inflector.demodulize(path)
|
6
|
+
end
|
7
|
+
|
8
|
+
def classify(str)
|
9
|
+
ActiveSupport::Inflector.camelize(str)
|
10
|
+
end
|
11
|
+
|
12
|
+
def singularize(str)
|
13
|
+
ActiveSupport::Inflector.singularize(str)
|
14
|
+
end
|
15
|
+
|
16
|
+
def pluralize(str)
|
17
|
+
ActiveSupport::Inflector.pluralize(str)
|
18
|
+
end
|
19
|
+
|
20
|
+
def tmsify(klassname)
|
21
|
+
ActiveSupport::Inflector.underscore(demodulize(klassname))
|
22
|
+
end
|
23
|
+
|
24
|
+
def instance_class(klass)
|
25
|
+
ActiveSupport::Inflector.constantize(singularize(klass.to_s))
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module TMS::Util
|
2
|
+
module HalLinkParser
|
3
|
+
|
4
|
+
#def self.included(base)
|
5
|
+
# base.send(:include, TMS::CoreExt)
|
6
|
+
#end
|
7
|
+
|
8
|
+
def parse_links(_links)
|
9
|
+
@resources = {}
|
10
|
+
return if _links.nil?
|
11
|
+
parse_link(_links) and return if _links.is_a?(Hash)
|
12
|
+
_links.each { |link| parse_link(link) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def subresources
|
16
|
+
@resources
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def metaclass
|
22
|
+
@metaclass ||= class << self;
|
23
|
+
self;
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def parse_link(link)
|
28
|
+
link.each do |rel, href|
|
29
|
+
if rel == 'self'
|
30
|
+
self.href = href
|
31
|
+
else
|
32
|
+
klass = ::TMS.const_get(classify(rel)) rescue nil
|
33
|
+
klass = self.class if ['first', 'prev', 'next', 'last'].include?(rel)
|
34
|
+
if klass
|
35
|
+
subresources[rel] = klass.new(self.client, href)
|
36
|
+
setup_subresource(link)
|
37
|
+
else
|
38
|
+
puts "Don't know what to do with link rel '#{rel}' for class #{self.class.to_s}!"
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def setup_subresource(link)
|
46
|
+
return unless link
|
47
|
+
link.each { |rel, href| self.metaclass.send(:define_method, rel.to_sym, &lambda { subresources[rel] }) unless rel == 'self' }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/tms_client.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module TMS #:nodoc:
|
2
|
+
end
|
3
|
+
|
4
|
+
require 'active_support'
|
5
|
+
require 'tms_client/version'
|
6
|
+
require 'faraday'
|
7
|
+
require 'link_header'
|
8
|
+
require 'faraday_middleware'
|
9
|
+
|
10
|
+
require 'tms_client/util/hal_link_parser'
|
11
|
+
require 'tms_client/util/core_ext'
|
12
|
+
require 'tms_client/connection'
|
13
|
+
require 'tms_client/client'
|
14
|
+
require 'tms_client/logger'
|
15
|
+
require 'tms_client/base'
|
16
|
+
require 'tms_client/instance_resource'
|
17
|
+
require 'tms_client/collection_resource'
|
18
|
+
require 'tms_client/request'
|
19
|
+
|
20
|
+
require 'tms_client/resource/collections'
|
21
|
+
require 'tms_client/resource/recipient'
|
22
|
+
require 'tms_client/resource/email_recipient'
|
23
|
+
require 'tms_client/resource/sms_message'
|
24
|
+
require 'tms_client/resource/voice_message'
|
25
|
+
require 'tms_client/resource/inbound_message'
|
26
|
+
require 'tms_client/resource/command_type'
|
27
|
+
require 'tms_client/resource/command'
|
28
|
+
require 'tms_client/resource/commands'
|
29
|
+
require 'tms_client/resource/keyword'
|
30
|
+
require 'tms_client/resource/email'
|
data/spec/client_spec.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
describe TMS::Client do
|
3
|
+
context "creating a new client" do
|
4
|
+
before do
|
5
|
+
response = double('response', :status=>200, :body => {"_links" => [{"self" => "/"}, {"horse" => "/horses/new"}, {"rabbits" => "/rabbits"}]})
|
6
|
+
@raw_connection = double('raw_connection', :get => response)
|
7
|
+
@connection = TMS::Connection.stub(:new).and_return(double('connection', :connection => @raw_connection))
|
8
|
+
@client = TMS::Client.new('username', 'password', :api_root => 'null_url')
|
9
|
+
end
|
10
|
+
it 'should discover endpoints for known services' do
|
11
|
+
@client.horse.should be_kind_of(TMS::Horse)
|
12
|
+
@client.rabbits.should be_kind_of(TMS::Rabbits)
|
13
|
+
end
|
14
|
+
it 'should handle 4xx responses' do
|
15
|
+
@raw_connection.stub(:get).and_return(double('response', :status => 404, :body => {'message' => 'hi'}))
|
16
|
+
expect { @client.get('/blargh') }.to raise_error(TMS::Request::Error)
|
17
|
+
end
|
18
|
+
it 'should handle 202 responses' do
|
19
|
+
@raw_connection.stub(:get).and_return(double('response', :status => 202, :body => {'message' => 'hi'}))
|
20
|
+
expect { @client.get('/blargh') }.to raise_error(TMS::Request::InProgress)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe TMS::CommandTypes do
|
4
|
+
context "loading command types" do
|
5
|
+
let(:client) do
|
6
|
+
double('client')
|
7
|
+
end
|
8
|
+
before do
|
9
|
+
@command_types = TMS::CommandTypes.new(client, '/command_types')
|
10
|
+
end
|
11
|
+
it 'should GET ok' do
|
12
|
+
body = [{"fields"=>["dcm_account_codes"], "name"=>"dcm_unsubscribe"},
|
13
|
+
{"fields"=>["dcm_account_code", "dcm_topic_codes"], "name"=>"dcm_subscribe"},
|
14
|
+
{"fields"=>["http_method", "username", "password", "url"], "name"=>"forward"}]
|
15
|
+
@command_types.client.should_receive(:get).and_return(double('response', :body => body, :status => 200, :headers => {}))
|
16
|
+
@command_types.get
|
17
|
+
@command_types.collection.length.should == 3
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe TMS::InboundMessages do
|
4
|
+
context "creating a new inbound messages list" do
|
5
|
+
let(:client) do
|
6
|
+
double('client')
|
7
|
+
end
|
8
|
+
before do
|
9
|
+
@messages = TMS::InboundMessages.new(client, '/inbound_messages')
|
10
|
+
end
|
11
|
+
it 'should GET itself' do
|
12
|
+
body = [{:body=>"HELP", :from=>"+16125551212", :created_at=>"a while ago", :to=>"(651) 433-6258"}, {:body=>"STOP", :from=>"+16125551212", :created_at=>"a while ago", :to=>"(651) 433-6258"}]
|
13
|
+
@messages.client.should_receive(:get).and_return(double('response', :body => body, :status => 200, :headers => {}))
|
14
|
+
|
15
|
+
@messages.get
|
16
|
+
@messages.collection.length.should == 2
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe TMS::Keyword do
|
4
|
+
context "creating a new keyword" do
|
5
|
+
let(:client) do
|
6
|
+
double('client')
|
7
|
+
end
|
8
|
+
before do
|
9
|
+
@keyword = TMS::Keyword.new(client, nil, {:name => 'LOL'})
|
10
|
+
end
|
11
|
+
it 'should initialize with attrs' do
|
12
|
+
@keyword.name.should == 'LOL'
|
13
|
+
end
|
14
|
+
it 'should post successfully' do
|
15
|
+
response = {:name => 'lol'}
|
16
|
+
@keyword.client.should_receive('post').with(@keyword).and_return(double('response', :status => 201, :body => response))
|
17
|
+
@keyword.post
|
18
|
+
@keyword.name.should == 'lol'
|
19
|
+
end
|
20
|
+
it 'should handle errors' do
|
21
|
+
response = {'errors' => {:name => "can't be nil"}}
|
22
|
+
@keyword.client.should_receive('post').with(@keyword).and_return(double('response', :status => 422, :body => response))
|
23
|
+
@keyword.post
|
24
|
+
@keyword.name.should == 'LOL'
|
25
|
+
@keyword.errors.should == {:name => "can't be nil"}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'an existing keyword' do
|
30
|
+
let(:client) do
|
31
|
+
double('client')
|
32
|
+
end
|
33
|
+
before do
|
34
|
+
# blank hash prevents the client from doing a GET in the initialize method
|
35
|
+
@keyword = TMS::Keyword.new(client, '/keywords/99', {})
|
36
|
+
end
|
37
|
+
it 'should GET cleanly' do
|
38
|
+
response = {:name => 'FOO'}
|
39
|
+
@keyword.client.should_receive('get').with(@keyword.href).and_return(double('response', :status => 200, :body => response))
|
40
|
+
@keyword.get
|
41
|
+
@keyword.name.should == 'FOO'
|
42
|
+
end
|
43
|
+
it 'should PUT cleanly' do
|
44
|
+
@keyword.name = "GOVLIE"
|
45
|
+
response = {:name => 'govlie'}
|
46
|
+
@keyword.client.should_receive('put').with(@keyword).and_return(double('response', :status => 200, :body => response))
|
47
|
+
@keyword.put
|
48
|
+
@keyword.name.should == 'govlie'
|
49
|
+
|
50
|
+
end
|
51
|
+
it 'should DELETE cleanly' do
|
52
|
+
@keyword.client.should_receive('delete').with(@keyword.href).and_return(double('response', :status => 200, :body => ''))
|
53
|
+
@keyword.delete
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe TMS::Keywords do
|
4
|
+
context "loading keywords" do
|
5
|
+
let(:client) do
|
6
|
+
double('client')
|
7
|
+
end
|
8
|
+
before do
|
9
|
+
@keywords = TMS::Keywords.new(client, '/keywords')
|
10
|
+
end
|
11
|
+
it 'should GET ok' do
|
12
|
+
body = [
|
13
|
+
{"name"=>"services", "_links"=>{"self"=>"/keywords/1"}},
|
14
|
+
{"name"=>"subscribe", "_links"=>{"self"=>"/keywords/2"}}
|
15
|
+
]
|
16
|
+
@keywords.client.should_receive(:get).and_return(double('response', :body => body, :status => 200, :headers => {}))
|
17
|
+
@keywords.get
|
18
|
+
@keywords.collection.length.should == 2
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe TMS::SmsMessage do
|
4
|
+
context "creating a new message" do
|
5
|
+
let(:client) do
|
6
|
+
double('client')
|
7
|
+
end
|
8
|
+
before do
|
9
|
+
@message = TMS::SmsMessage.new(client, nil, {:body => '12345678', :created_at => 'BAAAAAD'})
|
10
|
+
end
|
11
|
+
it 'should not render readonly attrs in json hash' do
|
12
|
+
@message.to_json[:body].should == '12345678'
|
13
|
+
@message.to_json[:created_at].should == nil
|
14
|
+
end
|
15
|
+
it 'should initialize with attrs and collections' do
|
16
|
+
@message.body.should == '12345678'
|
17
|
+
@message.recipients.class.should == TMS::Recipients
|
18
|
+
end
|
19
|
+
it 'should post successfully' do
|
20
|
+
response = {:body => 'processed', :recipients => [{:phone => '22345678'}], :created_at => 'time'}
|
21
|
+
@message.client.should_receive('post').with(@message).and_return(double('response', :status => 201, :body => response))
|
22
|
+
@message.post
|
23
|
+
@message.body.should == 'processed'
|
24
|
+
@message.created_at.should == 'time'
|
25
|
+
@message.recipients.class.should == TMS::Recipients
|
26
|
+
@message.recipients.collection.first.class.should == TMS::Recipient
|
27
|
+
end
|
28
|
+
it 'should handle errors' do
|
29
|
+
response = {'errors' => {:body => "can't be nil"}}
|
30
|
+
@message.client.should_receive('post').with(@message).and_return(double('response', :status => 422, :body => response))
|
31
|
+
@message.post
|
32
|
+
@message.body.should == '12345678'
|
33
|
+
@message.errors.should == {:body => "can't be nil"}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'an existing message' do
|
38
|
+
let(:client) do
|
39
|
+
double('client')
|
40
|
+
end
|
41
|
+
before do
|
42
|
+
# blank hash prevents the client from doing a GET in the initialize method
|
43
|
+
@message = TMS::SmsMessage.new(client, '/messages/99', {})
|
44
|
+
end
|
45
|
+
it 'should GET cleanly' do
|
46
|
+
response = {:body => 'processed', :recipients => [{:phone => '22345678'}], :created_at => 'time'}
|
47
|
+
@message.client.should_receive('get').with(@message.href).and_return(double('response', :status => 200, :body => response))
|
48
|
+
@message.get
|
49
|
+
@message.body.should == 'processed'
|
50
|
+
@message.created_at.should == 'time'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe TMS::SmsMessages do
|
4
|
+
context "creating a new messages list" do
|
5
|
+
let(:client) do
|
6
|
+
double('client')
|
7
|
+
end
|
8
|
+
before do
|
9
|
+
@messages = TMS::SmsMessages.new(client, '/messages')
|
10
|
+
end
|
11
|
+
it 'should GET itself' do
|
12
|
+
body = [{:short_body => 'hi ho', :created_at => 'a while ago'}, {:short_body => 'feel me flow', :created_at => 'longer ago'}]
|
13
|
+
@messages.client.should_receive(:get).and_return(double('response', :body => body, :status => 200, :headers => {'link' => "</messages/page/2>; rel=\"next\",</messages/page/11>; rel=\"last\""}))
|
14
|
+
|
15
|
+
@messages.get
|
16
|
+
@messages.collection.length.should == 2
|
17
|
+
@messages.next.href.should == '/messages/page/2'
|
18
|
+
@messages.last.href.should == '/messages/page/11'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
$: << File.expand_path("../lib", __FILE__)
|
2
|
+
require 'tms_client'
|
3
|
+
|
4
|
+
class TMS::Horse
|
5
|
+
def initialize(client, href)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class TMS::Rabbits
|
10
|
+
def initialize(client, href)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
15
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
16
|
+
# Require this file using `require "spec_helper"` to ensure that it is only
|
17
|
+
# loaded once.
|
18
|
+
#
|
19
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
20
|
+
RSpec.configure do |config|
|
21
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
22
|
+
config.run_all_when_everything_filtered = true
|
23
|
+
config.filter_run :focus
|
24
|
+
|
25
|
+
# Run specs in random order to surface order dependencies. If you find an
|
26
|
+
# order dependency and want to debug it, you can fix the order by providing
|
27
|
+
# the seed, which is printed after each run.
|
28
|
+
# --seed 1234
|
29
|
+
config.order = 'random'
|
30
|
+
end
|
data/tms_client.gemspec
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "tms_client/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "tms_client"
|
7
|
+
s.version = TMS::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["GovDelivery"]
|
10
|
+
s.email = ["support@govdelivery.com"]
|
11
|
+
s.homepage = "http://govdelivery.com"
|
12
|
+
s.summary = %q{A ruby client to interact with the GovDelivery TMS REST API.}
|
13
|
+
s.description = %q{A reference implementation, written in Ruby, to interact with GovDelivery's TMS API. The client is compatible with Ruby versions 1.8.7 and 1.9.3. }
|
14
|
+
|
15
|
+
if RUBY_VERSION < "1.9"
|
16
|
+
s.add_runtime_dependency "json" # this is part of 1.9's stdlib
|
17
|
+
end
|
18
|
+
|
19
|
+
s.add_runtime_dependency "faraday"
|
20
|
+
s.add_runtime_dependency "faraday_middleware"
|
21
|
+
s.add_runtime_dependency "activesupport"
|
22
|
+
s.add_runtime_dependency "link_header"
|
23
|
+
s.add_development_dependency "rspec"
|
24
|
+
s.add_development_dependency "rake"
|
25
|
+
s.add_development_dependency "rubygems-tasks"
|
26
|
+
|
27
|
+
s.files = %w{
|
28
|
+
Gemfile
|
29
|
+
README.md
|
30
|
+
Rakefile
|
31
|
+
tms_client.gemspec
|
32
|
+
} + Dir["lib/**/*"]
|
33
|
+
|
34
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
35
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
36
|
+
s.require_paths = ["lib"]
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,208 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tms_client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- GovDelivery
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-15 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: faraday
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: faraday_middleware
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: activesupport
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: link_header
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rspec
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rake
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rubygems-tasks
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
description: ! 'A reference implementation, written in Ruby, to interact with GovDelivery''s
|
127
|
+
TMS API. The client is compatible with Ruby versions 1.8.7 and 1.9.3. '
|
128
|
+
email:
|
129
|
+
- support@govdelivery.com
|
130
|
+
executables: []
|
131
|
+
extensions: []
|
132
|
+
extra_rdoc_files: []
|
133
|
+
files:
|
134
|
+
- Gemfile
|
135
|
+
- README.md
|
136
|
+
- Rakefile
|
137
|
+
- tms_client.gemspec
|
138
|
+
- lib/tms_client/base.rb
|
139
|
+
- lib/tms_client/client.rb
|
140
|
+
- lib/tms_client/collection_resource.rb
|
141
|
+
- lib/tms_client/connection.rb
|
142
|
+
- lib/tms_client/instance_resource.rb
|
143
|
+
- lib/tms_client/logger.rb
|
144
|
+
- lib/tms_client/request.rb
|
145
|
+
- lib/tms_client/resource/collections.rb
|
146
|
+
- lib/tms_client/resource/command.rb
|
147
|
+
- lib/tms_client/resource/command_type.rb
|
148
|
+
- lib/tms_client/resource/commands.rb
|
149
|
+
- lib/tms_client/resource/email.rb
|
150
|
+
- lib/tms_client/resource/email_recipient.rb
|
151
|
+
- lib/tms_client/resource/inbound_message.rb
|
152
|
+
- lib/tms_client/resource/keyword.rb
|
153
|
+
- lib/tms_client/resource/recipient.rb
|
154
|
+
- lib/tms_client/resource/sms_message.rb
|
155
|
+
- lib/tms_client/resource/voice_message.rb
|
156
|
+
- lib/tms_client/util/core_ext.rb
|
157
|
+
- lib/tms_client/util/hal_link_parser.rb
|
158
|
+
- lib/tms_client/version.rb
|
159
|
+
- lib/tms_client.rb
|
160
|
+
- spec/client_spec.rb
|
161
|
+
- spec/command_types_spec.rb
|
162
|
+
- spec/inbound_messages_spec.rb
|
163
|
+
- spec/keyword_spec.rb
|
164
|
+
- spec/keywords_spec.rb
|
165
|
+
- spec/message_spec.rb
|
166
|
+
- spec/messages_spec.rb
|
167
|
+
- spec/spec_helper.rb
|
168
|
+
- spec/tms_client_spec.rb
|
169
|
+
homepage: http://govdelivery.com
|
170
|
+
licenses: []
|
171
|
+
post_install_message:
|
172
|
+
rdoc_options: []
|
173
|
+
require_paths:
|
174
|
+
- lib
|
175
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
176
|
+
none: false
|
177
|
+
requirements:
|
178
|
+
- - ! '>='
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
segments:
|
182
|
+
- 0
|
183
|
+
hash: 335366191
|
184
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
segments:
|
191
|
+
- 0
|
192
|
+
hash: 335366191
|
193
|
+
requirements: []
|
194
|
+
rubyforge_project:
|
195
|
+
rubygems_version: 1.8.24
|
196
|
+
signing_key:
|
197
|
+
specification_version: 3
|
198
|
+
summary: A ruby client to interact with the GovDelivery TMS REST API.
|
199
|
+
test_files:
|
200
|
+
- spec/client_spec.rb
|
201
|
+
- spec/command_types_spec.rb
|
202
|
+
- spec/inbound_messages_spec.rb
|
203
|
+
- spec/keyword_spec.rb
|
204
|
+
- spec/keywords_spec.rb
|
205
|
+
- spec/message_spec.rb
|
206
|
+
- spec/messages_spec.rb
|
207
|
+
- spec/spec_helper.rb
|
208
|
+
- spec/tms_client_spec.rb
|