refx-engine-p3lib 0.0.3 → 0.0.4

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: 74894a71463e4e15166416934c0c23b0cd91917c
4
- data.tar.gz: 90f0eafd784c64236823ecd20420f3d527755574
3
+ metadata.gz: 6972b7f91cc98df478cda6521325d0301ae1469f
4
+ data.tar.gz: e92a5501c7a5f6ab32142a1588db996849411f89
5
5
  SHA512:
6
- metadata.gz: e836ddd1db763608e5ae9f7ca4a4c7696b905a05e556637ab9a25aaa2ae45698c154067182e0696d3da78c0b7f9afd857a0571aed9f307d3dc98c9bc7dca9908
7
- data.tar.gz: 029b084b5ac8470234866af360b18ad8ae7a7dc9c5c49e4ebde012531bacb50fc6ce6a2cfa822838c3d41953231b3869af8ba3bff7ee135c81b6a5f47e4df46a
6
+ metadata.gz: 5c63d8b3ccd2f51ffaa05deab01ca59e3cb92886dc1b6c35ec882179570abe0fa8f7bdf39c8dffb95ecd623da7c775e70efad01a6f1a875c941923b6dd4de928
7
+ data.tar.gz: 7dc21c3d95848fa0e73fde2ddf6b84cf2310d40fd62b2815064cfb982a3bc53ce0ebeea7a5e052334300df366304144527059ed465bbddbf2b3b52ce38588efe
@@ -0,0 +1,92 @@
1
+ require 'xmlsimple'
2
+ # This Hash extension is needed by old pas3 engines. It's not automatically loaded.
3
+ # copy the line below on top of the file where from_xml is needed
4
+ #
5
+ # require 'refx/engine/p3lib/p3lib_hash_from_xml'
6
+
7
+ class Hash
8
+ def self.from_xml(xml, preserve_attributes = false)
9
+ typecast_xml_value(self.undasherize_keys(XmlSimple.xml_in(xml,'forcearray'=>false,'forcecontent'=>true,'keeproot'=>true,'contentkey'=>'__content__')), preserve_attributes)
10
+ end
11
+
12
+ private
13
+
14
+ def self.undasherize_keys(params)
15
+ case params.class.to_s
16
+ when "Hash"
17
+ params.inject({}) do |h,(k,v)|
18
+ h[k.to_s.tr("-", "_")] = self.undasherize_keys(v)
19
+ h
20
+ end
21
+ when "Array"
22
+ params.map { |v| self.undasherize_keys(v) }
23
+ else
24
+ params
25
+ end
26
+ end
27
+
28
+ def self.typecast_xml_value(value, preserve_attributes = false)
29
+ case value.class.to_s
30
+ when 'Hash'
31
+ if value['type'] == 'array'
32
+ #child_key, entries = value.detect { |k,v| k != 'type' } # child_key is throwaway
33
+ if entries.nil? || (c = value['__content__'] && c.nil?) || (c = value['__content__'] && c.empty?)
34
+ []
35
+ else
36
+ case entries.class.to_s # something weird with classes not matching here. maybe singleton methods breaking is_a?
37
+ when "Array"
38
+ entries.collect { |v| typecast_xml_value(v, preserve_attributes) }
39
+ when "Hash"
40
+ [typecast_xml_value(entries, preserve_attributes)]
41
+ else
42
+ raise "can't typecast #{entries.inspect}"
43
+ end
44
+ end
45
+ elsif value.has_key?("__content__")
46
+ content = value["__content__"]
47
+ if parser = XML_PARSING[value["type"]]
48
+ if parser.arity == 2
49
+ XML_PARSING[value["type"]].call(content, value)
50
+ else
51
+ XML_PARSING[value["type"]].call(content)
52
+ end
53
+ elsif preserve_attributes && value.keys.size > 1
54
+ value["content"] = value.delete("__content__")
55
+ value
56
+ else
57
+ content
58
+ end
59
+ elsif value['type'] == 'string' && value['nil'] != 'true'
60
+ ""
61
+ # blank or nil parsed values are represented by nil
62
+ elsif value.nil? || value.empty? || value['nil'] == 'true'
63
+ nil
64
+ # If the type is the only element which makes it then
65
+ # this still makes the value nil, except if type is
66
+ # a XML node(where type['value'] is a Hash)
67
+ elsif value['type'] && value.size == 1 && !value['type'].is_a?(::Hash)
68
+ nil
69
+ else
70
+ xml_value = value.inject({}) do |h,(k,v)|
71
+ h[k] = typecast_xml_value(v, preserve_attributes)
72
+ h
73
+ end
74
+
75
+ # Turn { :files => { :file => #<StringIO> } into { :files => #<StringIO> } so it is compatible with
76
+ # how multipart uploaded files from HTML appear
77
+ xml_value["file"].is_a?(StringIO) ? xml_value["file"] : xml_value
78
+ end
79
+ when 'Array'
80
+ value.map! { |i| typecast_xml_value(i, preserve_attributes) }
81
+ case value.length
82
+ when 0 then nil
83
+ when 1 then value.first
84
+ else value
85
+ end
86
+ when 'String'
87
+ value
88
+ else
89
+ raise "can't typecast #{value.class.name} - #{value.inspect}"
90
+ end
91
+ end
92
+ end
@@ -1,7 +1,7 @@
1
1
  module Refx
2
2
  module Engine
3
3
  module P3lib
4
- VERSION = "0.0.3"
4
+ VERSION = "0.0.4"
5
5
  end
6
6
  end
7
7
  end
@@ -23,4 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "simplecov", "~> 0.10"
24
24
  spec.add_development_dependency "minitest", "~> 5.1"
25
25
  spec.add_development_dependency "rb-appscript", "~> 0.6"
26
+ spec.add_runtime_dependency "xml-simple", "~> 1.1.4"
26
27
  end
@@ -5,6 +5,7 @@ require 'yaml'
5
5
  require 'base64'
6
6
  #require 'pp'
7
7
  require 'refx/engine/p3lib'
8
+ require 'refx/engine/p3lib/p3lib_hash_from_xml'
8
9
 
9
10
  class P3libImageTest < Minitest::Test
10
11
  def test_imageutil_path
@@ -17,3 +18,36 @@ class P3libLoggerTest < Minitest::Test
17
18
  P3libLogger::log("test",'test')
18
19
  end
19
20
  end
21
+
22
+ class P3libHashFromXML < Minitest::Test
23
+ def test_log_info
24
+
25
+ xml = '<?xml version="1.0" encoding="UTF-8"?>
26
+ <document spread_count="1" page_count="1" html_prev="uploads/tx_p3ga/421/page_1_1.png" >
27
+ <spreads >
28
+ <spread215 page_count="1" index="1" id="215" >
29
+ <pages >
30
+ <page222 sourceId="222" preview="uploads/tx_p3ga/421/page_1_1.png" id="222" side="single" html_prev="uploads/tx_p3ga/421/page_1_1.png" >
31
+ <layerGroups >
32
+ <group00 >
33
+ <layer163 preview="uploads/tx_p3ga/421/page_1_1_layer163.png" layerID="163" html_prev="uploads/tx_p3ga/421/page_1_1_layer163.png" />
34
+ </group00>
35
+ <group01 >
36
+ <layer210 preview="uploads/tx_p3ga/421/page_1_1_layer210.png" layerID="210" html_prev="uploads/tx_p3ga/421/page_1_1_layer210.png" />
37
+ </group01>
38
+ <group02 >
39
+ <layer536 layerID="536" />
40
+ </group02>
41
+ </layerGroups>
42
+ </page222>
43
+ </pages>
44
+ </spread215>
45
+ </spreads>
46
+ </document>
47
+ '
48
+ finalHash = Hash.from_xml(xml,true)
49
+ assert_equal finalHash['document']['spreads']['spread215']['pages']['page222']['layerGroups'].count, 3
50
+ assert_equal finalHash['document']['spreads']['spread215']['pages']['page222']['html_prev'], 'uploads/tx_p3ga/421/page_1_1.png'
51
+ assert_equal finalHash['document']['spreads']['spread215']['pages']['page222']['id'], '222'
52
+ end
53
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: refx-engine-p3lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pim Snel
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.6'
83
+ - !ruby/object:Gem::Dependency
84
+ name: xml-simple
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.1.4
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.1.4
83
97
  description: P3 Library bundle for other Engines
84
98
  email:
85
99
  - pim@lingewoud.nl
@@ -99,6 +113,7 @@ files:
99
113
  - lib/refx/engine/p3imgutils/p3trimalpha
100
114
  - lib/refx/engine/p3imgutils/pdfrasterize
101
115
  - lib/refx/engine/p3lib.rb
116
+ - lib/refx/engine/p3lib/p3lib_hash_from_xml.rb
102
117
  - lib/refx/engine/p3lib/p3lib_image.rb
103
118
  - lib/refx/engine/p3lib/p3lib_indesign.rb
104
119
  - lib/refx/engine/p3lib/p3lib_indesignlocalization.rb