om 0.1.7 → 0.1.8

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.7
1
+ 0.1.8
@@ -0,0 +1,88 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require "nokogiri"
3
+ require "om"
4
+
5
+ describe "OM::XML::Container" do
6
+
7
+ before(:all) do
8
+ class ContainerTest
9
+ include OM::XML::Container
10
+ end
11
+ end
12
+
13
+ before(:each) do
14
+ @container = ContainerTest.from_xml("<foo><bar>1</bar></foo>")
15
+ end
16
+
17
+ it "should add .ng_xml accessor" do
18
+ @container.should respond_to(:ng_xml)
19
+ @container.should respond_to(:ng_xml=)
20
+ end
21
+
22
+ describe "new" do
23
+ it "should populate ng_xml with an instance of Nokogiri::XML::Document" do
24
+ @container.ng_xml.class.should == Nokogiri::XML::Document
25
+ end
26
+ end
27
+
28
+ describe '#xml_template' do
29
+ it "should return an empty xml document" do
30
+ ContainerTest.xml_template.to_xml.should == "<?xml version=\"1.0\"?>\n"
31
+ end
32
+ end
33
+
34
+ describe "#from_xml" do
35
+ it "should accept a String, parse it and store it in .ng_xml" do
36
+ Nokogiri::XML::Document.expects(:parse).returns("parsed xml")
37
+ container1 = ContainerTest.from_xml("<foo><bar>1</bar></foo>")
38
+ container1.ng_xml.should == "parsed xml"
39
+ end
40
+ it "should accept a File, parse it and store it in .ng_xml" do
41
+ file = fixture(File.join("mods_articles", "hydrangea_article1.xml"))
42
+ Nokogiri::XML::Document.expects(:parse).returns("parsed xml")
43
+ container1 = ContainerTest.from_xml(file)
44
+ container1.ng_xml.should == "parsed xml"
45
+ end
46
+ it "should accept Nokogiri nodes as input and leave them as-is" do
47
+ parsed_xml = Nokogiri::XML::Document.parse("<foo><bar>1</bar></foo>")
48
+ container1 = ContainerTest.from_xml(parsed_xml)
49
+ container1.ng_xml.should == parsed_xml
50
+ end
51
+ it "should initialize from #xml_template if no xml is provided" do
52
+ ContainerTest.expects(:xml_template).returns("fake template")
53
+ ContainerTest.from_xml.ng_xml.should == "fake template"
54
+ end
55
+ end
56
+
57
+ describe ".to_xml" do
58
+ it "should call .ng_xml.to_xml" do
59
+ @container.ng_xml.expects(:to_xml).returns("ng xml")
60
+ @container.to_xml.should == "ng xml"
61
+ end
62
+
63
+ it 'should accept an optional Nokogiri::XML Document as an argument and insert its fields into that (mocked test)' do
64
+ doc = Nokogiri::XML::Document.parse("<test_xml/>")
65
+ mock_new_node = mock("new node")
66
+ doc.root.expects(:add_child).with(@container.ng_xml.root).returns(mock_new_node)
67
+ result = @container.to_xml(doc)
68
+ end
69
+
70
+ it 'should accept an optional Nokogiri::XML Document as an argument and insert its fields into that (functional test)' do
71
+ doc = Nokogiri::XML::Document.parse("<test_xml/>")
72
+ @container.to_xml(doc).should == "<?xml version=\"1.0\"?>\n<test_xml>\n <foo>\n <bar>1</bar>\n </foo>\n</test_xml>\n"
73
+ end
74
+
75
+ it 'should add to root of Nokogiri::XML::Documents, but add directly to the elements if a Nokogiri::XML::Node is passed in' do
76
+ mock_new_node = mock("new node")
77
+ mock_new_node.stubs(:to_xml).returns("foo")
78
+
79
+ doc = Nokogiri::XML::Document.parse("<test_document/>")
80
+ el = Nokogiri::XML::Node.new("test_element", Nokogiri::XML::Document.new)
81
+ doc.root.expects(:add_child).with(@container.ng_xml.root).returns(mock_new_node)
82
+ el.expects(:add_child).with(@container.ng_xml.root).returns(mock_new_node)
83
+ @container.to_xml(doc).should
84
+ @container.to_xml(el)
85
+ end
86
+ end
87
+
88
+ end
@@ -200,7 +200,7 @@ module OM::XML::Accessors
200
200
  if xpath.nil?
201
201
  return nil
202
202
  else
203
- return ng_xml.xpath(xpath, "oxns"=>"http://www.loc.gov/mods/v3")
203
+ return ng_xml.xpath(xpath, ox_namespaces)
204
204
  end
205
205
  end
206
206
 
@@ -9,8 +9,10 @@ module OM::XML::Container
9
9
  # @xml String, File or Nokogiri::XML::Node
10
10
  # @tmpl ActiveFedora::MetadataDatastream
11
11
  # Careful! If you call this from a constructor, be sure to provide something 'ie. self' as the @tmpl. Otherwise, you will get an infinite loop!
12
- def from_xml(xml, tmpl=self.new) # :nodoc:
13
- if xml.kind_of? Nokogiri::XML::Node
12
+ def from_xml(xml=nil, tmpl=self.new) # :nodoc:
13
+ if xml.nil?
14
+ tmpl.ng_xml = self.xml_template
15
+ elsif xml.kind_of? Nokogiri::XML::Node
14
16
  tmpl.ng_xml = xml
15
17
  else
16
18
  tmpl.ng_xml = Nokogiri::XML::Document.parse(xml)
@@ -18,6 +20,10 @@ module OM::XML::Container
18
20
  return tmpl
19
21
  end
20
22
 
23
+ def xml_template
24
+ Nokogiri::XML::Document.parse("")
25
+ end
26
+
21
27
  end
22
28
 
23
29
  # Instance Methods -- These methods will be available on instances of classes that include this module
data/om.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{om}
8
- s.version = "0.1.7"
8
+ s.version = "0.1.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Matt Zumwalt"]
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  "README.rdoc",
25
25
  "Rakefile",
26
26
  "VERSION",
27
+ "container_spec.rb",
27
28
  "lib/om.rb",
28
29
  "lib/om/xml.rb",
29
30
  "lib/om/xml/accessors.rb",
@@ -38,6 +39,7 @@ Gem::Specification.new do |s|
38
39
  "spec/fixtures/mods-3-2.xsd",
39
40
  "spec/fixtures/mods_articles/hydrangea_article1.xml",
40
41
  "spec/fixtures/test_dummy_mods.xml",
42
+ "spec/integration/rights_metadata_integration_example_spec.rb",
41
43
  "spec/spec.opts",
42
44
  "spec/spec_helper.rb",
43
45
  "spec/unit/accessors_spec.rb",
@@ -55,7 +57,8 @@ Gem::Specification.new do |s|
55
57
  s.rubygems_version = %q{1.3.7}
56
58
  s.summary = %q{OM (Opinionated Metadata): A library to help you tame sprawling XML schemas like MODS.}
57
59
  s.test_files = [
58
- "spec/spec_helper.rb",
60
+ "spec/integration/rights_metadata_integration_example_spec.rb",
61
+ "spec/spec_helper.rb",
59
62
  "spec/unit/accessors_spec.rb",
60
63
  "spec/unit/container_spec.rb",
61
64
  "spec/unit/generator_spec.rb",
@@ -0,0 +1,67 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require "nokogiri"
3
+ require "om"
4
+
5
+ describe "OM::XML::Accessors" do
6
+
7
+ before(:all) do
8
+ class RightsMDTest
9
+
10
+ include OM::XML
11
+
12
+ root_property :rightsMetadata, "rightsMetadata", "http://hydra-collab.stanford.edu/schemas/rightsMetadata/v1", :schema=>"http://github.com/projecthydra/schemas/tree/v1/rightsMetadata.xsd"
13
+
14
+ property :access, :path=>"access",
15
+ :subelements=>[:machine],
16
+ :convenience_methods => {
17
+ :human_readable => {:path=>"human"}
18
+ }
19
+
20
+ property :edit_access, :variant_of=>:access, :attributes=>{:type=>"edit"}
21
+
22
+ property :machine, :path=>"machine",
23
+ :subelements=>["group","person"]
24
+
25
+ generate_accessors_from_properties
26
+ # Generates an empty Mods Article (used when you call ModsArticle.new without passing in existing xml)
27
+ def self.xml_template
28
+ builder = Nokogiri::XML::Builder.new do |xml|
29
+ xml.rightsMetadata(:version=>"0.1", "xmlns"=>"http://hydra-collab.stanford.edu/schemas/rightsMetadata/v1") {
30
+ xml.copyright {
31
+ xml.human
32
+ }
33
+ xml.access(:type=>"discover") {
34
+ xml.human
35
+ xml.machine
36
+ }
37
+ xml.access(:type=>"read") {
38
+ xml.human
39
+ xml.machine
40
+ }
41
+ xml.access(:type=>"edit") {
42
+ xml.human
43
+ xml.machine
44
+ }
45
+ }
46
+ end
47
+ return builder.doc
48
+ end
49
+ end
50
+ end
51
+
52
+ before(:each) do
53
+ @sample = RightsMDTest.from_xml(nil)
54
+ end
55
+
56
+ describe "update_properties" do
57
+ it "should update the declared properties" do
58
+ pending "nesting is too deep..."
59
+ @sample.retrieve(*[:edit_access, :machine, :person]).length.should == 0
60
+ @sample.update_properties([:edit_access, :machine, :person]=>"user id").should == {"edit_access_machine_person"=>{"-1"=>"user id"}}
61
+ debugger
62
+ @sample.retrieve(*[:edit_access, :machine, :person]).length.should == 1
63
+ @sample.retrieve(*[:edit_access, :machine, :person]).first.text.should == "user id"
64
+ end
65
+ end
66
+
67
+ end
@@ -60,6 +60,7 @@ describe "OM::XML::Accessors" do
60
60
  before(:each) do
61
61
  article_xml = fixture( File.join("mods_articles", "hydrangea_article1.xml") )
62
62
  @sample = AccessorTest.from_xml(article_xml)
63
+ @sample.stubs(:ox_namespaces).returns("oxns"=>"http://www.loc.gov/mods/v3")
63
64
  end
64
65
 
65
66
  describe '#accessor' do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: om
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 11
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 7
10
- version: 0.1.7
9
+ - 8
10
+ version: 0.1.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matt Zumwalt
@@ -109,6 +109,7 @@ files:
109
109
  - README.rdoc
110
110
  - Rakefile
111
111
  - VERSION
112
+ - container_spec.rb
112
113
  - lib/om.rb
113
114
  - lib/om/xml.rb
114
115
  - lib/om/xml/accessors.rb
@@ -123,6 +124,7 @@ files:
123
124
  - spec/fixtures/mods-3-2.xsd
124
125
  - spec/fixtures/mods_articles/hydrangea_article1.xml
125
126
  - spec/fixtures/test_dummy_mods.xml
127
+ - spec/integration/rights_metadata_integration_example_spec.rb
126
128
  - spec/spec.opts
127
129
  - spec/spec_helper.rb
128
130
  - spec/unit/accessors_spec.rb
@@ -168,6 +170,7 @@ signing_key:
168
170
  specification_version: 3
169
171
  summary: "OM (Opinionated Metadata): A library to help you tame sprawling XML schemas like MODS."
170
172
  test_files:
173
+ - spec/integration/rights_metadata_integration_example_spec.rb
171
174
  - spec/spec_helper.rb
172
175
  - spec/unit/accessors_spec.rb
173
176
  - spec/unit/container_spec.rb