ruby_speech 0.2.1 → 0.2.2

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 CHANGED
@@ -1,25 +1,57 @@
1
+ # 0.2.2
2
+ * Feature: The SSML DSL now supports embedding SSML documents, elements or strings via the `embed` method. This behaves as you might expect:
3
+
4
+ ```ruby
5
+ doc1 = RubySpeech::SSML.draw do
6
+ string "Hi, I'm Fred. The time is currently "
7
+ say_as :interpret_as => 'date', :format => 'dmy' do
8
+ "01/02/1960"
9
+ end
10
+ end
11
+
12
+ doc2 = RubySpeech::SSML.draw do
13
+ voice :gender => :male, :name => 'fred' do
14
+ embed doc1
15
+ end
16
+ end
17
+
18
+ doc2.to_s
19
+ ```
20
+
21
+ ```xml
22
+ <speak xmlns="http://www.w3.org/2001/10/synthesis" version="1.0" xml:lang="en-US">
23
+ <voice gender="male" name="fred">
24
+ Hi, I'm Fred. The time is currently
25
+ <say-as interpret-as="date" format="dmy">
26
+ 01/02/1960
27
+ </say-as>
28
+ </voice>
29
+ </speak>
30
+ ```
31
+
1
32
  # 0.2.1
2
- Bugfix: SSML element's children now include any text content, and text content is copied when importing/concatenating documents
33
+ * Bugfix: SSML element's children now include any text content, and text content is copied when importing/concatenating documents
3
34
 
4
35
  # 0.2.0
5
- Feature: SSML elements can now be imported from a Nokogiri Node or a string
6
- Feature: SSML elements now respond to #children with an array of SSML elements, rather than a Nokogiri NodeSet
7
- Bugfix/Feature: Comparing SSML elements now compares children
36
+ * API Change: SSML::SayAs.new (and the DSL method `say_as`) now take `:interpret_as` in the options hash, rather than a separate first argument. This is for consistency with the other element types.
37
+ * Feature: SSML elements can now be imported from a Nokogiri Node or a string
38
+ * Feature: SSML elements now respond to #children with an array of SSML elements, rather than a Nokogiri NodeSet
39
+ * Bugfix/Feature: Comparing SSML elements now compares children
8
40
 
9
41
  # 0.1.5
10
- Feature: Now added support for SSML <audio/>
42
+ * Feature: Now added support for SSML `<audio/>`
11
43
 
12
44
  # 0.1.4
13
- Bugfix: Speak#+ now returns a brand new Speak rather than modifying the original object
14
- Bugfix: Speak#+ now re-sets the namespace on child elements to ensure no default namespace prefix is added
45
+ * Bugfix: Speak#+ now returns a brand new Speak rather than modifying the original object
46
+ * Bugfix: Speak#+ now re-sets the namespace on child elements to ensure no default namespace prefix is added
15
47
 
16
48
  # 0.1.3
17
- Bugfix: Strings included via the DSL (both as a block return value and by calling #string) are now properly escaped
49
+ * Bugfix: Strings included via the DSL (both as a block return value and by calling #string) are now properly escaped
18
50
 
19
51
  # 0.1.2
20
- API Change: SSML.draw now returns a Speak
21
- Feature: Speak objects can be turned into an XML document using #to_doc
22
- Feature: Speak objects can now be concatenated such that children are merged together
52
+ * API Change: SSML.draw now returns a Speak
53
+ * Feature: Speak objects can be turned into an XML document using #to_doc
54
+ * Feature: Speak objects can now be concatenated such that children are merged together
23
55
 
24
56
  # 0.1.1
25
57
  * Bugfix: DSL now allows for nesting all allowed elements within each other
data/README.md CHANGED
@@ -13,7 +13,7 @@ require 'ruby_speech'
13
13
  speak = RubySpeech::SSML.draw do
14
14
  voice gender: :male, name: 'fred' do
15
15
  string "Hi, I'm Fred. The time is currently "
16
- say_as 'date', format: 'dmy' do
16
+ say_as interpret_as: 'date', format: 'dmy' do
17
17
  "01/02/1960"
18
18
  end
19
19
  end
@@ -70,6 +70,21 @@ module RubySpeech
70
70
  super.map { |c| Element.import c }
71
71
  end
72
72
 
73
+ def embed(other)
74
+ case other
75
+ when String
76
+ self << encode_special_chars(other)
77
+ when Speak
78
+ other.children.each do |child|
79
+ self << child
80
+ end
81
+ when Element
82
+ self << other
83
+ else
84
+ raise ArgumentError, "Can only embed a String or an SSML element"
85
+ end
86
+ end
87
+
73
88
  def method_missing(method_name, *args, &block)
74
89
  const_name = method_name.to_s.sub('ssml', '').titleize.gsub(' ', '')
75
90
  const = SSML.const_get const_name
@@ -1,3 +1,3 @@
1
1
  module RubySpeech
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -56,6 +56,72 @@ module RubySpeech
56
56
  doc.should == expected_doc
57
57
  end
58
58
 
59
+ describe "embedding" do
60
+ it "SSML documents" do
61
+ doc1 = RubySpeech::SSML.draw do
62
+ string "Hi, I'm Fred. The time is currently "
63
+ say_as :interpret_as => 'date', :format => 'dmy' do
64
+ "01/02/1960"
65
+ end
66
+ end
67
+
68
+ doc2 = RubySpeech::SSML.draw do
69
+ voice :gender => :male, :name => 'fred' do
70
+ embed doc1
71
+ end
72
+ end
73
+
74
+ expected_doc = RubySpeech::SSML.draw do
75
+ voice :gender => :male, :name => 'fred' do
76
+ string "Hi, I'm Fred. The time is currently "
77
+ say_as :interpret_as => 'date', :format => 'dmy' do
78
+ "01/02/1960"
79
+ end
80
+ end
81
+ end
82
+
83
+ doc2.should == expected_doc
84
+ end
85
+
86
+ it "SSML elements" do
87
+ element = SSML::Emphasis.new(:content => "HELLO?")
88
+
89
+ doc = RubySpeech::SSML.draw do
90
+ voice :gender => :male, :name => 'fred' do
91
+ embed element
92
+ end
93
+ end
94
+
95
+ expected_doc = RubySpeech::SSML.draw do
96
+ voice :gender => :male, :name => 'fred' do
97
+ emphasis do
98
+ "HELLO?"
99
+ end
100
+ end
101
+ end
102
+
103
+ doc.should == expected_doc
104
+ end
105
+
106
+ it "strings" do
107
+ string = "How now, brown cow?"
108
+
109
+ doc = RubySpeech::SSML.draw do
110
+ voice :gender => :male, :name => 'fred' do
111
+ embed string
112
+ end
113
+ end
114
+
115
+ expected_doc = RubySpeech::SSML.draw do
116
+ voice :gender => :male, :name => 'fred' do
117
+ string "How now, brown cow?"
118
+ end
119
+ end
120
+
121
+ doc.should == expected_doc
122
+ end
123
+ end
124
+
59
125
  it "should properly escape string input" do
60
126
  doc = RubySpeech::SSML.draw do
61
127
  voice { string "I <3 nachos." }
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.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-30 00:00:00.000000000 +01:00
12
+ date: 2011-09-12 00:00:00.000000000 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: niceogiri
17
- requirement: &2160574820 !ruby/object:Gem::Requirement
17
+ requirement: &2153165820 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 0.0.4
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2160574820
25
+ version_requirements: *2153165820
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: activesupport
28
- requirement: &2160574300 !ruby/object:Gem::Requirement
28
+ requirement: &2153165300 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 3.0.7
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2160574300
36
+ version_requirements: *2153165300
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: bundler
39
- requirement: &2160573820 !ruby/object:Gem::Requirement
39
+ requirement: &2153164820 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 1.0.0
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *2160573820
47
+ version_requirements: *2153164820
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rspec
50
- requirement: &2160573340 !ruby/object:Gem::Requirement
50
+ requirement: &2153164340 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 2.3.0
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *2160573340
58
+ version_requirements: *2153164340
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: ci_reporter
61
- requirement: &2160572860 !ruby/object:Gem::Requirement
61
+ requirement: &2153163860 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: 1.6.3
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *2160572860
69
+ version_requirements: *2153163860
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: yard
72
- requirement: &2160572380 !ruby/object:Gem::Requirement
72
+ requirement: &2153163380 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: 0.7.0
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *2160572380
80
+ version_requirements: *2153163380
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: rake
83
- requirement: &2160571900 !ruby/object:Gem::Requirement
83
+ requirement: &2153162900 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '0'
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *2160571900
91
+ version_requirements: *2153162900
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: mocha
94
- requirement: &2160571420 !ruby/object:Gem::Requirement
94
+ requirement: &2153162420 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *2160571420
102
+ version_requirements: *2153162420
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: i18n
105
- requirement: &2160570940 !ruby/object:Gem::Requirement
105
+ requirement: &2153161940 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,7 +110,7 @@ dependencies:
110
110
  version: '0'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *2160570940
113
+ version_requirements: *2153161940
114
114
  description: Prepare SSML and GRXML documents with ease
115
115
  email:
116
116
  - ben@langfeld.me