karotz 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/lib/karotz/client.rb CHANGED
@@ -27,79 +27,94 @@ module Karotz
27
27
  API = "http://api.karotz.com/api/karotz/"
28
28
  DIGEST = OpenSSL::Digest::Digest.new('sha1')
29
29
 
30
- #==========EARS=================
30
+ class << self
31
31
 
32
+ #==========EARS=================
32
33
 
33
- def self.ears(interactive_id, params={:reset => true})
34
- request :ears, interactive_id, params
35
- end
34
+ def ears(interactive_id, params={:reset => true})
35
+ request :ears, interactive_id, params
36
+ end
36
37
 
37
- #============LED================
38
+ #============LED================
38
39
 
39
- def self.led(interactive_id, params={:action => :pulse, :color => Color::BLUE, :period => 3000, :pulse => 500})
40
- request :led, interactive_id, params
41
- end
40
+ def led(interactive_id, params={:action => :pulse, :color => Color::BLUE, :period => 3000, :pulse => 500})
41
+ request :led, interactive_id, params
42
+ end
42
43
 
43
- def self.fade(interactive_id, params={:color => Color::BLUE, :period => 3000})
44
- request :led, interactive_id, {:action => :fade}.merge(params)
45
- end
44
+ def fade(interactive_id, params={:color => Color::BLUE, :period => 3000})
45
+ request :led, interactive_id, {:action => :fade}.merge(params)
46
+ end
46
47
 
47
- def self.light(interactive_id, params={:color => Color::BLUE})
48
- request :led, interactive_id, {:action => :light}.merge(params)
49
- end
48
+ def light(interactive_id, params={:color => Color::BLUE})
49
+ request :led, interactive_id, {:action => :light}.merge(params)
50
+ end
50
51
 
51
- #============LIFE_CYCLE=========
52
+ #============TTS================
52
53
 
53
- def self.start
54
- url = start_url(Configuration.install_id, Configuration.api_key, Configuration.secret)
55
- response = HTTPI.get(url)
56
- answer = Crack::XML.parse(response.body)
57
- raise "could not retrieve interactive_id" if answer["VoosMsg"].nil? || answer["VoosMsg"]["interactiveMode"].nil? || answer["VoosMsg"]["interactiveMode"]["interactiveId"].nil?
58
- answer["VoosMsg"]["interactiveMode"]["interactiveId"]
59
- end
54
+ def tts(interactive_id, params={:action => :speak, :text => "test", :lang => Language::ENGLISH})
55
+ request :tts, interactive_id, params
56
+ end
57
+ alias :speak :tts
60
58
 
61
- def self.stop(interactive_id, params={:action => :stop})
62
- request :interactivemode, interactive_id, params
63
- end
59
+ #============MULTIMEDIA=========
64
60
 
65
- def self.session
66
- interactive_id = start
67
- yield(new(interactive_id))
68
- ensure
69
- stop(interactive_id)
70
- end
61
+ def multimedia(interactive_id, params={:action => :play, :url => "http://www.jimwalls.net/mp3/ATeam.mp3"})
62
+ request :multimedia, interactive_id, params
63
+ end
64
+ alias :play :multimedia
71
65
 
72
- #===========HELPERS================
73
-
74
- def self.start_url(install_id, api_key, secret, once=rand(99999999999999), timestamp=Time.now.to_i)
75
- params = {
76
- 'installid' => install_id,
77
- 'apikey' => api_key,
78
- 'once' => once,
79
- 'timestamp' => timestamp,
80
- }
81
- query = create_query(params)
82
- hmac = OpenSSL::HMAC.digest(DIGEST, secret, query)
83
- encoded = Base64.encode64(hmac).chomp
84
- signed = CGI.escape(encoded)
85
- "#{API}start?#{query}&signature=#{signed}"
86
- end
66
+ #============LIFE_CYCLE=========
87
67
 
88
- private()
68
+ def start
69
+ url = start_url(Configuration.install_id, Configuration.api_key, Configuration.secret)
70
+ response = HTTPI.get(url)
71
+ answer = Crack::XML.parse(response.body)
72
+ raise "could not retrieve interactive_id" if answer["VoosMsg"].nil? || answer["VoosMsg"]["interactiveMode"].nil? || answer["VoosMsg"]["interactiveMode"]["interactiveId"].nil?
73
+ answer["VoosMsg"]["interactiveMode"]["interactiveId"]
74
+ end
89
75
 
90
- def self.request(endpoint, interactive_id, params={})
91
- raise "interactive_id is needed!" unless interactive_id
92
- raise "endpoint is needed!" unless endpoint
93
- url = "#{API}#{endpoint}?#{create_query({ :interactiveid => interactive_id }.merge(params))}"
94
- response = HTTPI.get(url)
95
- answer = Crack::XML.parse(response.body)
96
- raise "bad response from server" unless answer["VoosMsg"]["response"]["code"] == "OK"
97
- end
76
+ def stop(interactive_id, params={:action => :stop})
77
+ request :interactivemode, interactive_id, params
78
+ end
98
79
 
99
- def self.create_query(params)
100
- params.map { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.sort.join('&')
101
- end
80
+ def session
81
+ interactive_id = start
82
+ yield(new(interactive_id))
83
+ ensure
84
+ stop(interactive_id)
85
+ end
102
86
 
87
+ #===========HELPERS================
88
+
89
+ def start_url(install_id, api_key, secret, once=rand(99999999999999), timestamp=Time.now.to_i)
90
+ params = {
91
+ 'installid' => install_id,
92
+ 'apikey' => api_key,
93
+ 'once' => once,
94
+ 'timestamp' => timestamp,
95
+ }
96
+ query = create_query(params)
97
+ hmac = OpenSSL::HMAC.digest(DIGEST, secret, query)
98
+ encoded = Base64.encode64(hmac).chomp
99
+ signed = CGI.escape(encoded)
100
+ "#{API}start?#{query}&signature=#{signed}"
101
+ end
102
+
103
+ private()
104
+
105
+ def request(endpoint, interactive_id, params={})
106
+ raise "interactive_id is needed!" unless interactive_id
107
+ raise "endpoint is needed!" unless endpoint
108
+ url = "#{API}#{endpoint}?#{create_query({ :interactiveid => interactive_id }.merge(params))}"
109
+ response = HTTPI.get(url)
110
+ answer = Crack::XML.parse(response.body)
111
+ raise "bad response from server" unless answer["VoosMsg"]["response"]["code"] == "OK"
112
+ end
113
+
114
+ def create_query(params)
115
+ params.map { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.sort.join('&')
116
+ end
117
+ end
103
118
  end
104
119
  end
105
120
 
@@ -0,0 +1,7 @@
1
+ module Karotz
2
+ class Language
3
+ ENGLISH = :EN
4
+ GERMAN = :DE
5
+ FRENCH = :FR
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module Karotz
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/karotz.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "karotz/version"
2
2
  require "karotz/configuration"
3
- require "karotz/colors"
3
+ require "karotz/color"
4
+ require "karotz/language"
4
5
  require "karotz/client"
@@ -0,0 +1,19 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: http://api.karotz.com:80/api/karotz/asr?grammar=test&interactiveid=209301e8-05a6-47b4-b257-600eb62f7d25&lang=de
6
+ body:
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 200
11
+ message: OK
12
+ headers:
13
+ content-length:
14
+ - '215'
15
+ connection:
16
+ - keep-alive
17
+ body: ! '<VoosMsg><id>ce674a52-dc8d-4034-a1fe-a5549278af22</id><correlationId>865dfff6-f4e1-45b9-b088-2ac75a407efc</correlationId><response><code>ERROR</code><description>Access
18
+ denied: asr</description></response></VoosMsg>'
19
+ http_version: '1.1'
@@ -0,0 +1,18 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: http://api.karotz.com:80/api/karotz/multimedia?action=play&interactiveid=209301e8-05a6-47b4-b257-600eb62f7d25&url=http://www.jimwalls.net/mp3/ATeam.mp3
6
+ body:
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 200
11
+ message: OK
12
+ headers:
13
+ content-length:
14
+ - '255'
15
+ connection:
16
+ - keep-alive
17
+ body: <VoosMsg><id>2ad12c56-e80b-422c-9c6c-22cf04f97122</id><correlationId>80958aef-7516-4cc8-894e-2d2eb105ea38</correlationId><interactiveId>209301e8-05a6-47b4-b257-600eb62f7d25</interactiveId><callback></callback><response><code>OK</code></response></VoosMsg>
18
+ http_version: '1.1'
@@ -0,0 +1,18 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: http://api.karotz.com:80/api/karotz/tts?action=speak&interactiveid=209301e8-05a6-47b4-b257-600eb62f7d25&lang=EN&text=test
6
+ body:
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 200
11
+ message: OK
12
+ headers:
13
+ content-length:
14
+ - '255'
15
+ connection:
16
+ - keep-alive
17
+ body: <VoosMsg><id>5eb5ad44-f0d6-43cb-82f5-abd987b42c8f</id><correlationId>c4731e65-0710-4475-9a8d-f555ffc4c188</correlationId><interactiveId>209301e8-05a6-47b4-b257-600eb62f7d25</interactiveId><callback></callback><response><code>OK</code></response></VoosMsg>
18
+ http_version: '1.1'
data/spec/karotz_spec.rb CHANGED
@@ -75,6 +75,18 @@ module Karotz
75
75
  end
76
76
  end
77
77
 
78
+ context "text to speach (tts)" do
79
+ it "should say something", :vcr => true do
80
+ Client.tts(@interactive_id)
81
+ end
82
+ end
83
+
84
+ context "multimedia" do
85
+ it "should play mp3", :vcr => true do
86
+ Client.play(@interactive_id)
87
+ end
88
+ end
89
+
78
90
  context "lifecycle" do
79
91
  before(:each) do
80
92
  Configuration.configure do |config|
data/spec/spec_helper.rb CHANGED
@@ -28,7 +28,7 @@ RSpec.configure do |config|
28
28
  @api_key = ENV['KAROTZ_API_KEY']
29
29
  @secret = ENV['KAROTZ_SECRET']
30
30
  # retrieved via http://www.karotz.com/authentication/run/karotz/API_KEY
31
- @interactive_id = "117c09d2-02b9-4b38-b64b-9b821ac7c91c"
31
+ @interactive_id = "209301e8-05a6-47b4-b257-600eb62f7d25"
32
32
 
33
33
  Karotz::Configuration.reset
34
34
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: karotz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-12-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &2156300600 !ruby/object:Gem::Requirement
16
+ requirement: &2156300460 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2156300600
24
+ version_requirements: *2156300460
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &2156300180 !ruby/object:Gem::Requirement
27
+ requirement: &2156300040 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2156300180
35
+ version_requirements: *2156300040
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: pry
38
- requirement: &2156299760 !ruby/object:Gem::Requirement
38
+ requirement: &2156299620 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2156299760
46
+ version_requirements: *2156299620
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: guard-rspec
49
- requirement: &2156299340 !ruby/object:Gem::Requirement
49
+ requirement: &2156299200 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2156299340
57
+ version_requirements: *2156299200
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: webmock
60
- requirement: &2156298920 !ruby/object:Gem::Requirement
60
+ requirement: &2156298780 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2156298920
68
+ version_requirements: *2156298780
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: vcr
71
- requirement: &2156298500 !ruby/object:Gem::Requirement
71
+ requirement: &2156298360 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2156298500
79
+ version_requirements: *2156298360
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: httpclient
82
- requirement: &2156314460 !ruby/object:Gem::Requirement
82
+ requirement: &2156314320 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *2156314460
90
+ version_requirements: *2156314320
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: httpi
93
- requirement: &2156314040 !ruby/object:Gem::Requirement
93
+ requirement: &2156313900 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *2156314040
101
+ version_requirements: *2156313900
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: crack
104
- requirement: &2156313620 !ruby/object:Gem::Requirement
104
+ requirement: &2156313480 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,7 +109,7 @@ dependencies:
109
109
  version: '0'
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *2156313620
112
+ version_requirements: *2156313480
113
113
  description: ruby bindings for karotz rest api
114
114
  email:
115
115
  - phoetmail@googlemail.com
@@ -129,9 +129,11 @@ files:
129
129
  - karotz.gemspec
130
130
  - lib/karotz.rb
131
131
  - lib/karotz/client.rb
132
- - lib/karotz/colors.rb
132
+ - lib/karotz/color.rb
133
133
  - lib/karotz/configuration.rb
134
+ - lib/karotz/language.rb
134
135
  - lib/karotz/version.rb
136
+ - spec/cassettes/karotz/client_automatic_speach_recognition_asr_should_say_something.yml
135
137
  - spec/cassettes/karotz/client_ears_should_look_sad.yml
136
138
  - spec/cassettes/karotz/client_ears_should_make_the_bull.yml
137
139
  - spec/cassettes/karotz/client_ears_should_reset_the_ears.yml
@@ -142,6 +144,8 @@ files:
142
144
  - spec/cassettes/karotz/client_led_should_pulse.yml
143
145
  - spec/cassettes/karotz/client_lifecycle_should_do_something_in_a_block.yml
144
146
  - spec/cassettes/karotz/client_lifecycle_should_start_and_stop_the_interactivemode.yml
147
+ - spec/cassettes/karotz/client_multimedia_should_play_mp3.yml
148
+ - spec/cassettes/karotz/client_text_to_speach_tts_should_say_something.yml
145
149
  - spec/karotz_spec.rb
146
150
  - spec/spec_helper.rb
147
151
  homepage: http://github.com/phoet/karotz
@@ -169,6 +173,7 @@ signing_key:
169
173
  specification_version: 3
170
174
  summary: ruby bindings for karotz rest api
171
175
  test_files:
176
+ - spec/cassettes/karotz/client_automatic_speach_recognition_asr_should_say_something.yml
172
177
  - spec/cassettes/karotz/client_ears_should_look_sad.yml
173
178
  - spec/cassettes/karotz/client_ears_should_make_the_bull.yml
174
179
  - spec/cassettes/karotz/client_ears_should_reset_the_ears.yml
@@ -179,5 +184,7 @@ test_files:
179
184
  - spec/cassettes/karotz/client_led_should_pulse.yml
180
185
  - spec/cassettes/karotz/client_lifecycle_should_do_something_in_a_block.yml
181
186
  - spec/cassettes/karotz/client_lifecycle_should_start_and_stop_the_interactivemode.yml
187
+ - spec/cassettes/karotz/client_multimedia_should_play_mp3.yml
188
+ - spec/cassettes/karotz/client_text_to_speach_tts_should_say_something.yml
182
189
  - spec/karotz_spec.rb
183
190
  - spec/spec_helper.rb
File without changes