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 +4 -4
- data/lib/refx/engine/p3lib/p3lib_hash_from_xml.rb +92 -0
- data/lib/refx/engine/p3lib/version.rb +1 -1
- data/refx-engine-p3lib.gemspec +1 -0
- data/test/p3lib_rpc_test.rb +34 -0
- metadata +16 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6972b7f91cc98df478cda6521325d0301ae1469f
|
4
|
+
data.tar.gz: e92a5501c7a5f6ab32142a1588db996849411f89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
data/refx-engine-p3lib.gemspec
CHANGED
@@ -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
|
data/test/p3lib_rpc_test.rb
CHANGED
@@ -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.
|
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
|