caracal 0.3.0 → 1.0.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.
- checksums.yaml +4 -4
- data/README.md +3 -1
- data/lib/caracal/core/models/link_model.rb +1 -0
- data/lib/caracal/core/models/list_item_model.rb +27 -26
- data/lib/caracal/core/models/paragraph_model.rb +33 -31
- data/lib/caracal/core/models/text_model.rb +4 -2
- data/lib/caracal/renderers/document_renderer.rb +10 -6
- data/lib/caracal/version.rb +1 -1
- data/spec/lib/caracal/core/models/link_model_spec.rb +9 -2
- data/spec/lib/caracal/core/models/list_item_model_spec.rb +58 -51
- data/spec/lib/caracal/core/models/paragraph_model_spec.rb +55 -48
- data/spec/lib/caracal/core/models/text_model_spec.rb +9 -2
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d107834127a296986fca0b7b876148eab9d2be3
|
4
|
+
data.tar.gz: af3634f58a24cca519c544a33163cd2b6dc5832a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b3796c09560aeefe321644ab86150da646409851e97c8d98d25db4533129d4039811efe28680bb4cb9f1d0eac5997cd210700359029302ccd725bd64e971dc3
|
7
|
+
data.tar.gz: a5f930dafe4e88dedec2229f1ecf969a81e2d7265e63ead0f9ce562ff6b261f74b54ba2b7fc74effe6347a017a03abe442a12d4d39b9a6fb55ab268621619660
|
data/README.md
CHANGED
@@ -367,6 +367,7 @@ docx.p 'Sample text.' do
|
|
367
367
|
bold true # sets whether or not to render the text with a bold weight.
|
368
368
|
italic false # sets whether or not render the text in italic style.
|
369
369
|
underline false # sets whether or not to underline the text.
|
370
|
+
bgcolor 'cccccc' # sets the background color.
|
370
371
|
end
|
371
372
|
```
|
372
373
|
|
@@ -376,7 +377,7 @@ More complex paragraph runs can be accomplished by using the `text` method inste
|
|
376
377
|
docx.p do
|
377
378
|
text 'Here is a sentence with a '
|
378
379
|
link 'link', 'https://www.example.com'
|
379
|
-
text ' to something awesome', font: 'Courier New', color: '555555', size: 32, bold: true, italic: true, underline: true
|
380
|
+
text ' to something awesome', font: 'Courier New', color: '555555', size: 32, bold: true, italic: true, underline: true, bgcolor: 'cccccc'
|
380
381
|
text '.'
|
381
382
|
br
|
382
383
|
text 'This text follows a line break.'
|
@@ -399,6 +400,7 @@ p do
|
|
399
400
|
bold false # sets whether or not the text will be bold. defaults to false.
|
400
401
|
italic false # sets whether or not the text will be italic. defaults to false.
|
401
402
|
underline true # sets whether or not the text will be underlined. defaults to true.
|
403
|
+
bgcolor 'cccccc' # sets the background color.
|
402
404
|
end
|
403
405
|
end
|
404
406
|
```
|
@@ -6,20 +6,20 @@ require 'caracal/errors'
|
|
6
6
|
module Caracal
|
7
7
|
module Core
|
8
8
|
module Models
|
9
|
-
|
9
|
+
|
10
10
|
# This class encapsulates the logic needed to store and manipulate
|
11
11
|
# list item data.
|
12
12
|
#
|
13
13
|
class ListItemModel < ParagraphModel
|
14
|
-
|
14
|
+
|
15
15
|
#-------------------------------------------------------------
|
16
16
|
# Configuration
|
17
17
|
#-------------------------------------------------------------
|
18
|
-
|
18
|
+
|
19
19
|
# accessors
|
20
20
|
attr_accessor :nested_list
|
21
|
-
|
22
|
-
# readers (create aliases for superclass methods to conform
|
21
|
+
|
22
|
+
# readers (create aliases for superclass methods to conform
|
23
23
|
# to expected naming convention.)
|
24
24
|
attr_reader :list_item_type
|
25
25
|
attr_reader :list_item_level
|
@@ -29,15 +29,16 @@ module Caracal
|
|
29
29
|
alias_method :list_item_bold, :paragraph_bold
|
30
30
|
alias_method :list_item_italic, :paragraph_italic
|
31
31
|
alias_method :list_item_underline, :paragraph_underline
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
alias_method :list_item_bgcolor, :paragraph_bgcolor
|
33
|
+
|
34
|
+
|
35
|
+
|
35
36
|
#-------------------------------------------------------------
|
36
37
|
# Public Instance Methods
|
37
38
|
#-------------------------------------------------------------
|
38
|
-
|
39
|
+
|
39
40
|
#=============== SETTERS ==============================
|
40
|
-
|
41
|
+
|
41
42
|
# integers
|
42
43
|
[:level].each do |m|
|
43
44
|
define_method "#{ m }" do |value|
|
@@ -51,14 +52,14 @@ module Caracal
|
|
51
52
|
instance_variable_set("@list_item_#{ m }", value.to_s.to_sym)
|
52
53
|
end
|
53
54
|
end
|
54
|
-
|
55
|
-
|
55
|
+
|
56
|
+
|
56
57
|
#=============== SUB-METHODS ===========================
|
57
|
-
|
58
|
+
|
58
59
|
# .ol
|
59
60
|
def ol(options={}, &block)
|
60
61
|
options.merge!({ type: :ordered, level: list_item_level + 1 })
|
61
|
-
|
62
|
+
|
62
63
|
model = Caracal::Core::Models::ListModel.new(options, &block)
|
63
64
|
if model.valid?
|
64
65
|
@nested_list = model
|
@@ -67,11 +68,11 @@ module Caracal
|
|
67
68
|
end
|
68
69
|
model
|
69
70
|
end
|
70
|
-
|
71
|
+
|
71
72
|
# .ul
|
72
73
|
def ul(options={}, &block)
|
73
74
|
options.merge!({ type: :unordered, level: list_item_level + 1 })
|
74
|
-
|
75
|
+
|
75
76
|
model = Caracal::Core::Models::ListModel.new(options, &block)
|
76
77
|
if model.valid?
|
77
78
|
@nested_list = model
|
@@ -80,28 +81,28 @@ module Caracal
|
|
80
81
|
end
|
81
82
|
model
|
82
83
|
end
|
83
|
-
|
84
|
-
|
84
|
+
|
85
|
+
|
85
86
|
#=============== VALIDATION ===========================
|
86
|
-
|
87
|
+
|
87
88
|
def valid?
|
88
89
|
a = [:type, :level]
|
89
90
|
required = a.map { |m| send("list_item_#{ m }") }.compact.size == a.size
|
90
91
|
required && !runs.empty?
|
91
92
|
end
|
92
|
-
|
93
|
-
|
93
|
+
|
94
|
+
|
94
95
|
#-------------------------------------------------------------
|
95
96
|
# Private Instance Methods
|
96
97
|
#-------------------------------------------------------------
|
97
98
|
private
|
98
|
-
|
99
|
+
|
99
100
|
def option_keys
|
100
|
-
[:type, :level, :content, :style, :color, :size, :bold, :italic, :underline]
|
101
|
+
[:type, :level, :content, :style, :color, :size, :bold, :italic, :underline, :bgcolor]
|
101
102
|
end
|
102
|
-
|
103
|
+
|
103
104
|
end
|
104
|
-
|
105
|
+
|
105
106
|
end
|
106
107
|
end
|
107
|
-
end
|
108
|
+
end
|
@@ -7,16 +7,16 @@ require 'caracal/errors'
|
|
7
7
|
module Caracal
|
8
8
|
module Core
|
9
9
|
module Models
|
10
|
-
|
10
|
+
|
11
11
|
# This class encapsulates the logic needed to store and manipulate
|
12
12
|
# paragraph data.
|
13
13
|
#
|
14
14
|
class ParagraphModel < BaseModel
|
15
|
-
|
15
|
+
|
16
16
|
#-------------------------------------------------------------
|
17
17
|
# Configuration
|
18
18
|
#-------------------------------------------------------------
|
19
|
-
|
19
|
+
|
20
20
|
# readers
|
21
21
|
attr_reader :paragraph_style
|
22
22
|
attr_reader :paragraph_align
|
@@ -25,26 +25,27 @@ module Caracal
|
|
25
25
|
attr_reader :paragraph_bold
|
26
26
|
attr_reader :paragraph_italic
|
27
27
|
attr_reader :paragraph_underline
|
28
|
-
|
28
|
+
attr_reader :paragraph_bgcolor
|
29
|
+
|
29
30
|
# initialization
|
30
31
|
def initialize(options={}, &block)
|
31
32
|
content = options.delete(:content) { "" }
|
32
33
|
text content, options.dup
|
33
34
|
super options, &block
|
34
35
|
end
|
35
|
-
|
36
|
-
|
36
|
+
|
37
|
+
|
37
38
|
#-------------------------------------------------------------
|
38
39
|
# Public Instance Methods
|
39
40
|
#-------------------------------------------------------------
|
40
|
-
|
41
|
+
|
41
42
|
#=============== GETTERS ==============================
|
42
|
-
|
43
|
+
|
43
44
|
# .runs
|
44
45
|
def runs
|
45
46
|
@runs ||= []
|
46
47
|
end
|
47
|
-
|
48
|
+
|
48
49
|
# .run_attributes
|
49
50
|
def run_attributes
|
50
51
|
{
|
@@ -53,49 +54,50 @@ module Caracal
|
|
53
54
|
bold: paragraph_bold,
|
54
55
|
italic: paragraph_italic,
|
55
56
|
underline: paragraph_underline,
|
57
|
+
bgcolor: paragraph_bgcolor
|
56
58
|
}
|
57
59
|
end
|
58
|
-
|
59
|
-
|
60
|
+
|
61
|
+
|
60
62
|
#=============== SETTERS ==============================
|
61
|
-
|
63
|
+
|
62
64
|
# booleans
|
63
65
|
[:bold, :italic, :underline].each do |m|
|
64
66
|
define_method "#{ m }" do |value|
|
65
67
|
instance_variable_set("@paragraph_#{ m }", !!value)
|
66
68
|
end
|
67
69
|
end
|
68
|
-
|
70
|
+
|
69
71
|
# integers
|
70
72
|
[:size].each do |m|
|
71
73
|
define_method "#{ m }" do |value|
|
72
74
|
instance_variable_set("@paragraph_#{ m }", value.to_i)
|
73
75
|
end
|
74
76
|
end
|
75
|
-
|
77
|
+
|
76
78
|
# strings
|
77
|
-
[:color, :style].each do |m|
|
79
|
+
[:bgcolor, :color, :style].each do |m|
|
78
80
|
define_method "#{ m }" do |value|
|
79
81
|
instance_variable_set("@paragraph_#{ m }", value.to_s)
|
80
82
|
end
|
81
83
|
end
|
82
|
-
|
84
|
+
|
83
85
|
# symbols
|
84
86
|
[:align].each do |m|
|
85
87
|
define_method "#{ m }" do |value|
|
86
88
|
instance_variable_set("@paragraph_#{ m }", value.to_s.to_sym)
|
87
89
|
end
|
88
90
|
end
|
89
|
-
|
90
|
-
|
91
|
+
|
92
|
+
|
91
93
|
#=============== SUB-METHODS ===========================
|
92
|
-
|
94
|
+
|
93
95
|
# .link
|
94
96
|
def link(*args, &block)
|
95
97
|
options = Caracal::Utilities.extract_options!(args)
|
96
98
|
options.merge!({ content: args[0] }) if args[0]
|
97
99
|
options.merge!({ href: args[1] }) if args[1]
|
98
|
-
|
100
|
+
|
99
101
|
model = Caracal::Core::Models::LinkModel.new(options, &block)
|
100
102
|
if model.valid?
|
101
103
|
runs << model
|
@@ -111,12 +113,12 @@ module Caracal
|
|
111
113
|
runs << model
|
112
114
|
model
|
113
115
|
end
|
114
|
-
|
116
|
+
|
115
117
|
# .text
|
116
118
|
def text(*args, &block)
|
117
119
|
options = Caracal::Utilities.extract_options!(args)
|
118
120
|
options.merge!({ content: args.first }) if args.first
|
119
|
-
|
121
|
+
|
120
122
|
model = Caracal::Core::Models::TextModel.new(options, &block)
|
121
123
|
if model.valid?
|
122
124
|
runs << model
|
@@ -125,26 +127,26 @@ module Caracal
|
|
125
127
|
end
|
126
128
|
model
|
127
129
|
end
|
128
|
-
|
129
|
-
|
130
|
+
|
131
|
+
|
130
132
|
#=============== VALIDATION ===========================
|
131
|
-
|
133
|
+
|
132
134
|
def valid?
|
133
135
|
runs.size > 0
|
134
136
|
end
|
135
|
-
|
136
|
-
|
137
|
+
|
138
|
+
|
137
139
|
#-------------------------------------------------------------
|
138
140
|
# Private Instance Methods
|
139
141
|
#-------------------------------------------------------------
|
140
142
|
private
|
141
|
-
|
143
|
+
|
142
144
|
def option_keys
|
143
|
-
[:content, :style, :align, :color, :size, :bold, :italic, :underline]
|
145
|
+
[:content, :style, :align, :color, :size, :bold, :italic, :underline, :bgcolor]
|
144
146
|
end
|
145
|
-
|
147
|
+
|
146
148
|
end
|
147
|
-
|
149
|
+
|
148
150
|
end
|
149
151
|
end
|
150
152
|
end
|
@@ -22,6 +22,7 @@ module Caracal
|
|
22
22
|
attr_reader :text_bold
|
23
23
|
attr_reader :text_italic
|
24
24
|
attr_reader :text_underline
|
25
|
+
attr_reader :text_bgcolor
|
25
26
|
|
26
27
|
|
27
28
|
|
@@ -40,6 +41,7 @@ module Caracal
|
|
40
41
|
bold: text_bold,
|
41
42
|
italic: text_italic,
|
42
43
|
underline: text_underline,
|
44
|
+
bgcolor: text_bgcolor
|
43
45
|
}
|
44
46
|
end
|
45
47
|
|
@@ -61,7 +63,7 @@ module Caracal
|
|
61
63
|
end
|
62
64
|
|
63
65
|
# strings
|
64
|
-
[:color, :content, :font].each do |m|
|
66
|
+
[:bgcolor, :color, :content, :font].each do |m|
|
65
67
|
define_method "#{ m }" do |value|
|
66
68
|
instance_variable_set("@text_#{ m }", value.to_s)
|
67
69
|
end
|
@@ -82,7 +84,7 @@ module Caracal
|
|
82
84
|
private
|
83
85
|
|
84
86
|
def option_keys
|
85
|
-
[:content, :font, :color, :size, :bold, :italic, :underline]
|
87
|
+
[:content, :font, :color, :size, :bold, :italic, :underline, :bgcolor]
|
86
88
|
end
|
87
89
|
|
88
90
|
end
|
@@ -74,13 +74,17 @@ module Caracal
|
|
74
74
|
# skip
|
75
75
|
else
|
76
76
|
xml.send 'w:rPr' do
|
77
|
+
puts '='*80
|
78
|
+
puts attrs.inspect
|
79
|
+
puts '='*80
|
77
80
|
unless attrs.empty?
|
78
|
-
xml.send 'w:rStyle', { 'w:val'
|
79
|
-
xml.send 'w:color', { 'w:val'
|
80
|
-
xml.send 'w:sz', { 'w:val'
|
81
|
-
xml.send 'w:b', { 'w:val'
|
82
|
-
xml.send 'w:i', { 'w:val'
|
83
|
-
xml.send 'w:u', { 'w:val'
|
81
|
+
xml.send 'w:rStyle', { 'w:val' => attrs[:style] } unless attrs[:style].nil?
|
82
|
+
xml.send 'w:color', { 'w:val' => attrs[:color] } unless attrs[:color].nil?
|
83
|
+
xml.send 'w:sz', { 'w:val' => attrs[:size] } unless attrs[:size].nil?
|
84
|
+
xml.send 'w:b', { 'w:val' => (attrs[:bold] ? '1' : '0') } unless attrs[:bold].nil?
|
85
|
+
xml.send 'w:i', { 'w:val' => (attrs[:italic] ? '1' : '0') } unless attrs[:italic].nil?
|
86
|
+
xml.send 'w:u', { 'w:val' => (attrs[:underline] ? 'single' : 'none') } unless attrs[:underline].nil?
|
87
|
+
xml.send 'w:shd', { 'w:fill' => attrs[:bgcolor], 'w:val' => 'clear' } unless attrs[:bgcolor].nil?
|
84
88
|
unless attrs[:font].nil?
|
85
89
|
f = attrs[:font]
|
86
90
|
xml.send 'w:rFonts', { 'w:ascii' => f, 'w:hAnsi' => f, 'w:eastAsia' => f, 'w:cs' => f }
|
data/lib/caracal/version.rb
CHANGED
@@ -11,6 +11,7 @@ describe Caracal::Core::Models::LinkModel do
|
|
11
11
|
bold false
|
12
12
|
italic false
|
13
13
|
underline true
|
14
|
+
bgcolor 'cccccc'
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
@@ -36,6 +37,7 @@ describe Caracal::Core::Models::LinkModel do
|
|
36
37
|
it { expect(subject.link_bold).to eq false }
|
37
38
|
it { expect(subject.link_italic).to eq false }
|
38
39
|
it { expect(subject.link_underline).to eq true }
|
40
|
+
it { expect(subject.link_bgcolor).to eq 'cccccc' }
|
39
41
|
end
|
40
42
|
|
41
43
|
end
|
@@ -51,7 +53,7 @@ describe Caracal::Core::Models::LinkModel do
|
|
51
53
|
|
52
54
|
# .run_attributes
|
53
55
|
describe '.run_attributes' do
|
54
|
-
let(:expected) { { font: 'Courier New', color: '666666', size: 20, bold: false, italic: false, underline: true } }
|
56
|
+
let(:expected) { { font: 'Courier New', color: '666666', size: 20, bold: false, italic: false, underline: true, bgcolor: 'cccccc' } }
|
55
57
|
|
56
58
|
it { expect(subject.run_attributes).to eq expected }
|
57
59
|
end
|
@@ -84,6 +86,11 @@ describe Caracal::Core::Models::LinkModel do
|
|
84
86
|
end
|
85
87
|
|
86
88
|
# strings
|
89
|
+
describe '.bgcolor' do
|
90
|
+
before { subject.bgcolor('dddddd') }
|
91
|
+
|
92
|
+
it { expect(subject.link_bgcolor).to eq 'dddddd' }
|
93
|
+
end
|
87
94
|
describe '.color' do
|
88
95
|
before { subject.color('999999') }
|
89
96
|
|
@@ -135,7 +142,7 @@ describe Caracal::Core::Models::LinkModel do
|
|
135
142
|
# .option_keys
|
136
143
|
describe '.option_keys' do
|
137
144
|
let(:actual) { subject.send(:option_keys).sort }
|
138
|
-
let(:expected) { [:content, :href, :font, :color, :size, :bold, :italic, :underline].sort }
|
145
|
+
let(:expected) { [:content, :href, :font, :color, :size, :bold, :italic, :underline, :bgcolor].sort }
|
139
146
|
|
140
147
|
it { expect(actual).to eq expected }
|
141
148
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Caracal::Core::Models::ListItemModel do
|
4
|
-
subject do
|
5
|
-
described_class.new content: 'Lorem ipsum dolor....' do
|
4
|
+
subject do
|
5
|
+
described_class.new content: 'Lorem ipsum dolor....' do
|
6
6
|
type :ordered
|
7
7
|
level 2
|
8
8
|
style 'Fancy'
|
@@ -11,15 +11,16 @@ describe Caracal::Core::Models::ListItemModel do
|
|
11
11
|
bold false
|
12
12
|
italic false
|
13
13
|
underline true
|
14
|
+
bgcolor 'cccccc'
|
14
15
|
end
|
15
16
|
end
|
16
|
-
|
17
|
+
|
17
18
|
#-------------------------------------------------------------
|
18
19
|
# Configuration
|
19
20
|
#-------------------------------------------------------------
|
20
21
|
|
21
22
|
describe 'configuration tests' do
|
22
|
-
|
23
|
+
|
23
24
|
# accessors
|
24
25
|
describe 'accessors' do
|
25
26
|
it { expect(subject.respond_to? :nested_list).to eq true }
|
@@ -32,96 +33,102 @@ describe Caracal::Core::Models::ListItemModel do
|
|
32
33
|
it { expect(subject.list_item_bold).to eq false }
|
33
34
|
it { expect(subject.list_item_italic).to eq false }
|
34
35
|
it { expect(subject.list_item_underline).to eq true }
|
36
|
+
it { expect(subject.list_item_bgcolor).to eq 'cccccc' }
|
35
37
|
end
|
36
|
-
|
38
|
+
|
37
39
|
end
|
38
|
-
|
39
|
-
|
40
|
+
|
41
|
+
|
40
42
|
#-------------------------------------------------------------
|
41
43
|
# Public Methods
|
42
44
|
#-------------------------------------------------------------
|
43
|
-
|
45
|
+
|
44
46
|
describe 'public method tests' do
|
45
|
-
|
47
|
+
|
46
48
|
#=============== GETTERS ==========================
|
47
|
-
|
49
|
+
|
48
50
|
# .runs
|
49
51
|
describe '.runs' do
|
50
52
|
it { expect(subject.runs).to be_a(Array) }
|
51
53
|
end
|
52
|
-
|
53
|
-
|
54
|
+
|
55
|
+
|
54
56
|
#=============== SETTERS ==========================
|
55
|
-
|
57
|
+
|
56
58
|
# booleans
|
57
59
|
describe '.bold' do
|
58
60
|
before { subject.bold(true) }
|
59
|
-
|
61
|
+
|
60
62
|
it { expect(subject.list_item_bold).to eq true }
|
61
63
|
end
|
62
64
|
describe '.italic' do
|
63
65
|
before { subject.italic(true) }
|
64
|
-
|
66
|
+
|
65
67
|
it { expect(subject.list_item_italic).to eq true }
|
66
68
|
end
|
67
69
|
describe '.underline' do
|
68
70
|
before { subject.underline(true) }
|
69
|
-
|
71
|
+
|
70
72
|
it { expect(subject.list_item_underline).to eq true }
|
71
73
|
end
|
72
|
-
|
74
|
+
|
73
75
|
# integers
|
74
76
|
describe '.level' do
|
75
77
|
before { subject.level(3) }
|
76
|
-
|
78
|
+
|
77
79
|
it { expect(subject.list_item_level).to eq 3 }
|
78
80
|
end
|
79
81
|
describe '.size' do
|
80
82
|
before { subject.size(24) }
|
81
|
-
|
83
|
+
|
82
84
|
it { expect(subject.list_item_size).to eq 24 }
|
83
85
|
end
|
84
|
-
|
86
|
+
|
85
87
|
# strings
|
88
|
+
describe '.bgcolor' do
|
89
|
+
before { subject.bgcolor('dddddd') }
|
90
|
+
|
91
|
+
it { expect(subject.list_item_bgcolor).to eq 'dddddd' }
|
92
|
+
end
|
86
93
|
describe '.color' do
|
87
94
|
before { subject.color('999999') }
|
88
|
-
|
95
|
+
|
89
96
|
it { expect(subject.list_item_color).to eq '999999' }
|
90
97
|
end
|
91
98
|
describe '.style' do
|
92
99
|
before { subject.style('Dummy') }
|
93
|
-
|
100
|
+
|
94
101
|
it { expect(subject.list_item_style).to eq 'Dummy' }
|
95
102
|
end
|
96
|
-
|
103
|
+
|
97
104
|
# symbols
|
98
105
|
describe '.type' do
|
99
106
|
before { subject.type(:ordered) }
|
100
|
-
|
107
|
+
|
101
108
|
it { expect(subject.list_item_type).to eq :ordered }
|
102
109
|
end
|
103
|
-
|
104
|
-
|
110
|
+
|
111
|
+
|
105
112
|
#=============== SUB-METHODS ==========================
|
106
|
-
|
113
|
+
|
107
114
|
# .link
|
108
115
|
describe '.link' do
|
109
116
|
let!(:length) { subject.runs.length }
|
110
|
-
|
117
|
+
|
111
118
|
before { subject.link 'Text', 'http://www.google.com' }
|
112
|
-
|
119
|
+
|
113
120
|
it { expect(subject.runs.size).to eq length + 1 }
|
114
121
|
end
|
115
|
-
|
122
|
+
|
116
123
|
# .text
|
117
124
|
describe '.text' do
|
118
125
|
let!(:length) { subject.runs.length }
|
119
|
-
|
126
|
+
|
120
127
|
before { subject.text 'Text' }
|
121
|
-
|
128
|
+
|
122
129
|
it { expect(subject.runs.size).to eq length + 1 }
|
123
130
|
end
|
124
|
-
|
131
|
+
|
125
132
|
# .ol
|
126
133
|
describe '.ol' do
|
127
134
|
describe 'when no nested list provided' do
|
@@ -130,7 +137,7 @@ describe Caracal::Core::Models::ListItemModel do
|
|
130
137
|
text 'Item text.'
|
131
138
|
end
|
132
139
|
end
|
133
|
-
|
140
|
+
|
134
141
|
it { expect(subject.nested_list).to eq nil }
|
135
142
|
end
|
136
143
|
describe 'when nested list provided' do
|
@@ -142,49 +149,49 @@ describe Caracal::Core::Models::ListItemModel do
|
|
142
149
|
end
|
143
150
|
end
|
144
151
|
end
|
145
|
-
|
152
|
+
|
146
153
|
it { expect(subject.nested_list).to be_a(Caracal::Core::Models::ListModel) }
|
147
154
|
end
|
148
155
|
end
|
149
|
-
|
150
|
-
|
151
|
-
|
156
|
+
|
157
|
+
|
158
|
+
|
152
159
|
#=============== VALIDATION ===========================
|
153
|
-
|
160
|
+
|
154
161
|
describe '.valid?' do
|
155
162
|
describe 'when at least one run exists' do
|
156
163
|
before do
|
157
164
|
allow(subject).to receive(:runs).and_return(['a'])
|
158
165
|
end
|
159
|
-
|
166
|
+
|
160
167
|
it { expect(subject.valid?).to eq true }
|
161
168
|
end
|
162
169
|
describe 'when no runs exist' do
|
163
170
|
before do
|
164
171
|
allow(subject).to receive(:runs).and_return([])
|
165
172
|
end
|
166
|
-
|
173
|
+
|
167
174
|
it { expect(subject.valid?).to eq false }
|
168
175
|
end
|
169
176
|
end
|
170
|
-
|
177
|
+
|
171
178
|
end
|
172
|
-
|
173
|
-
|
179
|
+
|
180
|
+
|
174
181
|
#-------------------------------------------------------------
|
175
182
|
# Private Methods
|
176
183
|
#-------------------------------------------------------------
|
177
|
-
|
184
|
+
|
178
185
|
describe 'private method tests' do
|
179
|
-
|
186
|
+
|
180
187
|
# .option_keys
|
181
188
|
describe '.option_keys' do
|
182
189
|
let(:actual) { subject.send(:option_keys).sort }
|
183
|
-
let(:expected) { [:type, :level, :content, :style, :color, :size, :bold, :italic, :underline].sort }
|
184
|
-
|
190
|
+
let(:expected) { [:type, :level, :content, :style, :color, :size, :bold, :italic, :underline, :bgcolor].sort }
|
191
|
+
|
185
192
|
it { expect(actual).to eq expected }
|
186
193
|
end
|
187
|
-
|
194
|
+
|
188
195
|
end
|
189
|
-
|
190
|
-
end
|
196
|
+
|
197
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Caracal::Core::Models::ParagraphModel do
|
4
|
-
subject do
|
5
|
-
described_class.new content: 'Lorem ipsum dolor....' do
|
4
|
+
subject do
|
5
|
+
described_class.new content: 'Lorem ipsum dolor....' do
|
6
6
|
style 'Fancy'
|
7
7
|
align :right
|
8
8
|
color '666666'
|
@@ -10,16 +10,17 @@ describe Caracal::Core::Models::ParagraphModel do
|
|
10
10
|
bold false
|
11
11
|
italic false
|
12
12
|
underline true
|
13
|
+
bgcolor 'cccccc'
|
13
14
|
end
|
14
15
|
end
|
15
|
-
|
16
|
+
|
16
17
|
|
17
18
|
#-------------------------------------------------------------
|
18
19
|
# Configuration
|
19
20
|
#-------------------------------------------------------------
|
20
21
|
|
21
22
|
describe 'configuration tests' do
|
22
|
-
|
23
|
+
|
23
24
|
# accessors
|
24
25
|
describe 'accessors' do
|
25
26
|
it { expect(subject.paragraph_style).to eq 'Fancy' }
|
@@ -29,144 +30,150 @@ describe Caracal::Core::Models::ParagraphModel do
|
|
29
30
|
it { expect(subject.paragraph_bold).to eq false }
|
30
31
|
it { expect(subject.paragraph_italic).to eq false }
|
31
32
|
it { expect(subject.paragraph_underline).to eq true }
|
33
|
+
it { expect(subject.paragraph_bgcolor).to eq 'cccccc' }
|
32
34
|
end
|
33
35
|
|
34
36
|
end
|
35
37
|
|
36
|
-
|
38
|
+
|
37
39
|
#-------------------------------------------------------------
|
38
40
|
# Public Methods
|
39
41
|
#-------------------------------------------------------------
|
40
|
-
|
42
|
+
|
41
43
|
describe 'public method tests' do
|
42
|
-
|
44
|
+
|
43
45
|
#=============== GETTERS ==========================
|
44
|
-
|
46
|
+
|
45
47
|
# .runs
|
46
48
|
describe '.runs' do
|
47
49
|
it { expect(subject.runs).to be_a(Array) }
|
48
50
|
end
|
49
|
-
|
51
|
+
|
50
52
|
# .run_attributes
|
51
53
|
describe '.run_attributes' do
|
52
|
-
let(:expected) { { color: '666666', size: 20, bold: false, italic: false, underline: true } }
|
53
|
-
|
54
|
+
let(:expected) { { color: '666666', size: 20, bold: false, italic: false, underline: true, bgcolor: 'cccccc' } }
|
55
|
+
|
54
56
|
it { expect(subject.run_attributes).to eq expected }
|
55
57
|
end
|
56
|
-
|
57
|
-
|
58
|
+
|
59
|
+
|
58
60
|
#=============== SETTERS ==========================
|
59
|
-
|
61
|
+
|
60
62
|
# booleans
|
61
63
|
describe '.bold' do
|
62
64
|
before { subject.bold(true) }
|
63
|
-
|
65
|
+
|
64
66
|
it { expect(subject.paragraph_bold).to eq true }
|
65
67
|
end
|
66
68
|
describe '.italic' do
|
67
69
|
before { subject.italic(true) }
|
68
|
-
|
70
|
+
|
69
71
|
it { expect(subject.paragraph_italic).to eq true }
|
70
72
|
end
|
71
73
|
describe '.underline' do
|
72
74
|
before { subject.underline(true) }
|
73
|
-
|
75
|
+
|
74
76
|
it { expect(subject.paragraph_underline).to eq true }
|
75
77
|
end
|
76
|
-
|
78
|
+
|
77
79
|
# integers
|
78
80
|
describe '.size' do
|
79
81
|
before { subject.size(24) }
|
80
|
-
|
82
|
+
|
81
83
|
it { expect(subject.paragraph_size).to eq 24 }
|
82
84
|
end
|
83
|
-
|
85
|
+
|
84
86
|
# strings
|
87
|
+
describe '.bgcolor' do
|
88
|
+
before { subject.bgcolor('dddddd') }
|
89
|
+
|
90
|
+
it { expect(subject.paragraph_bgcolor).to eq 'dddddd' }
|
91
|
+
end
|
85
92
|
describe '.color' do
|
86
93
|
before { subject.color('999999') }
|
87
|
-
|
94
|
+
|
88
95
|
it { expect(subject.paragraph_color).to eq '999999' }
|
89
96
|
end
|
90
97
|
describe '.style' do
|
91
98
|
before { subject.style('Dummy') }
|
92
|
-
|
99
|
+
|
93
100
|
it { expect(subject.paragraph_style).to eq 'Dummy' }
|
94
101
|
end
|
95
|
-
|
102
|
+
|
96
103
|
# symbols
|
97
104
|
describe '.align' do
|
98
105
|
before { subject.align(:center) }
|
99
|
-
|
106
|
+
|
100
107
|
it { expect(subject.paragraph_align).to eq :center }
|
101
108
|
end
|
102
|
-
|
103
|
-
|
109
|
+
|
110
|
+
|
104
111
|
#=============== SUB-METHODS ==========================
|
105
|
-
|
112
|
+
|
106
113
|
# .link
|
107
114
|
describe '.link' do
|
108
115
|
let!(:length) { subject.runs.length }
|
109
|
-
|
116
|
+
|
110
117
|
before { subject.link 'Text', 'http://www.google.com' }
|
111
|
-
|
118
|
+
|
112
119
|
it { expect(subject.runs.size).to eq length + 1 }
|
113
120
|
end
|
114
121
|
|
115
122
|
# .br
|
116
123
|
describe '.br' do
|
117
124
|
let!(:length) { subject.runs.length }
|
118
|
-
|
125
|
+
|
119
126
|
before { subject.br }
|
120
|
-
|
127
|
+
|
121
128
|
it { expect(subject.runs.size).to eq length + 1 }
|
122
129
|
end
|
123
|
-
|
130
|
+
|
124
131
|
# .text
|
125
132
|
describe '.text' do
|
126
133
|
let!(:length) { subject.runs.length }
|
127
|
-
|
134
|
+
|
128
135
|
before { subject.text 'Text' }
|
129
|
-
|
136
|
+
|
130
137
|
it { expect(subject.runs.size).to eq length + 1 }
|
131
138
|
end
|
132
|
-
|
133
|
-
|
139
|
+
|
140
|
+
|
134
141
|
#=============== VALIDATION ===========================
|
135
|
-
|
142
|
+
|
136
143
|
describe '.valid?' do
|
137
144
|
describe 'when at least one run exists' do
|
138
145
|
before do
|
139
146
|
allow(subject).to receive(:runs).and_return(['a'])
|
140
147
|
end
|
141
|
-
|
148
|
+
|
142
149
|
it { expect(subject.valid?).to eq true }
|
143
150
|
end
|
144
151
|
describe 'when no runs exist' do
|
145
152
|
before do
|
146
153
|
allow(subject).to receive(:runs).and_return([])
|
147
154
|
end
|
148
|
-
|
155
|
+
|
149
156
|
it { expect(subject.valid?).to eq false }
|
150
157
|
end
|
151
158
|
end
|
152
|
-
|
159
|
+
|
153
160
|
end
|
154
|
-
|
155
|
-
|
161
|
+
|
162
|
+
|
156
163
|
#-------------------------------------------------------------
|
157
164
|
# Private Methods
|
158
165
|
#-------------------------------------------------------------
|
159
|
-
|
166
|
+
|
160
167
|
describe 'private method tests' do
|
161
|
-
|
168
|
+
|
162
169
|
# .option_keys
|
163
170
|
describe '.option_keys' do
|
164
171
|
let(:actual) { subject.send(:option_keys).sort }
|
165
|
-
let(:expected) { [:content, :style, :align, :color, :size, :bold, :italic, :underline].sort }
|
166
|
-
|
172
|
+
let(:expected) { [:content, :style, :align, :color, :size, :bold, :italic, :underline, :bgcolor].sort }
|
173
|
+
|
167
174
|
it { expect(actual).to eq expected }
|
168
175
|
end
|
169
|
-
|
176
|
+
|
170
177
|
end
|
171
|
-
|
178
|
+
|
172
179
|
end
|
@@ -10,6 +10,7 @@ describe Caracal::Core::Models::TextModel do
|
|
10
10
|
bold false
|
11
11
|
italic false
|
12
12
|
underline true
|
13
|
+
bgcolor 'cccccc'
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
@@ -28,6 +29,7 @@ describe Caracal::Core::Models::TextModel do
|
|
28
29
|
it { expect(subject.text_bold).to eq false }
|
29
30
|
it { expect(subject.text_italic).to eq false }
|
30
31
|
it { expect(subject.text_underline).to eq true }
|
32
|
+
it { expect(subject.text_bgcolor).to eq 'cccccc' }
|
31
33
|
end
|
32
34
|
|
33
35
|
end
|
@@ -43,7 +45,7 @@ describe Caracal::Core::Models::TextModel do
|
|
43
45
|
|
44
46
|
# .run_attributes
|
45
47
|
describe '.run_attributes' do
|
46
|
-
let(:expected) { { font: 'Courier New', color: '666666', size: 20, bold: false, italic: false, underline: true } }
|
48
|
+
let(:expected) { { font: 'Courier New', color: '666666', size: 20, bold: false, italic: false, underline: true, bgcolor: 'cccccc' } }
|
47
49
|
|
48
50
|
it { expect(subject.run_attributes).to eq expected }
|
49
51
|
end
|
@@ -76,6 +78,11 @@ describe Caracal::Core::Models::TextModel do
|
|
76
78
|
end
|
77
79
|
|
78
80
|
# strings
|
81
|
+
describe '.bgcolor' do
|
82
|
+
before { subject.color('dddddd') }
|
83
|
+
|
84
|
+
it { expect(subject.text_color).to eq 'dddddd' }
|
85
|
+
end
|
79
86
|
describe '.color' do
|
80
87
|
before { subject.color('999999') }
|
81
88
|
|
@@ -122,7 +129,7 @@ describe Caracal::Core::Models::TextModel do
|
|
122
129
|
# .option_keys
|
123
130
|
describe '.option_keys' do
|
124
131
|
let(:actual) { subject.send(:option_keys).sort }
|
125
|
-
let(:expected) { [:
|
132
|
+
let(:expected) { [:bgcolor, :bold, :color, :content, :font, :italic, :size, :underline].sort }
|
126
133
|
|
127
134
|
it { expect(actual).to eq expected }
|
128
135
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caracal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Trade Infomatics
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-07-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -217,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
217
|
version: '0'
|
218
218
|
requirements: []
|
219
219
|
rubyforge_project:
|
220
|
-
rubygems_version: 2.
|
220
|
+
rubygems_version: 2.4.8
|
221
221
|
signing_key:
|
222
222
|
specification_version: 4
|
223
223
|
summary: Fast, professional MSWord writer for Ruby.
|
@@ -257,3 +257,4 @@ test_files:
|
|
257
257
|
- spec/lib/caracal/core/text_spec.rb
|
258
258
|
- spec/lib/caracal/errors_spec.rb
|
259
259
|
- spec/spec_helper.rb
|
260
|
+
has_rdoc:
|