caracal 1.0.6 → 1.0.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 182b527fbc16b0c6a5ae6c5cc2b77c307dc65f7c
4
- data.tar.gz: ac8bd74712cfc75f7c9ac786d33de2b6be4ed3ac
3
+ metadata.gz: 8aeb4bbbf23d57b58d105f3cb14e93721476dccb
4
+ data.tar.gz: 24a30fd6c194b1ce00d29277a62937c956307494
5
5
  SHA512:
6
- metadata.gz: a1e01da077541a289ff4b30e7dc0d6793f7cb7def0ddd8cca6b0480cdc80941fd52c04155d0f41d8572778d6425d09e765574b64f632d59212c7c36a7cac9411
7
- data.tar.gz: 187ed9bfa2d8d5f182e7b4223506d69901756d8458c49868306d2033aee7c29ff49a6c4035ca12290ffd2ea965e767e3dc10e47a80d26c2441fec8aa49b04839
6
+ metadata.gz: 22d42de924ae632ff309b1c74254331d34ab37502a8115960964277657c5b655342439bac025f7ac3b9465126ee3ac1214bc2d8ba6b81f06576eed6d7ffd7feb
7
+ data.tar.gz: 75e87e2efd8f69ed0803316c5f84fb56812fb768457b6ac4a6d91ce0a16ea6e673f84ba42836314ae8fe3c4253e9998050d51a1bb022a934f9fa0fc03475d53e
data/README.md CHANGED
@@ -256,13 +256,16 @@ docx.name # => 'example_document.docx'
256
256
  ### Page Size
257
257
 
258
258
  Page dimensions can be set using the `page_size` method. The method accepts two parameters for controlling the width and height of the document.
259
+ It also accepts a third parameter for setting the page orientation. If you want landscape orientation, you need to change both the page
260
+ dimensions and the orientation explicitly.
259
261
 
260
262
  *Page size defaults to United States standard A4, portrait dimensions (8.5in x 11in).*
261
263
 
262
264
  ```ruby
263
265
  docx.page_size do
264
- width 12240 # sets the page width. units in twips.
265
- height 15840 # sets the page height. units in twips.
266
+ width 12240 # sets the page width. units in twips.
267
+ height 15840 # sets the page height. units in twips.
268
+ orientation :landscape # sets the printer orientation. accepts :portrait and :landscape.
266
269
  end
267
270
  ```
268
271
 
@@ -4,67 +4,76 @@ 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 size
9
9
  # method.
10
10
  #
11
11
  class PageSizeModel < BaseModel
12
-
12
+
13
13
  #-------------------------------------------------------------
14
14
  # Configuration
15
15
  #-------------------------------------------------------------
16
-
16
+
17
17
  # constants
18
- const_set(:DEFAULT_PAGE_WIDTH, 12240) # 8.5in in twips
19
- const_set(:DEFAULT_PAGE_HEIGHT, 15840) # 11.0in in twips
20
-
18
+ const_set(:DEFAULT_PAGE_WIDTH, 12240) # 8.5in in twips
19
+ const_set(:DEFAULT_PAGE_HEIGHT, 15840) # 11.0in in twips
20
+ const_set(:DEFAULT_PAGE_ORIENTATION, 'portrait')
21
+
21
22
  # accessors
22
23
  attr_reader :page_width
23
24
  attr_reader :page_height
24
-
25
+ attr_reader :page_orientation
26
+
25
27
  # initialization
26
28
  def initialize(options={}, &block)
27
- @page_width = DEFAULT_PAGE_WIDTH
28
- @page_height = DEFAULT_PAGE_HEIGHT
29
-
29
+ @page_width = DEFAULT_PAGE_WIDTH
30
+ @page_height = DEFAULT_PAGE_HEIGHT
31
+ @page_orientation = DEFAULT_PAGE_ORIENTATION
32
+
30
33
  super options, &block
31
34
  end
32
-
33
-
35
+
36
+
34
37
  #-------------------------------------------------------------
35
38
  # Public Methods
36
39
  #-------------------------------------------------------------
37
-
40
+
38
41
  #=============== SETTERS ==============================
39
-
42
+
40
43
  def height(value)
41
44
  @page_height = value.to_i
42
45
  end
43
-
46
+
47
+ def orientation(value)
48
+ allowed = ['landscape','portrait']
49
+ given = value.to_s.downcase
50
+ @page_orientation = allowed.include?(given) ? given : 'portrait'
51
+ end
52
+
44
53
  def width(value)
45
54
  @page_width = value.to_i
46
55
  end
47
-
48
-
56
+
57
+
49
58
  #=============== VALIDATION ==============================
50
-
59
+
51
60
  def valid?
52
61
  dims = [page_width, page_height]
53
62
  dims.all? { |d| d > 0 }
54
63
  end
55
-
56
-
64
+
65
+
57
66
  #-------------------------------------------------------------
58
67
  # Private Instance Methods
59
68
  #-------------------------------------------------------------
60
69
  private
61
-
70
+
62
71
  def option_keys
63
- [:width, :height]
72
+ [:width, :height, :orientation]
64
73
  end
65
-
74
+
66
75
  end
67
-
76
+
68
77
  end
69
78
  end
70
- end
79
+ end
@@ -5,32 +5,33 @@ require 'caracal/errors'
5
5
 
6
6
  module Caracal
7
7
  module Core
8
-
9
- # This module encapsulates all the functionality related to setting the
8
+
9
+ # This module encapsulates all the functionality related to setting the
10
10
  # document's size and margins.
11
11
  #
12
12
  module PageSettings
13
13
  def self.included(base)
14
14
  base.class_eval do
15
-
15
+
16
16
  #-------------------------------------------------------------
17
17
  # Configuration
18
18
  #-------------------------------------------------------------
19
-
19
+
20
20
  # accessors
21
21
  attr_reader :page_width
22
+ attr_reader :page_orientation
22
23
  attr_reader :page_height
23
24
  attr_reader :page_margin_top
24
25
  attr_reader :page_margin_bottom
25
26
  attr_reader :page_margin_left
26
27
  attr_reader :page_margin_right
27
-
28
-
28
+
29
+
29
30
  #-------------------------------------------------------------
30
31
  # Public Methods
31
32
  #-------------------------------------------------------------
32
-
33
- # This method controls the physical margins of the printed page. Defaults
33
+
34
+ # This method controls the physical margins of the printed page. Defaults
34
35
  # to 1in on each side.
35
36
  #
36
37
  def page_margins(options={}, &block)
@@ -49,24 +50,25 @@ module Caracal
49
50
  raise Caracal::Errors::InvalidModelError, 'page_margins method requires non-zero :top, :bottom, :left, and :right options.'
50
51
  end
51
52
  end
52
-
53
- # This method controls the physical width and height of the printed page. Defaults
53
+
54
+ # This method controls the physical width and height of the printed page. Defaults
54
55
  # to US standard A4 portrait size.
55
56
  #
56
57
  def page_size(options={}, &block)
57
58
  model = Caracal::Core::Models::PageSizeModel.new(options, &block)
58
-
59
+
59
60
  if model.valid?
60
- @page_width = model.page_width
61
- @page_height = model.page_height
61
+ @page_width = model.page_width
62
+ @page_height = model.page_height
63
+ @page_orientation = model.page_orientation
62
64
  else
63
65
  raise Caracal::Errors::InvalidModelError, 'page_size method requires non-zero :width and :height options.'
64
66
  end
65
67
  end
66
-
68
+
67
69
  end
68
70
  end
69
71
  end
70
-
72
+
71
73
  end
72
- end
74
+ end
@@ -357,8 +357,9 @@ module Caracal
357
357
 
358
358
  def page_size_options
359
359
  {
360
- 'w:w' => document.page_width,
361
- 'w:h' => document.page_height
360
+ 'w:w' => document.page_width,
361
+ 'w:h' => document.page_height,
362
+ 'w:orient' => document.page_orientation
362
363
  }
363
364
  end
364
365
 
@@ -1,3 +1,3 @@
1
1
  module Caracal
2
- VERSION = '1.0.6'
2
+ VERSION = '1.0.7'
3
3
  end
@@ -1,59 +1,69 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Caracal::Core::Models::PageSizeModel do
4
- subject do
4
+ subject do
5
5
  described_class.new do
6
6
  width 15840
7
7
  height 12240
8
8
  end
9
9
  end
10
-
10
+
11
11
  #-------------------------------------------------------------
12
12
  # Configuration
13
13
  #-------------------------------------------------------------
14
14
 
15
15
  describe 'configuration tests' do
16
-
16
+
17
17
  # constants
18
18
  describe 'constants' do
19
19
  it { expect(described_class::DEFAULT_PAGE_WIDTH).to eq 12240 }
20
20
  it { expect(described_class::DEFAULT_PAGE_HEIGHT).to eq 15840 }
21
+ it { expect(described_class::DEFAULT_PAGE_ORIENTATION).to eq 'portrait' }
21
22
  end
22
-
23
+
23
24
  # accessors
24
25
  describe 'accessors' do
25
26
  it { expect(subject.page_width).to eq 15840 }
26
27
  it { expect(subject.page_height).to eq 12240 }
27
28
  end
28
-
29
+
29
30
  end
30
-
31
-
31
+
32
+
32
33
  #-------------------------------------------------------------
33
34
  # Public Methods
34
35
  #-------------------------------------------------------------
35
-
36
+
36
37
  describe 'public method tests' do
37
-
38
+
38
39
  #=============== SETTERS ==========================
39
-
40
- # .width
41
- describe '.width' do
42
- before { subject.width(10000) }
43
-
44
- it { expect(subject.page_width).to eq 10000 }
45
- end
46
-
40
+
47
41
  # .height
48
42
  describe '.height' do
49
43
  before { subject.height(10000) }
50
-
44
+
51
45
  it { expect(subject.page_height).to eq 10000 }
52
46
  end
53
-
54
-
47
+
48
+ # .orientation
49
+ describe '.orientation' do
50
+ before { subject.orientation('landscape') }
51
+
52
+ it { expect(subject.page_orientation).to eq 'landscape' }
53
+ end
54
+
55
+ # .width
56
+ describe '.width' do
57
+ before { subject.width(10000) }
58
+
59
+ it { expect(subject.page_width).to eq 10000 }
60
+ end
61
+
62
+
63
+
64
+
55
65
  #=============== VALIDATION ===========================
56
-
66
+
57
67
  describe '.valid?' do
58
68
  describe 'when all sizes gt 0' do
59
69
  it { expect(subject.valid?).to eq true }
@@ -63,29 +73,29 @@ describe Caracal::Core::Models::PageSizeModel do
63
73
  before do
64
74
  allow(subject).to receive("page_#{ d }").and_return(0)
65
75
  end
66
-
76
+
67
77
  it { expect(subject.valid?).to eq false }
68
78
  end
69
79
  end
70
80
  end
71
-
81
+
72
82
  end
73
-
74
-
83
+
84
+
75
85
  #-------------------------------------------------------------
76
86
  # Private Methods
77
87
  #-------------------------------------------------------------
78
-
88
+
79
89
  describe 'private method tests' do
80
-
90
+
81
91
  # .option_keys
82
92
  describe '.option_keys' do
83
93
  let(:actual) { subject.send(:option_keys).sort }
84
- let(:expected) { [:width, :height].sort }
85
-
94
+ let(:expected) { [:width, :height, :orientation].sort }
95
+
86
96
  it { expect(actual).to eq expected }
87
97
  end
88
-
98
+
89
99
  end
90
-
91
- end
100
+
101
+ end
@@ -2,18 +2,19 @@ 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
  # readers
14
14
  describe 'page size readers' do
15
15
  it { expect(subject.page_width).to eq 12240 }
16
16
  it { expect(subject.page_height).to eq 15840 }
17
+ it { expect(subject.page_orientation).to eq 'portrait' }
17
18
  end
18
19
  describe 'page margin readers' do
19
20
  it { expect(subject.page_margin_top).to eq 1440 }
@@ -21,67 +22,74 @@ describe Caracal::Core::PageSettings do
21
22
  it { expect(subject.page_margin_left).to eq 1440 }
22
23
  it { expect(subject.page_margin_right).to eq 1440 }
23
24
  end
24
-
25
+
25
26
  end
26
-
27
-
27
+
28
+
28
29
  #-------------------------------------------------------------
29
30
  # Public Methods
30
31
  #-------------------------------------------------------------
31
32
 
32
33
  describe 'public methods tests' do
33
-
34
+
34
35
  # .page_size
35
36
  describe '.page_size' do
36
37
  describe 'when options given' do
37
- before { subject.page_size width: 10000, height: 12000 }
38
-
38
+ before { subject.page_size width: 10000, height: 12000, orientation: :landscape }
39
+
39
40
  it { expect(subject.page_width).to eq 10000 }
40
41
  it { expect(subject.page_height).to eq 12000 }
42
+ it { expect(subject.page_orientation).to eq 'landscape' }
41
43
  end
42
44
  describe 'when block given' do
43
45
  before do
44
46
  subject.page_size do
45
- width 10000
46
- height 12000
47
+ width 10000
48
+ height 12000
49
+ orientation :landscape
47
50
  end
48
51
  end
49
-
52
+
50
53
  it { expect(subject.page_width).to eq 10000 }
51
54
  it { expect(subject.page_height).to eq 12000 }
55
+ it { expect(subject.page_orientation).to eq 'landscape' }
52
56
  end
53
57
  describe 'when fancy block given' do
54
58
  subject do
55
59
  Caracal::Document.new do |docx|
56
60
  w = 10000
57
61
  h = 12000
62
+ o = :landscape
58
63
  docx.page_size do
59
- width w
60
- height h
64
+ width w
65
+ height h
66
+ orientation o
61
67
  end
62
68
  end
63
69
  end
64
-
70
+
65
71
  it { expect(subject.page_width).to eq 10000 }
66
72
  it { expect(subject.page_height).to eq 12000 }
73
+ it { expect(subject.page_orientation).to eq 'landscape' }
67
74
  end
68
75
  describe 'when both given' do
69
76
  before do
70
- subject.page_size width: 10000 do
77
+ subject.page_size width: 10000, orientation: :landscape do
71
78
  height 12000
72
79
  end
73
80
  end
74
-
81
+
75
82
  it { expect(subject.page_width).to eq 10000 }
76
83
  it { expect(subject.page_height).to eq 12000 }
84
+ it { expect(subject.page_orientation).to eq 'landscape' }
77
85
  end
78
86
  end
79
-
87
+
80
88
  # .page_margins
81
89
  describe '.page_margins' do
82
90
  describe 'when options given' do
83
91
  before { subject.page_margins top: 1441, bottom: 1442, left: 1443, right: 1444 }
84
-
92
+
85
93
  it { expect(subject.page_margin_top).to eq 1441 }
86
94
  it { expect(subject.page_margin_bottom).to eq 1442 }
87
95
  it { expect(subject.page_margin_left).to eq 1443 }
@@ -96,7 +104,7 @@ describe Caracal::Core::PageSettings do
96
104
  right 1444
97
105
  end
98
106
  end
99
-
107
+
100
108
  it { expect(subject.page_margin_top).to eq 1441 }
101
109
  it { expect(subject.page_margin_bottom).to eq 1442 }
102
110
  it { expect(subject.page_margin_left).to eq 1443 }
@@ -117,7 +125,7 @@ describe Caracal::Core::PageSettings do
117
125
  end
118
126
  end
119
127
  end
120
-
128
+
121
129
  it { expect(subject.page_margin_top).to eq 1441 }
122
130
  it { expect(subject.page_margin_bottom).to eq 1442 }
123
131
  it { expect(subject.page_margin_left).to eq 1443 }
@@ -130,14 +138,14 @@ describe Caracal::Core::PageSettings do
130
138
  right 1444
131
139
  end
132
140
  end
133
-
141
+
134
142
  it { expect(subject.page_margin_top).to eq 1441 }
135
143
  it { expect(subject.page_margin_bottom).to eq 1442 }
136
144
  it { expect(subject.page_margin_left).to eq 1443 }
137
145
  it { expect(subject.page_margin_right).to eq 1444 }
138
146
  end
139
147
  end
140
-
148
+
141
149
  end
142
-
143
- end
150
+
151
+ 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.6
4
+ version: 1.0.7
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-06-10 00:00:00.000000000 Z
12
+ date: 2016-09-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri