twiml_template 1.0.2 → 2.0.0.pre
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 +5 -5
- data/.travis.yml +21 -6
- data/README.md +27 -4
- data/Rakefile +1 -1
- data/lib/action_view/template/handlers/twiml.rb +2 -2
- data/lib/tilt/twiml.rb +2 -2
- data/lib/twiml_template/response.rb +45 -0
- data/lib/twiml_template/version.rb +1 -1
- data/lib/twiml_template.rb +1 -0
- data/spec/custom_assertions.rb +22 -0
- data/spec/sinatra/twiml_spec.rb +1 -1
- data/spec/sinatra/views/hello.twiml +1 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/tilt/twiml_spec.rb +12 -23
- data/spec/twiml_template/response_spec.rb +123 -0
- data/twiml_template.gemspec +3 -2
- metadata +36 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 70c352b6849e64cf30ea1e3dab35d060fdc961e635c5380c12f444d768662fd6
|
4
|
+
data.tar.gz: 9e9bb460a33f6dc7fcca759f2dad6a30cc69059f8c277f0ac3dfaede7de7942b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 821ae351940fc9480100d601626466cc9d499c9bb6f6fd464a6e38e61fb17b66efba15cb89ba7f2d5ef89dfdbbbb5081ae522e46c97d10bc127eeca74fea684c
|
7
|
+
data.tar.gz: 2db082586c4f781174b1ccff270c476bc418f9bd89c3225a038746e2a34c1976af97c6e74a6592f0b6adbbe2975428e1ad6f069671b56f5e4c270091fef36d66
|
data/.travis.yml
CHANGED
@@ -1,12 +1,27 @@
|
|
1
1
|
language: ruby
|
2
|
-
|
2
|
+
sudo: required
|
3
|
+
dist: trusty
|
4
|
+
before_install:
|
5
|
+
- gem update --system
|
6
|
+
- gem install bundler
|
3
7
|
install:
|
4
8
|
- bundle install --retry=3
|
5
9
|
cache: bundler
|
6
10
|
rvm:
|
7
|
-
-
|
8
|
-
- 2.
|
9
|
-
- 2.
|
10
|
-
-
|
11
|
+
- 2.4
|
12
|
+
- 2.5
|
13
|
+
- 2.6
|
14
|
+
- ruby-head
|
15
|
+
- jruby-18mode
|
11
16
|
- jruby-19mode
|
12
|
-
-
|
17
|
+
- jruby-head
|
18
|
+
- rbx-3
|
19
|
+
matrix:
|
20
|
+
allow_failures:
|
21
|
+
- rvm: rbx-3
|
22
|
+
- rvm: ruby-head
|
23
|
+
- rvm: jruby-head
|
24
|
+
addons:
|
25
|
+
apt:
|
26
|
+
packages:
|
27
|
+
- haveged
|
data/README.md
CHANGED
@@ -2,10 +2,29 @@
|
|
2
2
|
|
3
3
|
[TwiML](https://www.twilio.com/docs/api/twiml) templates for Tilt.
|
4
4
|
|
5
|
-
An easy way to work with TwiML for responding to [Twilio](http://twilio.com) webhooks in Rails or Sinatra applications using template files.
|
5
|
+
An easy way to work with TwiML for responding to [Twilio](http://twilio.com) webhooks in Rails or Sinatra applications using template files with a `.twiml` extension.
|
6
6
|
|
7
7
|
[](https://travis-ci.org/philnash/twiml_template) [](https://codeclimate.com/github/philnash/twiml_template)
|
8
8
|
|
9
|
+
## Example
|
10
|
+
|
11
|
+
If you create a template called `hello_world.twiml` with the following code:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
twiml.say(message: "Hello World!")
|
15
|
+
```
|
16
|
+
|
17
|
+
and rendered it from an application you would get the following response:
|
18
|
+
|
19
|
+
```xml
|
20
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
21
|
+
<Response>
|
22
|
+
<Say>Hello World!</Say>
|
23
|
+
</Response>
|
24
|
+
```
|
25
|
+
|
26
|
+
See [Rails](#rails) or [Sinatra](#sinatra) below for full instructions.
|
27
|
+
|
9
28
|
## Installation
|
10
29
|
|
11
30
|
Add this line to your application's Gemfile:
|
@@ -16,7 +35,7 @@ gem 'twiml_template'
|
|
16
35
|
|
17
36
|
And then execute:
|
18
37
|
|
19
|
-
$ bundle
|
38
|
+
$ bundle install
|
20
39
|
|
21
40
|
Or install it yourself as:
|
22
41
|
|
@@ -24,6 +43,10 @@ Or install it yourself as:
|
|
24
43
|
|
25
44
|
## Usage
|
26
45
|
|
46
|
+
`twiml_template` allows you to use a template with the extension `.twiml` to write TwiML. The template makes a single variable, `twiml` available. `twiml` is an instance of a `TwimlTemplate::Response` which unifies the `twilio-ruby` gem's `Twilio::TwiML::VoiceResponse` and `Twilio::TwiML::MessagingResponse` classes. This means you only need one type of template file, but you can use it for either voice or messaging responses. `twiml_template` passes methods through to objects of each of those classes to generate the response.
|
47
|
+
|
48
|
+
If you start writing a voice response, you can only continue writing a voice response. If you start writing a messaging response, you can only continue with a messaging response. This should never cause you a problem (you would never normally write a response with a `<Say>` and a `<Message>` in it!).
|
49
|
+
|
27
50
|
### Rails
|
28
51
|
|
29
52
|
By including the `twiml_template` gem in your Rails project Gemfile you will be able to write TwiML templates easily.
|
@@ -51,7 +74,7 @@ end
|
|
51
74
|
And then add your TwiML view:
|
52
75
|
|
53
76
|
```ruby
|
54
|
-
twiml.
|
77
|
+
twiml.say message: "Hello #{@name}"
|
55
78
|
```
|
56
79
|
|
57
80
|
Save the file as `#{RAILS_ROOT}/app/views/voice/index.twiml`.
|
@@ -84,7 +107,7 @@ end
|
|
84
107
|
And then add your TwiML view:
|
85
108
|
|
86
109
|
```ruby
|
87
|
-
twiml.
|
110
|
+
twiml.say "Hello #{@name}"
|
88
111
|
```
|
89
112
|
|
90
113
|
Save the file as `#{APP_ROOT}/views/voice.twiml`.
|
data/Rakefile
CHANGED
@@ -3,9 +3,9 @@ require 'twilio-ruby'
|
|
3
3
|
module ActionView
|
4
4
|
module Template::Handlers
|
5
5
|
class TwiML
|
6
|
-
def self.call(template)
|
6
|
+
def self.call(template, source = nil)
|
7
7
|
"self.output_buffer = ::Twilio::TwiML::Response.new do |twiml|;" +
|
8
|
-
template.source +
|
8
|
+
(source || template.source) +
|
9
9
|
";end.to_xml;"
|
10
10
|
end
|
11
11
|
end
|
data/lib/tilt/twiml.rb
CHANGED
@@ -9,7 +9,7 @@ module Tilt
|
|
9
9
|
|
10
10
|
def evaluate(scope, locals, &block)
|
11
11
|
return super(scope, locals, &block) if data.respond_to?(:to_str)
|
12
|
-
|
12
|
+
::TwimlTemplate::Response.new do |response|
|
13
13
|
data.call(response)
|
14
14
|
end.to_xml
|
15
15
|
end
|
@@ -20,7 +20,7 @@ module Tilt
|
|
20
20
|
|
21
21
|
def precompiled_preamble(locals)
|
22
22
|
return super if locals.include? :twiml
|
23
|
-
"::
|
23
|
+
"::TwimlTemplate::Response.new do |twiml|\n#{super}"
|
24
24
|
end
|
25
25
|
|
26
26
|
def precompiled_postamble(locals)
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module TwimlTemplate
|
2
|
+
class Response
|
3
|
+
MESSAGING_VERBS = [:message, :redirect]
|
4
|
+
VOICE_VERBS = [:say, :play, :dial, :gather, :pause, :enqueue, :hangup, :leave, :record, :redirect, :reject, :sms, :connect, :autopilot, :pay, :start]
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@voice_response = Twilio::TwiML::VoiceResponse.new
|
8
|
+
@messaging_response = Twilio::TwiML::MessagingResponse.new
|
9
|
+
|
10
|
+
yield(self) if block_given?
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_xml
|
14
|
+
twiml_response = @messaging_response || @voice_response
|
15
|
+
twiml_response.to_xml
|
16
|
+
end
|
17
|
+
|
18
|
+
def method_missing(method, *args, &block)
|
19
|
+
if (respond_to?(method))
|
20
|
+
if (MESSAGING_VERBS.include?(method.to_sym) && @messaging_response)
|
21
|
+
if ((MESSAGING_VERBS - VOICE_VERBS).include?(method.to_sym))
|
22
|
+
@voice_response = nil
|
23
|
+
end
|
24
|
+
@messaging_response.send(method.to_sym, *args, &block)
|
25
|
+
end
|
26
|
+
if (VOICE_VERBS.include?(method.to_sym) && @voice_response)
|
27
|
+
if ((VOICE_VERBS - MESSAGING_VERBS).include?(method.to_sym))
|
28
|
+
@messaging_response = nil
|
29
|
+
end
|
30
|
+
@voice_response.send(method.to_sym, *args, &block)
|
31
|
+
end
|
32
|
+
else
|
33
|
+
raise ArgumentError.new("Method `#{method}` doesn't exist.")
|
34
|
+
end
|
35
|
+
return @messaging_response || @voice_response
|
36
|
+
end
|
37
|
+
|
38
|
+
def respond_to?(method, include_private = false)
|
39
|
+
verbs = []
|
40
|
+
verbs = verbs | MESSAGING_VERBS if @messaging_response
|
41
|
+
verbs = verbs | VOICE_VERBS if @voice_response
|
42
|
+
verbs.include?(method.to_sym) || super
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/twiml_template.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'minitest/assertions'
|
2
|
+
require 'minitest/spec'
|
3
|
+
require 'equivalent-xml'
|
4
|
+
require 'nokogiri'
|
5
|
+
|
6
|
+
module Minitest::Assertions
|
7
|
+
def assert_equivalent_xml(expected, actual)
|
8
|
+
expected = parse(expected) unless expected.is_a?(Nokogiri::XML::Document)
|
9
|
+
actual = parse(actual) unless actual.is_a?(Nokogiri::XML::Document)
|
10
|
+
assert EquivalentXml.equivalent?(expected, actual, opts = { :element_order => true, :normalize_whitespace => false }), "Expected XML to be equivalent. Expected:\n\n#{expected.to_s} \n\nReceived:\n\n#{actual.to_s}"
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def parse(string)
|
16
|
+
Nokogiri::XML::Document.parse(string.to_s, &:noblanks)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module Minitest::Expectations
|
21
|
+
String.infect_an_assertion :assert_equivalent_xml, :must_be_equivalent_xml
|
22
|
+
end
|
data/spec/sinatra/twiml_spec.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
twiml.
|
1
|
+
twiml.say message: "Hello #{name}!"
|
data/spec/spec_helper.rb
CHANGED
data/spec/tilt/twiml_spec.rb
CHANGED
@@ -14,13 +14,13 @@ describe Tilt::TwiML do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it "prepares and evaluates the template on #render" do
|
17
|
-
template = Tilt::TwiML.new { |t| "twiml.
|
18
|
-
template.render.
|
17
|
+
template = Tilt::TwiML.new { |t| "twiml.say message: 'Hello World!'" }
|
18
|
+
template.render.must_be_equivalent_xml twiml_response
|
19
19
|
end
|
20
20
|
|
21
21
|
it "can be rendered more than once" do
|
22
|
-
template = Tilt::TwiML.new { |t| "twiml.
|
23
|
-
3.times { template.render.
|
22
|
+
template = Tilt::TwiML.new { |t| "twiml.say message: 'Hello World!'" }
|
23
|
+
3.times { template.render.must_be_equivalent_xml twiml_response }
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -33,44 +33,33 @@ describe Tilt::TwiML do
|
|
33
33
|
|
34
34
|
it "passes locals" do
|
35
35
|
template = Tilt::TwiML.new do |t|
|
36
|
-
"twiml.
|
36
|
+
"twiml.say message: 'Hello ' + name + '!'"
|
37
37
|
end
|
38
|
-
template.render(Object.new, :name => 'Joe').
|
38
|
+
template.render(Object.new, :name => 'Joe').must_be_equivalent_xml twiml_response
|
39
39
|
end
|
40
40
|
|
41
41
|
it "evaluates in an object scope" do
|
42
42
|
template = Tilt::TwiML.new do |t|
|
43
|
-
"twiml.
|
43
|
+
"twiml.say message: 'Hello ' + @name + '!'"
|
44
44
|
end
|
45
45
|
scope = Object.new
|
46
46
|
scope.instance_variable_set :@name, 'Joe'
|
47
|
-
template.render(scope).
|
47
|
+
template.render(scope).must_be_equivalent_xml twiml_response
|
48
48
|
end
|
49
49
|
|
50
50
|
it "passes a block for yield" do
|
51
51
|
template = Tilt::TwiML.new do |t|
|
52
|
-
"twiml.
|
52
|
+
"twiml.say message: 'Hello ' + yield + '!'"
|
53
53
|
end
|
54
|
-
3.times { template.render { 'Joe' }.
|
54
|
+
3.times { template.render { 'Joe' }.must_be_equivalent_xml twiml_response }
|
55
55
|
end
|
56
56
|
|
57
57
|
it "takes block style templates" do
|
58
58
|
template =
|
59
59
|
Tilt::TwiML.new do |t|
|
60
|
-
lambda { |twiml| twiml.
|
60
|
+
lambda { |twiml| twiml.say(message: 'Hello Joe!') }
|
61
61
|
end
|
62
|
-
template.render.
|
62
|
+
template.render.must_be_equivalent_xml twiml_response
|
63
63
|
end
|
64
|
-
|
65
|
-
it "allows nesting raw XML" do
|
66
|
-
subtemplate = '<Number>+447712345678</Number>'
|
67
|
-
template = Tilt::TwiML.new { "twiml.Dial { twiml << yield }" }
|
68
|
-
expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Response>" \
|
69
|
-
"<Dial><Number>+447712345678</Number></Dial></Response>"
|
70
|
-
3.times do
|
71
|
-
template.render { subtemplate }.must_equal expected
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
64
|
end
|
76
65
|
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'twiml_template/response'
|
3
|
+
|
4
|
+
describe TwimlTemplate::Response do
|
5
|
+
let(:response) { TwimlTemplate::Response.new }
|
6
|
+
|
7
|
+
describe 'with a messaging response' do
|
8
|
+
describe 'with a simple response' do
|
9
|
+
let :twiml do
|
10
|
+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><Response>" \
|
11
|
+
"<Message>Hello World!</Message></Response>"
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'generates successfully' do
|
15
|
+
response.message(body: "Hello World!")
|
16
|
+
response.to_xml.must_be_equivalent_xml twiml
|
17
|
+
end
|
18
|
+
|
19
|
+
[:message, :redirect].each do |verb|
|
20
|
+
it "responds to #{verb}" do
|
21
|
+
response.must_respond_to(verb)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe 'with a nested response' do
|
27
|
+
let :twiml do
|
28
|
+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><Response>" \
|
29
|
+
"<Message><Body>Hello World!</Body></Message></Response>"
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'generates successfully' do
|
33
|
+
response.message do |msg|
|
34
|
+
msg.body "Hello World!"
|
35
|
+
end
|
36
|
+
response.to_xml.must_be_equivalent_xml twiml
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe 'with multiple commands' do
|
41
|
+
let :twiml do
|
42
|
+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><Response>" \
|
43
|
+
"<Message>Hello World!</Message><Redirect>http://example.com</Redirect></Response>"
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'generates successfully' do
|
47
|
+
response.message(body: "Hello World!")
|
48
|
+
response.redirect("http://example.com")
|
49
|
+
response.to_xml.must_be_equivalent_xml twiml
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe 'with a voice response' do
|
55
|
+
describe 'with a simple response' do
|
56
|
+
let :twiml do
|
57
|
+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><Response>" \
|
58
|
+
"<Say>Hello World!</Say></Response>"
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'generates successfully' do
|
62
|
+
response.say(message: "Hello World!")
|
63
|
+
response.to_xml.must_be_equivalent_xml twiml
|
64
|
+
end
|
65
|
+
|
66
|
+
(TwimlTemplate::Response::MESSAGING_VERBS | TwimlTemplate::Response::VOICE_VERBS).each do |verb|
|
67
|
+
it "responds to #{verb}" do
|
68
|
+
response.must_respond_to(verb)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe 'with a nested response' do
|
74
|
+
let :twiml do
|
75
|
+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><Response>" \
|
76
|
+
"<Gather><Say>Hello World!</Say></Gather></Response>"
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'generates successfully' do
|
80
|
+
response.gather do |gather|
|
81
|
+
gather.say message: "Hello World!"
|
82
|
+
end
|
83
|
+
response.to_xml.must_be_equivalent_xml twiml
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe 'with multiple commands' do
|
88
|
+
let :twiml do
|
89
|
+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><Response>" \
|
90
|
+
"<Say>Hello World!</Say><Play>http://tunes.com</Play></Response>"
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'generates successfully' do
|
94
|
+
response.say(message: "Hello World!")
|
95
|
+
response.play(url: "http://tunes.com")
|
96
|
+
response.to_xml.must_be_equivalent_xml twiml
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe 'with a mixed response' do
|
102
|
+
it 'should raise an error' do
|
103
|
+
proc do
|
104
|
+
response.say(message: "Hello")
|
105
|
+
response.message(" World!")
|
106
|
+
end.must_raise ArgumentError
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'should allow a redirect and a message' do
|
110
|
+
proc do
|
111
|
+
response.redirect("http://example.com")
|
112
|
+
response.message(body: "Hello World!")
|
113
|
+
end.must_be_silent
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'should allow a redirect and a voice verb' do
|
117
|
+
proc do
|
118
|
+
response.redirect("http://example.com")
|
119
|
+
response.say(message: "Hello World!")
|
120
|
+
end.must_be_silent
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
data/twiml_template.gemspec
CHANGED
@@ -20,11 +20,12 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.required_ruby_version = '>= 1.9.3'
|
21
21
|
|
22
22
|
spec.add_dependency "tilt", ">= 1.3", "< 3"
|
23
|
-
spec.add_dependency "twilio-ruby", ">=
|
23
|
+
spec.add_dependency "twilio-ruby", ">= 5.28", "< 6.0"
|
24
24
|
|
25
|
-
spec.add_development_dependency "bundler", "
|
25
|
+
spec.add_development_dependency "bundler", ">= 1.7", "< 3.0"
|
26
26
|
spec.add_development_dependency "rake", "~> 10.0"
|
27
27
|
spec.add_development_dependency "minitest", "~> 5.0"
|
28
28
|
spec.add_development_dependency "rack-test"
|
29
29
|
spec.add_development_dependency "sinatra", ">= 1.3"
|
30
|
+
spec.add_development_dependency "equivalent-xml", "~> 0.6.0"
|
30
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twiml_template
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Phil Nash
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tilt
|
@@ -36,34 +36,40 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
39
|
+
version: '5.28'
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '
|
42
|
+
version: '6.0'
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
49
|
+
version: '5.28'
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: '
|
52
|
+
version: '6.0'
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: bundler
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
|
-
- - "
|
57
|
+
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
59
|
version: '1.7'
|
60
|
+
- - "<"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '3.0'
|
60
63
|
type: :development
|
61
64
|
prerelease: false
|
62
65
|
version_requirements: !ruby/object:Gem::Requirement
|
63
66
|
requirements:
|
64
|
-
- - "
|
67
|
+
- - ">="
|
65
68
|
- !ruby/object:Gem::Version
|
66
69
|
version: '1.7'
|
70
|
+
- - "<"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '3.0'
|
67
73
|
- !ruby/object:Gem::Dependency
|
68
74
|
name: rake
|
69
75
|
requirement: !ruby/object:Gem::Requirement
|
@@ -120,6 +126,20 @@ dependencies:
|
|
120
126
|
- - ">="
|
121
127
|
- !ruby/object:Gem::Version
|
122
128
|
version: '1.3'
|
129
|
+
- !ruby/object:Gem::Dependency
|
130
|
+
name: equivalent-xml
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - "~>"
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: 0.6.0
|
136
|
+
type: :development
|
137
|
+
prerelease: false
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - "~>"
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 0.6.0
|
123
143
|
description: An easy way to work with TwiML for responding to Twilio webhooks in Rails
|
124
144
|
or Sinatra applications using template files.
|
125
145
|
email:
|
@@ -139,11 +159,14 @@ files:
|
|
139
159
|
- lib/tilt/twiml.rb
|
140
160
|
- lib/twiml_template.rb
|
141
161
|
- lib/twiml_template/railtie.rb
|
162
|
+
- lib/twiml_template/response.rb
|
142
163
|
- lib/twiml_template/version.rb
|
164
|
+
- spec/custom_assertions.rb
|
143
165
|
- spec/sinatra/twiml_spec.rb
|
144
166
|
- spec/sinatra/views/hello.twiml
|
145
167
|
- spec/spec_helper.rb
|
146
168
|
- spec/tilt/twiml_spec.rb
|
169
|
+
- spec/twiml_template/response_spec.rb
|
147
170
|
- twiml_template.gemspec
|
148
171
|
homepage: https://github.com/philnash/twiml_template
|
149
172
|
licenses:
|
@@ -160,17 +183,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
160
183
|
version: 1.9.3
|
161
184
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
185
|
requirements:
|
163
|
-
- - "
|
186
|
+
- - ">"
|
164
187
|
- !ruby/object:Gem::Version
|
165
|
-
version:
|
188
|
+
version: 1.3.1
|
166
189
|
requirements: []
|
167
|
-
|
168
|
-
rubygems_version: 2.6.6
|
190
|
+
rubygems_version: 3.0.3
|
169
191
|
signing_key:
|
170
192
|
specification_version: 4
|
171
193
|
summary: TwiML templates for Rails and Tilt.
|
172
194
|
test_files:
|
195
|
+
- spec/custom_assertions.rb
|
173
196
|
- spec/sinatra/twiml_spec.rb
|
174
197
|
- spec/sinatra/views/hello.twiml
|
175
198
|
- spec/spec_helper.rb
|
176
199
|
- spec/tilt/twiml_spec.rb
|
200
|
+
- spec/twiml_template/response_spec.rb
|