docx_report 0.2.3 → 0.2.5

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: fba6128858dc1881724b7334e94d2fa527979e2e
4
- data.tar.gz: 2191d4a90ec26b96769b8d3b7870024d6200c81b
3
+ metadata.gz: e951d302c3b072bf8f06d91b83c86e2da9718530
4
+ data.tar.gz: 9dafad1a65092a86fa575c8e63229b2f65de2179
5
5
  SHA512:
6
- metadata.gz: 7e4be5bff6c1c47b28913bd71028e25fd938eb82dbcb1d59daa6d3f53aaf09179d3b59c9583243930befad0851a6187cc1fcf645eadb0ea09b95f01067eff911
7
- data.tar.gz: 84c3319c0f168a716213bdd11d88adef5f6654e926f85b87301babdc306e2d376cacafa9df91a4c626659a4a724ecb79f64267b07f92e7f750fbcb7d79f74321
6
+ metadata.gz: 2f93c2e8dde7e7a183951d700f1d10316493e3bb86b78550c50e2ccacfc95114d13d978d0827feac62e90f70ade5fe0b175a1ee1172dc8f9f096b708bb6a88bd
7
+ data.tar.gz: 40344c336a174ee3fa57c6256b5860db29c0e1a35e51ac109986edd15b2b10a90cb223271aa1882548540048ca94d0c06e94f3b2b6b5592d461e07953623dc6a
@@ -2,10 +2,20 @@ module DocxReport
2
2
  module BlockValue
3
3
  def load_value(item)
4
4
  if @value.is_a? Proc
5
- @value.call(item)
5
+ val = @value.call(item)
6
+ val.is_a?(Hash) ? val[:value] : val
6
7
  else
7
8
  item.is_a?(Hash) ? item[@value] : item.send(@value)
8
9
  end
9
10
  end
11
+
12
+ def load_text_direction(item)
13
+ if @value.is_a? Proc
14
+ val = @value.call(item)
15
+ val.is_a?(Hash) ? val[:text_direction] : :none
16
+ else
17
+ :none
18
+ end
19
+ end
10
20
  end
11
21
  end
@@ -2,8 +2,8 @@ module DocxReport
2
2
  module DataItem
3
3
  attr_reader :fields, :images, :tables
4
4
 
5
- def add_field(name, value, type = :text)
6
- field = Field.new name, value, type
5
+ def add_field(name, value, type = :text, text_direction = :none)
6
+ field = Field.new name, value, type, text_direction
7
7
  raise 'duplicate field name' if @fields.any? { |f| f.name == field.name }
8
8
  @fields << field
9
9
  end
@@ -4,11 +4,13 @@ require 'docx_report/block_value'
4
4
  module DocxReport
5
5
  class Field
6
6
  include BlockValue
7
- attr_reader :name, :value, :type
7
+ attr_reader :name, :value, :type, :text_direction
8
8
 
9
- def initialize(name, value = nil, type = :text, &block)
9
+ def initialize(name, value = nil, type = :text, text_direction = :none,
10
+ &block)
10
11
  @name = "@#{name}@"
11
12
  @type = type
13
+ @text_direction = text_direction
12
14
  set_value(value || block)
13
15
  end
14
16
 
@@ -17,7 +19,7 @@ module DocxReport
17
19
  end
18
20
 
19
21
  def load_field(item)
20
- Field.new(name[1..-2], load_value(item), type)
22
+ Field.new(name[1..-2], load_value(item), type, load_text_direction(item))
21
23
  end
22
24
  end
23
25
  end
@@ -26,6 +26,23 @@ module DocxReport
26
26
  parent_node.xpath(".//*[contains(text(), '#{name}')]")
27
27
  end
28
28
 
29
+ def apply_text_direction(name, parent_node, text_direction)
30
+ parent_node.xpath("//w:p[.//*[contains(text(), '#{name}')]]")
31
+ .each do |node|
32
+ bidi = node.xpath('.//w:bidi').first
33
+ if text_direction == :ltr
34
+ bidi.remove if bidi
35
+ elsif bidi.nil?
36
+ p_pr = node.xpath('.//w:pPr').first
37
+ if p_pr.nil?
38
+ node.first_element_child.before('<w:pPr><w:bidi/></w:pPr>')
39
+ else
40
+ p_pr.first_element_child.before('<w:bidi/>')
41
+ end
42
+ end
43
+ end
44
+ end
45
+
29
46
  def find_hyperlink_nodes(name, parent_node, file)
30
47
  links = file.rels_xml.xpath "//*[@Target='#{name}']"
31
48
  parent_node.xpath(".//w:hyperlink[@r:id='#{find_by_id(links)}']")
@@ -42,8 +59,11 @@ module DocxReport
42
59
 
43
60
  def replace_node_fields(fields, parent_node)
44
61
  fields.select { |f| f.type == :text }.each do |field|
45
- find_text_nodes(field.name, parent_node).map do |node|
46
- node.content = node.content.gsub field.name, field.value
62
+ if field.text_direction != :none
63
+ apply_text_direction(field.name, parent_node, field.text_direction)
64
+ end
65
+ find_text_nodes(field.name, parent_node).each do |node|
66
+ node.content = node.content.gsub field.name, field.value.to_s
47
67
  end
48
68
  end
49
69
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docx_report
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ahmed Abudaqqa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-25 00:00:00.000000000 Z
11
+ date: 2016-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri