refx-engine-p3lib 0.0.3 → 0.0.4

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: 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