open_xml_package 0.0.2 → 0.0.3

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: 2b72f5c67d5a18d27b73e969c287d3901d5180ae
4
- data.tar.gz: 3136fa54c21681c6f1d7025480befbf286313ddf
3
+ metadata.gz: e0c48c674659490cb99dd732878aed3b4f0425cb
4
+ data.tar.gz: db6e4f5b6a5e3275759ab1128acaadbe3157e410
5
5
  SHA512:
6
- metadata.gz: 5fe55147d26a022c6be62eae2cfb5b292198999cd4f0cfa8438c8bcb0019d6af798b7889597b544d92149c44081335425a9076a2716d73a0461180b8f4c0ec27
7
- data.tar.gz: 227b72c1f194c1bdba20b656522b7d6c4c2dd6f742d7b1e2b47e019286f9a5956b3b932b2d80185ba3faff2e39f44ca5ca04d597440cb9bb2e00f52e6974a461
6
+ metadata.gz: 32b928ff33b063c806d10de43e521499c05fb890ff2164a351ace3633450676f2afd1e87eda4e2e648036453df8eeb09eec32da245080047deffd6f5f347f708
7
+ data.tar.gz: d20a4f7eeb74dfbc4ee8bab6dbd42c4b4aabf65c54bd8472a288055ae47ae64ecae59b1c48154d0c719411ad13ee11f1cb8c2e07b531c87e27a7c8aaab4f2264
@@ -1,4 +1,5 @@
1
1
  require "open_xml_package/part"
2
+ require "open_xml_package/rubyzip_fix"
2
3
  require "open_xml_package/version"
3
4
  require "zip"
4
5
 
@@ -16,6 +17,22 @@ class OpenXmlPackage
16
17
  end
17
18
  end
18
19
 
20
+ def self.from_stream(stream)
21
+ stream = StringIO.new(stream) if stream.is_a?(String)
22
+
23
+ # Hack: Zip::Entry.read_c_dir_entry initializes
24
+ # a new Zip::Entry by calling `io.path`. Zip::Entry
25
+ # uses this to open the original zipfile; but in
26
+ # this case, the StringIO _is_ the original.
27
+ def stream.path
28
+ self
29
+ end
30
+
31
+ zipfile = ::Zip::File.new("", true, true)
32
+ zipfile.read_from_stream(stream)
33
+ new(zipfile)
34
+ end
35
+
19
36
  def initialize(zipfile=nil)
20
37
  @zipfile = zipfile
21
38
  @parts = []
@@ -0,0 +1,17 @@
1
+ require "zip"
2
+
3
+ module Zip
4
+ class InputStream
5
+ protected
6
+
7
+ # The problem in RubyZip 1.1.0 is that we only call `seek`
8
+ # when `io` is a File. We need to move the cursor to the
9
+ # right position when `io` is a StringIO as well.
10
+ def get_io(io, offset = 0)
11
+ io = ::File.open(io, "rb") unless io.is_a?(IO) || io.is_a?(StringIO)
12
+ io.seek(offset, ::IO::SEEK_SET)
13
+ io
14
+ end
15
+
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  class OpenXmlPackage
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -50,7 +50,6 @@ class OpenXmlPackageTest < ActiveSupport::TestCase
50
50
  context "Given a sample Word document" do
51
51
  setup do
52
52
  @temp_file = expand_path "./support/sample.docx"
53
- @package = OpenXmlPackage.open(temp_file)
54
53
  @expected_contents = Set[
55
54
  "[Content_Types].xml",
56
55
  "_rels/.rels",
@@ -68,16 +67,36 @@ class OpenXmlPackageTest < ActiveSupport::TestCase
68
67
  "word/webSettings.xml" ]
69
68
  end
70
69
 
71
- teardown do
72
- package.close
70
+ context ".open" do
71
+ setup do
72
+ @package = OpenXmlPackage.open(temp_file)
73
+ end
74
+
75
+ teardown do
76
+ package.close
77
+ end
78
+
79
+ should "discover the expected parts" do
80
+ assert_equal @expected_contents, package.parts.map(&:path).to_set
81
+ end
82
+
83
+ should "read their content on-demand" do
84
+ assert_equal web_settings_content, package.get_part("word/webSettings.xml").content
85
+ end
73
86
  end
74
87
 
75
- should "discover the expected parts" do
76
- assert_equal @expected_contents, package.parts.map(&:path).to_set
77
- end
78
-
79
- should "read their content on-demand" do
80
- assert_equal web_settings_content, package.get_part("word/webSettings.xml").content
88
+ context ".from_stream" do
89
+ setup do
90
+ @package = OpenXmlPackage.from_stream(File.open(temp_file, "rb", &:read))
91
+ end
92
+
93
+ should "also discover the expected parts" do
94
+ assert_equal @expected_contents, package.parts.map(&:path).to_set
95
+ end
96
+
97
+ should "read their content" do
98
+ assert_equal web_settings_content, package.get_part("word/webSettings.xml").content
99
+ end
81
100
  end
82
101
  end
83
102
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open_xml_package
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Lail
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-05 00:00:00.000000000 Z
11
+ date: 2014-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -156,6 +156,7 @@ files:
156
156
  - Rakefile
157
157
  - lib/open_xml_package.rb
158
158
  - lib/open_xml_package/part.rb
159
+ - lib/open_xml_package/rubyzip_fix.rb
159
160
  - lib/open_xml_package/version.rb
160
161
  - open_xml_package.gemspec
161
162
  - test/open_xml_package_test.rb