odf-report 0.7.0 → 0.7.1

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
  SHA256:
3
- metadata.gz: babb3d76f7401badd099efc108cc000baa9ce38a556447162dd0d31e1ad2b940
4
- data.tar.gz: 5ee08b656534f7522c60b3f784343120600761478baba47569c52d108d613237
3
+ metadata.gz: b953733bc99e0c7e77fc57a5b9e53f38756cc926794df2a8bcfa66156469e1e2
4
+ data.tar.gz: 69d20e56f5c14cf55c8ddad18019dc656a35a1b247f2d8b07ad0d64ea90cfad0
5
5
  SHA512:
6
- metadata.gz: 432a082f25cf119cc117d476abee396a1a6e24a144d5792f786aa249adf4b1bcf07a7fabad9d0789ca063484ea33c16fb74b05f6b088364efe3a0be3e5f03d5b
7
- data.tar.gz: 07c003adba47dac35a15ef697e750e3a918f42f4db4cb7964c9ec4ce28141a52f74b375fc328d6a4f87ce97df381fa0a7ba14c75598b39bb9c1d435cab4a70ef
6
+ metadata.gz: 8e14bbf17762213635726cf0a6c8270ce9d701e7315e180a1d46b142ae616ddb20e327aa57f67effc02700da73ce452e310c0c77eb861666039b92b83ffcd6a8
7
+ data.tar.gz: 18de0c6ca80d7740bbfee94d02cf99e2ea1a6153861b68bdd41a0303b9159dca09899b3123b18a965b608341e754f8ca018599e4ad985a18166832beb974314b
@@ -0,0 +1,40 @@
1
+ name: Ruby Gem
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build:
9
+ name: Build + Publish
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - uses: actions/checkout@v2
14
+ - name: Set up Ruby 2.6
15
+ uses: actions/setup-ruby@v1
16
+ with:
17
+ version: 2.6.x
18
+
19
+ # - name: Publish to GPR
20
+ # run: |
21
+ # mkdir -p $HOME/.gem
22
+ # touch $HOME/.gem/credentials
23
+ # chmod 0600 $HOME/.gem/credentials
24
+ # printf -- "---\n:github: Bearer ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
25
+ # gem build *.gemspec
26
+ # gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
27
+ # env:
28
+ # GEM_HOST_API_KEY: ${{secrets.GPR_AUTH_TOKEN}}
29
+ # OWNER: username
30
+
31
+ - name: Publish to RubyGems
32
+ run: |
33
+ mkdir -p $HOME/.gem
34
+ touch $HOME/.gem/credentials
35
+ chmod 0600 $HOME/.gem/credentials
36
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
37
+ gem build *.gemspec
38
+ gem push *.gem
39
+ env:
40
+ GEM_HOST_API_KEY: ${{secrets.RUBYGEMS_AUTH_TOKEN}}
@@ -0,0 +1,56 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
6
+
7
+ ## Unreleased
8
+
9
+ ### Breaking Changes
10
+
11
+ - None
12
+
13
+ ### Added
14
+
15
+ - None
16
+
17
+ ### Fixed
18
+
19
+ - None
20
+
21
+
22
+ ## 0.7.1
23
+
24
+ ### Added
25
+
26
+ - remove image if path is null
27
+ - remove section if collection is empty/null
28
+
29
+
30
+ ## 0.7.0
31
+
32
+ ### Added
33
+
34
+ - allow nested images inside tables and sections
35
+ - allow sections inside tables
36
+
37
+ ### Dependencies
38
+
39
+ - rubyzip >= 1.3.0 (was ~> 1.2.0)
40
+
41
+
42
+ ## 0.6.0
43
+
44
+ ### Breaking Changes
45
+
46
+ - `ODFReport::File` renamed to `ODFReport::Template`
47
+ - `ODFReport::Report` constructor signature changed
48
+
49
+ ### Dependencies
50
+
51
+ - rubyzip ~> 1.2.0 (was ~> 1.1.0)
52
+
53
+
54
+ ## Earlier Versions
55
+
56
+ - No docs yet. Contributions welcome!
data/README.md CHANGED
@@ -3,11 +3,6 @@
3
3
 
4
4
  Gem for generating .odt files by making strings, images, tables and sections replacements in a previously created .odt file.
5
5
 
6
- ### NEW
7
-
8
- * allow nested images inside tables and sections
9
- * allow sections inside tables
10
-
11
6
  ## INSTALL
12
7
 
13
8
  In your Gemfile
@@ -14,6 +14,7 @@ module ODFReport
14
14
  end
15
15
 
16
16
  def each(&block)
17
+ return unless @value
17
18
  @value.each(&block)
18
19
  end
19
20
 
@@ -19,10 +19,15 @@ module ODFReport
19
19
 
20
20
  file = @data_source.value
21
21
 
22
- image.attribute('href').content = File.join(IMAGE_DIR_NAME, File.basename(file))
23
- frame.attribute('name').content = SecureRandom.uuid
24
-
25
- @files << file
22
+ if file
23
+ image.attribute('href').content = File.join(IMAGE_DIR_NAME, File.basename(file))
24
+ frame.attribute('name').content = SecureRandom.uuid
25
+
26
+ @files << file
27
+ else
28
+ frame.remove
29
+ end
30
+
26
31
  end
27
32
 
28
33
  def self.include_image_file(zip_file, image_file)
@@ -45,7 +45,7 @@ class Report
45
45
  yield(sec)
46
46
  end
47
47
 
48
- def add_image(image_name, value='')
48
+ def add_image(image_name, value=nil)
49
49
  opts = {:name => image_name, :value => value}
50
50
  image = Image.new(opts)
51
51
  @images << image
@@ -1,3 +1,3 @@
1
1
  module ODFReport
2
- VERSION = "0.7.0"
2
+ VERSION = "0.7.1"
3
3
  end
@@ -1,77 +1,156 @@
1
1
  RSpec.describe "Images" do
2
2
 
3
- before(:context) do
3
+ context('Adding Images') do
4
4
 
5
- @list = []
6
- @list << OpenStruct.new({ name: "IMG - [1, 1]", path: 'spec/images/image_1.jpg', path2: 'spec/images/image_1.jpg' })
7
- @list << OpenStruct.new({ name: "IMG - [2, 1]", path: 'spec/images/image_2.jpg', path2: 'spec/images/image_1.jpg' })
8
- @list << OpenStruct.new({ name: "IMG - [3, 2]", path: 'spec/images/image_3.jpg', path2: 'spec/images/image_2.jpg' })
9
- @list << OpenStruct.new({ name: "IMG - [1, 3]", path: 'spec/images/image_1.jpg', path2: 'spec/images/image_3.jpg' })
10
- @list << OpenStruct.new({ name: "IMG - [2, 2]", path: 'spec/images/image_2.jpg', path2: 'spec/images/image_2.jpg' })
5
+ before(:context) do
11
6
 
7
+ @list = []
8
+ @list << OpenStruct.new({ name: "IMG - [1, 1]", path: 'spec/images/image_1.jpg', path2: 'spec/images/image_1.jpg' })
9
+ @list << OpenStruct.new({ name: "IMG - [2, 1]", path: 'spec/images/image_2.jpg', path2: 'spec/images/image_1.jpg' })
10
+ @list << OpenStruct.new({ name: "IMG - [3, 2]", path: 'spec/images/image_3.jpg', path2: 'spec/images/image_2.jpg' })
11
+ @list << OpenStruct.new({ name: "IMG - [1, 3]", path: 'spec/images/image_1.jpg', path2: 'spec/images/image_3.jpg' })
12
+ @list << OpenStruct.new({ name: "IMG - [2, 2]", path: 'spec/images/image_2.jpg', path2: 'spec/images/image_2.jpg' })
12
13
 
13
- report = ODFReport::Report.new("spec/templates/images.odt") do |r|
14
14
 
15
- r.add_image("IMAGE_01", 'spec/images/rails.png')
16
- r.add_image("IMAGE_02", 'spec/images/piriapolis.jpg')
15
+ report = ODFReport::Report.new("spec/templates/images.odt") do |r|
16
+
17
+ r.add_image("IMAGE_01", 'spec/images/rails.png')
18
+ r.add_image("IMAGE_02", 'spec/images/piriapolis.jpg')
19
+
20
+ r.add_table('IMAGE_TABLE', @list) do |t|
21
+ t.add_column(:image_name, :name)
22
+ t.add_image('IMAGE_IN_TABLE_01', :path)
23
+ t.add_image('IMAGE_IN_TABLE_02', :path2)
24
+ end
25
+
26
+ r.add_section('SECTION', @list) do |t|
27
+ t.add_field(:image_name, :name)
28
+ t.add_image('IMAGE_IN_SECTION_01', :path2)
29
+ t.add_image('IMAGE_IN_SECTION_02', :path)
30
+ end
17
31
 
18
- r.add_table('IMAGE_TABLE', @list) do |t|
19
- t.add_column(:image_name, :name)
20
- t.add_image('IMAGE_IN_TABLE_01', :path)
21
- t.add_image('IMAGE_IN_TABLE_02', :path2)
22
32
  end
23
33
 
24
- r.add_section('SECTION', @list) do |t|
25
- t.add_field(:image_name, :name)
26
- t.add_image('IMAGE_IN_SECTION_01', :path2)
27
- t.add_image('IMAGE_IN_SECTION_02', :path)
34
+ report.generate("spec/result/images.odt")
35
+
36
+ @data = Inspector.new("spec/result/images.odt")
37
+
38
+ end
39
+
40
+
41
+ it "simple image replacement" do
42
+
43
+ images = @data.xml.xpath("//draw:image")
44
+
45
+ expect(images[0].attribute('href').value).to eq "Pictures/rails.png"
46
+ expect(images[1].attribute('href').value).to eq "Pictures/piriapolis.jpg"
47
+
48
+ end
49
+
50
+ it "table columns replacement" do
51
+
52
+ table = @data.xml.at_xpath(".//table:table[@table:name='IMAGE_TABLE']")
53
+
54
+ @list.each_with_index do |item, idx|
55
+
56
+ row = table.xpath(".//table:table-row[#{idx+1}]")
57
+
58
+ images = row.xpath(".//draw:image")
59
+
60
+ expect(File.basename(images[0].attribute('href').value)).to eq File.basename(item.path)
61
+ expect(File.basename(images[1].attribute('href').value)).to eq File.basename(item.path2)
62
+
28
63
  end
29
64
 
30
65
  end
31
66
 
32
- report.generate("spec/result/images.odt")
67
+ it "section fields replacement" do
68
+
69
+ @list.each_with_index do |item, idx|
70
+
71
+ section = @data.xml.at_xpath(".//text:section[#{idx+1}]")
72
+
73
+ images = section.xpath(".//draw:image")
33
74
 
34
- @data = Inspector.new("spec/result/images.odt")
75
+ expect(File.basename(images[0].attribute('href').value)).to eq File.basename(item.path)
76
+ expect(File.basename(images[1].attribute('href').value)).to eq File.basename(item.path2)
35
77
 
78
+ end
79
+
80
+ end
36
81
  end
37
82
 
83
+ context "Removing Images" do
38
84
 
39
- it "simple image replacement" do
85
+ before(:context) do
40
86
 
41
- images = @data.xml.xpath("//draw:image")
87
+ @list = []
88
+ @list << OpenStruct.new({ name: "IMG - both ok", path: 'spec/images/image_1.jpg', path2: 'spec/images/image_1.jpg' })
89
+ @list << OpenStruct.new({ name: "IMG - 1 ok", path: 'spec/images/image_2.jpg', path2: nil })
90
+ @list << OpenStruct.new({ name: "IMG - 2 ok", path: nil, path2: 'spec/images/image_3.jpg' })
91
+ # @list << OpenStruct.new({ name: "IMG - 2 invalid", path: nil, path2: 'spec/images/invalid.jpg' })
42
92
 
43
- expect(images[0].attribute('href').value).to eq "Pictures/rails.png"
44
- expect(images[1].attribute('href').value).to eq "Pictures/piriapolis.jpg"
93
+ report = ODFReport::Report.new("spec/templates/images.odt") do |r|
45
94
 
46
- end
95
+ # r.add_image("IMAGE_01")
96
+ r.add_image("IMAGE_02", nil)
47
97
 
48
- it "table columns replacement" do
98
+ r.add_table('IMAGE_TABLE', @list) do |t|
99
+ t.add_column(:image_name, :name)
100
+ t.add_image('IMAGE_IN_TABLE_01', :path)
101
+ t.add_image('IMAGE_IN_TABLE_02', :path2)
102
+ end
49
103
 
50
- table = @data.xml.at_xpath(".//table:table[@table:name='IMAGE_TABLE']")
104
+ r.add_section('SECTION', @list) do |t|
105
+ t.add_field(:image_name, :name)
106
+ t.add_image('IMAGE_IN_SECTION_01', :path2)
107
+ t.add_image('IMAGE_IN_SECTION_02', :path)
108
+ end
51
109
 
52
- @list.each_with_index do |item, idx|
110
+ end
53
111
 
54
- row = table.xpath(".//table:table-row[#{idx+1}]")
112
+ report.generate("spec/result/images.odt")
55
113
 
56
- images = row.xpath(".//draw:image")
114
+ @data = Inspector.new("spec/result/images.odt")
57
115
 
58
- expect(File.basename(images[0].attribute('href').value)).to eq File.basename(item.path)
59
- expect(File.basename(images[1].attribute('href').value)).to eq File.basename(item.path2)
116
+ end
60
117
 
118
+ it "removes nil images in report" do
119
+ expect(@data.xml.at_css("draw|frame[@draw|name='IMAGE_01']")).to be
120
+ expect(@data.xml.at_css("draw|frame[@draw|name='IMAGE_02']")).to be_nil
61
121
  end
62
122
 
63
- end
123
+ it "removes nil images in tables" do
124
+
125
+ table = @data.xml.at_xpath(".//table:table[@table:name='IMAGE_TABLE']")
64
126
 
65
- it "section fields replacement" do
127
+ images = table.xpath(".//table:table-row[1]//draw:image")
128
+ expect(File.basename(images[0].attribute('href').value)).to eq File.basename(@list[0].path)
129
+ expect(File.basename(images[1].attribute('href').value)).to eq File.basename(@list[0].path2)
130
+
131
+ images = table.xpath(".//table:table-row[2]//draw:image")
132
+ expect(File.basename(images[0].attribute('href').value)).to eq File.basename(@list[1].path)
133
+ expect(images[1]).to be_nil
134
+
135
+ images = table.xpath(".//table:table-row[3]//draw:image")
136
+ expect(File.basename(images[0].attribute('href').value)).to eq File.basename(@list[2].path2)
137
+ expect(images[1]).to be_nil
138
+
139
+ end
66
140
 
67
- @list.each_with_index do |item, idx|
141
+ it "removes nil images in sections " do
68
142
 
69
- section = @data.xml.at_xpath(".//text:section[#{idx+1}]")
143
+ images = @data.xml.xpath(".//text:section[1]//draw:image")
144
+ expect(File.basename(images[0].attribute('href').value)).to eq File.basename(@list[0].path)
145
+ expect(File.basename(images[1].attribute('href').value)).to eq File.basename(@list[0].path2)
70
146
 
71
- images = section.xpath(".//draw:image")
147
+ images = @data.xml.xpath(".//text:section[2]//draw:image")
148
+ expect(File.basename(images[0].attribute('href').value)).to eq File.basename(@list[1].path)
149
+ expect(images[1]).to be_nil
72
150
 
73
- expect(File.basename(images[0].attribute('href').value)).to eq File.basename(item.path)
74
- expect(File.basename(images[1].attribute('href').value)).to eq File.basename(item.path2)
151
+ images = @data.xml.xpath(".//text:section[3]//draw:image")
152
+ expect(File.basename(images[0].attribute('href').value)).to eq File.basename(@list[2].path2)
153
+ expect(images[1]).to be_nil
75
154
 
76
155
  end
77
156
 
@@ -0,0 +1,51 @@
1
+ RSpec.describe "Sections" do
2
+
3
+ before(:context) do
4
+ @itens = Item.get_list(3)
5
+
6
+ report = ODFReport::Report.new("spec/templates/specs.odt") do |r|
7
+
8
+ r.add_section('SECTION_01', @itens) do |t|
9
+ t.add_field(:s01_field_01, :id)
10
+ t.add_field(:s01_field_02, :name)
11
+ end
12
+
13
+ r.add_section('SECTION_02', []) do |t|
14
+ t.add_field(:s02_field_01, :id)
15
+ t.add_field(:s02_field_02, :name)
16
+ end
17
+
18
+ r.add_section('SECTION_03', nil) do |t|
19
+ t.add_field(:s03_field_01, :id)
20
+ t.add_field(:s03_field_02, :name)
21
+ end
22
+
23
+ end
24
+
25
+ report.generate("spec/result/specs.odt")
26
+
27
+ @data = Inspector.new("spec/result/specs.odt")
28
+
29
+ end
30
+
31
+ it "should render section with collection" do
32
+ @itens.each_with_index do |item, idx|
33
+ section = @data.xml.at_xpath(".//text:section[#{idx+1}]").to_s
34
+
35
+ expect(section).to match(item.id.to_s)
36
+ expect(section).to match(item.name)
37
+ end
38
+ end
39
+
40
+ it "should remove section with empty collection" do
41
+ section = @data.xml.at_css("text|section[@text|name='SECTION_02']")
42
+ expect(section).to be_nil
43
+ end
44
+
45
+ it "should remove section with nil collection" do
46
+ section = @data.xml.at_css("text|section[@text|name='SECTION_03']")
47
+ expect(section).to be_nil
48
+ end
49
+
50
+
51
+ end
@@ -12,11 +12,9 @@ class Item
12
12
  end
13
13
 
14
14
  def self.get_list(quant = 3)
15
- r = []
16
- (1..quant).each do |i|
17
- r << Item.new(Faker::Number.number(digits: 10), Faker::Name.name)
15
+ (1..quant).map do |i|
16
+ Item.new(Faker::Number.number(digits: 10), Faker::Name.name)
18
17
  end
19
- r
20
18
  end
21
19
 
22
20
  end
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: odf-report
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sandro Duarte
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-06 00:00:00.000000000 Z
11
+ date: 2020-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -130,8 +130,10 @@ executables:
130
130
  extensions: []
131
131
  extra_rdoc_files: []
132
132
  files:
133
+ - ".github/workflows/gem-push.yml"
133
134
  - ".gitignore"
134
135
  - ".rspec"
136
+ - CHANGELOG.md
135
137
  - Gemfile
136
138
  - MIT-LICENSE
137
139
  - Manifest
@@ -144,7 +146,6 @@ files:
144
146
  - lib/odf-report/field.rb
145
147
  - lib/odf-report/image.rb
146
148
  - lib/odf-report/nestable.rb
147
- - lib/odf-report/nested.rb
148
149
  - lib/odf-report/parser/default.rb
149
150
  - lib/odf-report/report.rb
150
151
  - lib/odf-report/section.rb
@@ -161,6 +162,7 @@ files:
161
162
  - spec/images/placeholder.jpg
162
163
  - spec/images/rails.png
163
164
  - spec/images_spec.rb
165
+ - spec/sections_spec.rb
164
166
  - spec/spec_helper.rb
165
167
  - spec/tables_spec.rb
166
168
  - spec/template_spec.rb
@@ -221,6 +223,7 @@ test_files:
221
223
  - spec/images/placeholder.jpg
222
224
  - spec/images/rails.png
223
225
  - spec/images_spec.rb
226
+ - spec/sections_spec.rb
224
227
  - spec/spec_helper.rb
225
228
  - spec/tables_spec.rb
226
229
  - spec/template_spec.rb
@@ -1,67 +0,0 @@
1
- module ODFReport
2
-
3
- module Nested
4
-
5
- def add_field(name, data_field=nil, &block)
6
- opts = {name: name, data_field: data_field}
7
- @fields << Field.new(opts, &block)
8
-
9
- end
10
- alias_method :add_column, :add_field
11
-
12
- def add_text(name, data_field=nil, &block)
13
- opts = {name: name, data_field: data_field}
14
- @texts << Text.new(opts, &block)
15
- end
16
-
17
- def add_image(name, data_field=nil, &block)
18
- opts = {name: name, data_field: data_field}
19
- @images << Image.new(opts, &block)
20
- end
21
-
22
- def add_table(table_name, collection_field, opts={})
23
- opts.merge!(name: table_name, collection_field: collection_field)
24
- tab = Table.new(opts)
25
- @tables << tab
26
-
27
- yield(tab)
28
- end
29
-
30
- def add_section(section_name, collection_field, opts={})
31
- opts.merge!(name: section_name, collection_field: collection_field)
32
- sec = Section.new(opts)
33
- @sections << sec
34
-
35
- yield(sec)
36
- end
37
-
38
- def all_images
39
- (@images.map(&:files) + @sections.map(&:all_images) + @tables.map(&:all_images)).flatten
40
- end
41
-
42
- def get_collection_from_item(item, collection_field)
43
-
44
- return item[collection_field] if item.is_a?(Hash)
45
-
46
- if collection_field.is_a?(Array)
47
- tmp = item.dup
48
- collection_field.each do |f|
49
- if f.is_a?(Hash)
50
- tmp = tmp.send(f.keys[0], f.values[0])
51
- else
52
- tmp = tmp.send(f)
53
- end
54
- end
55
- collection = tmp
56
- elsif collection_field.is_a?(Hash)
57
- collection = item.send(collection_field.keys[0], collection_field.values[0])
58
- else
59
- collection = item.send(collection_field)
60
- end
61
-
62
- return collection
63
- end
64
-
65
- end
66
-
67
- end