openxml-package 0.2.1 → 0.2.2

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: 7d6a0da91c83a3de0209c39c9d29016da44e3ffc
4
- data.tar.gz: 08f26c9b65ec985d6b784341cd288b15f58cea8d
3
+ metadata.gz: e4ac578cfd771b07653d4fdc0fec13bf8880369e
4
+ data.tar.gz: 03a116e7818d9fcc01c9a1384bc678227a4b2f1e
5
5
  SHA512:
6
- metadata.gz: da26c7fc3fa5e983c0a6f78ebb5149e3ca562991ba182e44d516a226451ac95522ee41a09ca8c4c1ccc6c328eac29d595c14bc06055d6fb3bb5030c6fcbe1032
7
- data.tar.gz: 6965c0f5343a7328c78a7a6fba636dad620f9ed316e223e82a2ef6d153f79dcae22f63cd23b7c5d30ff2ba962981d32bd149a35c1532b97f896533d5843574d5
6
+ metadata.gz: be40b47eda1c018675dd49cf3f7979fbd32bf9623a5528ab18697dbb25cce9c4c3c544a57071fca663749bfe015a9fdc8b07f00709c60670fb6b2e978ec1ec81
7
+ data.tar.gz: 1a3a835d1deb48d3dd0e376552abda27754a07762fcda8c09236582f01ef800b2349f995e97406fe13699a76aac5b5dcae1b1a6d1b8a28051daed313888413a1
@@ -1,3 +1,3 @@
1
1
  module OpenXmlPackage
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -5,7 +5,6 @@
5
5
  # This class mimics the XML Builder DSL.
6
6
  require "ox"
7
7
  require "openxml/builder/element"
8
- require "openxml/builder/namespace"
9
8
 
10
9
  module OpenXml
11
10
  class Builder
@@ -28,39 +27,19 @@ module OpenXml
28
27
  end
29
28
  alias :to_xml :to_s
30
29
 
31
- # Adapted from Nokogiri's builder.rb
32
30
  def [](ns)
33
- if @parent != @document
34
- @ns = @parent.namespace_definitions.find { |x| x.prefix == ns.to_s }
35
- end
36
- return self if @ns
37
-
38
- @parent.ancestors.each do |a|
39
- next if a == @document
40
- @ns = a.namespace_definitions.find { |x| x.prefix == ns.to_s }
41
- return self if @ns
42
- end
43
-
44
- @ns = { :pending => ns.to_s }
31
+ @ns = ns.to_sym if ns
45
32
  return self
46
33
  end
47
34
 
48
35
  def method_missing(tag_name, *args)
49
36
  new_element = OpenXml::Builder::Element.new(tag_name)
50
- new_element.parent = @parent
51
37
  attributes = extract_options!(args)
52
38
  attributes.each do |key, value|
53
39
  new_element[key] = value
54
40
  end
55
41
 
56
- # Adapted from Nokogiri's builder.rb
57
- if @ns.is_a? OpenXml::Builder::Namespace
58
- new_element.namespace = @ns
59
- elsif @ns.is_a? Hash
60
- new_element.namespace = new_element.namespace_definitions.find { |x| x.prefix == @ns[:pending] }
61
- raise ArgumentError, "Namespace #{@ns[:pending]} has not been defined" if new_element.namespace.nil?
62
- end
63
-
42
+ new_element.namespace = @ns
64
43
  @ns = nil
65
44
 
66
45
  if block_given?
@@ -2,7 +2,6 @@ module OpenXml
2
2
  class Builder
3
3
  class Element < SimpleDelegator
4
4
  attr_reader :namespace
5
- attr_accessor :parent
6
5
 
7
6
  def initialize(*args)
8
7
  super Ox::Element.new(*args)
@@ -10,15 +9,18 @@ module OpenXml
10
9
 
11
10
  def []=(attribute, value)
12
11
  namespace_def = attribute.downcase.to_s.match /^xmlns(?:\:(?<prefix>.*))?$/
13
- add_namespace(namespace_def[:prefix], value.to_s) if namespace_def
12
+ namespaces << namespace_def[:prefix].to_sym if namespace_def && namespace_def[:prefix]
14
13
  super
15
14
  end
16
15
 
17
16
  def namespace=(ns)
18
- @namespace = ns
17
+ @namespace = ns.to_sym if ns
19
18
  tag = name.match(/^(?:\w*?\:)?(?<tag>\w*)$/i)[:tag]
20
- self.value = "#{namespace.prefix}:#{tag}" if namespace.is_a? OpenXml::Builder::Namespace
21
- self.value = "#{namespace}:#{tag}" if namespace.is_a? String
19
+ self.value = "#{namespace}:#{tag}" if namespace
20
+ end
21
+
22
+ def namespaces=(ns)
23
+ @namespaces = Array(ns)
22
24
  end
23
25
 
24
26
  def namespaces
@@ -26,18 +28,6 @@ module OpenXml
26
28
  end
27
29
  alias :namespace_definitions :namespaces
28
30
 
29
- def ancestors
30
- parents = [self]
31
- parents << parent.ancestors unless parent.nil? || !parent.respond_to?(:ancestors)
32
- parents.flatten
33
- end
34
-
35
- private
36
-
37
- def add_namespace(prefix, uri)
38
- namespaces << OpenXml::Builder::Namespace.new(prefix, uri)
39
- end
40
-
41
31
  end
42
32
  end
43
33
  end
@@ -0,0 +1,38 @@
1
+ require "test_helper"
2
+
3
+ class ElementTest < ActiveSupport::TestCase
4
+ attr_reader :element
5
+
6
+ setup do
7
+ @element = OpenXml::Builder::Element.new("tag")
8
+ end
9
+
10
+ context "The element" do
11
+ should "correctly assign attributes" do
12
+ element[:attribute] = "value"
13
+ element["namespaced:attribute"] = "value"
14
+ dump = Ox.dump(element.__getobj__)
15
+ assert_equal "\n<tag attribute=\"value\" namespaced:attribute=\"value\"/>\n", dump
16
+ end
17
+
18
+ should "parse out available namespace prefixes from namespace definition attributes" do
19
+ nsdef_prefix = "xmlns:namespace"
20
+ nsdef_uri = "http://schema.somenamespace.org/"
21
+ element[nsdef_prefix] = nsdef_uri
22
+ assert_equal [:namespace], element.namespaces
23
+ end
24
+
25
+ should "only parse namespace definition attributes with a prefix" do
26
+ element["xmlns"] = "http://schema.somenamespace.org/"
27
+ assert element.namespaces.empty?
28
+ end
29
+
30
+ should "correctly use a namespace prefix" do
31
+ element.namespace = "namespace"
32
+ dump = Ox.dump(element.__getobj__)
33
+ assert_equal "\n<namespace:tag/>\n", dump
34
+ end
35
+ end
36
+
37
+
38
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openxml-package
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Lail
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-30 00:00:00.000000000 Z
11
+ date: 2015-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -214,7 +214,6 @@ files:
214
214
  - lib/openxml-package/version.rb
215
215
  - lib/openxml/builder.rb
216
216
  - lib/openxml/builder/element.rb
217
- - lib/openxml/builder/namespace.rb
218
217
  - lib/openxml/content_types_presets.rb
219
218
  - lib/openxml/errors.rb
220
219
  - lib/openxml/package.rb
@@ -227,6 +226,7 @@ files:
227
226
  - lib/openxml/types.rb
228
227
  - openxml-package.gemspec
229
228
  - test/content_types_test.rb
229
+ - test/element_test.rb
230
230
  - test/package_test.rb
231
231
  - test/part_test.rb
232
232
  - test/support/sample.docx
@@ -257,6 +257,7 @@ specification_version: 4
257
257
  summary: A Ruby implementation of OpenXmlPackage
258
258
  test_files:
259
259
  - test/content_types_test.rb
260
+ - test/element_test.rb
260
261
  - test/package_test.rb
261
262
  - test/part_test.rb
262
263
  - test/support/sample.docx
@@ -1,13 +0,0 @@
1
- module OpenXml
2
- class Builder
3
- class Namespace
4
- attr_accessor :prefix, :uri
5
-
6
- def initialize(prefix, uri)
7
- @prefix = prefix.to_s
8
- @uri = uri
9
- end
10
-
11
- end
12
- end
13
- end