caracal 1.0.8 → 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b18e4eda1bbb02a4efb9191d1c65d99701e54800
4
- data.tar.gz: 5720059a89acdabe4f278fff2abb6c08c40ffb99
3
+ metadata.gz: 0d2efc2b19a3ae0483703f88497fb42bbf876f9e
4
+ data.tar.gz: 2dcd3fb0074ddc334878eb00339dc27ad7ec30aa
5
5
  SHA512:
6
- metadata.gz: 707f70ec9a572317a0bef6d04cb44c7247b9e7d7b1d5baa7d8176eb4297eedfb5a405d8aeeebf7af29827b98955e5582fadb77bdafadce38fa399c15b65d5888
7
- data.tar.gz: ef395004b3eef312499f6ea2db4465ec50409f0a75580289d41cd10a98ccec0d0e6942bd651b4059387560dcbf4254488e0dadcdf4338836a2cf204c301e3adc
6
+ metadata.gz: 5539dbe580138147f1c3c036d2147790085178a4fd2b60dfb54e0b545fab050f52a1c10bf5ff591354c6d14712ce8ff9f8f5a31254adee2a60abf4b781be59c5
7
+ data.tar.gz: 39f1c998d281aaa798f52310c4346721e1e39e81d1c4821ad99c6d7026603a27a0c3bba8d9804a45f6977404907de3badd9b1d57c674781e458ca659405411b2
data/README.md CHANGED
@@ -301,12 +301,13 @@ docx.page # starts a new page.
301
301
 
302
302
  ### Page Numbers
303
303
 
304
- Page numbers can be added to the footer via the `page_numbers` method. The method accepts an optional parameter for controlling the alignment of the text.
304
+ Page numbers can be added to the footer via the `page_numbers` method. The method accepts optional parameters for controlling the label and alignment of the text.
305
305
 
306
306
  *Page numbers are turned off by default.*
307
307
 
308
308
  ```ruby
309
309
  docx.page_numbers true do
310
+ label 'Page' # sets the text that will go to the left of the page number. Defaults to nil.
310
311
  align :right # sets the alignment. accepts :left, :center, and :right.
311
312
  end
312
313
  ```
@@ -4,66 +4,72 @@ require 'caracal/core/models/base_model'
4
4
  module Caracal
5
5
  module Core
6
6
  module Models
7
-
7
+
8
8
  # This class handles block options passed to the page_numbers
9
9
  # method.
10
10
  #
11
11
  class PageNumberModel < BaseModel
12
-
12
+
13
13
  #-------------------------------------------------------------
14
14
  # Configuration
15
15
  #-------------------------------------------------------------
16
-
16
+
17
17
  # constants
18
- const_set(:DEFAULT_PAGE_NUMBER_SHOW, false)
19
18
  const_set(:DEFAULT_PAGE_NUMBER_ALIGN, :center)
20
-
19
+ const_set(:DEFAULT_PAGE_NUMBER_SHOW, false)
20
+
21
21
  # accessors
22
22
  attr_reader :page_number_align
23
+ attr_reader :page_number_label
23
24
  attr_reader :page_number_show
24
-
25
+
25
26
  # initialization
26
27
  def initialize(options={}, &block)
27
- @page_number_show = DEFAULT_PAGE_NUMBER_SHOW
28
28
  @page_number_align = DEFAULT_PAGE_NUMBER_ALIGN
29
-
29
+ @page_number_label = nil
30
+ @page_number_show = DEFAULT_PAGE_NUMBER_SHOW
31
+
30
32
  super options, &block
31
33
  end
32
-
33
-
34
+
35
+
34
36
  #-------------------------------------------------------------
35
37
  # Public Methods
36
38
  #-------------------------------------------------------------
37
-
39
+
38
40
  #=============== SETTERS ==============================
39
-
41
+
40
42
  def align(value)
41
43
  @page_number_align = value.to_s.to_sym
42
44
  end
43
-
45
+
46
+ def label(value)
47
+ @page_number_label = value.to_s.strip # renderer will enforce trailing space
48
+ end
49
+
44
50
  def show(value)
45
51
  @page_number_show = !!value
46
52
  end
47
-
48
-
53
+
54
+
49
55
  #=============== VALIDATION ===========================
50
-
56
+
51
57
  def valid?
52
58
  (!page_number_show || [:left, :center, :right].include?(page_number_align))
53
59
  end
54
-
55
-
60
+
61
+
56
62
  #-------------------------------------------------------------
57
63
  # Private Instance Methods
58
64
  #-------------------------------------------------------------
59
65
  private
60
-
66
+
61
67
  def option_keys
62
- [:align, :show]
68
+ [:align, :label, :show]
63
69
  end
64
-
70
+
65
71
  end
66
-
72
+
67
73
  end
68
74
  end
69
- end
75
+ end
@@ -4,49 +4,51 @@ require 'caracal/errors'
4
4
 
5
5
  module Caracal
6
6
  module Core
7
-
8
- # This module encapsulates all the functionality related to setting the
7
+
8
+ # This module encapsulates all the functionality related to setting the
9
9
  # document's page number behavior.
10
10
  #
11
11
  module PageNumbers
12
12
  def self.included(base)
13
13
  base.class_eval do
14
-
14
+
15
15
  #-------------------------------------------------------------
16
16
  # Configuration
17
17
  #-------------------------------------------------------------
18
-
18
+
19
19
  # constants
20
20
  const_set(:DEFAULT_PAGE_NUMBER_ALIGN, :center)
21
-
21
+
22
22
  # accessors
23
- attr_reader :page_number_show
24
23
  attr_reader :page_number_align
25
-
26
-
24
+ attr_reader :page_number_label
25
+ attr_reader :page_number_show
26
+
27
+
27
28
  #-------------------------------------------------------------
28
29
  # Public Methods
29
30
  #-------------------------------------------------------------
30
-
31
+
31
32
  # This method controls whether and how page numbers are displayed
32
33
  # on the document.
33
34
  #
34
35
  def page_numbers(*args, &block)
35
36
  options = Caracal::Utilities.extract_options!(args)
36
37
  options.merge!({ show: !!args.first }) unless args.first.nil? # careful: falsey value
37
-
38
+
38
39
  model = Caracal::Core::Models::PageNumberModel.new(options, &block)
39
40
  if model.valid?
40
- @page_number_show = model.page_number_show
41
41
  @page_number_align = model.page_number_align
42
+ @page_number_label = model.page_number_label
43
+ @page_number_show = model.page_number_show
42
44
  else
43
45
  raise Caracal::Errors::InvalidModelError, 'page_numbers :align parameter must be :left, :center, or :right'
44
46
  end
45
47
  end
46
-
48
+
47
49
  end
48
50
  end
49
51
  end
50
-
52
+
51
53
  end
52
- end
54
+ end
@@ -6,12 +6,12 @@ require 'caracal/renderers/xml_renderer'
6
6
  module Caracal
7
7
  module Renderers
8
8
  class FooterRenderer < XmlRenderer
9
-
9
+
10
10
  #-------------------------------------------------------------
11
11
  # Public Methods
12
12
  #-------------------------------------------------------------
13
-
14
- # This method produces the xml required for the `word/settings.xml`
13
+
14
+ # This method produces the xml required for the `word/settings.xml`
15
15
  # sub-document.
16
16
  #
17
17
  def to_xml
@@ -22,6 +22,16 @@ module Caracal
22
22
  xml.send 'w:contextualSpacing', { 'w:val' => '0' }
23
23
  xml.send 'w:jc', { 'w:val' => "#{ document.page_number_align }" }
24
24
  end
25
+ if document.page_number_label.present?
26
+ xml.send 'w:r', run_options do
27
+ xml.send 'w:rPr' do
28
+ xml.send 'w:rStyle', { 'w:val' => 'PageNumber' }
29
+ end
30
+ xml.send 'w:t', { 'xml:space' => 'preserve' } do
31
+ xml.text "#{ document.page_number_label } "
32
+ end
33
+ end
34
+ end
25
35
  xml.send 'w:fldSimple', { 'w:dirty' => '0', 'w:instr' => 'PAGE', 'w:fldLock' => '0' } do
26
36
  xml.send 'w:r', run_options do
27
37
  xml.send 'w:rPr'
@@ -37,13 +47,13 @@ module Caracal
37
47
  end
38
48
  builder.to_xml(save_options)
39
49
  end
40
-
41
-
50
+
51
+
42
52
  #-------------------------------------------------------------
43
53
  # Private Methods
44
- #-------------------------------------------------------------
54
+ #-------------------------------------------------------------
45
55
  private
46
-
56
+
47
57
  def root_options
48
58
  {
49
59
  'xmlns:mc' => 'http://schemas.openxmlformats.org/markup-compatibility/2006',
@@ -63,7 +73,7 @@ module Caracal
63
73
  'xmlns:dgm' => 'http://schemas.openxmlformats.org/drawingml/2006/diagram'
64
74
  }
65
75
  end
66
-
76
+
67
77
  end
68
78
  end
69
- end
79
+ end
@@ -1,3 +1,3 @@
1
1
  module Caracal
2
- VERSION = '1.0.8'
2
+ VERSION = '1.0.9'
3
3
  end
@@ -1,64 +1,73 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Caracal::Core::Models::PageNumberModel do
4
- subject do
4
+ subject do
5
5
  described_class.new do
6
6
  show true
7
7
  align :right
8
+ label 'Page'
8
9
  end
9
10
  end
10
-
11
+
11
12
  #-------------------------------------------------------------
12
13
  # Configuration
13
14
  #-------------------------------------------------------------
14
15
 
15
16
  describe 'configuration tests' do
16
-
17
+
17
18
  # constants
18
19
  describe 'constants' do
19
20
  it { expect(described_class::DEFAULT_PAGE_NUMBER_ALIGN).to eq :center }
20
21
  end
21
-
22
+
22
23
  # accessors
23
24
  describe 'accessors' do
24
25
  it { expect(subject.page_number_align).to eq :right }
26
+ it { expect(subject.page_number_label).to eq 'Page' }
25
27
  it { expect(subject.page_number_show).to eq true }
26
28
  end
27
-
29
+
28
30
  end
29
-
30
-
31
+
32
+
31
33
  #-------------------------------------------------------------
32
34
  # Public Methods
33
35
  #-------------------------------------------------------------
34
-
36
+
35
37
  describe 'public method tests' do
36
-
38
+
37
39
  #=============== SETTERS ==============================
38
-
40
+
39
41
  # .align
40
42
  describe '.align' do
41
43
  before { subject.align(:left) }
42
-
44
+
43
45
  it { expect(subject.page_number_align).to eq :left }
44
46
  end
45
-
47
+
48
+ # .label
49
+ describe '.label' do
50
+ before { subject.label('Page') }
51
+
52
+ it { expect(subject.page_number_label).to eq 'Page' }
53
+ end
54
+
46
55
  # .show
47
56
  describe '.show' do
48
57
  before { subject.show(true) }
49
-
58
+
50
59
  it { expect(subject.page_number_show).to eq true }
51
60
  end
52
-
53
-
61
+
62
+
54
63
  #=============== VALIDATIONS ==========================
55
-
64
+
56
65
  describe '.valid?' do
57
66
  describe 'when show is false' do
58
67
  before do
59
68
  allow(subject).to receive(:page_number_show).and_return(false)
60
69
  end
61
-
70
+
62
71
  it { expect(subject.valid?).to eq true }
63
72
  end
64
73
  describe 'when show is true and align is valid' do
@@ -66,7 +75,7 @@ describe Caracal::Core::Models::PageNumberModel do
66
75
  allow(subject).to receive(:page_number_show).and_return(true)
67
76
  allow(subject).to receive(:page_number_align).and_return(:left)
68
77
  end
69
-
78
+
70
79
  it { expect(subject.valid?).to eq true }
71
80
  end
72
81
  describe 'when show is true and align is invalid' do
@@ -74,28 +83,28 @@ describe Caracal::Core::Models::PageNumberModel do
74
83
  allow(subject).to receive(:page_number_show).and_return(true)
75
84
  allow(subject).to receive(:page_number_align).and_return(:dummy)
76
85
  end
77
-
86
+
78
87
  it { expect(subject.valid?).to eq false }
79
88
  end
80
89
  end
81
-
90
+
82
91
  end
83
-
84
-
92
+
93
+
85
94
  #-------------------------------------------------------------
86
95
  # Private Methods
87
96
  #-------------------------------------------------------------
88
-
97
+
89
98
  describe 'private method tests' do
90
-
99
+
91
100
  # .option_keys
92
101
  describe '.option_keys' do
93
102
  let(:actual) { subject.send(:option_keys).sort }
94
- let(:expected) { [:align, :show].sort }
95
-
103
+ let(:expected) { [:align, :label, :show].sort }
104
+
96
105
  it { expect(actual).to eq expected }
97
106
  end
98
-
107
+
99
108
  end
100
-
101
- end
109
+
110
+ end
@@ -2,79 +2,88 @@ require 'spec_helper'
2
2
 
3
3
  describe Caracal::Core::PageSettings do
4
4
  subject { Caracal::Document.new }
5
-
6
-
5
+
6
+
7
7
  #-------------------------------------------------------------
8
8
  # Configuration
9
9
  #-------------------------------------------------------------
10
10
 
11
11
  describe 'configuration tests' do
12
-
12
+
13
13
  # constants
14
14
  describe 'page number constants' do
15
15
  it { expect(subject.class::DEFAULT_PAGE_NUMBER_ALIGN).to eq :center }
16
16
  end
17
-
17
+
18
18
  # readers
19
19
  describe 'page number readers' do
20
- it { expect(subject.page_number_show).to eq false }
21
20
  it { expect(subject.page_number_align).to eq :center }
21
+ it { expect(subject.page_number_label).to eq nil }
22
+ it { expect(subject.page_number_show).to eq false }
22
23
  end
23
-
24
+
24
25
  end
25
-
26
-
26
+
27
+
27
28
  #-------------------------------------------------------------
28
29
  # Public Methods
29
30
  #-------------------------------------------------------------
30
31
 
31
32
  describe 'public methods tests' do
32
-
33
+
33
34
  # .page_numbers
34
35
  describe '.page_numbers' do
35
36
  describe 'when nothing given' do
36
37
  before { subject.page_numbers }
37
-
38
- it { expect(subject.page_number_show).to eq false }
38
+
39
39
  it { expect(subject.page_number_align).to eq :center }
40
+ it { expect(subject.page_number_label).to eq nil }
41
+ it { expect(subject.page_number_show).to eq false }
40
42
  end
41
43
  describe 'when explicitly turned off' do
42
44
  before { subject.page_numbers false }
43
-
44
- it { expect(subject.page_number_show).to eq false }
45
+
45
46
  it { expect(subject.page_number_align).to eq :center }
47
+ it { expect(subject.page_number_label).to eq nil }
48
+ it { expect(subject.page_number_show).to eq false }
46
49
  end
47
50
  describe 'when options given' do
48
- before { subject.page_numbers true, align: :left }
49
-
50
- it { expect(subject.page_number_show).to eq true }
51
+ before { subject.page_numbers true, label: 'Custom Text', align: :left }
52
+
51
53
  it { expect(subject.page_number_align).to eq :left }
54
+ it { expect(subject.page_number_label).to eq 'Custom Text' }
55
+ it { expect(subject.page_number_show).to eq true }
52
56
  end
53
57
  describe 'when block given' do
54
58
  before do
55
59
  subject.page_numbers true do
56
60
  align :left
61
+ label 'More Text'
57
62
  end
58
63
  end
59
-
60
- it { expect(subject.page_number_show).to eq true }
64
+
61
65
  it { expect(subject.page_number_align).to eq :left }
66
+ it { expect(subject.page_number_label).to eq 'More Text' }
67
+ it { expect(subject.page_number_show).to eq true }
62
68
  end
63
69
  describe 'when fancy block given' do
64
70
  subject do
65
71
  Caracal::Document.new do |docx|
72
+ t = 'This is text'
66
73
  a = :left
67
74
  docx.page_numbers true do
75
+ label t
68
76
  align a
69
77
  end
70
78
  end
71
79
  end
72
-
73
- it { expect(subject.page_number_show).to eq true }
80
+
74
81
  it { expect(subject.page_number_align).to eq :left }
82
+ it { expect(subject.page_number_label).to eq 'This is text' }
83
+ it { expect(subject.page_number_show).to eq true }
75
84
  end
76
85
  end
77
-
86
+
78
87
  end
79
-
80
- end
88
+
89
+ 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: 1.0.8
4
+ version: 1.0.9
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: 2016-09-12 00:00:00.000000000 Z
12
+ date: 2017-06-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -220,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
220
220
  version: '0'
221
221
  requirements: []
222
222
  rubyforge_project:
223
- rubygems_version: 2.4.8
223
+ rubygems_version: 2.6.12
224
224
  signing_key:
225
225
  specification_version: 4
226
226
  summary: Fast, professional MSWord writer for Ruby.
@@ -260,4 +260,3 @@ test_files:
260
260
  - spec/lib/caracal/core/text_spec.rb
261
261
  - spec/lib/caracal/errors_spec.rb
262
262
  - spec/spec_helper.rb
263
- has_rdoc: