tropo-webapi-ruby 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY.rdoc CHANGED
@@ -7,4 +7,13 @@
7
7
  == Version 0.1.6
8
8
 
9
9
  - Added the appropriate ActiveSupport dependency for 'instance_exec' for Ruby 1.8.6 support.
10
- - Added a dependency and support for Hashie.
10
+ - Added a dependency and support for Hashie.
11
+
12
+ == Version 0.1.9
13
+
14
+ - Fixed the start_recording so it does not require a 'name' parameter
15
+ - Aliased start_call_recording -> start_recording
16
+ - Aliased stop_call_recording -> stop_recording
17
+ - Fixes to the README
18
+ - Fixed the yardoc install
19
+ - The Tropo::Generator.parse method will now take a JSON string or a Ruby hash.
data/README.rdoc CHANGED
@@ -30,7 +30,7 @@ Optional, if you would like to use with Sinatra:
30
30
 
31
31
  === Project Developer
32
32
 
33
- $ sudo gem install yardoc
33
+ $ sudo gem install yard
34
34
 
35
35
  From within the project:
36
36
 
@@ -125,7 +125,7 @@ Using the great RESTful Web Services framework Sinatra for Ruby.
125
125
  on :event => 'hangup', :next => '/hangup.json'
126
126
  on :event => 'continue', :next => '/answer.json'
127
127
  ask({ :name => 'account_number',
128
- :bargein => 'true',
128
+ :bargein => true,
129
129
  :timeout => 30,
130
130
  :require => 'true' }) do
131
131
  say :value => 'Please say your account number'
@@ -203,7 +203,7 @@ Using the great RESTful Web Services framework Sinatra for Ruby.
203
203
  post '/ask.json' do
204
204
  t = Tropo::Generator.new(:recognizer => 'fr-fr')
205
205
  t.ask({ :name => 'account_number', # Will now use the French speech recognition engine
206
- :bargein => 'true',
206
+ :bargein => true,
207
207
  :timeout => 30,
208
208
  :require => 'true' }) do
209
209
  say :value => "S'il vous plaît dire votre numéro de compte", :voice => 'florence'
@@ -215,7 +215,7 @@ Using the great RESTful Web Services framework Sinatra for Ruby.
215
215
  t = Tropo::Generator.new
216
216
  t.recognizer = 'fr-fr'
217
217
  t.ask({ :name => 'account_number', # Will now use the French speech recognition engine
218
- :bargein => 'true',
218
+ :bargein => true,
219
219
  :timeout => 30,
220
220
  :require => 'true' }) do
221
221
  say :value => "S'il vous plaît dire votre numéro de compte", :voice => 'florence'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.8
1
+ 0.1.9
@@ -0,0 +1,13 @@
1
+ # Borrowed from here: http://eigenclass.org/hiki.rb?instance_exec
2
+ class Object
3
+ def instance_exec(*args, &block)
4
+ mname = "__instance_exec_#{Thread.current.object_id.abs}"
5
+ class << self; self end.class_eval{ define_method(mname, &block) }
6
+ begin
7
+ ret = send(mname, *args)
8
+ ensure
9
+ class << self; self end.class_eval{ undef_method(mname) } rescue nil
10
+ end
11
+ ret
12
+ end
13
+ end
@@ -27,7 +27,7 @@ module Tropo
27
27
  when 'record'
28
28
  has_params?(params, 'record', ['name', 'url'])
29
29
  when 'start_recording'
30
- has_params?(params, 'start_recording', ['name', 'url'])
30
+ has_params?(params, 'start_recording', ['url'])
31
31
 
32
32
  # Camelcase this one to be Java friendly
33
33
  action = 'startRecording'
@@ -266,12 +266,14 @@ module Tropo
266
266
  end
267
267
 
268
268
  ##
269
- # Parses the JSON string recieved from Tropo into a Ruby Hash
269
+ # Parses the JSON string recieved from Tropo into a Ruby Hash, or
270
+ # if already a Ruby Hash parses it with the nicities provided by
271
+ # the gem
270
272
  #
271
- # @param [String] a JSON string
272
- # @return [Hash] a Hash representing the response from Tropo
273
- def parse(json_string)
274
- response = JSON.parse(json_string)
273
+ # @param [String or Hash] a JSON string or a Ruby Hash
274
+ # @return [Hash] a Hash representing the formatted response from Tropo
275
+ def parse(response)
276
+ response = JSON.parse(response) if response.class == String
275
277
 
276
278
  # Check to see what type of response we are working with
277
279
  if response['session']
@@ -473,7 +475,8 @@ module Tropo
473
475
  end
474
476
  render_response if @building.nil?
475
477
  end
476
-
478
+ alias :start_call_recording :start_recording
479
+
477
480
  ##
478
481
  # Stops the recording of the current session after startCallRecording has been called
479
482
  #
@@ -483,6 +486,7 @@ module Tropo
483
486
  @response[:tropo] << { :stopRecording => nil }
484
487
  render_response if @building.nil?
485
488
  end
489
+ alias :stop_call_recording :stop_recording
486
490
 
487
491
  ##
488
492
  # Transfers an already answered call to another destination / phone number.
@@ -531,6 +535,14 @@ module Tropo
531
535
  render_response if @building.nil?
532
536
  end
533
537
 
538
+ ##
539
+ # Returns the current hash object of the response, as opposed to JSON
540
+ #
541
+ # @return [Hash] the current hash of the response
542
+ def to_hash
543
+ @response
544
+ end
545
+
534
546
  ##
535
547
  # Sets the default voice for the object
536
548
  #
@@ -285,10 +285,20 @@ describe "Tropo" do
285
285
 
286
286
  # Start & Stop Recording actions tests
287
287
  it "should generate a JSON document with a 'start_recording' action" do
288
- response = Tropo::Generator.start_recording(:name => 'recording', :url => 'http://postrecording.com/tropo')
289
- JSON.parse(response).should == {"tropo"=>[{"startRecording"=>{"name"=>"recording", "url"=>"http://postrecording.com/tropo"}}]}
288
+ response = Tropo::Generator.start_recording(:url => 'http://postrecording.com/tropo')
289
+ JSON.parse(response).should == {"tropo"=>[{"startRecording"=>{"url"=>"http://postrecording.com/tropo"}}]}
290
290
  end
291
291
 
292
+ it "should generate a JSON document with a 'start_call_recording' action" do
293
+ response = Tropo::Generator.start_call_recording(:url => 'http://postrecording.com/tropo')
294
+ JSON.parse(response).should == {"tropo"=>[{"startRecording"=>{"url"=>"http://postrecording.com/tropo"}}]}
295
+ end
296
+
297
+ it "should generate a JSON document with a 'stopRecording' action" do
298
+ response = Tropo::Generator.stop_call_recording
299
+ JSON.parse(response).should == {"tropo"=>[{"stopRecording"=>nil}]}
300
+ end
301
+
292
302
  it "should generate a JSON document with a 'stoprecording' action" do
293
303
  response = Tropo::Generator.stop_recording
294
304
  JSON.parse(response).should == {"tropo"=>[{"stopRecording"=>nil}]}
@@ -426,13 +436,13 @@ describe "Tropo" do
426
436
  t.on :event => 'hangup', :next => '/hangup.json' # When a user hangs or call is done. We will want to log some details.
427
437
  t.on :event => 'continue', :next => '/next.json'
428
438
  t.say "Hello"
429
- t.start_recording(:name => 'recording', :url => "http://heroku-voip.marksilver.net/post_audio_to_s3?filename=foo.wav&unique_id=bar")
439
+ t.start_recording(:url => "http://heroku-voip.marksilver.net/post_audio_to_s3?filename=foo.wav&unique_id=bar")
430
440
  # [From this point, until stop_recording(), we will record what the caller *and* the IVR say]
431
441
  t.say "You are now on the record."
432
442
  # Prompt the user to incriminate themselve on-the-record
433
443
  t.say "Go ahead, sing-along."
434
444
  t.say "http://denalidomain.com/music/keepers/HappyHappyBirthdaytoYou-Disney.mp3"
435
- 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"=>{"name"=>"recording", "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"}]}]}
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"}]}]}
436
446
  end
437
447
 
438
448
  it "should generate a voice_session true if a JSON session is received that is a channel of 'VOICE'" do
@@ -610,4 +620,24 @@ describe "Tropo" do
610
620
  JSON.parse(t.response)['tropo'][0]['ask']['recognizer'].should == 'fr-fr'
611
621
  JSON.parse(t.response)['tropo'][1]['ask']['recognizer'].should == 'de-de'
612
622
  end
623
+
624
+ it "should parse a JSON string or a Ruby Hash the same" do
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
+ tropo = Tropo::Generator.parse json_session
627
+ tropo.session.user_type.should == 'HUMAN'
628
+
629
+ tropo = Tropo::Generator.parse(JSON.parse(json_session))
630
+ tropo.session.user_type.should == 'HUMAN'
631
+ end
632
+
633
+ it "should return a hash of the response object" do
634
+ result = Tropo::Generator.new do
635
+ say [{ :value => '1234' }, { :value => 'abcd', :event => "nomatch:1" }]
636
+ say [{ :value => '0987' }, { :value => 'zyxw', :event => "nomatch:2" }]
637
+ end
638
+ result.to_hash.should == { :tropo => [{ :say => [{ :value => "1234" },
639
+ { :event => "nomatch:1", :value => "abcd" }] },
640
+ { :say => [{ :value => "0987" },
641
+ { :event => "nomatch:2", :value => "zyxw" }] }] }
642
+ end
613
643
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{tropo-webapi-ruby}
8
- s.version = "0.1.8"
8
+ s.version = "0.1.9"
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"]
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
26
26
  "VERSION",
27
27
  "examples/sinatra_server.rb",
28
28
  "lib/tropo-webapi-ruby.rb",
29
+ "lib/tropo-webapi-ruby/object_patch.rb",
29
30
  "lib/tropo-webapi-ruby/tropo-webapi-ruby-helpers.rb",
30
31
  "lib/tropo-webapi-ruby/tropo-webapi-ruby.rb",
31
32
  "spec/spec.opts",
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tropo-webapi-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ hash: 9
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 9
10
+ version: 0.1.9
5
11
  platform: ruby
6
12
  authors:
7
13
  - Jason Goecke
@@ -14,34 +20,52 @@ default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: rspec
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
29
+ hash: 13
30
+ segments:
31
+ - 1
32
+ - 2
33
+ - 9
23
34
  version: 1.2.9
24
- version:
35
+ type: :development
36
+ version_requirements: *id001
25
37
  - !ruby/object:Gem::Dependency
26
38
  name: json_pure
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
30
42
  requirements:
31
43
  - - ">="
32
44
  - !ruby/object:Gem::Version
45
+ hash: 31
46
+ segments:
47
+ - 1
48
+ - 2
49
+ - 0
33
50
  version: 1.2.0
34
- version:
51
+ type: :runtime
52
+ version_requirements: *id002
35
53
  - !ruby/object:Gem::Dependency
36
54
  name: hashie
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
40
58
  requirements:
41
59
  - - ">="
42
60
  - !ruby/object:Gem::Version
61
+ hash: 23
62
+ segments:
63
+ - 0
64
+ - 2
65
+ - 0
43
66
  version: 0.2.0
44
- version:
67
+ type: :runtime
68
+ version_requirements: *id003
45
69
  description: Ruby library for interacting with the Tropo Web API via REST & JSON
46
70
  email: jsgoecke@voxeo.com
47
71
  executables: []
@@ -61,6 +85,7 @@ files:
61
85
  - VERSION
62
86
  - examples/sinatra_server.rb
63
87
  - lib/tropo-webapi-ruby.rb
88
+ - lib/tropo-webapi-ruby/object_patch.rb
64
89
  - lib/tropo-webapi-ruby/tropo-webapi-ruby-helpers.rb
65
90
  - lib/tropo-webapi-ruby/tropo-webapi-ruby.rb
66
91
  - spec/spec.opts
@@ -77,21 +102,29 @@ rdoc_options:
77
102
  require_paths:
78
103
  - lib
79
104
  required_ruby_version: !ruby/object:Gem::Requirement
105
+ none: false
80
106
  requirements:
81
107
  - - ">="
82
108
  - !ruby/object:Gem::Version
109
+ hash: 59
110
+ segments:
111
+ - 1
112
+ - 8
113
+ - 6
83
114
  version: 1.8.6
84
- version:
85
115
  required_rubygems_version: !ruby/object:Gem::Requirement
116
+ none: false
86
117
  requirements:
87
118
  - - ">="
88
119
  - !ruby/object:Gem::Version
120
+ hash: 3
121
+ segments:
122
+ - 0
89
123
  version: "0"
90
- version:
91
124
  requirements: []
92
125
 
93
126
  rubyforge_project:
94
- rubygems_version: 1.3.5
127
+ rubygems_version: 1.3.7
95
128
  signing_key:
96
129
  specification_version: 3
97
130
  summary: Tropo Web API Ruby Gem