ruby_speech 0.3.4 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +9 -0
- data/Guardfile +5 -0
- data/README.md +1 -3
- data/lib/ruby_speech/generic_element.rb +24 -12
- data/lib/ruby_speech/grxml/element.rb +2 -0
- data/lib/ruby_speech/grxml/grammar.rb +16 -0
- data/lib/ruby_speech/version.rb +1 -1
- data/ruby_speech.gemspec +3 -0
- data/spec/ruby_speech/grxml/grammar_spec.rb +58 -0
- data/spec/ruby_speech/grxml_spec.rb +14 -0
- data/spec/ruby_speech/ssml_spec.rb +8 -1
- metadata +56 -22
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
# develop
|
2
|
+
|
3
|
+
# 0.4.0 - 2011-12-30
|
4
|
+
* Feature: Add the ability to look up child elements by name/attributes easily
|
5
|
+
* Feature: Allow easy access to a GRXML grammar's root rule element
|
6
|
+
* Feature: Allow inlining a Grammar's rulerefs
|
7
|
+
* Bugfix: Ruby 1.8 and JRuby don't do a tree-search for const_defined?
|
8
|
+
* Bugfix: Don't try to pass a method call up to the DSL block binding if it doesn't respond to the method either
|
9
|
+
|
1
10
|
# 0.3.4
|
2
11
|
* Eager-autoload all elements so that importing will work with elements that havn't been used yet directly
|
3
12
|
* Allow using the DSL with method calls out of the block
|
data/Guardfile
ADDED
data/README.md
CHANGED
@@ -51,9 +51,7 @@ Contruct a GRXML (SRGS) document like this:
|
|
51
51
|
```ruby
|
52
52
|
require 'ruby_speech'
|
53
53
|
|
54
|
-
grammy = RubySpeech::GRXML.draw do
|
55
|
-
self.mode = 'dtmf'
|
56
|
-
self.root = 'digits'
|
54
|
+
grammy = RubySpeech::GRXML.draw :mode => 'dtmf', :root => 'digits' do
|
57
55
|
rule id: 'digits' do
|
58
56
|
one_of do
|
59
57
|
0.upto(9) {|d| item { d.to_s } }
|
@@ -77,14 +77,28 @@ module RubySpeech
|
|
77
77
|
instance_eval &block
|
78
78
|
end
|
79
79
|
|
80
|
-
def children
|
81
|
-
|
80
|
+
def children(type = nil, attributes = nil)
|
81
|
+
if type
|
82
|
+
expression = type.to_s
|
83
|
+
|
84
|
+
expression << '[' << attributes.inject([]) do |h, (key, value)|
|
85
|
+
h << "@#{key}='#{value}'"
|
86
|
+
end.join(',') << ']' if attributes
|
87
|
+
|
88
|
+
if namespace_href
|
89
|
+
find "ns:#{expression}", :ns => namespace_href
|
90
|
+
else
|
91
|
+
find expression
|
92
|
+
end
|
93
|
+
else
|
94
|
+
super()
|
95
|
+
end.map { |c| self.class.import c }
|
82
96
|
end
|
83
97
|
|
84
98
|
def embed(other)
|
85
99
|
case other
|
86
100
|
when String
|
87
|
-
|
101
|
+
string other
|
88
102
|
when self.class.root_element
|
89
103
|
other.children.each do |child|
|
90
104
|
self << child
|
@@ -96,18 +110,16 @@ module RubySpeech
|
|
96
110
|
end
|
97
111
|
end
|
98
112
|
|
113
|
+
def string(other)
|
114
|
+
self << encode_special_chars(other)
|
115
|
+
end
|
116
|
+
|
99
117
|
def method_missing(method_name, *args, &block)
|
100
118
|
const_name = method_name.to_s.sub('ssml', '').titleize.gsub(' ', '')
|
101
|
-
if self.class.module.const_defined?
|
119
|
+
if self.class.module.const_defined?(const_name)
|
102
120
|
const = self.class.module.const_get const_name
|
103
|
-
|
104
|
-
|
105
|
-
self << encode_special_chars(args.first)
|
106
|
-
else
|
107
|
-
self << const.new(*args, &block)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
elsif @block_binding# && @block_binding.respond_to?(method_name)
|
121
|
+
self << const.new(*args, &block)
|
122
|
+
elsif @block_binding && @block_binding.respond_to?(method_name)
|
111
123
|
@block_binding.send method_name, *args, &block
|
112
124
|
else
|
113
125
|
super
|
@@ -110,6 +110,22 @@ module RubySpeech
|
|
110
110
|
write_attr :'tag-format', s
|
111
111
|
end
|
112
112
|
|
113
|
+
def root_rule
|
114
|
+
children(:rule, :id => root).first
|
115
|
+
end
|
116
|
+
|
117
|
+
def inline
|
118
|
+
find("//ns:ruleref", :ns => namespace_href).each do |ref|
|
119
|
+
rule = children(:rule, :id => ref[:uri].sub(/^#/, '')).first
|
120
|
+
ref.swap rule.nokogiri_children
|
121
|
+
end
|
122
|
+
|
123
|
+
non_root_rules = xpath "./ns:rule[@id!='#{root}']", :ns => namespace_href
|
124
|
+
non_root_rules.remove
|
125
|
+
|
126
|
+
self
|
127
|
+
end
|
128
|
+
|
113
129
|
def +(other)
|
114
130
|
self.class.new(:base_uri => base_uri).tap do |new_grammar|
|
115
131
|
(self.children + other.children).each do |child|
|
data/lib/ruby_speech/version.rb
CHANGED
data/ruby_speech.gemspec
CHANGED
@@ -28,4 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.add_development_dependency %q<rake>, [">= 0"]
|
29
29
|
s.add_development_dependency %q<mocha>, [">= 0"]
|
30
30
|
s.add_development_dependency %q<i18n>, [">= 0"]
|
31
|
+
s.add_development_dependency %q<guard>, [">= 0.9.0"]
|
32
|
+
s.add_development_dependency %q<guard-rspec>, [">= 0"]
|
33
|
+
s.add_development_dependency %q<ruby_gntp>, [">= 0"]
|
31
34
|
end
|
@@ -151,6 +151,64 @@ module RubySpeech
|
|
151
151
|
concat.to_s.should_not include('default')
|
152
152
|
end
|
153
153
|
end
|
154
|
+
|
155
|
+
it "should allow finding its root rule" do
|
156
|
+
grammar = GRXML::Grammar.new :root => 'foo'
|
157
|
+
bar = GRXML::Rule.new :id => 'bar'
|
158
|
+
grammar << bar
|
159
|
+
foo = GRXML::Rule.new :id => 'foo'
|
160
|
+
grammar << foo
|
161
|
+
|
162
|
+
grammar.root_rule.should == foo
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should allow inlining rule references" do
|
166
|
+
grammar = GRXML.draw :root => 'pin', :mode => :dtmf do
|
167
|
+
rule :id => 'digits' do
|
168
|
+
one_of do
|
169
|
+
0.upto(9) { |d| item { d.to_s } }
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
rule :id => 'pin', :scope => 'public' do
|
174
|
+
one_of do
|
175
|
+
item do
|
176
|
+
item :repeat => '4' do
|
177
|
+
ruleref :uri => '#digits'
|
178
|
+
end
|
179
|
+
"#"
|
180
|
+
end
|
181
|
+
item do
|
182
|
+
"* 9"
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
expected_grammar = GRXML.draw :root => 'pin', :mode => :dtmf do
|
189
|
+
rule :id => 'pin', :scope => 'public' do
|
190
|
+
one_of do
|
191
|
+
item do
|
192
|
+
item :repeat => '4' do
|
193
|
+
one_of do
|
194
|
+
0.upto(9) { |d| item { d.to_s } }
|
195
|
+
end
|
196
|
+
end
|
197
|
+
"#"
|
198
|
+
end
|
199
|
+
item do
|
200
|
+
"* 9"
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
grammar.inline.should == expected_grammar
|
207
|
+
end
|
208
|
+
|
209
|
+
describe "#tokens" do
|
210
|
+
context "with unquoted tokens"
|
211
|
+
end
|
154
212
|
end # Grammar
|
155
213
|
end # GRXML
|
156
214
|
end # RubySpeech
|
@@ -261,6 +261,20 @@ module RubySpeech
|
|
261
261
|
its(:children) { should == [string,item] }
|
262
262
|
end
|
263
263
|
end
|
264
|
+
|
265
|
+
it "should allow finding direct children of a particular type, matching certain attributes" do
|
266
|
+
item = GRXML::Item.new
|
267
|
+
item1 = GRXML::Item.new :weight => 0.5
|
268
|
+
item11 = GRXML::Item.new :weight => 0.5
|
269
|
+
item1 << item11
|
270
|
+
item << item1
|
271
|
+
item2 = GRXML::Item.new :weight => 0.7
|
272
|
+
item << item2
|
273
|
+
tag = GRXML::Tag.new
|
274
|
+
item << tag
|
275
|
+
|
276
|
+
item.children(:item, :weight => 0.5).should == [item1]
|
277
|
+
end
|
264
278
|
end # draw
|
265
279
|
end # GRXML
|
266
280
|
end # RubySpeech
|
@@ -15,13 +15,20 @@ module RubySpeech
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
describe "when the return value of the block is a string" do
|
18
|
+
describe "when the return value of the block is not a string" do
|
19
19
|
it "should not be inserted into the document" do
|
20
20
|
expected_doc = SSML::Speak.new
|
21
21
|
SSML.draw { :foo }.should == expected_doc
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
describe "when inserting a string" do
|
26
|
+
it "should work" do
|
27
|
+
expected_doc = SSML::Speak.new(:content => "Hi, I'm Fred")
|
28
|
+
SSML.draw { string "Hi, I'm Fred" }.should == expected_doc
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
25
32
|
it "should allow other SSML elements to be inserted in the document" do
|
26
33
|
doc = SSML.draw { voice :gender => :male, :name => 'fred' }
|
27
34
|
expected_doc = SSML::Speak.new
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_speech
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: niceogiri
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152682720 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.1.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152682720
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activesupport
|
27
|
-
requirement: &
|
27
|
+
requirement: &2152682100 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.0.7
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2152682100
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
requirement: &
|
38
|
+
requirement: &2152681560 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.0.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2152681560
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &2152681040 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 2.7.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2152681040
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: ci_reporter
|
60
|
-
requirement: &
|
60
|
+
requirement: &2152680460 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.6.3
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2152680460
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: yard
|
71
|
-
requirement: &
|
71
|
+
requirement: &2152679960 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.7.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2152679960
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rake
|
82
|
-
requirement: &
|
82
|
+
requirement: &2152679440 !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: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2152679440
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: mocha
|
93
|
-
requirement: &
|
93
|
+
requirement: &2152678860 !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: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2152678860
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: i18n
|
104
|
-
requirement: &
|
104
|
+
requirement: &2152678360 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,7 +109,40 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *2152678360
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: guard
|
115
|
+
requirement: &2152677860 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 0.9.0
|
121
|
+
type: :development
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: *2152677860
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: guard-rspec
|
126
|
+
requirement: &2152677380 !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: *2152677380
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: ruby_gntp
|
137
|
+
requirement: &2152676820 !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
type: :development
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: *2152676820
|
113
146
|
description: Prepare SSML and GRXML documents with ease
|
114
147
|
email:
|
115
148
|
- ben@langfeld.me
|
@@ -122,6 +155,7 @@ files:
|
|
122
155
|
- .travis.yml
|
123
156
|
- CHANGELOG.md
|
124
157
|
- Gemfile
|
158
|
+
- Guardfile
|
125
159
|
- LICENSE.md
|
126
160
|
- README.md
|
127
161
|
- Rakefile
|
@@ -186,7 +220,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
186
220
|
version: '0'
|
187
221
|
segments:
|
188
222
|
- 0
|
189
|
-
hash: -
|
223
|
+
hash: -633963194735147828
|
190
224
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
225
|
none: false
|
192
226
|
requirements:
|
@@ -195,7 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
229
|
version: '0'
|
196
230
|
segments:
|
197
231
|
- 0
|
198
|
-
hash: -
|
232
|
+
hash: -633963194735147828
|
199
233
|
requirements: []
|
200
234
|
rubyforge_project: ruby_speech
|
201
235
|
rubygems_version: 1.8.10
|