tropo-webapi-ruby 0.1.10 → 0.1.11

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -24,14 +24,12 @@ rescue LoadError
24
24
  puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
25
25
  end
26
26
 
27
- require 'spec/rake/spectask'
28
- Spec::Rake::SpecTask.new(:spec) do |spec|
29
- spec.libs << 'lib' << 'spec'
30
- spec.spec_files = FileList['spec/**/*_spec.rb']
27
+ require 'rspec/core/rake_task'
28
+ RSpec::Core::RakeTask.new(:spec) do |spec|
29
+ spec.pattern = 'spec/**/*_spec.rb'
31
30
  end
32
31
 
33
- Spec::Rake::SpecTask.new(:rcov) do |spec|
34
- spec.libs << 'lib' << 'spec'
32
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
35
33
  spec.pattern = 'spec/**/*_spec.rb'
36
34
  spec.rcov = true
37
35
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.10
1
+ 0.1.11
@@ -1,7 +1,7 @@
1
1
  module Tropo
2
2
  module Helpers
3
3
  private
4
-
4
+
5
5
  ##
6
6
  # Method checks for presence of required elements and then builds the action
7
7
  #
@@ -10,10 +10,12 @@ module Tropo
10
10
  # @return [Hash] provides the properply built hash for the action
11
11
  def build_action(action, params)
12
12
  raise ArgumentError, 'Action requires parameters' if params.nil?
13
-
13
+
14
14
  case action
15
+ when 'ask'
16
+ has_params?(params, 'ask', 'name')
15
17
  when 'choices'
16
- if params[:mode]
18
+ if params[:mode]
17
19
  if params[:mode] != 'dtmf' && params[:mode] != 'speech'
18
20
  raise ArgumentError, "If mode is provided, only 'dtmf', 'speech' or 'any' is supported"
19
21
  end
@@ -26,7 +28,7 @@ module Tropo
26
28
  has_params?(params, 'record', ['name', 'url'])
27
29
  when 'start_recording'
28
30
  has_params?(params, 'start_recording', ['url'])
29
-
31
+
30
32
  # Camelcase this one to be Java friendly
31
33
  action = 'startRecording'
32
34
  when 'redirect'
@@ -38,14 +40,14 @@ module Tropo
38
40
  when 'transfer'
39
41
  has_params?(params, 'transfer', 'to')
40
42
  end
41
-
43
+
42
44
  if action == 'on'
43
45
  build_elements(params)
44
46
  else
45
47
  { action.to_sym => build_elements(params) }
46
48
  end
47
49
  end
48
-
50
+
49
51
  ##
50
52
  # Checks to see if certain parameters are present, and if not raises an error
51
53
  #
@@ -64,7 +66,7 @@ module Tropo
64
66
  raise ArgumentError, "A '#{names}' must be provided to a '#{action}' action" if params[names.to_sym].nil?
65
67
  end
66
68
  end
67
-
69
+
68
70
  # Takes a Ruby underscore string and converts to a Java friendly camelized string
69
71
  #
70
72
  # @param [String] the string to be camelized
@@ -75,7 +77,7 @@ module Tropo
75
77
  return_string = return_string + split_string[2].capitalize if split_string[2]
76
78
  return_string
77
79
  end
78
-
80
+
79
81
  ##
80
82
  # Creates a nested hash when we have block within a block
81
83
  #
@@ -97,7 +99,7 @@ module Tropo
97
99
  @nested_on_hash_cnt ||= 0
98
100
  @nested_on_hash[:on] << params
99
101
  end
100
-
102
+
101
103
  ##
102
104
  # Creates an on_hash for the on action
103
105
  #
@@ -105,7 +107,7 @@ module Tropo
105
107
  def create_on_hash
106
108
  @on_hash ||= { :on => Array.new }
107
109
  end
108
-
110
+
109
111
  ##
110
112
  # Method builds the elements for each of the actions
111
113
  #
@@ -122,9 +124,9 @@ module Tropo
122
124
  end
123
125
  end
124
126
  end
125
-
127
+
126
128
  hash = Hash.new
127
- params.each_pair do |k,v|
129
+ params.each_pair do |k,v|
128
130
  if k.to_s.include? "_"
129
131
  k = camelize k.to_s
130
132
  k = k.to_sym if k
@@ -133,7 +135,7 @@ module Tropo
133
135
  end
134
136
  hash
135
137
  end
136
-
138
+
137
139
  ##
138
140
  # Takes a Java Camelized string and converts to an underscore string
139
141
  #
@@ -142,7 +144,7 @@ module Tropo
142
144
  def decamelize(camel_string)
143
145
  camel_string.gsub(/[A-Z]/) { |char| '_' + char.downcase }
144
146
  end
145
-
147
+
146
148
  ##
147
149
  # Formats the @response instance variable to JSON before making it available to the accessor
148
150
  #
@@ -150,7 +152,7 @@ module Tropo
150
152
  def render_response
151
153
  @response.to_json
152
154
  end
153
-
155
+
154
156
  ##
155
157
  # Determines if there is a voice or recognizer specified, if not set it to the default specified and if not default leave it alone
156
158
  # this is for the speech synthesis and speech recognition language to use on a say/ask methods
@@ -162,7 +164,7 @@ module Tropo
162
164
  params.merge!({ :voice => @voice }) if params[:voice].nil? && @voice
163
165
  params
164
166
  end
165
-
167
+
166
168
  ##
167
169
  # Returns an hash from a collapsed array, using the values of 'key' or 'name' as the collpassed hash key
168
170
  #
@@ -175,10 +177,10 @@ module Tropo
175
177
  # Set the key to the value of the respresentative key
176
178
  key = ele['key'] if ele['key']
177
179
  key = ele['name'] if ele['name']
178
-
180
+
179
181
  # Merge this new key into the hash
180
182
  transformed_to_hash.merge!({ key => Hash.new })
181
-
183
+
182
184
  # Then add the corresponding key/values to this new hash
183
185
  ele.each_pair do |k, v|
184
186
  if k != 'key' && k != 'name'
@@ -209,7 +211,7 @@ module Tropo
209
211
  # @param[Hash] the newly created hash that contins the properly formatted key
210
212
  def transform_pair(key, value)
211
213
  hash = { decamelize(key) => value }
212
- hash['timestamp'] = Time.parse(value) if hash['timestamp']
214
+ hash['timestamp'] = Time.parse(value) if hash['timestamp'] && (! hash['timestamp'].is_a?(Time))
213
215
  if hash['actions']
214
216
  if hash['actions']['name']
215
217
  key_name = hash['actions']['name']
@@ -220,11 +222,11 @@ module Tropo
220
222
  set_session_type(hash) if hash['channel']
221
223
  hash
222
224
  end
223
-
225
+
224
226
  ##
225
227
  # Sets the session type instance variables of voice_session and text_session
226
228
  #
227
- # @param[Hash] the key, value pair of the channel
229
+ # @param[Hash] the key, value pair of the channel
228
230
  # @return nil
229
231
  def set_session_type(hash)
230
232
  case hash['channel']
@@ -3,5 +3,5 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
  %w(rubygems tropo-webapi-ruby hashie rspec rspec/autorun).each { |lib| require lib }
4
4
 
5
5
  RSpec.configure do |config|
6
-
6
+
7
7
  end
@@ -1,19 +1,19 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "Tropo" do
4
-
4
+
5
5
  # Ask action tests (and alias Prompt)
6
6
  it "should generate a complete 'ask' JSON document" do
7
- response = Tropo::Generator.ask({ :name => 'foo',
8
- :bargein => 'true',
7
+ response = Tropo::Generator.ask({ :name => 'foo',
8
+ :bargein => 'true',
9
9
  :timeout => 30,
10
10
  :require => 'true' })
11
11
  JSON.parse(response).should == { "tropo" => [{ "ask" => { "name" => "foo", "bargein" => "true", "timeout" => 30, "require" => "true" } }] }
12
12
  end
13
-
13
+
14
14
  it "should generate an 'ask' JSON document when a block is passed" do
15
- response = Tropo::Generator.ask({ :name => 'foo',
16
- :bargein => 'true',
15
+ response = Tropo::Generator.ask({ :name => 'foo',
16
+ :bargein => 'true',
17
17
  :timeout => 30,
18
18
  :require => 'true' }) do
19
19
  say :value => 'Please say your account number'
@@ -25,8 +25,8 @@ describe "Tropo" do
25
25
  # There is currently a feature request to support an on within an ask
26
26
  #
27
27
  # it "should generate an 'ask' JSON document when a block is passed with an 'on' action" do
28
- # response = Tropo::Generator.ask({ :name => 'foo',
29
- # :bargein => 'true',
28
+ # response = Tropo::Generator.ask({ :name => 'foo',
29
+ # :bargein => 'true',
30
30
  # :timeout => 30,
31
31
  # :require => 'true' }) do
32
32
  # say :value => 'Please say your account number'
@@ -35,7 +35,7 @@ describe "Tropo" do
35
35
  # end
36
36
  # JSON.parse(response).should == {"tropo"=>[{"ask"=>{"name"=>"foo", "say"=>[{"value"=>"Please say your account number"}], "bargein"=>"true", "timeout"=>30, "require"=>"true", "on"=>[{"event"=>"success", "next"=>"/result.json"}], "choices"=>{"value"=>"[5 DIGITS]"}}}]}
37
37
  # end
38
-
38
+
39
39
  it "should generate an error if an 'ask' is passed without a 'name' parameter" do
40
40
  begin
41
41
  response = Tropo::Generator.ask({ :foo => 'bar' })
@@ -43,19 +43,19 @@ describe "Tropo" do
43
43
  err.to_s.should == "A 'name' must be provided to a 'ask' action"
44
44
  end
45
45
  end
46
-
46
+
47
47
  # Prompt
48
48
  it "should generate a complete 'prompt' JSON document" do
49
- response = Tropo::Generator.prompt({ :name => 'foo',
50
- :bargein => 'true',
49
+ response = Tropo::Generator.prompt({ :name => 'foo',
50
+ :bargein => 'true',
51
51
  :timeout => 30,
52
52
  :require => 'true' })
53
53
  JSON.parse(response).should == { "tropo" => [{ "ask" => { "name" => "foo", "bargein" => "true", "timeout" => 30, "require" => "true" } }] }
54
54
  end
55
-
55
+
56
56
  it "should generate an 'prompt' JSON document when a block is passed" do
57
- response = Tropo::Generator.prompt({ :name => 'foo',
58
- :bargein => 'true',
57
+ response = Tropo::Generator.prompt({ :name => 'foo',
58
+ :bargein => 'true',
59
59
  :timeout => 30,
60
60
  :require => 'true' }) do
61
61
  say :value => 'Please say your account number'
@@ -63,7 +63,7 @@ describe "Tropo" do
63
63
  end
64
64
  JSON.parse(response).should == {"tropo"=>[{"ask"=>{"name"=>"foo", "say"=>[{"value"=>"Please say your account number"}], "bargein"=>"true", "timeout"=>30, "require"=>"true", "choices"=>{"value"=>"[5 DIGITS]"}}}]}
65
65
  end
66
-
66
+
67
67
  it "should generate an error if an 'prompt' is passed without a 'name' parameter" do
68
68
  begin
69
69
  response = Tropo::Generator.prompt({ :foo => 'bar' })
@@ -71,13 +71,13 @@ describe "Tropo" do
71
71
  err.to_s.should == "A 'name' must be provided to a 'ask' action"
72
72
  end
73
73
  end
74
-
74
+
75
75
  # Choices tests
76
76
  it "should generate a standard 'choices' JSON document" do
77
77
  response = Tropo::Generator.choices({ :value => '[5 DIGITS]' })
78
78
  JSON.parse(response).should == { 'tropo' => [{ 'choices' => { 'value' => '[5 DIGITS]' } }] }
79
79
  end
80
-
80
+
81
81
  it "should raise an error if a 'choices' passes an unspported mode" do
82
82
  begin
83
83
  response = Tropo::Generator.choices({ :value => '[5 DIGITS]', :mode => 'frootloops' })
@@ -85,25 +85,25 @@ describe "Tropo" do
85
85
  err.to_s.should == "If mode is provided, only 'dtmf', 'speech' or 'any' is supported"
86
86
  end
87
87
  end
88
-
88
+
89
89
  it "should generate a standard 'choices' JSON document with a mode" do
90
90
  response = Tropo::Generator.choices({ :value => '[5 DIGITS]', :mode => 'dtmf' })
91
91
  JSON.parse(response).should == { 'tropo' => [{ 'choices' => { 'value' => '[5 DIGITS]', 'mode' => 'dtmf' } }] }
92
92
  end
93
-
93
+
94
94
  # Conference action tests
95
95
  it "should generate a complete 'conference' JSON document" do
96
- response = Tropo::Generator.conference({ :name => 'foo',
97
- :id => '1234',
96
+ response = Tropo::Generator.conference({ :name => 'foo',
97
+ :id => '1234',
98
98
  :mute => false,
99
99
  :send_tones => false,
100
100
  :exit_tone => '#' })
101
101
  JSON.parse(response).should == {"tropo"=>[{"conference"=>{"name"=>"foo", "mute"=>false, "sendTones"=>false, "id"=>"1234", "exitTone"=>"#"}}]}
102
102
  end
103
-
103
+
104
104
  it "should generate a complete 'conference' JSON document when a block is passed" do
105
- response = Tropo::Generator.conference({ :name => 'foo',
106
- :id => '1234',
105
+ response = Tropo::Generator.conference({ :name => 'foo',
106
+ :id => '1234',
107
107
  :mute => false,
108
108
  :send_tones => false,
109
109
  :exit_tone => '#' }) do
@@ -112,7 +112,7 @@ describe "Tropo" do
112
112
  end
113
113
  JSON.parse(response).should == {"tropo"=>[{"conference"=>{"name"=>"foo", "mute"=>false, "id"=>"1234", "exitTone"=>"#", "sendTones"=>false, "on"=>[{"say"=>[{"value"=>"Welcome to the conference"}], "event"=>"join"}, {"say"=>[{"value"=>"Someone has left the conference"}], "event"=>"leave"}]}}]}
114
114
  end
115
-
115
+
116
116
  it "should generate an error if an 'conference' is passed without a 'name' parameter" do
117
117
  begin
118
118
  response = Tropo::Generator.conference({ :foo => 'bar' })
@@ -120,7 +120,7 @@ describe "Tropo" do
120
120
  err.to_s.should == "A 'name' must be provided to a 'conference' action"
121
121
  end
122
122
  end
123
-
123
+
124
124
  it "should generate an error if an 'conference' is passed without an 'id' parameter" do
125
125
  begin
126
126
  response = Tropo::Generator.conference({ :name => 'bar' })
@@ -128,23 +128,23 @@ describe "Tropo" do
128
128
  err.to_s.should == "A 'id' must be provided to a 'conference' action"
129
129
  end
130
130
  end
131
-
131
+
132
132
  # Hangup action tests and Disconnect alias
133
133
  it "should generate a JSON document with a 'hangup' action" do
134
134
  response = Tropo::Generator.hangup
135
135
  JSON.parse(response).should == {"tropo"=>[{"hangup"=>nil}]}
136
136
  end
137
-
137
+
138
138
  it "should generate a JSON document with a 'disconnect' action" do
139
139
  response = Tropo::Generator.disconnect
140
140
  JSON.parse(response).should == {"tropo"=>[{"hangup"=>nil}]}
141
141
  end
142
-
142
+
143
143
  it "should generate a standard 'on' JSON document" do
144
144
  response = Tropo::Generator.on({ :event => 'hangup', :next => 'myresource' })
145
145
  JSON.parse(response).should == { "tropo" => [{ "on" =>{ "event" => "hangup", "next" => "myresource" } }] }
146
146
  end
147
-
147
+
148
148
  # On tests
149
149
  it "should generate a an error of an 'on' document does not pass an event param" do
150
150
  begin
@@ -153,7 +153,7 @@ describe "Tropo" do
153
153
  err.to_s.should == "A 'event' must be provided to a 'on' action"
154
154
  end
155
155
  end
156
-
156
+
157
157
  it "should generate a an error of an 'on' document does not pass an event param" do
158
158
  begin
159
159
  response = Tropo::Generator.on({ :event => 'bar' })
@@ -161,20 +161,20 @@ describe "Tropo" do
161
161
  err.to_s.should == "A 'next' resource must be provided"
162
162
  end
163
163
  end
164
-
164
+
165
165
  # Record action tests
166
166
  it "should generate a complete 'record' JSON document" do
167
- response = Tropo::Generator.record({ :name => 'foo',
168
- :url => 'http://sendme.com/tropo',
167
+ response = Tropo::Generator.record({ :name => 'foo',
168
+ :url => 'http://sendme.com/tropo',
169
169
  :beep => true,
170
170
  :send_tones => false,
171
171
  :exit_tone => '#' })
172
172
  JSON.parse(response).should == {"tropo"=>[{"record"=>{"name"=>"foo", "beep"=>true, "url"=>"http://sendme.com/tropo", "exitTone"=>"#", "sendTones"=>false}}]}
173
173
  end
174
-
174
+
175
175
  it "should generate a complete 'record' JSON document when a block is passed" do
176
- response = Tropo::Generator.record({ :name => 'foo',
177
- :url => 'http://sendme.com/tropo',
176
+ response = Tropo::Generator.record({ :name => 'foo',
177
+ :url => 'http://sendme.com/tropo',
178
178
  :beep => true,
179
179
  :send_tones => false,
180
180
  :exit_tone => '#' }) do
@@ -183,7 +183,7 @@ describe "Tropo" do
183
183
  end
184
184
  JSON.parse(response).should == {"tropo"=>[{"record"=>{"name"=>"foo", "say"=>[{"value"=>"Please say your account number"}], "beep"=>true, "url"=>"http://sendme.com/tropo", "sendTones"=>false, "exitTone"=>"#", "choices"=>{"value"=>"[5 DIGITS]"}}}]}
185
185
  end
186
-
186
+
187
187
  it "should generate an error if an 'record' is passed without a 'name' parameter" do
188
188
  begin
189
189
  response = Tropo::Generator.record({ :foo => 'bar' })
@@ -191,7 +191,7 @@ describe "Tropo" do
191
191
  err.to_s.should == "A 'name' must be provided to a 'record' action"
192
192
  end
193
193
  end
194
-
194
+
195
195
  it "should generate an error if an 'record' is passed without an 'url' parameter" do
196
196
  begin
197
197
  response = Tropo::Generator.record({ :name => 'bar' })
@@ -199,7 +199,7 @@ describe "Tropo" do
199
199
  err.to_s.should == "A 'url' must be provided to a 'record' action"
200
200
  end
201
201
  end
202
-
202
+
203
203
  it "should generate an error if an 'record' is passed without an invalid 'url' parameter" do
204
204
  begin
205
205
  response = Tropo::Generator.record({ :name => 'bar',
@@ -208,19 +208,19 @@ describe "Tropo" do
208
208
  err.to_s.should == "The 'url' paramater must be a valid URL"
209
209
  end
210
210
  end
211
-
211
+
212
212
  it "should accept a valid email address when a 'record' action is called" do
213
213
  response = Tropo::Generator.record({ :name => 'bar',
214
214
  :url => 'foo@bar.com' })
215
215
  JSON.parse(response).should == JSON.parse("{\"tropo\":[{\"record\":{\"url\":\"foo@bar.com\",\"name\":\"bar\"}}]}")
216
216
  end
217
-
217
+
218
218
  # Redirect action tests
219
219
  it "should generate a JSON document with a 'redirect' action" do
220
220
  response = Tropo::Generator.redirect({ :to => 'sip:1234', :from => '4155551212' })
221
221
  JSON.parse(response).should == {"tropo"=>[{"redirect"=>{"from"=>"4155551212", "to"=>"sip:1234"}}]}
222
222
  end
223
-
223
+
224
224
  it "should generate an error if a 'redirect' action is included in a block" do
225
225
  begin
226
226
  response = Tropo::Generator.conference(:name => 'foobar', :id => 1234) do
@@ -230,7 +230,7 @@ describe "Tropo" do
230
230
  err.to_s.should == 'Redirect should only be used alone and before the session is answered, use transfer instead'
231
231
  end
232
232
  end
233
-
233
+
234
234
  it "should generate an error when no 'to' is passed to a 'redirect' action" do
235
235
  begin
236
236
  response = Tropo::Generator.redirect
@@ -238,18 +238,18 @@ describe "Tropo" do
238
238
  err.to_s.should == "A 'to' must be provided to a 'redirect' action"
239
239
  end
240
240
  end
241
-
241
+
242
242
  # Reject action tests
243
243
  it "should generate a JSON document with a 'reject' action" do
244
244
  response = Tropo::Generator.reject
245
245
  JSON.parse(response).should == {"tropo"=>[{"reject"=>nil}]}
246
246
  end
247
-
247
+
248
248
  # Say action tests
249
249
  it "should generate a standard 'say' JSON document when a stiring is passed" do
250
250
  JSON.parse(Tropo::Generator.say('1234')).should == { "tropo" => [{ "say" => [{ "value" => "1234" }] }] }
251
251
  end
252
-
252
+
253
253
  it "should generate an error if I try to pass an integer to a 'say' action" do
254
254
  begin
255
255
  Tropo::Generator.say(1234)
@@ -257,16 +257,16 @@ describe "Tropo" do
257
257
  err.to_s.should == "An invalid paramater type Fixnum has been passed"
258
258
  end
259
259
  end
260
-
260
+
261
261
  it "should generate a standard 'say' JSON document" do
262
262
  JSON.parse(Tropo::Generator.say({ :value => '1234' })).should == { "tropo" => [{ "say" => [{ "value" => "1234" }] }] }
263
263
  end
264
-
264
+
265
265
  it "should generate a 'say' JSON document when an array of values is passed" do
266
266
  response = Tropo::Generator.say([{ :value => '1234' }, { :value => 'abcd', :event => 'nomatch:1' }])
267
267
  JSON.parse(response).should == { "tropo" => [{ "say" => [{ "value" => "1234" }, { "value" => "abcd", "event"=>"nomatch:1" }] }] }
268
268
  end
269
-
269
+
270
270
  it "should generate an error if no 'value' key is passed to a 'say' request" do
271
271
  begin
272
272
  response = Tropo::Generator.say({ :name => 'foo' })
@@ -274,7 +274,7 @@ describe "Tropo" do
274
274
  err.to_s.should == "A 'value' must be provided to a 'say' action"
275
275
  end
276
276
  end
277
-
277
+
278
278
  it "should generate a JSON document with a 'say' and an 'on'" do
279
279
  result = Tropo::Generator.new do
280
280
  say :value => 'blah'
@@ -282,13 +282,13 @@ describe "Tropo" do
282
282
  end
283
283
  JSON.parse(result.response).should == {"tropo"=>[{"say"=>[{"value"=>"blah"}]}, {"on"=>{"event"=>"error", "next"=>"error.json"}}]}
284
284
  end
285
-
285
+
286
286
  # Start & Stop Recording actions tests
287
287
  it "should generate a JSON document with a 'start_recording' action" do
288
288
  response = Tropo::Generator.start_recording(:url => 'http://postrecording.com/tropo')
289
289
  JSON.parse(response).should == {"tropo"=>[{"startRecording"=>{"url"=>"http://postrecording.com/tropo"}}]}
290
290
  end
291
-
291
+
292
292
  it "should generate a JSON document with a 'start_call_recording' action" do
293
293
  response = Tropo::Generator.start_call_recording(:url => 'http://postrecording.com/tropo')
294
294
  JSON.parse(response).should == {"tropo"=>[{"startRecording"=>{"url"=>"http://postrecording.com/tropo"}}]}
@@ -298,18 +298,18 @@ describe "Tropo" do
298
298
  response = Tropo::Generator.stop_call_recording
299
299
  JSON.parse(response).should == {"tropo"=>[{"stopRecording"=>nil}]}
300
300
  end
301
-
301
+
302
302
  it "should generate a JSON document with a 'stoprecording' action" do
303
303
  response = Tropo::Generator.stop_recording
304
304
  JSON.parse(response).should == {"tropo"=>[{"stopRecording"=>nil}]}
305
305
  end
306
-
306
+
307
307
  # Transfer action tests
308
308
  it "should generate a JSON document with a 'transfer' action" do
309
309
  response = Tropo::Generator.transfer(:to => 'tel:+14157044517')
310
310
  JSON.parse(response).should == {"tropo"=>[{"transfer"=>{"to"=>"tel:+14157044517"}}]}
311
311
  end
312
-
312
+
313
313
  # Transfer action tests
314
314
  it "should generate a JSON document with a 'transfer' action with an 'on' and 'choices' actions" do
315
315
  response = Tropo::Generator.transfer(:to => 'tel:+14157044517') do
@@ -318,7 +318,7 @@ describe "Tropo" do
318
318
  end
319
319
  JSON.parse(response).should == {"tropo"=>[{"transfer"=>{"to"=>"tel:+14157044517", "choices"=>{"value"=>"[5 DIGITS]"}, "on"=>[{"event"=>"unbounded", "next"=>"/error.json"}]}}]}
320
320
  end
321
-
321
+
322
322
  it "should generate an error if no 'to' key is passed to a 'transfer' request" do
323
323
  begin
324
324
  response = Tropo::Generator.transfer
@@ -326,7 +326,7 @@ describe "Tropo" do
326
326
  err.to_s.should == "A 'to' must be provided to a 'transfer' action"
327
327
  end
328
328
  end
329
-
329
+
330
330
  # General tests
331
331
  it "should generate a JSON document when a block is passed" do
332
332
  result = Tropo::Generator.new do
@@ -335,23 +335,23 @@ describe "Tropo" do
335
335
  end
336
336
  JSON.parse(result.response).should == {"tropo"=>[{"say"=>[{"value"=>"1234"}, {"value"=>"abcd", "event"=>"nomatch:1"}]}, {"say"=>[{"value"=>"0987"}, {"value"=>"zyxw", "event"=>"nomatch:2"}]}]}
337
337
  end
338
-
338
+
339
339
  it "should build a Ruby hash object when a session arrives in JSON" do
340
340
  json_session = "{\"session\":{\"id\":\"dih06n\",\"accountId\":\"33932\",\"timestamp\":\"2010-01-19T23:18:48.562Z\",\"userType\":\"HUMAN\",\"to\":{\"id\":\"tropomessaging@bot.im\",\"name\":\"unknown\",\"channel\":\"TEXT\",\"network\":\"JABBER\"},\"from\":{\"id\":\"john_doe@gmail.com\",\"name\":\"unknown\",\"channel\":\"TEXT\",\"network\":\"JABBER\"}}}"
341
341
  hash = Tropo::Generator.parse(json_session)
342
342
  hash[:session][:timestamp] == Time.parse('2010-01-19T18:27:46.852-05:00')
343
343
  end
344
-
344
+
345
345
  it "should build a Ruby hash object when a result arrives in JSON" do
346
346
  json_result = "{\"result\":{\"sessionId\":\"sessionId\",\"callState\":\"ANSWERED\",\"sessionDuration\":10,\"sequence\":1,\"complete\":true,\"error\":\"error\",\"properties\":[{\"key\":\"foo\",\"value\":\"bar\"},{\"key\":\"charlie\",\"value\":\"foxtrot\"}],\"actions\":{\"name\":\"pin\",\"attempts\":1,\"disposition\":\"SUCCESS\",\"confidence\":100,\"interpretation\":\"12345\",\"utterance\":\"1 2 3 4 5\"}}}"
347
347
  Tropo::Generator.parse(json_result).should == Hashie::Mash.new({:result=>{:session_id=>"sessionId", :properties=>{:foo=>{:value=>"bar"}, :charlie=>{:value=>"foxtrot"}}, :complete=>true, :call_state=>"ANSWERED", :actions=>{:pin=>{:disposition=>"SUCCESS", :utterance=>"1 2 3 4 5", :attempts=>1, :interpretation=>"12345", :confidence=>100}}, :session_duration=>10, :error=>"error", :sequence=>1}})
348
348
  end
349
-
349
+
350
350
  it "should build a ruby hash object when a realworld JSON string arrives" do
351
351
  json_result = "{\"result\":{\"sessionId\":\"CCFD9C86-1DD1-11B2-B76D-B9B253E4B7FB@161.253.55.20\",\"callState\":\"ANSWERED\",\"sessionDuration\":2,\"sequence\":1,\"complete\":true,\"error\":null,\"actions\":[{\"name\":\"zip\",\"attempts\":1,\"disposition\":\"SUCCESS\",\"confidence\":100,\"interpretation\":\"12345\",\"utterance\":\"1 2 3 4 5\"},{\"name\":\"days\",\"attempts\":1,\"disposition\":\"SUCCESS\",\"confidence\":100,\"interpretation\":\"1\",\"utterance\":\"1\"}]}}"
352
352
  Tropo::Generator.parse(json_result).should == Hashie::Mash.new({:result=>{:call_state=>"ANSWERED", :complete=>true, :actions=>{:zip=>{:disposition=>"SUCCESS", :utterance=>"1 2 3 4 5", :attempts=>1, :interpretation=>"12345", :confidence=>100}, :days=>{:disposition=>"SUCCESS", :utterance=>"1", :attempts=>1, :interpretation=>"1", :confidence=>100}}, :session_duration=>2, :sequence=>1, :session_id=>"CCFD9C86-1DD1-11B2-B76D-B9B253E4B7FB@161.253.55.20", :error=>nil}})
353
353
  end
354
-
354
+
355
355
  it "should see an object delcared outside of a block" do
356
356
  @@session = 'foobar'
357
357
  result = Tropo::Generator.new do
@@ -361,7 +361,7 @@ describe "Tropo" do
361
361
  end
362
362
  @@new_session.should == 'foobar'
363
363
  end
364
-
364
+
365
365
  it "should see an object passed into the block" do
366
366
  session = 'foobar'
367
367
  result = Tropo::Generator.new(session) do
@@ -370,20 +370,20 @@ describe "Tropo" do
370
370
  on :event => 'error', :next => 'error.json'
371
371
  end
372
372
  end
373
-
373
+
374
374
  it "should allow you to create a Tropo::Generator object and build up a JSON request with two says" do
375
375
  tropo = Tropo::Generator.new
376
376
  tropo.say('foo')
377
377
  tropo.say('bar')
378
378
  tropo.response.should == "{\"tropo\":[{\"say\":[{\"value\":\"foo\"}]},{\"say\":[{\"value\":\"bar\"}]}]}"
379
379
  end
380
-
380
+
381
381
  it "should allow you to create a Tropo::Generator object and build up a JSON request with: a say, an on and a record" do
382
382
  tropo = Tropo::Generator.new
383
383
  tropo.say 'Welcome to the app'
384
384
  tropo.on :event => 'hangup', :next => '/hangup.json'
385
- tropo.record({ :name => 'foo',
386
- :url => 'http://sendme.com/tropo',
385
+ tropo.record({ :name => 'foo',
386
+ :url => 'http://sendme.com/tropo',
387
387
  :beep => true,
388
388
  :send_tones => false,
389
389
  :exit_tone => '#' }) do
@@ -392,13 +392,13 @@ describe "Tropo" do
392
392
  end
393
393
  JSON.parse(tropo.response).should == {"tropo"=>[{"say"=>[{"value"=>"Welcome to the app"}]}, {"on"=>{"event"=>"hangup", "next"=>"/hangup.json"}}, {"record"=>{"name"=>"foo", "say"=>[{"value"=>"Please say your account number"}], "beep"=>true, "url"=>"http://sendme.com/tropo", "sendTones"=>false, "exitTone"=>"#", "choices"=>{"value"=>"[5 DIGITS]"}}}]}
394
394
  end
395
-
395
+
396
396
  it "should allow you to reset the object to a fresh response after building a response first" do
397
397
  tropo = Tropo::Generator.new
398
398
  tropo.say 'Welcome to the app'
399
399
  tropo.on :event => 'hangup', :next => '/hangup.json'
400
- tropo.record({ :name => 'foo',
401
- :url => 'http://sendme.com/tropo',
400
+ tropo.record({ :name => 'foo',
401
+ :url => 'http://sendme.com/tropo',
402
402
  :beep => true,
403
403
  :send_tones => false,
404
404
  :exit_tone => '#' }) do
@@ -409,19 +409,19 @@ describe "Tropo" do
409
409
  tropo.reset
410
410
  tropo.response.should == "{\"tropo\":[]}"
411
411
  end
412
-
412
+
413
413
  it "should build a Ruby hash object when a session arrives in JSON with a proper Ruby Time object" do
414
414
  json_session = "{\"session\":{\"id\":\"dih06n\",\"accountId\":\"33932\",\"timestamp\":\"2010-01-19T23:18:48.562Z\",\"userType\":\"HUMAN\",\"to\":{\"id\":\"tropomessaging@bot.im\",\"name\":\"unknown\",\"channel\":\"TEXT\",\"network\":\"JABBER\"},\"from\":{\"id\":\"john_doe@gmail.com\",\"name\":\"unknown\",\"channel\":\"TEXT\",\"network\":\"JABBER\"}}}"
415
415
  hash = Tropo::Generator.parse(json_session)
416
416
  hash[:session][:timestamp].should == Time.parse("2010-01-19T23:18:48.562Z")
417
417
  end
418
-
418
+
419
419
  it "should build a Ruby hash object when a result arrives in JSON with one action returned in an array" do
420
420
  json_result = "{\"result\":{\"sessionId\":\"CCFD9C86-1DD1-11B2-B76D-B9B253E4B7FB@161.253.55.20\",\"callState\":\"ANSWERED\",\"sessionDuration\":2,\"sequence\":1,\"complete\":true,\"error\":null,\"actions\":{\"name\":\"zip\",\"attempts\":1,\"disposition\":\"SUCCESS\",\"confidence\":100,\"interpretation\":\"12345\",\"utterance\":\"1 2 3 4 5\"}}}"
421
421
  hash = Tropo::Generator.parse(json_result)
422
422
  hash.should == Hashie::Mash.new({:result=>{:call_state=>"ANSWERED", :complete=>true, :actions=>{:zip=>{:utterance=>"1 2 3 4 5", :attempts=>1, :interpretation=>"12345", :confidence=>100, :disposition=>"SUCCESS"}}, :session_id=>"CCFD9C86-1DD1-11B2-B76D-B9B253E4B7FB@161.253.55.20", :session_duration=>2, :error=>nil, :sequence=>1}})
423
423
  end
424
-
424
+
425
425
  it "should build a Hashie object when a result arrives in JSON" do
426
426
  json_result = "{\"result\":{\"sessionId\":\"CCFD9C86-1DD1-11B2-B76D-B9B253E4B7FB@161.253.55.20\",\"callState\":\"ANSWERED\",\"sessionDuration\":2,\"sequence\":1,\"complete\":true,\"error\":null,\"actions\":{\"name\":\"zip\",\"attempts\":1,\"disposition\":\"SUCCESS\",\"confidence\":100,\"interpretation\":\"12345\",\"utterance\":\"1 2 3 4 5\"}}}"
427
427
  hash = Tropo::Generator.parse(json_result)
@@ -429,7 +429,7 @@ describe "Tropo" do
429
429
  hash[:result][:call_state].should == 'ANSWERED'
430
430
  hash['result']['call_state'].should == 'ANSWERED'
431
431
  end
432
-
432
+
433
433
  it "should generate valid JSON when a startRecording is used" do
434
434
  t = Tropo::Generator.new
435
435
  t.on :event => 'error', :next => '/error.json' # For fatal programming errors. Log some details so we can fix it
@@ -444,14 +444,14 @@ describe "Tropo" do
444
444
  t.say "http://denalidomain.com/music/keepers/HappyHappyBirthdaytoYou-Disney.mp3"
445
445
  JSON.parse(t.response).should == {"tropo"=>[{"on"=>{"event"=>"error", "next"=>"/error.json"}}, {"on"=>{"event"=>"hangup", "next"=>"/hangup.json"}}, {"on"=>{"event"=>"continue", "next"=>"/next.json"}}, {"say"=>[{"value"=>"Hello"}]}, {"startRecording"=>{"url"=>"http://heroku-voip.marksilver.net/post_audio_to_s3?filename=foo.wav&unique_id=bar"}}, {"say"=>[{"value"=>"You are now on the record."}]}, {"say"=>[{"value"=>"Go ahead, sing-along."}]}, {"say"=>[{"value"=>"http://denalidomain.com/music/keepers/HappyHappyBirthdaytoYou-Disney.mp3"}]}]}
446
446
  end
447
-
447
+
448
448
  it "should generate a voice_session true if a JSON session is received that is a channel of 'VOICE'" do
449
449
  tropo = Tropo::Generator.new
450
450
  tropo.parse "{\"session\":{\"id\":\"0-13c4-4b563da3-7aecefda-46af-1d10bdd0\",\"accountId\":\"33932\",\"timestamp\":\"2010-01-19T23:18:00.854Z\",\"userType\":\"HUMAN\",\"to\":{\"id\":\"9991427589\",\"name\":\"unknown\",\"channel\":\"VOICE\",\"network\":\"PSTN\"},\"from\":{\"id\":\"jsgoecke\",\"name\":\"unknown\",\"channel\":\"VOICE\",\"network\":\"PSTN\"}}}"
451
451
  tropo.voice_session.should == true
452
452
  tropo.text_session.should == false
453
453
  end
454
-
454
+
455
455
  it "should generate a text_session true if a JSON session is received that is a channel of 'TEXT'" do
456
456
  tropo = Tropo::Generator.new
457
457
  tropo.parse "{\"session\":{\"id\":\"dih06n\",\"accountId\":\"33932\",\"timestamp\":\"2010-01-19T23:18:48.562Z\",\"userType\":\"HUMAN\",\"to\":{\"id\":\"tropomessaging@bot.im\",\"name\":\"unknown\",\"channel\":\"TEXT\",\"network\":\"JABBER\"},\"from\":{\"id\":\"john_doe@gmail.com\",\"name\":\"unknown\",\"channel\":\"TEXT\",\"network\":\"JABBER\"}}}"
@@ -461,7 +461,7 @@ describe "Tropo" do
461
461
 
462
462
  it "should generate a valid JSON string for a call method" do
463
463
  json_result = "{\"tropo\":[{\"call\":{\"recording\":{\"password\":\"passwd\",\"username\":\"jose\",\"method\":\"POST\",\"url\":\"http://foobar\",\"format\":\"audio/mp3\"},\"timeout\":10,\"network\":\"SMS\",\"channel\":\"TEXT\",\"to\":\"foo\",\"from\":\"bar\",\"headers\":{\"foo\":\"foo\",\"bar\":\"bar\"},\"answerOnMedia\":false}}]}"
464
- tropo = Tropo::Generator.call({ :to => 'foo',
464
+ tropo = Tropo::Generator.call({ :to => 'foo',
465
465
  :from => 'bar',
466
466
  :network => 'SMS',
467
467
  :channel => 'TEXT',
@@ -475,10 +475,10 @@ describe "Tropo" do
475
475
  :password => 'passwd' } })
476
476
  JSON.parse(tropo).should == JSON.parse(json_result)
477
477
  end
478
-
478
+
479
479
  it "should generate a valid JSON string for a message method" do
480
480
  hash_result = {"tropo"=>[{"message"=>{"say"=>[{"value"=>"Please say your account number"}], "from"=>"bar", "timeout"=>10, "to"=>"foo", "network"=>"SMS", "answerOnMedia"=>false, "channel"=>"TEXT", "recording"=>{"format"=>"audio/mp3", "method"=>"POST", "url"=>"http://foobar", "username"=>"jose", "password"=>"passwd"}, "headers"=>{"foo"=>"foo", "bar"=>"bar"}}}]}
481
- tropo = Tropo::Generator.message({ :to => 'foo',
481
+ tropo = Tropo::Generator.message({ :to => 'foo',
482
482
  :from => 'bar',
483
483
  :network => 'SMS',
484
484
  :channel => 'TEXT',
@@ -491,14 +491,14 @@ describe "Tropo" do
491
491
  :username => 'jose',
492
492
  :password => 'passwd' } }) do
493
493
  say :value => 'Please say your account number'
494
- end
494
+ end
495
495
  JSON.parse(tropo).should == hash_result
496
496
  end
497
-
497
+
498
498
  it "should generate a valid JSON string for a record method with a transcription request" do
499
499
  hash_result = {"tropo"=>[{"record"=>{"name"=>"foo", "transcription"=>{"email_format"=>"encoded", "url"=>"mailto:jose@voxeo.com", "id"=>"bling"}, "say"=>[{"value"=>"Please say your account number"}], "beep"=>true, "url"=>"http://sendme.com/tropo", "exitTone"=>"#", "sendTones"=>false, "choices"=>{"value"=>"[5 DIGITS]"}}}]}
500
- tropo = Tropo::Generator.record({ :name => 'foo',
501
- :url => 'http://sendme.com/tropo',
500
+ tropo = Tropo::Generator.record({ :name => 'foo',
501
+ :url => 'http://sendme.com/tropo',
502
502
  :beep => true,
503
503
  :send_tones => false,
504
504
  :transcription => { :id => 'bling',
@@ -507,20 +507,20 @@ describe "Tropo" do
507
507
  :exit_tone => '#' }) do
508
508
  say :value => 'Please say your account number'
509
509
  choices :value => '[5 DIGITS]'
510
- end
510
+ end
511
511
  JSON.parse(tropo).should == hash_result
512
512
  end
513
-
513
+
514
514
  it "should properly generate a JSON document when calling an ask with says as hash elements rather than as methods" do
515
515
  hash_result = {"tropo"=>[{"ask"=>{"name"=>"donate_to_id", "say"=>[{"event"=>"timeout", "value"=>"Sorry, I did not hear anything."}, {"event"=>"nomatch:1 nomatch:2 nomatch:3", "value"=>"Sorry, that wasn't a valid answer. You can press or say 1 for 'yes', or 2 for 'no'."}, {"value"=>"You chose organization foobar. Are you ready to donate to them? If you say no, I will tell you a little more about the organization."}, {"event"=>"nomatch:3", "value"=>"This is your last attempt."}], "bargein"=>true, "silenceTimeout"=>10, "timeout"=>10, "attempts"=>4, "choices"=>{"value"=>"true(1,yes,sure,affirmative), false(2,no,no thank you,negative), 0(0,help,i do not know, agent, operator, assistance, representative, real person, human), 9(9,quit,stop,shut up)"}}}]}
516
516
  help_stop_choices = "0(0,help,i do not know, agent, operator, assistance, representative, real person, human), 9(9,quit,stop,shut up)"
517
517
  yes_no_choices = "true(1,yes,sure,affirmative), false(2,no,no thank you,negative), " + help_stop_choices
518
-
518
+
519
519
  t = Tropo::Generator.new
520
- t.ask :name => 'donate_to_id',
521
- :bargein => true,
522
- :timeout => 10,
523
- :silence_timeout => 10,
520
+ t.ask :name => 'donate_to_id',
521
+ :bargein => true,
522
+ :timeout => 10,
523
+ :silence_timeout => 10,
524
524
  :attempts => 4,
525
525
  :say => [{:event => "timeout", :value => "Sorry, I did not hear anything."},
526
526
  {:event => "nomatch:1 nomatch:2 nomatch:3", :value => "Sorry, that wasn't a valid answer. You can press or say 1 for 'yes', or 2 for 'no'."},
@@ -529,28 +529,28 @@ describe "Tropo" do
529
529
  :choices => { :value => yes_no_choices}
530
530
  JSON.parse(t.response).should == hash_result
531
531
  end
532
-
532
+
533
533
  it "should set the voice variable when called" do
534
534
  t = Tropo::Generator.new
535
535
  t.voice.should == nil
536
-
536
+
537
537
  t = Tropo::Generator.new(:voice => 'barnie')
538
538
  t.voice.should == 'barnie'
539
-
539
+
540
540
  t = Tropo::Generator.new
541
541
  t.voice = 'barnie'
542
542
  t.voice.should == 'barnie'
543
543
  end
544
-
544
+
545
545
  it "should handle the setting of the voice parameter based on defaults" do
546
546
  t = Tropo::Generator.new
547
547
  t.say 'Hi there!'
548
548
  JSON.parse(t.response)['tropo'][0]['say'][0]['voice'].should == nil
549
-
549
+
550
550
  t = Tropo::Generator.new
551
551
  t.say 'Hi there!', :voice => 'barnie'
552
552
  JSON.parse(t.response)['tropo'][0]['say'][0]['voice'].should == 'barnie'
553
-
553
+
554
554
  t = Tropo::Generator.new(:voice => 'barnie')
555
555
  t.say 'Hi there!'
556
556
  t.say 'Wow!'
@@ -562,7 +562,7 @@ describe "Tropo" do
562
562
  t.say 'Wow!', :voice => 'jack'
563
563
  JSON.parse(t.response)['tropo'][0]['say'][0]['voice'].should == 'barnie'
564
564
  JSON.parse(t.response)['tropo'][1]['say'][0]['voice'].should == 'jack'
565
-
565
+
566
566
  t = Tropo::Generator.new
567
567
  t.voice = 'barnie'
568
568
  t.say 'Hi there!'
@@ -570,82 +570,74 @@ describe "Tropo" do
570
570
  JSON.parse(t.response)['tropo'][0]['say'][0]['voice'].should == 'barnie'
571
571
  JSON.parse(t.response)['tropo'][1]['say'][0]['voice'].should == 'jack'
572
572
  end
573
-
573
+
574
574
  it "should set the recognizer variable when called" do
575
575
  t = Tropo::Generator.new
576
576
  t.recognizer.should == nil
577
-
577
+
578
578
  t = Tropo::Generator.new(:recognizer => 'fr-fr')
579
579
  t.recognizer.should == 'fr-fr'
580
-
580
+
581
581
  t = Tropo::Generator.new
582
582
  t.recognizer = 'fr-fr'
583
583
  t.recognizer.should == 'fr-fr'
584
584
  end
585
-
585
+
586
586
  it "should handle the setting of the recognizer parameter based on defaults" do
587
587
  t = Tropo::Generator.new
588
- t.ask({ :name => 'foo',
589
- :bargein => 'true',
588
+ t.ask({ :name => 'foo',
589
+ :bargein => 'true',
590
590
  :timeout => 30,
591
591
  :require => 'true' })
592
592
  JSON.parse(t.response)['tropo'][0]['ask']['recognizer'].should == nil
593
-
593
+
594
594
  t = Tropo::Generator.new(:recognizer => 'fr-fr')
595
- t.ask({ :name => 'foo',
596
- :bargein => 'true',
595
+ t.ask({ :name => 'foo',
596
+ :bargein => 'true',
597
597
  :timeout => 30,
598
598
  :require => 'true' })
599
599
  JSON.parse(t.response)['tropo'][0]['ask']['recognizer'].should == 'fr-fr'
600
-
600
+
601
601
  t = Tropo::Generator.new
602
602
  t.recognizer = 'fr-fr'
603
- t.ask({ :name => 'foo',
604
- :bargein => 'true',
603
+ t.ask({ :name => 'foo',
604
+ :bargein => 'true',
605
605
  :timeout => 30,
606
606
  :require => 'true' })
607
607
  JSON.parse(t.response)['tropo'][0]['ask']['recognizer'].should == 'fr-fr'
608
-
608
+
609
609
  t = Tropo::Generator.new
610
610
  t.recognizer = 'fr-fr'
611
- t.ask({ :name => 'foo',
612
- :bargein => 'true',
611
+ t.ask({ :name => 'foo',
612
+ :bargein => 'true',
613
613
  :timeout => 30,
614
614
  :require => 'true' })
615
- t.ask({ :name => 'foo',
616
- :bargein => 'true',
615
+ t.ask({ :name => 'foo',
616
+ :bargein => 'true',
617
617
  :timeout => 30,
618
618
  :require => 'true',
619
619
  :recognizer => 'de-de' })
620
620
  JSON.parse(t.response)['tropo'][0]['ask']['recognizer'].should == 'fr-fr'
621
621
  JSON.parse(t.response)['tropo'][1]['ask']['recognizer'].should == 'de-de'
622
622
  end
623
-
623
+
624
624
  it "should parse a JSON string or a Ruby Hash the same" do
625
625
  json_session = "{\"session\":{\"id\":\"dih06n\",\"accountId\":\"33932\",\"timestamp\":\"2010-01-19T23:18:48.562Z\",\"userType\":\"HUMAN\",\"to\":{\"id\":\"tropomessaging@bot.im\",\"name\":\"unknown\",\"channel\":\"TEXT\",\"network\":\"JABBER\"},\"from\":{\"id\":\"john_doe@gmail.com\",\"name\":\"unknown\",\"channel\":\"TEXT\",\"network\":\"JABBER\"}}}"
626
626
  tropo = Tropo::Generator.parse json_session
627
627
  tropo.session.user_type.should == 'HUMAN'
628
-
628
+
629
629
  tropo = Tropo::Generator.parse(JSON.parse(json_session))
630
630
  tropo.session.user_type.should == 'HUMAN'
631
631
  end
632
-
632
+
633
633
  it "should return a hash of the response object" do
634
634
  result = Tropo::Generator.new do
635
635
  say [{ :value => '1234' }, { :value => 'abcd', :event => "nomatch:1" }]
636
636
  say [{ :value => '0987' }, { :value => 'zyxw', :event => "nomatch:2" }]
637
637
  end
638
- result.to_hash.should == { :tropo => [{ :say => [{ :value => "1234" },
639
- { :event => "nomatch:1", :value => "abcd" }] },
640
- { :say => [{ :value => "0987" },
638
+ result.to_hash.should == { :tropo => [{ :say => [{ :value => "1234" },
639
+ { :event => "nomatch:1", :value => "abcd" }] },
640
+ { :say => [{ :value => "0987" },
641
641
  { :event => "nomatch:2", :value => "zyxw" }] }] }
642
642
  end
643
-
644
- it "should not require a name in an ask" do
645
- t = Tropo::Generator.new
646
- t.ask({ :bargein => 'true',
647
- :timeout => 30,
648
- :require => 'true' })
649
- JSON.parse(t.response)['tropo'][0]['ask']['timeout'].should == 30
650
- end
651
643
  end
@@ -1,56 +1,48 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{tropo-webapi-ruby}
8
- s.version = "0.1.10"
8
+ s.version = "0.1.11"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jason Goecke"]
12
- s.date = %q{2010-05-14}
12
+ s.date = %q{2011-06-24}
13
13
  s.description = %q{Ruby library for interacting with the Tropo Web API via REST & JSON}
14
14
  s.email = %q{jsgoecke@voxeo.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
- "README.rdoc"
17
+ "README.rdoc"
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
- ".gitignore",
22
- "HISTORY.rdoc",
23
- "LICENSE",
24
- "README.rdoc",
25
- "Rakefile",
26
- "VERSION",
27
- "examples/sinatra_server.rb",
28
- "lib/tropo-webapi-ruby.rb",
29
- "lib/tropo-webapi-ruby/object_patch.rb",
30
- "lib/tropo-webapi-ruby/tropo-webapi-ruby-helpers.rb",
31
- "lib/tropo-webapi-ruby/tropo-webapi-ruby.rb",
32
- "spec/spec.opts",
33
- "spec/spec_helper.rb",
34
- "spec/tropo-webapi-ruby_spec.rb",
35
- "tropo-webapi-ruby.gemspec"
21
+ "HISTORY.rdoc",
22
+ "LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "examples/sinatra_server.rb",
27
+ "lib/tropo-webapi-ruby.rb",
28
+ "lib/tropo-webapi-ruby/object_patch.rb",
29
+ "lib/tropo-webapi-ruby/tropo-webapi-ruby-helpers.rb",
30
+ "lib/tropo-webapi-ruby/tropo-webapi-ruby.rb",
31
+ "spec/spec.opts",
32
+ "spec/spec_helper.rb",
33
+ "spec/tropo-webapi-ruby_spec.rb",
34
+ "tropo-webapi-ruby.gemspec"
36
35
  ]
37
36
  s.homepage = %q{http://tropo.com}
38
- s.rdoc_options = ["--charset=UTF-8"]
39
37
  s.require_paths = ["lib"]
40
38
  s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
41
- s.rubygems_version = %q{1.3.5}
39
+ s.rubygems_version = %q{1.5.0}
42
40
  s.summary = %q{Tropo Web API Ruby Gem}
43
- s.test_files = [
44
- "spec/spec_helper.rb",
45
- "spec/tropo-webapi-ruby_spec.rb",
46
- "examples/sinatra_server.rb"
47
- ]
48
41
 
49
42
  if s.respond_to? :specification_version then
50
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
51
43
  s.specification_version = 3
52
44
 
53
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
45
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
54
46
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
55
47
  s.add_runtime_dependency(%q<json_pure>, [">= 1.2.0"])
56
48
  s.add_runtime_dependency(%q<hashie>, [">= 0.2.0"])
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tropo-webapi-ruby
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 13
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
8
  - 1
8
- - 10
9
- version: 0.1.10
9
+ - 11
10
+ version: 0.1.11
10
11
  platform: ruby
11
12
  authors:
12
13
  - Jason Goecke
@@ -14,16 +15,18 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-05-14 00:00:00 +01:00
18
+ date: 2011-06-24 00:00:00 -07:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: rspec
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 13
27
30
  segments:
28
31
  - 1
29
32
  - 2
@@ -35,9 +38,11 @@ dependencies:
35
38
  name: json_pure
36
39
  prerelease: false
37
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
38
42
  requirements:
39
43
  - - ">="
40
44
  - !ruby/object:Gem::Version
45
+ hash: 31
41
46
  segments:
42
47
  - 1
43
48
  - 2
@@ -49,9 +54,11 @@ dependencies:
49
54
  name: hashie
50
55
  prerelease: false
51
56
  requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
52
58
  requirements:
53
59
  - - ">="
54
60
  - !ruby/object:Gem::Version
61
+ hash: 23
55
62
  segments:
56
63
  - 0
57
64
  - 2
@@ -70,7 +77,6 @@ extra_rdoc_files:
70
77
  - README.rdoc
71
78
  files:
72
79
  - .document
73
- - .gitignore
74
80
  - HISTORY.rdoc
75
81
  - LICENSE
76
82
  - README.rdoc
@@ -90,34 +96,36 @@ homepage: http://tropo.com
90
96
  licenses: []
91
97
 
92
98
  post_install_message:
93
- rdoc_options:
94
- - --charset=UTF-8
99
+ rdoc_options: []
100
+
95
101
  require_paths:
96
102
  - lib
97
103
  required_ruby_version: !ruby/object:Gem::Requirement
104
+ none: false
98
105
  requirements:
99
106
  - - ">="
100
107
  - !ruby/object:Gem::Version
108
+ hash: 59
101
109
  segments:
102
110
  - 1
103
111
  - 8
104
112
  - 6
105
113
  version: 1.8.6
106
114
  required_rubygems_version: !ruby/object:Gem::Requirement
115
+ none: false
107
116
  requirements:
108
117
  - - ">="
109
118
  - !ruby/object:Gem::Version
119
+ hash: 3
110
120
  segments:
111
121
  - 0
112
122
  version: "0"
113
123
  requirements: []
114
124
 
115
125
  rubyforge_project:
116
- rubygems_version: 1.3.6
126
+ rubygems_version: 1.5.0
117
127
  signing_key:
118
128
  specification_version: 3
119
129
  summary: Tropo Web API Ruby Gem
120
- test_files:
121
- - spec/spec_helper.rb
122
- - spec/tropo-webapi-ruby_spec.rb
123
- - examples/sinatra_server.rb
130
+ test_files: []
131
+
data/.gitignore DELETED
@@ -1,24 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
- doc
21
-
22
- ## PROJECT::SPECIFIC
23
-
24
- *.gem