om 3.1.0 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/{COMMON_OM_PATTERNS.textile → COMMON_OM_PATTERNS.md} +136 -126
  3. data/CONTRIBUTING.md +2 -2
  4. data/GETTING_FANCY.md +153 -0
  5. data/GETTING_STARTED.md +329 -0
  6. data/Gemfile +1 -1
  7. data/History.md +164 -0
  8. data/LICENSE +15 -20
  9. data/QUERYING_DOCUMENTS.md +162 -0
  10. data/README.md +2 -2
  11. data/UPDATING_DOCUMENTS.md +6 -0
  12. data/gemfiles/gemfile.rails3 +1 -1
  13. data/gemfiles/gemfile.rails4 +1 -1
  14. data/lib/om/version.rb +1 -1
  15. data/lib/om/xml/dynamic_node.rb +42 -51
  16. data/lib/tasks/om.rake +1 -1
  17. data/om.gemspec +1 -2
  18. data/spec/integration/differentiated_elements_spec.rb +2 -2
  19. data/spec/integration/element_value_spec.rb +13 -13
  20. data/spec/integration/proxies_and_ref_spec.rb +10 -10
  21. data/spec/integration/querying_documents_spec.rb +20 -27
  22. data/spec/integration/rights_metadata_integration_example_spec.rb +4 -4
  23. data/spec/integration/selective_querying_spec.rb +1 -1
  24. data/spec/integration/serialization_spec.rb +15 -15
  25. data/spec/integration/set_reentrant_terminology_spec.rb +6 -6
  26. data/spec/integration/subclass_terminology_spec.rb +8 -8
  27. data/spec/integration/xpathy_stuff_spec.rb +10 -10
  28. data/spec/unit/container_spec.rb +27 -27
  29. data/spec/unit/document_spec.rb +24 -24
  30. data/spec/unit/dynamic_node_spec.rb +60 -49
  31. data/spec/unit/named_term_proxy_spec.rb +12 -7
  32. data/spec/unit/node_generator_spec.rb +4 -4
  33. data/spec/unit/nokogiri_sanity_spec.rb +17 -18
  34. data/spec/unit/om_spec.rb +2 -2
  35. data/spec/unit/template_registry_spec.rb +51 -51
  36. data/spec/unit/term_builder_spec.rb +45 -44
  37. data/spec/unit/term_spec.rb +55 -55
  38. data/spec/unit/term_value_operators_spec.rb +205 -205
  39. data/spec/unit/term_xpath_generator_spec.rb +33 -36
  40. data/spec/unit/terminology_builder_spec.rb +50 -47
  41. data/spec/unit/terminology_spec.rb +92 -92
  42. data/spec/unit/validation_spec.rb +12 -12
  43. data/spec/unit/xml_serialization_spec.rb +20 -20
  44. data/spec/unit/xml_spec.rb +3 -3
  45. data/spec/unit/xml_terminology_based_solrizer_spec.rb +18 -18
  46. metadata +11 -38
  47. data/GETTING_FANCY.textile +0 -145
  48. data/GETTING_STARTED.textile +0 -254
  49. data/History.textile +0 -186
  50. data/QUERYING_DOCUMENTS.textile +0 -139
  51. data/UPDATING_DOCUMENTS.textile +0 -3
@@ -27,64 +27,64 @@ describe "OM::XML::TermXpathGeneratorSpec" do
27
27
  end
28
28
 
29
29
  it "should support terms that are pointers to attribute values" do
30
- OM::XML::TermXpathGenerator.generate_xpath(@test_lang_attribute, :absolute).should == "//@lang"
31
- OM::XML::TermXpathGenerator.generate_xpath(@test_lang_attribute, :relative).should == "@lang"
32
- OM::XML::TermXpathGenerator.generate_xpath(@test_lang_attribute, :constrained).should == '//@lang[contains(., "#{constraint_value}")]'.gsub('"', '\"')
30
+ expect(OM::XML::TermXpathGenerator.generate_xpath(@test_lang_attribute, :absolute)).to eq "//@lang"
31
+ expect(OM::XML::TermXpathGenerator.generate_xpath(@test_lang_attribute, :relative)).to eq "@lang"
32
+ expect(OM::XML::TermXpathGenerator.generate_xpath(@test_lang_attribute, :constrained)).to eq '//@lang[contains(., "#{constraint_value}")]'.gsub('"', '\"')
33
33
  end
34
34
 
35
35
  describe "generate_xpath" do
36
36
  it "should generate an xpath based on the given mapper and options" do
37
- OM::XML::TermXpathGenerator.should_receive(:generate_absolute_xpath).with(@test_term)
37
+ expect(OM::XML::TermXpathGenerator).to receive(:generate_absolute_xpath).with(@test_term)
38
38
  OM::XML::TermXpathGenerator.generate_xpath(@test_term, :absolute)
39
39
 
40
- OM::XML::TermXpathGenerator.should_receive(:generate_relative_xpath).with(@test_term)
40
+ expect(OM::XML::TermXpathGenerator).to receive(:generate_relative_xpath).with(@test_term)
41
41
  OM::XML::TermXpathGenerator.generate_xpath(@test_term, :relative)
42
42
 
43
- OM::XML::TermXpathGenerator.should_receive(:generate_constrained_xpath).with(@test_term)
43
+ expect(OM::XML::TermXpathGenerator).to receive(:generate_constrained_xpath).with(@test_term)
44
44
  OM::XML::TermXpathGenerator.generate_xpath(@test_term, :constrained)
45
45
  end
46
46
  end
47
47
 
48
48
  describe "generate_relative_xpath" do
49
49
  it "should generate a relative xpath based on the given mapper" do
50
- OM::XML::TermXpathGenerator.generate_relative_xpath(@test_term).should == 'namePart[@type="termsOfAddress"]'
50
+ expect(OM::XML::TermXpathGenerator.generate_relative_xpath(@test_term)).to eq 'namePart[@type="termsOfAddress"]'
51
51
  end
52
52
  it "should support mappers without namespaces" do
53
53
  @test_term.namespace_prefix = nil
54
- OM::XML::TermXpathGenerator.generate_relative_xpath(@test_term).should == 'namePart[@type="termsOfAddress"]'
54
+ expect(OM::XML::TermXpathGenerator.generate_relative_xpath(@test_term)).to eq 'namePart[@type="termsOfAddress"]'
55
55
  end
56
56
  it "should not use a namespace for a path set to text() and should include normalize-space to ignore white space" do
57
57
  text_term = OM::XML::Term.new(:title_content, :path=>"text()")
58
- OM::XML::TermXpathGenerator.generate_relative_xpath(text_term).should == 'text()[normalize-space(.)]'
58
+ expect(OM::XML::TermXpathGenerator.generate_relative_xpath(text_term)).to eq 'text()[normalize-space(.)]'
59
59
  end
60
60
  it "should set a 'not' predicate if the attribute value is :none" do
61
- OM::XML::TermXpathGenerator.generate_relative_xpath(@test_none_attribute_value).should == 'namePart[not(@type)]'
61
+ expect(OM::XML::TermXpathGenerator.generate_relative_xpath(@test_none_attribute_value)).to eq 'namePart[not(@type)]'
62
62
  end
63
63
 
64
64
  end
65
65
 
66
66
  describe "generate_absolute_xpath" do
67
67
  it "should generate an absolute xpath based on the given mapper" do
68
- OM::XML::TermXpathGenerator.generate_absolute_xpath(@test_term).should == '//namePart[@type="termsOfAddress"]'
68
+ expect(OM::XML::TermXpathGenerator.generate_absolute_xpath(@test_term)).to eq '//namePart[@type="termsOfAddress"]'
69
69
  end
70
70
  it "should prepend the xpath for any parent nodes" do
71
71
  mock_parent_mapper = double("Term", :xpath_absolute=>'//name[@type="conference"]/role')
72
72
  @test_role_text.stub(:parent => mock_parent_mapper)
73
- OM::XML::TermXpathGenerator.generate_absolute_xpath(@test_role_text).should == '//name[@type="conference"]/role/roleTerm[@type="text"]'
73
+ expect(OM::XML::TermXpathGenerator.generate_absolute_xpath(@test_role_text)).to eq '//name[@type="conference"]/role/roleTerm[@type="text"]'
74
74
  end
75
75
  end
76
76
 
77
77
  describe "generate_constrained_xpath" do
78
78
  it "should generate a constrained xpath based on the given mapper" do
79
- OM::XML::TermXpathGenerator.generate_constrained_xpath(@test_term).should == '//namePart[@type="termsOfAddress" and contains(., "#{constraint_value}")]'.gsub('"', '\"')
79
+ expect(OM::XML::TermXpathGenerator.generate_constrained_xpath(@test_term)).to eq '//namePart[@type="termsOfAddress" and contains(., "#{constraint_value}")]'.gsub('"', '\"')
80
80
  end
81
81
  end
82
82
 
83
83
  it "should support mappers without namespaces" do
84
84
  @test_term.namespace_prefix = nil
85
- OM::XML::TermXpathGenerator.generate_relative_xpath(@test_term).should == 'namePart[@type="termsOfAddress"]'
86
- OM::XML::TermXpathGenerator.generate_absolute_xpath(@test_term).should == '//namePart[@type="termsOfAddress"]'
87
- OM::XML::TermXpathGenerator.generate_constrained_xpath(@test_term).should == '//namePart[@type="termsOfAddress" and contains(., "#{constraint_value}")]'.gsub('"', '\"')
85
+ expect(OM::XML::TermXpathGenerator.generate_relative_xpath(@test_term)).to eq 'namePart[@type="termsOfAddress"]'
86
+ expect(OM::XML::TermXpathGenerator.generate_absolute_xpath(@test_term)).to eq '//namePart[@type="termsOfAddress"]'
87
+ expect(OM::XML::TermXpathGenerator.generate_constrained_xpath(@test_term)).to eq '//namePart[@type="termsOfAddress" and contains(., "#{constraint_value}")]'.gsub('"', '\"')
88
88
  end
89
89
 
90
90
  describe "generate_xpath_with_indexes" do
@@ -92,15 +92,15 @@ describe "OM::XML::TermXpathGeneratorSpec" do
92
92
  generated_xpath = OM::XML::TermXpathGenerator.generate_xpath_with_indexes( @sample_terminology,
93
93
  :person, {:first_name=>"Tim", :family_name=>"Berners-Lee"} )
94
94
  # expect an xpath that looks like this: '//oxns:name[@type="personal" and contains(oxns:namePart[@type="family"], "Berners-Lee") and contains(oxns:namePart[@type="given"], "Tim")]'
95
- generated_xpath.should match( /\/\/oxns:name\[@type=\"personal\".*and oxns:namePart\[@type=\"given\"\]\[text\(\)=\"Tim\"\].*\]/ )
96
- generated_xpath.should match( /\/\/oxns:name\[@type=\"personal\".*and oxns:namePart\[@type=\"family\"\]\[text\(\)=\"Berners-Lee\"\].*\]/ )
95
+ expect(generated_xpath).to match( /\/\/oxns:name\[@type=\"personal\".*and oxns:namePart\[@type=\"given\"\]\[text\(\)=\"Tim\"\].*\]/ )
96
+ expect(generated_xpath).to match( /\/\/oxns:name\[@type=\"personal\".*and oxns:namePart\[@type=\"family\"\]\[text\(\)=\"Berners-Lee\"\].*\]/ )
97
97
  end
98
98
 
99
99
  it "should find matching nodes" do
100
100
  ng = Nokogiri::XML(fixture( File.join("test_dummy_mods.xml")))
101
101
  generated_xpath = OM::XML::TermXpathGenerator.generate_xpath_with_indexes( @sample_terminology,
102
102
  :person, {:first_name=>"Tim", :family_name=>"Berners-Lee"} )
103
- ng.xpath(generated_xpath, 'oxns' => "http://www.loc.gov/mods/v3").to_xml.should be_equivalent_to <<EOF
103
+ expect(ng.xpath(generated_xpath, 'oxns' => "http://www.loc.gov/mods/v3").to_xml).to be_equivalent_to <<EOF
104
104
  <ns3:name type="personal">
105
105
  <ns3:namePart type="family">Berners-Lee</ns3:namePart>
106
106
  <ns3:namePart type="given">Tim</ns3:namePart>
@@ -112,33 +112,33 @@ describe "OM::XML::TermXpathGeneratorSpec" do
112
112
  EOF
113
113
  generated_xpath = OM::XML::TermXpathGenerator.generate_xpath_with_indexes( @sample_terminology,
114
114
  :person, {:first_name=>"Tim", :family_name=>"Berners"} )
115
- ng.xpath(generated_xpath, 'oxns' => "http://www.loc.gov/mods/v3").should be_empty
115
+ expect(ng.xpath(generated_xpath, 'oxns' => "http://www.loc.gov/mods/v3")).to be_empty
116
116
  generated_xpath = OM::XML::TermXpathGenerator.generate_xpath_with_indexes( @sample_terminology,
117
117
  :person, {:first_name=>"Frank", :family_name=>"Berners-Lee"} )
118
- ng.xpath(generated_xpath, 'oxns' => "http://www.loc.gov/mods/v3").should be_empty
118
+ expect(ng.xpath(generated_xpath, 'oxns' => "http://www.loc.gov/mods/v3")).to be_empty
119
119
 
120
120
  generated_xpath = OM::XML::TermXpathGenerator.generate_xpath_with_indexes( @sample_terminology,
121
121
  :person, {:first_name=>"Tim", :family_name=>"Howard"} )
122
- ng.xpath(generated_xpath, 'oxns' => "http://www.loc.gov/mods/v3").should be_empty
122
+ expect(ng.xpath(generated_xpath, 'oxns' => "http://www.loc.gov/mods/v3")).to be_empty
123
123
 
124
124
  end
125
125
  it "should support xpath queries as argument" do
126
- OM::XML::TermXpathGenerator.generate_xpath_with_indexes(@sample_terminology, '//oxns:name[@type="personal"][1]/oxns:namePart').should == '//oxns:name[@type="personal"][1]/oxns:namePart'
126
+ expect(OM::XML::TermXpathGenerator.generate_xpath_with_indexes(@sample_terminology, '//oxns:name[@type="personal"][1]/oxns:namePart')).to eq '//oxns:name[@type="personal"][1]/oxns:namePart'
127
127
  end
128
128
  it "should return the xpath of the terminology's root node if term pointer is nil" do
129
- OM::XML::TermXpathGenerator.generate_xpath_with_indexes( @sample_terminology, nil ).should == @sample_terminology.root_terms.first.xpath
129
+ expect(OM::XML::TermXpathGenerator.generate_xpath_with_indexes( @sample_terminology, nil )).to eq @sample_terminology.root_terms.first.xpath
130
130
  end
131
131
  it "should return / if term pointer is nil and the terminology does not have a root term defined" do
132
- OM::XML::TermXpathGenerator.generate_xpath_with_indexes( @rootless_terminology, nil ).should == "/"
132
+ expect(OM::XML::TermXpathGenerator.generate_xpath_with_indexes( @rootless_terminology, nil )).to eq "/"
133
133
  end
134
134
  it "should destringify term pointers before using them" do
135
- generated_xpath = OM::XML::TermXpathGenerator.generate_xpath_with_indexes( @sample_terminology, {"person"=>"1"}, "first_name" ).should == '//oxns:name[@type="personal"][2]/oxns:namePart[@type="given"]'
135
+ expect(OM::XML::TermXpathGenerator.generate_xpath_with_indexes( @sample_terminology, {"person"=>"1"}, "first_name" )).to eq '//oxns:name[@type="personal"][2]/oxns:namePart[@type="given"]'
136
136
  ### Last argument is a filter, we are passing no filters
137
- @sample_terminology.xpath_with_indexes(:name, {:family_name=>1},{}).should == '//oxns:name/oxns:namePart[@type="family"][2]'
137
+ expect(@sample_terminology.xpath_with_indexes(:name, {:family_name=>1},{})).to eq '//oxns:name/oxns:namePart[@type="family"][2]'
138
138
  end
139
139
  it "should warn about indexes on a proxy" do
140
- Logger.any_instance.should_receive(:warn).with("You attempted to call an index value of 1 on the term \":family_name\". However \":family_name\" is a proxy so we are ignoring the index. See https://jira.duraspace.org/browse/HYDRA-643")
141
- @sample_terminology.xpath_with_indexes({:family_name=>1}).should == "//oxns:name/oxns:namePart[@type=\"family\"]"
140
+ expect_any_instance_of(Logger).to receive(:warn).with("You attempted to call an index value of 1 on the term \":family_name\". However \":family_name\" is a proxy so we are ignoring the index. See https://jira.duraspace.org/browse/HYDRA-643")
141
+ expect(@sample_terminology.xpath_with_indexes({:family_name=>1})).to eq "//oxns:name/oxns:namePart[@type=\"family\"]"
142
142
  end
143
143
  end
144
144
 
@@ -146,17 +146,14 @@ EOF
146
146
  skip "need to implement mapper_set first"
147
147
  #@test_term_with_default_path = OM::XML::Term.new(:volume, :path=>"detail", :attributes=>{:type=>"volume"}, :default_content_path=>"number")
148
148
 
149
- OM::XML::TermXpathGenerator.generate_relative_xpath(@test_term_with_default_path).should == 'oxns:detail[@type="volume"]'
150
- OM::XML::TermXpathGenerator.generate_absolute_xpath(@test_term_with_default_path).should == '//oxns:detail[@type="volume"]'
151
- OM::XML::TermXpathGenerator.generate_constrained_xpath(@test_term_with_default_path).should == '//oxns:detail[contains(oxns:number[@type="volume"], "#{constraint_value}")]'.gsub('"', '\"')
149
+ expect(OM::XML::TermXpathGenerator.generate_relative_xpath(@test_term_with_default_path)).to eq 'oxns:detail[@type="volume"]'
150
+ expect(OM::XML::TermXpathGenerator.generate_absolute_xpath(@test_term_with_default_path)).to eq '//oxns:detail[@type="volume"]'
151
+ expect(OM::XML::TermXpathGenerator.generate_constrained_xpath(@test_term_with_default_path)).to eq '//oxns:detail[contains(oxns:number[@type="volume"], "#{constraint_value}")]'.gsub('"', '\"')
152
152
  end
153
153
 
154
154
  it "should default to using an inherited namspace prefix" do
155
-
156
155
  term = @sample_terminology.retrieve_term(:person, :first_name)
157
- OM::XML::TermXpathGenerator.generate_absolute_xpath(term).should == "//oxns:name[@type=\"personal\"]/oxns:namePart[@type=\"given\"]"
158
-
159
-
156
+ expect(OM::XML::TermXpathGenerator.generate_absolute_xpath(term)).to eq "//oxns:name[@type=\"personal\"]/oxns:namePart[@type=\"given\"]"
160
157
  end
161
158
 
162
159
  end
@@ -75,41 +75,42 @@ describe "OM::XML::Terminology::Builder" do
75
75
  end
76
76
 
77
77
  terminology = t_builder.build
78
- terminology.retrieve_term(:title).should be_kind_of OM::XML::NamedTermProxy
79
- terminology.retrieve_term(:title).index_as.should == [:facetable, :not_searchable]
80
- terminology.retrieve_term(:title_info, :main_title).index_as.should == []
81
- terminology.xpath_for(:title).should == '//oxns:titleInfo/oxns:title'
82
- terminology.xpath_with_indexes({:title=>0}).should == "//oxns:titleInfo/oxns:title"
78
+ expect(terminology.retrieve_term(:title)).to be_kind_of OM::XML::NamedTermProxy
79
+ expect(terminology.retrieve_term(:title).index_as).to eq [:facetable, :not_searchable]
80
+ expect(terminology.retrieve_term(:title_info, :main_title).index_as).to eq []
81
+ expect(terminology.xpath_for(:title)).to eq '//oxns:titleInfo/oxns:title'
82
+ expect(terminology.xpath_with_indexes({:title=>0})).to eq "//oxns:titleInfo/oxns:title"
83
83
  # @builder_with_block.build.xpath_for_pointer(:issue).should == '//oxns:part'
84
84
  # terminology.xpath_for_pointer(:title).should == '//oxns:titleInfo/oxns:title'
85
85
  end
86
86
 
87
87
  describe '#new' do
88
88
  it "should return an instance of OM::XML::Terminology::Builder" do
89
- OM::XML::Terminology::Builder.new.should be_instance_of OM::XML::Terminology::Builder
89
+ expect(OM::XML::Terminology::Builder.new).to be_instance_of OM::XML::Terminology::Builder
90
90
  end
91
91
  it "should process the input block, creating a new Term Builder for each entry and its children" do
92
92
  expected_root_terms = [:mods, :title_info, :issue, :person, :name, :journal, :role]
93
93
  expected_root_terms.each do |name|
94
- @builder_with_block.term_builders.should have_key(name)
94
+ expect(@builder_with_block.term_builders).to have_key(name)
95
95
  end
96
- @builder_with_block.term_builders.length.should == expected_root_terms.length
97
96
 
98
- @builder_with_block.term_builders[:journal].should be_instance_of OM::XML::Term::Builder
99
- @builder_with_block.term_builders[:journal].settings[:path].should == "relatedItem"
100
- @builder_with_block.term_builders[:journal].settings[:attributes].should == {:type=>"host"}
97
+ expect(@builder_with_block.term_builders.length).to eq expected_root_terms.length
98
+
99
+ expect(@builder_with_block.term_builders[:journal]).to be_instance_of OM::XML::Term::Builder
100
+ expect(@builder_with_block.term_builders[:journal].settings[:path]).to eq "relatedItem"
101
+ expect(@builder_with_block.term_builders[:journal].settings[:attributes]).to eq({:type=>"host"})
101
102
 
102
- @builder_with_block.term_builders[:journal].children[:issn].should be_instance_of OM::XML::Term::Builder
103
- @builder_with_block.term_builders[:journal].children[:issn].settings[:path].should == "identifier"
104
- @builder_with_block.term_builders[:journal].children[:issn].settings[:attributes].should == {:type=>"issn"}
103
+ expect(@builder_with_block.term_builders[:journal].children[:issn]).to be_instance_of OM::XML::Term::Builder
104
+ expect(@builder_with_block.term_builders[:journal].children[:issn].settings[:path]).to eq "identifier"
105
+ expect(@builder_with_block.term_builders[:journal].children[:issn].settings[:attributes]).to eq({:type=>"issn"})
105
106
  end
106
107
  it "should clip the underscore off the end of any Term names" do
107
- @builder_with_block.term_builders[:name].should be_instance_of OM::XML::Term::Builder
108
- @builder_with_block.term_builders[:name].name.should == :name
108
+ expect(@builder_with_block.term_builders[:name]).to be_instance_of OM::XML::Term::Builder
109
+ expect(@builder_with_block.term_builders[:name].name).to eq :name
109
110
 
110
- @builder_with_block.term_builders[:name].children[:date].should be_instance_of OM::XML::Term::Builder
111
- @builder_with_block.term_builders[:name].children[:date].settings[:path].should == "namePart"
112
- @builder_with_block.term_builders[:name].children[:date].settings[:attributes].should == {:type=>"date"}
111
+ expect(@builder_with_block.term_builders[:name].children[:date]).to be_instance_of OM::XML::Term::Builder
112
+ expect(@builder_with_block.term_builders[:name].children[:date].settings[:path]).to eq "namePart"
113
+ expect(@builder_with_block.term_builders[:name].children[:date].settings[:attributes]).to eq({:type=>"date"})
113
114
  end
114
115
  end
115
116
 
@@ -117,42 +118,44 @@ describe "OM::XML::Terminology::Builder" do
117
118
  it "should let you load mappings from an xml file" do
118
119
  skip
119
120
  vocab = OM::XML::Terminology.from_xml( fixture("sample_mappings.xml") )
120
- vocab.should be_instance_of OM::XML::Terminology
121
- vocab.mappers.should == {}
121
+ expect(vocab).to be_instance_of OM::XML::Terminology
122
+ expect(vocab.mappers).to eq({})
122
123
  end
123
124
  end
124
125
 
125
126
  describe ".retrieve_term_builder" do
126
127
  it "should support looking up Term Builders by pointer" do
127
128
  expected = @builder_with_block.term_builders[:name].children[:date]
128
- @builder_with_block.retrieve_term_builder(:name, :date).should == expected
129
+ expect(@builder_with_block.retrieve_term_builder(:name, :date)).to eq expected
129
130
  end
130
131
  end
131
132
 
132
133
  describe "build" do
133
134
  it "should generate the new Terminology, calling .build on its Term builders"
134
135
  it "should resolve :refs" do
135
- @builder_with_block.retrieve_term_builder(:name, :role).settings[:ref].should == [:role]
136
- @builder_with_block.retrieve_term_builder(:role).children[:text].should be_instance_of OM::XML::Term::Builder
136
+ expect(@builder_with_block.retrieve_term_builder(:name, :role).settings[:ref]).to eq [:role]
137
+ expect(@builder_with_block.retrieve_term_builder(:role).children[:text]).to be_instance_of OM::XML::Term::Builder
137
138
 
138
139
  built_terminology = @builder_with_block.build
139
140
 
140
- built_terminology.retrieve_term(:name, :role, :text).should be_instance_of OM::XML::Term
141
- built_terminology.retrieve_term(:name, :role, :text).path.should == "roleTerm"
142
- built_terminology.retrieve_term(:name, :role, :text).attributes.should == {:type=>"text"}
141
+ expect(built_terminology.retrieve_term(:name, :role, :text)).to be_instance_of OM::XML::Term
142
+ expect(built_terminology.retrieve_term(:name, :role, :text).path).to eq "roleTerm"
143
+ expect(built_terminology.retrieve_term(:name, :role, :text).attributes).to eq({:type=>"text"})
143
144
  end
144
145
  it "should put copies of the entire terminology under any root terms" do
145
- @builder_with_block.root_term_builders.should include(@builder_with_block.retrieve_term_builder(:mods))
146
+ expect(@builder_with_block.root_term_builders).to include(@builder_with_block.retrieve_term_builder(:mods))
146
147
 
147
148
  built_terminology = @builder_with_block.build
148
149
  expected_keys = [:title_info, :issue, :person, :name, :journal, :role]
149
150
 
150
- built_terminology.retrieve_term(:mods).children.length.should == expected_keys.length
151
+ expect(built_terminology.retrieve_term(:mods).children.length).to eq expected_keys.length
152
+
151
153
  expected_keys.each do |key|
152
- built_terminology.retrieve_term(:mods).children.keys.should include(key)
154
+ expect(built_terminology.retrieve_term(:mods).children.keys).to include(key)
153
155
  end
154
- built_terminology.retrieve_term(:mods, :name, :role, :text).should be_instance_of OM::XML::Term
155
- built_terminology.retrieve_term(:mods, :person, :role, :text).should be_instance_of OM::XML::Term
156
+
157
+ expect(built_terminology.retrieve_term(:mods, :name, :role, :text)).to be_instance_of OM::XML::Term
158
+ expect(built_terminology.retrieve_term(:mods, :person, :role, :text)).to be_instance_of OM::XML::Term
156
159
 
157
160
  end
158
161
  end
@@ -162,42 +165,42 @@ describe "OM::XML::Terminology::Builder" do
162
165
  skip
163
166
 
164
167
  result = @test_builder.insert_mapper(:name_, :namePart).index_as([:facetable, :searchable, :sortable, :displayable]).required(true).type(:text)
165
- @test_builder.mapper_builders(:name_, :namePart).should == result
166
- result.should be_instance_of OM::XML::Mapper::Builder
168
+ expect(@test_builder.mapper_builders(:name_, :namePart)).to eq result
169
+ expect(result).to be_instance_of OM::XML::Mapper::Builder
167
170
  end
168
171
  end
169
172
 
170
173
  describe ".root" do
171
174
  it "should accept options for the root node, such as namespace(s) and schema and those values should impact the resulting Terminology" do
172
175
  root_term_builder = @test_builder.root(:path=>"mods", :xmlns => 'one:two', 'xmlns:foo' => 'bar', :schema=>"http://www.loc.gov/standards/mods/v3/mods-3-2.xsd")
173
- root_term_builder.settings[:is_root_term].should == true
176
+ expect(root_term_builder.settings[:is_root_term]).to be true
174
177
 
175
- @test_builder.schema.should == "http://www.loc.gov/standards/mods/v3/mods-3-2.xsd"
176
- @test_builder.namespaces.should == { "oxns"=>"one:two", 'xmlns' => 'one:two', 'xmlns:foo' => 'bar' }
177
- @test_builder.term_builders[:mods].should == root_term_builder
178
+ expect(@test_builder.schema).to eq "http://www.loc.gov/standards/mods/v3/mods-3-2.xsd"
179
+ expect(@test_builder.namespaces).to eq({ "oxns"=>"one:two", 'xmlns' => 'one:two', 'xmlns:foo' => 'bar' })
180
+ expect(@test_builder.term_builders[:mods]).to eq root_term_builder
178
181
 
179
182
  terminology = @test_builder.build
180
- terminology.schema.should == "http://www.loc.gov/standards/mods/v3/mods-3-2.xsd"
181
- terminology.namespaces.should == { "oxns"=>"one:two", 'xmlns' => 'one:two', 'xmlns:foo' => 'bar' }
183
+ expect(terminology.schema).to eq "http://www.loc.gov/standards/mods/v3/mods-3-2.xsd"
184
+ expect(terminology.namespaces).to eq({ "oxns"=>"one:two", 'xmlns' => 'one:two', 'xmlns:foo' => 'bar' })
182
185
  end
183
186
  it "should create an explicit term correspoinding to the root node and pass any additional settings into that term" do
184
187
  @test_builder.root(:path=>"fwoop", :xmlns => 'one:two', 'xmlns:foo' => 'bar', :index_as=>[:not_searchable], :namespace_prefix=>"foox")
185
188
  terminology = @test_builder.build
186
189
  term = terminology.retrieve_term(:fwoop)
187
- term.should be_instance_of OM::XML::Term
188
- term.is_root_term?.should == true
189
- term.index_as.should == [:not_searchable]
190
- term.namespace_prefix.should == "foox"
190
+ expect(term).to be_instance_of OM::XML::Term
191
+ expect(term.is_root_term?).to eq true
192
+ expect(term.index_as).to eq [:not_searchable]
193
+ expect(term.namespace_prefix).to eq "foox"
191
194
  end
192
195
  it "should work within a builder block" do
193
- @builder_with_block.term_builders[:mods].settings[:is_root_term].should == true
196
+ expect(@builder_with_block.term_builders[:mods].settings[:is_root_term]).to eq true
194
197
  end
195
198
  end
196
199
 
197
200
  describe ".root_term_builders" do
198
201
  it "should return the terms that have been marked root" do
199
- @builder_with_block.root_term_builders.length.should == 1
200
- @builder_with_block.root_term_builders.first.should == @builder_with_block.term_builders[:mods]
202
+ expect(@builder_with_block.root_term_builders.length).to eq 1
203
+ expect(@builder_with_block.root_term_builders.first).to eq @builder_with_block.term_builders[:mods]
201
204
  end
202
205
  end
203
206
 
@@ -89,90 +89,90 @@ describe "OM::XML::Terminology" do
89
89
 
90
90
  describe "namespaceless terminologies" do
91
91
  it "should generate xpath queries without namespaces" do
92
- @namespaceless_terminology.xpath_for(:to).should == "//to"
93
- @namespaceless_terminology.xpath_for(:note, :from).should == "//note/from"
92
+ expect(@namespaceless_terminology.xpath_for(:to)).to eq "//to"
93
+ expect(@namespaceless_terminology.xpath_for(:note, :from)).to eq "//note/from"
94
94
  end
95
95
 
96
96
  it "should work with xml documents that have no namespaces" do
97
- @namespaceless_doc.from.first.should == "Jani"
98
- @namespaceless_doc.to.should == ["Tove"]
97
+ expect(@namespaceless_doc.from.first).to eq "Jani"
98
+ expect(@namespaceless_doc.to).to eq ["Tove"]
99
99
  end
100
100
  end
101
101
 
102
102
  describe "basics" do
103
103
 
104
104
  it "constructs xpath queries for finding properties" do
105
- @test_full_terminology.retrieve_term(:name).xpath.should == '//oxns:name'
106
- @test_full_terminology.retrieve_term(:name).xpath_relative.should == 'oxns:name'
105
+ expect(@test_full_terminology.retrieve_term(:name).xpath).to eq '//oxns:name'
106
+ expect(@test_full_terminology.retrieve_term(:name).xpath_relative).to eq 'oxns:name'
107
107
 
108
- @test_full_terminology.retrieve_term(:person).xpath.should == '//oxns:name[@type="personal"]'
109
- @test_full_terminology.retrieve_term(:person).xpath_relative.should == 'oxns:name[@type="personal"]'
110
- @test_full_terminology.retrieve_term(:person, :person_id).xpath_relative.should == 'oxns:namePart[not(@type)]'
108
+ expect(@test_full_terminology.retrieve_term(:person).xpath).to eq '//oxns:name[@type="personal"]'
109
+ expect(@test_full_terminology.retrieve_term(:person).xpath_relative).to eq 'oxns:name[@type="personal"]'
110
+ expect(@test_full_terminology.retrieve_term(:person, :person_id).xpath_relative).to eq 'oxns:namePart[not(@type)]'
111
111
  end
112
112
 
113
113
  it "should expand proxy and get sub terms" do
114
- @test_full_terminology.retrieve_node(:title, :main_title_lang).xpath.should == '//oxns:titleInfo/oxns:title/@xml:lang'
114
+ expect(@test_full_terminology.retrieve_node(:title, :main_title_lang).xpath).to eq '//oxns:titleInfo/oxns:title/@xml:lang'
115
115
  ### retrieve_term() will not cross proxies
116
- @test_full_terminology.retrieve_term(:title_info, :main_title, :main_title_lang).xpath.should == '//oxns:titleInfo/oxns:title/@xml:lang'
116
+ expect(@test_full_terminology.retrieve_term(:title_info, :main_title, :main_title_lang).xpath).to eq '//oxns:titleInfo/oxns:title/@xml:lang'
117
117
  end
118
118
 
119
119
  it "constructs templates for value-driven searches" do
120
- @test_full_terminology.retrieve_term(:name).xpath_constrained.should == '//oxns:name[contains(., "#{constraint_value}")]'.gsub('"', '\"')
121
- @test_full_terminology.retrieve_term(:person).xpath_constrained.should == '//oxns:name[@type="personal" and contains(., "#{constraint_value}")]'.gsub('"', '\"')
120
+ expect(@test_full_terminology.retrieve_term(:name).xpath_constrained).to eq '//oxns:name[contains(., "#{constraint_value}")]'.gsub('"', '\"')
121
+ expect(@test_full_terminology.retrieve_term(:person).xpath_constrained).to eq '//oxns:name[@type="personal" and contains(., "#{constraint_value}")]'.gsub('"', '\"')
122
122
 
123
123
  # Example of how you could use these templates:
124
124
  constraint_value = "SAMPLE CONSTRAINT VALUE"
125
125
  constrained_query = eval( '"' + @test_full_terminology.retrieve_term(:person).xpath_constrained + '"' )
126
- constrained_query.should == '//oxns:name[@type="personal" and contains(., "SAMPLE CONSTRAINT VALUE")]'
126
+ expect(constrained_query).to eq '//oxns:name[@type="personal" and contains(., "SAMPLE CONSTRAINT VALUE")]'
127
127
  end
128
128
 
129
129
  it "constructs xpath queries & templates for nested terms" do
130
130
  name_date_term = @test_full_terminology.retrieve_term(:name, :date)
131
- name_date_term.xpath.should == '//oxns:name/oxns:namePart[@type="date"]'
132
- name_date_term.xpath_relative.should == 'oxns:namePart[@type="date"]'
133
- name_date_term.xpath_constrained.should == '//oxns:name/oxns:namePart[@type="date" and contains(., "#{constraint_value}")]'.gsub('"', '\"')
131
+ expect(name_date_term.xpath).to eq '//oxns:name/oxns:namePart[@type="date"]'
132
+ expect(name_date_term.xpath_relative).to eq 'oxns:namePart[@type="date"]'
133
+ expect(name_date_term.xpath_constrained).to eq '//oxns:name/oxns:namePart[@type="date" and contains(., "#{constraint_value}")]'.gsub('"', '\"')
134
134
  # name_date_term.xpath_constrained.should == '//oxns:name[contains(oxns:namePart[@type="date"], "#{constraint_value}")]'.gsub('"', '\"')
135
135
 
136
136
  person_date_term = @test_full_terminology.retrieve_term(:person, :date)
137
- person_date_term.xpath.should == '//oxns:name[@type="personal"]/oxns:namePart[@type="date"]'
138
- person_date_term.xpath_relative.should == 'oxns:namePart[@type="date"]'
139
- person_date_term.xpath_constrained.should == '//oxns:name[@type="personal"]/oxns:namePart[@type="date" and contains(., "#{constraint_value}")]'.gsub('"', '\"')
137
+ expect(person_date_term.xpath).to eq '//oxns:name[@type="personal"]/oxns:namePart[@type="date"]'
138
+ expect(person_date_term.xpath_relative).to eq 'oxns:namePart[@type="date"]'
139
+ expect(person_date_term.xpath_constrained).to eq '//oxns:name[@type="personal"]/oxns:namePart[@type="date" and contains(., "#{constraint_value}")]'.gsub('"', '\"')
140
140
  # person_date_term.xpath_constrained.should == '//oxns:name[@type="personal" and contains(oxns:namePart[@type="date"], "#{constraint_value}")]'.gsub('"', '\"')
141
141
  end
142
142
 
143
143
  it "supports subelements that are specified using a :ref" do
144
144
  role_term = @test_full_terminology.retrieve_term(:name, :role)
145
- role_term.xpath.should == '//oxns:name/oxns:role'
146
- role_term.xpath_relative.should == 'oxns:role'
147
- role_term.xpath_constrained.should == '//oxns:name/oxns:role[contains(., "#{constraint_value}")]'.gsub('"', '\"')
145
+ expect(role_term.xpath).to eq '//oxns:name/oxns:role'
146
+ expect(role_term.xpath_relative).to eq 'oxns:role'
147
+ expect(role_term.xpath_constrained).to eq '//oxns:name/oxns:role[contains(., "#{constraint_value}")]'.gsub('"', '\"')
148
148
  # role_term.xpath_constrained.should == '//oxns:name[contains(oxns:role/oxns:roleTerm, "#{constraint_value}")]'.gsub('"', '\"')
149
149
  end
150
150
 
151
151
  describe "treating attributes as properties" do
152
152
  it "should build correct xpath" do
153
153
  language_term = @test_full_terminology.retrieve_term(:title_info, :language)
154
- language_term.xpath.should == '//oxns:titleInfo/@lang'
155
- language_term.xpath_relative.should == '@lang'
156
- language_term.xpath_constrained.should == '//oxns:titleInfo/@lang[contains(., "#{constraint_value}")]'.gsub('"', '\"')
154
+ expect(language_term.xpath).to eq '//oxns:titleInfo/@lang'
155
+ expect(language_term.xpath_relative).to eq '@lang'
156
+ expect(language_term.xpath_constrained).to eq '//oxns:titleInfo/@lang[contains(., "#{constraint_value}")]'.gsub('"', '\"')
157
157
  end
158
158
  end
159
159
 
160
160
  it "should support deep nesting of properties" do
161
161
  volume_term = @test_full_terminology.retrieve_term(:journal, :issue, :volume)
162
- volume_term.xpath.should == "//oxns:relatedItem[@type=\"host\"]/oxns:part/oxns:detail[@type=\"volume\"]"
163
- volume_term.xpath_relative.should == "oxns:detail[@type=\"volume\"]"
162
+ expect(volume_term.xpath).to eq "//oxns:relatedItem[@type=\"host\"]/oxns:part/oxns:detail[@type=\"volume\"]"
163
+ expect(volume_term.xpath_relative).to eq "oxns:detail[@type=\"volume\"]"
164
164
  # volume_term.xpath_constrained.should == "//oxns:part[contains(oxns:detail[@type=\\\"volume\\\"], \\\"\#{constraint_value}\\\")]"
165
- volume_term.xpath_constrained.should == '//oxns:relatedItem[@type="host"]/oxns:part/oxns:detail[@type="volume" and contains(oxns:number, "#{constraint_value}")]'.gsub('"', '\"')
165
+ expect(volume_term.xpath_constrained).to eq '//oxns:relatedItem[@type="host"]/oxns:part/oxns:detail[@type="volume" and contains(oxns:number, "#{constraint_value}")]'.gsub('"', '\"')
166
166
  end
167
167
 
168
168
  it "should not overwrite default property info when adding a variant property" do
169
169
  name_term = @test_full_terminology.retrieve_term(:name)
170
170
  person_term = @test_full_terminology.retrieve_term(:person)
171
171
 
172
- name_term.should_not equal(person_term)
173
- name_term.xpath.should_not equal(person_term.xpath)
174
- name_term.children.should_not equal(person_term.children)
175
- name_term.children[:date].xpath_constrained.should_not equal(person_term.children[:date].xpath_constrained)
172
+ expect(name_term).not_to equal(person_term)
173
+ expect(name_term.xpath).not_to equal(person_term.xpath)
174
+ expect(name_term.children).not_to equal(person_term.children)
175
+ expect(name_term.children[:date].xpath_constrained).not_to equal(person_term.children[:date].xpath_constrained)
176
176
  end
177
177
 
178
178
  end
@@ -181,60 +181,60 @@ describe "OM::XML::Terminology" do
181
181
  it "should let you load mappings from an xml file" do
182
182
  skip
183
183
  vocab = OM::XML::Terminology.from_xml( fixture("sample_mappings.xml") )
184
- vocab.should be_instance_of OM::XML::Terminology
185
- vocab.mappers.should == {}
184
+ expect(vocab).to be_instance_of OM::XML::Terminology
185
+ expect(vocab).mappers.to eq({})
186
186
  end
187
187
  end
188
188
 
189
189
  describe '#to_xml' do
190
190
  it "should let you serialize mappings to an xml document" do
191
191
  skip
192
- TerminologyTest.to_xml.should == ""
192
+ expect(TerminologyTest.to_xml).to eq("")
193
193
  end
194
194
  end
195
195
 
196
196
  describe ".has_term?" do
197
197
  it "should return true if the specified term does exist in the terminology" do
198
- @test_full_terminology.has_term?(:journal,:issue,:end_page).should be true
198
+ expect(@test_full_terminology.has_term?(:journal,:issue,:end_page)).to be true
199
199
  end
200
200
  it "should support term_pointers with array indexes in them (ignoring the indexes)" do
201
- @test_full_terminology.has_term?(:title_info, :main_title).should be true
202
- @test_full_terminology.has_term?({:title_info=>"0"}, :main_title).should be true
201
+ expect(@test_full_terminology.has_term?(:title_info, :main_title)).to be true
202
+ expect(@test_full_terminology.has_term?({:title_info=>"0"}, :main_title)).to be true
203
203
  end
204
204
  it "should return false if the specified term does not exist in the terminology" do
205
- @test_full_terminology.has_term?(:name, :date, :nonexistentTerm, :anotherTermName).should be_falsey
205
+ expect(@test_full_terminology.has_term?(:name, :date, :nonexistentTerm, :anotherTermName)).to be_falsey
206
206
  end
207
207
  end
208
208
 
209
209
  describe ".retrieve_term" do
210
210
  it "should return the mapper identified by the given pointer" do
211
211
  term = @test_terminology.retrieve_term(:name, :namePart)
212
- term.should == @test_terminology.terms[:name].children[:namePart]
213
- term.should == @test_child_term
212
+ expect(term).to eq @test_terminology.terms[:name].children[:namePart]
213
+ expect(term).to eq @test_child_term
214
214
  end
215
215
  it "should build complete terminologies" do
216
- @test_full_terminology.retrieve_term(:name, :date).should be_instance_of OM::XML::Term
217
- @test_full_terminology.retrieve_term(:name, :date).path.should == 'namePart'
218
- @test_full_terminology.retrieve_term(:name, :date).attributes.should == {:type=>"date"}
219
- @test_full_terminology.retrieve_term(:name, :affiliation).path.should == 'affiliation'
220
- @test_full_terminology.retrieve_term(:name, :date).xpath.should == '//oxns:name/oxns:namePart[@type="date"]'
216
+ expect(@test_full_terminology.retrieve_term(:name, :date)).to be_instance_of OM::XML::Term
217
+ expect(@test_full_terminology.retrieve_term(:name, :date).path).to eq 'namePart'
218
+ expect(@test_full_terminology.retrieve_term(:name, :date).attributes).to eq({:type=>"date"})
219
+ expect(@test_full_terminology.retrieve_term(:name, :affiliation).path).to eq('affiliation')
220
+ expect(@test_full_terminology.retrieve_term(:name, :date).xpath).to eq('//oxns:name/oxns:namePart[@type="date"]')
221
221
  end
222
222
  it "should support looking up variant Terms" do
223
- @test_full_terminology.retrieve_term(:person).path.should == 'name'
224
- @test_full_terminology.retrieve_term(:person).attributes.should == {:type=>"personal"}
225
- @test_full_terminology.retrieve_term(:person, :affiliation).path.should == 'affiliation'
226
- @test_full_terminology.retrieve_term(:person, :date).xpath.should == '//oxns:name[@type="personal"]/oxns:namePart[@type="date"]'
223
+ expect(@test_full_terminology.retrieve_term(:person).path).to eq('name')
224
+ expect(@test_full_terminology.retrieve_term(:person).attributes).to eq({:type=>"personal"})
225
+ expect(@test_full_terminology.retrieve_term(:person, :affiliation).path).to eq('affiliation')
226
+ expect(@test_full_terminology.retrieve_term(:person, :date).xpath).to eq('//oxns:name[@type="personal"]/oxns:namePart[@type="date"]')
227
227
  end
228
228
  it "should support including root terms in pointer" do
229
- @test_full_terminology.retrieve_term(:mods).should be_instance_of OM::XML::Term
230
- @test_full_terminology.retrieve_term(:mods, :name, :date).should be_instance_of OM::XML::Term
231
- @test_full_terminology.retrieve_term(:mods, :name, :date).path.should == 'namePart'
232
- @test_full_terminology.retrieve_term(:mods, :name, :date).attributes.should == {:type=>"date"}
233
- @test_full_terminology.retrieve_term(:mods, :name, :date).xpath.should == '//oxns:mods/oxns:name/oxns:namePart[@type="date"]'
229
+ expect(@test_full_terminology.retrieve_term(:mods)).to be_instance_of OM::XML::Term
230
+ expect(@test_full_terminology.retrieve_term(:mods, :name, :date)).to be_instance_of OM::XML::Term
231
+ expect(@test_full_terminology.retrieve_term(:mods, :name, :date).path).to eq 'namePart'
232
+ expect(@test_full_terminology.retrieve_term(:mods, :name, :date).attributes).to eq({:type=>"date"})
233
+ expect(@test_full_terminology.retrieve_term(:mods, :name, :date).xpath).to eq '//oxns:mods/oxns:name/oxns:namePart[@type="date"]'
234
234
  end
235
235
 
236
236
  it "should raise an informative error if the desired Term doesn't exist" do
237
- lambda { @test_full_terminology.retrieve_term(:name, :date, :nonexistentTerm, :anotherTermName) }.should raise_error(OM::XML::Terminology::BadPointerError, "You attempted to retrieve a Term using this pointer: [:name, :date, :nonexistentTerm, :anotherTermName] but no Term exists at that location. Everything is fine until \":nonexistentTerm\", which doesn't exist.")
237
+ expect(lambda { @test_full_terminology.retrieve_term(:name, :date, :nonexistentTerm, :anotherTermName) }).to raise_error(OM::XML::Terminology::BadPointerError, "You attempted to retrieve a Term using this pointer: [:name, :date, :nonexistentTerm, :anotherTermName] but no Term exists at that location. Everything is fine until \":nonexistentTerm\", which doesn't exist.")
238
238
  end
239
239
  end
240
240
 
@@ -244,7 +244,7 @@ describe "OM::XML::Terminology" do
244
244
  # conference_mapper = TerminologyTest.retrieve_mapper(:conference)
245
245
  # role_mapper = TerminologyTest.retrieve_mapper(:conference, :role)
246
246
  # text_mapper = TerminologyTest.retrieve_mapper(:conference, :role, :text)
247
- TerminologyTest.term_xpath({:conference=>0}, {:role=>1}, :text ).should == '//oxns:name[@type="conference"][1]/oxns:role[2]/oxns:roleTerm[@type="text"]'
247
+ expect(TerminologyTest.term_xpath({:conference=>0}, {:role=>1}, :text )).to eq '//oxns:name[@type="conference"][1]/oxns:role[2]/oxns:roleTerm[@type="text"]'
248
248
  # OM::XML::TermXpathGenerator.expects(:generate_absolute_xpath).with({conference_mapper=>0}, {role_mapper=>1}, text_mapper)
249
249
  end
250
250
  end
@@ -252,72 +252,72 @@ describe "OM::XML::Terminology" do
252
252
  describe ".xpath_for" do
253
253
 
254
254
  it "should retrieve the generated xpath query to match your desires" do
255
- @test_full_terminology.xpath_for(:person).should == '//oxns:name[@type="personal"]'
255
+ expect(@test_full_terminology.xpath_for(:person)).to eq '//oxns:name[@type="personal"]'
256
256
 
257
- @test_full_terminology.xpath_for(:person, "Beethoven, Ludwig van").should == '//oxns:name[@type="personal" and contains(., "Beethoven, Ludwig van")]'
257
+ expect(@test_full_terminology.xpath_for(:person, "Beethoven, Ludwig van")).to eq '//oxns:name[@type="personal" and contains(., "Beethoven, Ludwig van")]'
258
258
 
259
- @test_full_terminology.xpath_for(:person, :date).should == '//oxns:name[@type="personal"]/oxns:namePart[@type="date"]'
259
+ expect(@test_full_terminology.xpath_for(:person, :date)).to eq '//oxns:name[@type="personal"]/oxns:namePart[@type="date"]'
260
260
 
261
- @test_full_terminology.xpath_for(:person, :date, "2010").should == '//oxns:name[@type="personal"]/oxns:namePart[@type="date" and contains(., "2010")]'
261
+ expect(@test_full_terminology.xpath_for(:person, :date, "2010")).to eq '//oxns:name[@type="personal"]/oxns:namePart[@type="date" and contains(., "2010")]'
262
262
 
263
- @test_full_terminology.xpath_for(:person, :person_id).should == '//oxns:name[@type="personal"]/oxns:namePart[not(@type)]'
263
+ expect(@test_full_terminology.xpath_for(:person, :person_id)).to eq '//oxns:name[@type="personal"]/oxns:namePart[not(@type)]'
264
264
 
265
265
  end
266
266
 
267
267
  it "should support including root terms in term pointer" do
268
- @test_full_terminology.xpath_for(:mods, :person).should == '//oxns:mods/oxns:name[@type="personal"]'
269
- @test_full_terminology.xpath_for(:mods, :person, "Beethoven, Ludwig van").should == '//oxns:mods/oxns:name[@type="personal" and contains(., "Beethoven, Ludwig van")]'
268
+ expect(@test_full_terminology.xpath_for(:mods, :person)).to eq '//oxns:mods/oxns:name[@type="personal"]'
269
+ expect(@test_full_terminology.xpath_for(:mods, :person, "Beethoven, Ludwig van")).to eq '//oxns:mods/oxns:name[@type="personal" and contains(., "Beethoven, Ludwig van")]'
270
270
  end
271
271
 
272
272
  it "should support queries with complex constraints" do
273
273
  skip
274
- @test_full_terminology.xpath_for(:person, {:date=>"2010"}).should == '//oxns:name[@type="personal" and contains(oxns:namePart[@type="date"], "2010")]'
274
+ expect(@test_full_terminology.xpath_for(:person, {:date=>"2010"})).to eq '//oxns:name[@type="personal" and contains(oxns:namePart[@type="date"], "2010")]'
275
275
  end
276
276
 
277
277
  it "should support queries with multiple complex constraints" do
278
278
  skip
279
- @test_full_terminology.xpath_for(:person, {:role=>"donor", :last_name=>"Rockefeller"}).should == '//oxns:name[@type="personal" and contains(oxns:role/oxns:roleTerm, "donor") and contains(oxns:namePart[@type="family"], "Rockefeller")]'
279
+ expect(@test_full_terminology.xpath_for(:person, {:role=>"donor", :last_name=>"Rockefeller"})).to eq '//oxns:name[@type="personal" and contains(oxns:role/oxns:roleTerm, "donor") and contains(oxns:namePart[@type="family"], "Rockefeller")]'
280
280
  end
281
281
 
282
282
  it "should parrot any strings back to you (in case you already have an xpath query)" do
283
- @test_full_terminology.xpath_for('//oxns:name[@type="personal"]/oxns:namePart[@type="date"]').should == '//oxns:name[@type="personal"]/oxns:namePart[@type="date"]'
283
+ expect(@test_full_terminology.xpath_for('//oxns:name[@type="personal"]/oxns:namePart[@type="date"]')).to eq '//oxns:name[@type="personal"]/oxns:namePart[@type="date"]'
284
284
  end
285
285
 
286
286
  it "should traverse named term proxies transparently" do
287
287
  proxied_xpath = @test_full_terminology.xpath_for(:journal, :issue, :pages, :start)
288
- @test_full_terminology.xpath_for( :journal, :issue, :start_page ).should == proxied_xpath
288
+ expect(@test_full_terminology.xpath_for( :journal, :issue, :start_page )).to eq proxied_xpath
289
289
  end
290
290
 
291
291
  end
292
292
 
293
293
  describe ".xpath_with_indexes" do
294
294
  it "should return the xpath given in the call to #accessor" do
295
- @test_full_terminology.xpath_with_indexes( :title_info ).should == '//oxns:titleInfo'
295
+ expect(@test_full_terminology.xpath_with_indexes( :title_info )).to eq('//oxns:titleInfo')
296
296
  end
297
297
  it "should support xpath queries as argument" do
298
- @test_full_terminology.xpath_with_indexes('//oxns:name[@type="personal"][1]/oxns:namePart').should == '//oxns:name[@type="personal"][1]/oxns:namePart'
298
+ expect(@test_full_terminology.xpath_with_indexes('//oxns:name[@type="personal"][1]/oxns:namePart')).to eq '//oxns:name[@type="personal"][1]/oxns:namePart'
299
299
  end
300
300
  # Note: Ruby array indexes begin from 0. In xpath queries (which start from 1 instead of 0), this will be translated accordingly.
301
301
  it "should prepend the xpath for any parent nodes, inserting calls to xpath array lookup where necessary" do
302
- @test_full_terminology.xpath_with_indexes( {:conference=>0}, {:role=>1}, :text ).should == '//oxns:name[@type="conference"][1]/oxns:role[2]/oxns:roleTerm[@type="text"]'
302
+ expect(@test_full_terminology.xpath_with_indexes( {:conference=>0}, {:role=>1}, :text )).to eq '//oxns:name[@type="conference"][1]/oxns:role[2]/oxns:roleTerm[@type="text"]'
303
303
  end
304
304
  it "should be idempotent" do
305
- @test_full_terminology.xpath_with_indexes( *[{:title_info=>2}, :main_title] ).should == "//oxns:titleInfo[3]/oxns:title"
306
- @test_full_terminology.xpath_with_indexes( *[{:title_info=>2}, :main_title] ).should == "//oxns:titleInfo[3]/oxns:title"
307
- @test_full_terminology.xpath_with_indexes( *[{:title_info=>2}, :main_title] ).should == "//oxns:titleInfo[3]/oxns:title"
305
+ expect(@test_full_terminology.xpath_with_indexes( *[{:title_info=>2}, :main_title] )).to eq "//oxns:titleInfo[3]/oxns:title"
306
+ expect(@test_full_terminology.xpath_with_indexes( *[{:title_info=>2}, :main_title] )).to eq "//oxns:titleInfo[3]/oxns:title"
307
+ expect(@test_full_terminology.xpath_with_indexes( *[{:title_info=>2}, :main_title] )).to eq "//oxns:titleInfo[3]/oxns:title"
308
308
  end
309
309
  it "should traverse named term proxies transparently" do
310
310
  proxied_xpath = @test_full_terminology.xpath_with_indexes(:journal, :issue, :pages, :start)
311
- @test_full_terminology.xpath_with_indexes( :journal, :issue, :start_page ).should == proxied_xpath
311
+ expect(@test_full_terminology.xpath_with_indexes( :journal, :issue, :start_page )).to eq proxied_xpath
312
312
  end
313
313
  end
314
314
 
315
315
  describe "#xml_builder_template" do
316
316
 
317
317
  it "should generate a template call for passing into the builder block (assumes 'xml' as the argument for the block)" do
318
- @test_full_terminology.xml_builder_template(:person,:date).should == 'xml.namePart( \'#{builder_new_value}\', \'type\'=>\'date\' )'
319
- @test_full_terminology.xml_builder_template(:person,:person_id).should == 'xml.namePart( \'#{builder_new_value}\' )'
320
- @test_full_terminology.xml_builder_template(:name,:affiliation).should == 'xml.affiliation( \'#{builder_new_value}\' )'
318
+ expect(@test_full_terminology.xml_builder_template(:person,:date)).to eq 'xml.namePart( \'#{builder_new_value}\', \'type\'=>\'date\' )'
319
+ expect(@test_full_terminology.xml_builder_template(:person,:person_id)).to eq 'xml.namePart( \'#{builder_new_value}\' )'
320
+ expect(@test_full_terminology.xml_builder_template(:name,:affiliation)).to eq 'xml.affiliation( \'#{builder_new_value}\' )'
321
321
  end
322
322
 
323
323
  it "should accept extra options" do
@@ -326,44 +326,44 @@ describe "OM::XML::Terminology" do
326
326
  e1 = %q{xml.roleTerm( '#{builder_new_value}', 'type'=>'code', 'authority'=>'marcrelator' )}
327
327
  e2 = %q{xml.roleTerm( '#{builder_new_value}', 'authority'=>'marcrelator', 'type'=>'code' )}
328
328
  got = @test_full_terminology.xml_builder_template(:role, :code, {:attributes=>{"authority"=>"marcrelator"}} )
329
- [e1, e2].should include(got)
329
+ expect([e1, e2]).to include(got)
330
330
  got = @test_full_terminology.xml_builder_template(:person, :role, :code, {:attributes=>{"authority"=>"marcrelator"}} )
331
- [e1, e2].should include(got)
331
+ expect([e1, e2]).to include(got)
332
332
  end
333
333
 
334
334
  it "should work with deeply nested properties" do
335
- @test_full_terminology.xml_builder_template(:issue, :volume).should == "xml.detail( \'type\'=>'volume' ) { xml.number( '\#{builder_new_value}' ) }"
336
- @test_full_terminology.xml_builder_template(:journal, :issue, :level).should == "xml.detail( \'type\'=>'number' ) { xml.number( '\#{builder_new_value}' ) }"
337
- @test_full_terminology.xml_builder_template(:journal, :issue, :volume).should == "xml.detail( \'type\'=>'volume' ) { xml.number( '\#{builder_new_value}' ) }"
338
- @test_full_terminology.xml_builder_template(:journal, :issue, :pages, :start).should == "xml.start( '\#{builder_new_value}' )"
335
+ expect(@test_full_terminology.xml_builder_template(:issue, :volume)).to eq "xml.detail( \'type\'=>'volume' ) { xml.number( '\#{builder_new_value}' ) }"
336
+ expect(@test_full_terminology.xml_builder_template(:journal, :issue, :level)).to eq "xml.detail( \'type\'=>'number' ) { xml.number( '\#{builder_new_value}' ) }"
337
+ expect(@test_full_terminology.xml_builder_template(:journal, :issue, :volume)).to eq "xml.detail( \'type\'=>'volume' ) { xml.number( '\#{builder_new_value}' ) }"
338
+ expect(@test_full_terminology.xml_builder_template(:journal, :issue, :pages, :start)).to eq "xml.start( '\#{builder_new_value}' )"
339
339
  end
340
340
 
341
341
  end
342
342
 
343
343
  describe "#term_generic_name" do
344
344
  it "should generate a generic accessor name based on an array of pointers" do
345
- OM::XML::Terminology.term_generic_name( {:conference=>0}, {:role=>1}, :text ).should == "conference_role_text"
346
- OM::XML::Terminology.term_generic_name( *[{:conference=>0}, {:role=>1}, :text] ).should == "conference_role_text"
345
+ expect(OM::XML::Terminology.term_generic_name( {:conference=>0}, {:role=>1}, :text )).to eq "conference_role_text"
346
+ expect(OM::XML::Terminology.term_generic_name( *[{:conference=>0}, {:role=>1}, :text])).to eq "conference_role_text"
347
347
  end
348
348
  end
349
349
 
350
350
  describe "#term_hierarchical_name" do
351
351
  it "should generate a specific accessor name based on an array of pointers and indexes" do
352
- OM::XML::Terminology.term_hierarchical_name( {:conference=>0}, {:role=>1}, :text ).should == "conference_0_role_1_text"
353
- OM::XML::Terminology.term_hierarchical_name( *[{:conference=>0}, {:role=>1}, :text] ).should == "conference_0_role_1_text"
352
+ expect(OM::XML::Terminology.term_hierarchical_name( {:conference=>0}, {:role=>1}, :text )).to eq "conference_0_role_1_text"
353
+ expect(OM::XML::Terminology.term_hierarchical_name( *[{:conference=>0}, {:role=>1}, :text] )).to eq "conference_0_role_1_text"
354
354
  end
355
355
  end
356
356
 
357
357
  describe ".term_builders" do
358
358
  it "should return a hash terms that have been added to the root of the terminology, indexed by term name" do
359
- @test_terminology.terms[:name].should == @test_name
359
+ expect(@test_terminology.terms[:name]).to eq @test_name
360
360
  end
361
361
  end
362
362
 
363
363
  describe ".root_terms" do
364
364
  it "should return the terms that have been marked root" do
365
- @test_full_terminology.root_terms.length.should == 1
366
- @test_full_terminology.root_terms.first.should == @test_full_terminology.terms[:mods]
365
+ expect(@test_full_terminology.root_terms.length).to eq 1
366
+ expect(@test_full_terminology.root_terms.first).to eq @test_full_terminology.terms[:mods]
367
367
  end
368
368
  end
369
369