hydramata-works 0.0.1.prerelease

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.
Files changed (188) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.hound.yml +818 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +20 -0
  6. data/CONTRIBUTING.md +220 -0
  7. data/Gemfile +36 -0
  8. data/Guardfile +36 -0
  9. data/LICENSE +15 -0
  10. data/README.md +36 -0
  11. data/Rakefile +47 -0
  12. data/TODO.md +74 -0
  13. data/VISION.md +19 -0
  14. data/app/forms/hydramata/works/entity_form.rb +92 -0
  15. data/app/forms/hydramata/works/validation_service.rb +78 -0
  16. data/app/models/hydramata/works/data_definition.rb +57 -0
  17. data/app/models/hydramata/works/entities.rb +11 -0
  18. data/app/models/hydramata/works/entity.rb +75 -0
  19. data/app/models/hydramata/works/predicate.rb +35 -0
  20. data/app/models/hydramata/works/predicate_presentation_sequences/storage.rb +29 -0
  21. data/app/models/hydramata/works/predicate_set.rb +44 -0
  22. data/app/models/hydramata/works/predicate_sets/storage.rb +45 -0
  23. data/app/models/hydramata/works/predicates.rb +14 -0
  24. data/app/models/hydramata/works/predicates/storage.rb +33 -0
  25. data/app/models/hydramata/works/presentation_structure.rb +29 -0
  26. data/app/models/hydramata/works/property.rb +72 -0
  27. data/app/models/hydramata/works/property_set.rb +89 -0
  28. data/app/models/hydramata/works/validations.rb +6 -0
  29. data/app/models/hydramata/works/value.rb +34 -0
  30. data/app/models/hydramata/works/work_type.rb +49 -0
  31. data/app/models/hydramata/works/work_types.rb +14 -0
  32. data/app/models/hydramata/works/work_types/storage.rb +42 -0
  33. data/app/parsers/hydramata/works/datastream_parser.rb +36 -0
  34. data/app/parsers/hydramata/works/datastream_parsers/rdf_ntriples_parser.rb +60 -0
  35. data/app/parsers/hydramata/works/datastream_parsers/simple_xml_parser.rb +27 -0
  36. data/app/parsers/hydramata/works/predicate_parser.rb +31 -0
  37. data/app/parsers/hydramata/works/predicate_parsers/simple_parser.rb +13 -0
  38. data/app/parsers/hydramata/works/validations_parser.rb +22 -0
  39. data/app/parsers/hydramata/works/value_parser.rb +26 -0
  40. data/app/parsers/hydramata/works/value_parsers.rb +27 -0
  41. data/app/parsers/hydramata/works/value_parsers/date_parser.rb +13 -0
  42. data/app/parsers/hydramata/works/value_parsers/interrogation_parser.rb +18 -0
  43. data/app/parsers/hydramata/works/value_parsers/simple_parser.rb +14 -0
  44. data/app/presenters/hydramata/works/base_presenter.rb +146 -0
  45. data/app/presenters/hydramata/works/dom_attributes_builder.rb +24 -0
  46. data/app/presenters/hydramata/works/entity_presenter.rb +67 -0
  47. data/app/presenters/hydramata/works/fieldset_presenter.rb +54 -0
  48. data/app/presenters/hydramata/works/property_presenter.rb +51 -0
  49. data/app/presenters/hydramata/works/value_presenter.rb +60 -0
  50. data/app/renderers/hydramata/works/entity_renderer.rb +45 -0
  51. data/app/views/hydramata/works/fieldsets/_edit.html.erb +4 -0
  52. data/app/views/hydramata/works/fieldsets/_show.html.erb +8 -0
  53. data/app/views/hydramata/works/fieldsets/_show.json.jbuilder +8 -0
  54. data/app/views/hydramata/works/properties/_edit.html.erb +12 -0
  55. data/app/views/hydramata/works/properties/_show.html.erb +3 -0
  56. data/app/views/hydramata/works/properties/_show.json.jbuilder +1 -0
  57. data/app/views/hydramata/works/works/_edit.html.erb +8 -0
  58. data/app/views/hydramata/works/works/_new.html.erb +8 -0
  59. data/app/views/hydramata/works/works/_show.html.erb +3 -0
  60. data/app/views/hydramata/works/works/_show.json.jbuilder +13 -0
  61. data/app/wranglers/hydramata/works/fedora_wrangler.rb +66 -0
  62. data/bin/rails +12 -0
  63. data/db/migrate/20140606132349_create_hydramata_work_predicates.rb +13 -0
  64. data/db/migrate/20140606132350_create_hydramata_work_types.rb +9 -0
  65. data/db/migrate/20140606132351_create_hydramata_work_predicate_sets.rb +13 -0
  66. data/db/migrate/20140606132352_create_hydramata_work_predicate_presentation_sequences.rb +12 -0
  67. data/db/migrate/20140623200635_add_validations_to_predicates.rb +5 -0
  68. data/db/migrate/20140627134133_adding_item_type_schema_dot_org_to_work_type.rb +5 -0
  69. data/db/migrate/20140627140840_adding_item_prop_schema_dot_org_to_predicate.rb +5 -0
  70. data/db/seeds.rb +36 -0
  71. data/documents/administrative-set-strawperson.md +45 -0
  72. data/documents/diagrams/hydramata-refactor-tasks.dot +88 -0
  73. data/documents/diagrams/hydramata-sip-dip-aip.dot +88 -0
  74. data/documents/diagrams/hydramata-work-architecture.dot +129 -0
  75. data/documents/diagrams/hydramata-work-subcomponents.dot +36 -0
  76. data/documents/diagrams/map-from-database-to-work-object.dot +44 -0
  77. data/documents/diagrams/map-from-fedora-to-work-object.dot +51 -0
  78. data/documents/diagrams/map-from-input-to-work-object.dot +37 -0
  79. data/documents/diagrams/map-from-work-object-to-database.dot +31 -0
  80. data/documents/diagrams/work-rendering.dot +53 -0
  81. data/documents/diagrams/work-structure.dot +32 -0
  82. data/documents/handling-work.md +224 -0
  83. data/documents/high-level-stories.md +105 -0
  84. data/documents/hydramata-components.md +82 -0
  85. data/documents/interface-between-work-and-permissions.md +131 -0
  86. data/documents/interface-between-work-and-workflow.md +6 -0
  87. data/documents/timeline.md +75 -0
  88. data/fs +3 -0
  89. data/gemfiles/rails4.1.gemfile +12 -0
  90. data/gemfiles/rails4.gemfile +13 -0
  91. data/hydramata-works.gemspec +43 -0
  92. data/lib/hydramata-works.rb +23 -0
  93. data/lib/hydramata/works/conversions.rb +21 -0
  94. data/lib/hydramata/works/conversions/exceptions.rb +18 -0
  95. data/lib/hydramata/works/conversions/predicate.rb +22 -0
  96. data/lib/hydramata/works/conversions/predicate_set.rb +28 -0
  97. data/lib/hydramata/works/conversions/presented_fieldsets.rb +28 -0
  98. data/lib/hydramata/works/conversions/presenter.rb +13 -0
  99. data/lib/hydramata/works/conversions/property.rb +31 -0
  100. data/lib/hydramata/works/conversions/property_set.rb +23 -0
  101. data/lib/hydramata/works/conversions/translation_key_fragment.rb +20 -0
  102. data/lib/hydramata/works/conversions/value.rb +20 -0
  103. data/lib/hydramata/works/conversions/work_type.rb +26 -0
  104. data/lib/hydramata/works/engine.rb +31 -0
  105. data/lib/hydramata/works/linters.rb +99 -0
  106. data/lib/hydramata/works/linters/implement_data_definition_interface_matcher.rb +17 -0
  107. data/lib/hydramata/works/linters/implement_entity_interface_matcher.rb +16 -0
  108. data/lib/hydramata/works/linters/implement_predicate_interface_matcher.rb +17 -0
  109. data/lib/hydramata/works/linters/implement_predicate_set_interface_matcher.rb +8 -0
  110. data/lib/hydramata/works/linters/implement_property_set_interface_matcher.rb +8 -0
  111. data/lib/hydramata/works/linters/implement_value_interface_matcher.rb +8 -0
  112. data/lib/hydramata/works/linters/implement_work_type_interface_matcher.rb +13 -0
  113. data/lib/hydramata/works/linters/interface_matcher_builder.rb +36 -0
  114. data/lib/hydramata/works/translator.rb +67 -0
  115. data/lib/hydramata/works/version.rb +5 -0
  116. data/lib/hydramata_works.rb +2 -0
  117. data/lib/tasks/hydramata_work_tasks.rake +4 -0
  118. data/run_each_spec_in_isolation +16 -0
  119. data/run_each_spec_in_isolation.txt +110 -0
  120. data/script/analyzer.rb +124 -0
  121. data/script/fast_specs +22 -0
  122. data/spec/features/fedora_to_in_memory_spec.rb +60 -0
  123. data/spec/features/format_and_view_path_overrides_spec.rb +72 -0
  124. data/spec/features/in_memory_to_output_buffer_spec.rb +109 -0
  125. data/spec/features/instantiate_entity_from_persisted_work_type_spec.rb +26 -0
  126. data/spec/features/new_user_input_to_in_memory_spec.rb +75 -0
  127. data/spec/features/translation_services_spec.rb +107 -0
  128. data/spec/features/validate_entity_based_on_work_type_structure_spec.rb +19 -0
  129. data/spec/fixtures/cassettes/fedora-object.yml +299 -0
  130. data/spec/fixtures/translations.yml +20 -0
  131. data/spec/forms/hydramata/works/entity_form_spec.rb +83 -0
  132. data/spec/forms/hydramata/works/validation_service_spec.rb +32 -0
  133. data/spec/lib/hydramata-work_spec.rb +14 -0
  134. data/spec/lib/hydramata/works/conversions/predicate_set_spec.rb +50 -0
  135. data/spec/lib/hydramata/works/conversions/predicate_spec.rb +43 -0
  136. data/spec/lib/hydramata/works/conversions/presented_fieldsets_spec.rb +52 -0
  137. data/spec/lib/hydramata/works/conversions/presenter_spec.rb +22 -0
  138. data/spec/lib/hydramata/works/conversions/property_set_spec.rb +42 -0
  139. data/spec/lib/hydramata/works/conversions/property_spec.rb +68 -0
  140. data/spec/lib/hydramata/works/conversions/translation_key_fragment_spec.rb +45 -0
  141. data/spec/lib/hydramata/works/conversions/value_spec.rb +36 -0
  142. data/spec/lib/hydramata/works/conversions/work_type_spec.rb +55 -0
  143. data/spec/lib/hydramata/works/translator_spec.rb +81 -0
  144. data/spec/models/hydramata/works/data_definition_spec.rb +53 -0
  145. data/spec/models/hydramata/works/entity_spec.rb +50 -0
  146. data/spec/models/hydramata/works/predicate_presentation_sequences/storage_spec.rb +15 -0
  147. data/spec/models/hydramata/works/predicate_set_spec.rb +63 -0
  148. data/spec/models/hydramata/works/predicate_sets/storage_spec.rb +37 -0
  149. data/spec/models/hydramata/works/predicate_spec.rb +16 -0
  150. data/spec/models/hydramata/works/predicates/storage_spec.rb +78 -0
  151. data/spec/models/hydramata/works/predicates_spec.rb +18 -0
  152. data/spec/models/hydramata/works/presentation_structure_spec.rb +27 -0
  153. data/spec/models/hydramata/works/property_set_spec.rb +135 -0
  154. data/spec/models/hydramata/works/property_spec.rb +74 -0
  155. data/spec/models/hydramata/works/value_spec.rb +61 -0
  156. data/spec/models/hydramata/works/work_type_spec.rb +45 -0
  157. data/spec/models/hydramata/works/work_types/storage_spec.rb +74 -0
  158. data/spec/models/hydramata/works/work_types_spec.rb +16 -0
  159. data/spec/parsers/hydramata/works/datastream_parser_spec.rb +29 -0
  160. data/spec/parsers/hydramata/works/datastream_parsers/rdf_ntriples_parser_spec.rb +65 -0
  161. data/spec/parsers/hydramata/works/datastream_parsers/simple_xml_parser_spec.rb +37 -0
  162. data/spec/parsers/hydramata/works/predicate_parser_spec.rb +30 -0
  163. data/spec/parsers/hydramata/works/predicate_parsers/simple_parser_spec.rb +20 -0
  164. data/spec/parsers/hydramata/works/validations_parser_spec.rb +31 -0
  165. data/spec/parsers/hydramata/works/value_parser_spec.rb +22 -0
  166. data/spec/parsers/hydramata/works/value_parsers/simple_parser_spec.rb +20 -0
  167. data/spec/parsers/hydramata/works/value_parsers_spec.rb +36 -0
  168. data/spec/presenters/hydramata/works/base_presenter_spec.rb +111 -0
  169. data/spec/presenters/hydramata/works/dom_attributes_builder_spec.rb +26 -0
  170. data/spec/presenters/hydramata/works/entity_presenter_spec.rb +51 -0
  171. data/spec/presenters/hydramata/works/fieldset_presenter_spec.rb +58 -0
  172. data/spec/presenters/hydramata/works/property_presenter_spec.rb +42 -0
  173. data/spec/presenters/hydramata/works/value_presenter_spec.rb +49 -0
  174. data/spec/renderers/hydramata/works/entity_renderer_spec.rb +25 -0
  175. data/spec/spec_active_record_helper.rb +30 -0
  176. data/spec/spec_fast_helper.rb +12 -0
  177. data/spec/spec_slow_helper.rb +56 -0
  178. data/spec/spec_view_helper.rb +14 -0
  179. data/spec/test_app_templates/lib/generators/test_app_generator.rb +21 -0
  180. data/spec/views/hydramata/works/fieldsets/_edit.html.erb_spec.rb +29 -0
  181. data/spec/views/hydramata/works/fieldsets/_show.html.erb_spec.rb +25 -0
  182. data/spec/views/hydramata/works/properties/_edit.html.erb_spec.rb +22 -0
  183. data/spec/views/hydramata/works/properties/_show.html.erb_spec.rb +22 -0
  184. data/spec/views/hydramata/works/works/_edit.html.erb_spec.rb +23 -0
  185. data/spec/views/hydramata/works/works/_new.html.erb_spec.rb +23 -0
  186. data/spec/views/hydramata/works/works/_show.html.erb_spec.rb +24 -0
  187. data/spec/wranglers/hydramata/works/fedora_wrangler_spec.rb +26 -0
  188. metadata +466 -0
@@ -0,0 +1,109 @@
1
+ require 'spec_slow_helper'
2
+
3
+ module Hydramata
4
+ module Works
5
+ describe 'An entity and presentation structure' do
6
+ context 'renders :show action' do
7
+ let(:presentation_context) { :show }
8
+
9
+ it 'as a well-structured HTML document' do
10
+ renderer = EntityRenderer.new(entity: entity_presenter, format: :html)
11
+ rendered_output = renderer.render
12
+
13
+ expect(rendered_output).to have_tag('.work') do
14
+ with_tag('.required .title.label', text: 'title')
15
+ with_tag('.required .title.value', text: 'Hello')
16
+ with_tag('.required .title.value', text: 'World')
17
+ with_tag('.required .title.value', text: 'Bang!')
18
+ with_tag('.optional .abstract.label', text: 'abstract')
19
+ with_tag('.optional .abstract.value', text: 'Long Text')
20
+ with_tag('.optional .abstract.value', text: 'Longer Text')
21
+ with_tag('.optional .keyword.label', text: 'keyword')
22
+ with_tag('.optional .keyword.value', text: 'Programming')
23
+ end
24
+ end
25
+
26
+ it 'as a JSON document' do
27
+ renderer = EntityRenderer.new(entity: entity_presenter, format: :json)
28
+ output = renderer.render
29
+ json = JSON.parse(output)
30
+ expect(json['work'].keys.sort).to eq(['properties', 'work_type'])
31
+
32
+ expect(json['work']['work_type']).to eq(entity_presenter.work_type.to_s)
33
+ expect(json['work']['properties'].keys).to eq(['title', 'abstract', 'keyword'])
34
+ expect(json['work']['properties']['title']).to eq(['Hello', 'World', 'Bang!'])
35
+ expect(json['work']['properties']['abstract']).to eq(['Long Text', 'Longer Text'])
36
+ expect(json['work']['properties']['keyword']).to eq(['Programming'])
37
+ end
38
+ end
39
+
40
+ context 'renders :edit action' do
41
+ let(:presentation_context) { :edit }
42
+
43
+ it 'as a well-structured HTML document' do
44
+ renderer = EntityRenderer.new(entity: entity_presenter, format: :html)
45
+ rendered_output = renderer.render
46
+
47
+ expect(rendered_output).to have_tag('form.edit-special-work-type', with: { method: 'post', action: '/' }) do
48
+ with_tag('input', with: { name: '_method', value: 'patch' } )
49
+ with_tag('fieldset.required caption', text: 'required')
50
+ with_tag('fieldset.required .title label', text: 'title')
51
+ with_tag('fieldset.required .title .values input', value: 'Hello', with: { name: 'work[title][]' })
52
+ with_tag('fieldset.required .title .values input', value: 'World', with: { name: 'work[title][]' })
53
+ with_tag('fieldset.required .title .values input', value: 'Bang!', with: { name: 'work[title][]' })
54
+ with_tag('fieldset.required .title .values input', value: '', with: { name: 'work[title][]' })
55
+ with_tag('fieldset.optional caption', text: 'optional')
56
+ with_tag('fieldset.optional .abstract label', text: 'abstract')
57
+ with_tag('fieldset.optional .abstract .values input', value: 'Long Text', with: { name: 'work[abstract][]' })
58
+ with_tag('fieldset.optional .abstract .values input', value: 'Longer Text', with: { name: 'work[abstract][]' })
59
+ with_tag('fieldset.optional .abstract .values input', value: '', with: { name: 'work[abstract][]' })
60
+ with_tag('fieldset.optional .keyword label', text: 'keyword')
61
+ with_tag('fieldset.optional .keyword .values input', value: 'Programming', with: { name: 'work[keyword][]' })
62
+ with_tag('fieldset.optional .keyword .values input', value: '', with: { name: 'work[keyword][]' })
63
+ end
64
+ end
65
+ end
66
+
67
+ let(:predicate_title) { Predicates::Storage.new(identity: 'title') }
68
+ let(:predicate_abstract) { Predicates::Storage.new(identity: 'abstract') }
69
+ let(:predicate_keyword) { Predicates::Storage.new(identity: 'keyword') }
70
+ let(:work_type) { WorkTypes::Storage.new(identity: 'Special Work Type') }
71
+ let(:predicate_set_required) { PredicateSets::Storage.new(identity: 'required', work_type: work_type, presentation_sequence: 1) }
72
+ let(:predicate_set_optional) { PredicateSets::Storage.new(identity: 'optional', work_type: work_type, presentation_sequence: 2) }
73
+
74
+ before do
75
+ predicate_title.save!
76
+ predicate_abstract.save!
77
+ predicate_keyword.save!
78
+ work_type.save!
79
+ predicate_set_optional.save!
80
+ predicate_set_required.save!
81
+ PredicatePresentationSequences::Storage.create!(predicate: predicate_title, predicate_set: predicate_set_required, presentation_sequence: 1)
82
+ PredicatePresentationSequences::Storage.create!(predicate: predicate_abstract, predicate_set: predicate_set_optional, presentation_sequence: 1)
83
+ PredicatePresentationSequences::Storage.create!(predicate: predicate_keyword, predicate_set: predicate_set_optional, presentation_sequence: 2)
84
+ end
85
+
86
+ let(:entity) do
87
+ Entity.new do |entity|
88
+ entity.work_type = work_type
89
+ entity.properties << { predicate: predicate_title, value: 'Hello' }
90
+ entity.properties << { predicate: predicate_title, value: 'World' }
91
+ entity.properties << { predicate: predicate_title, value: 'Bang!' }
92
+ entity.properties << { predicate: predicate_abstract, value: 'Long Text' }
93
+ entity.properties << { predicate: predicate_abstract, value: 'Longer Text' }
94
+ entity.properties << { predicate: predicate_keyword, value: 'Programming' }
95
+ end
96
+ end
97
+
98
+ let(:presentation_context) { :show }
99
+
100
+ let(:entity_presenter) do
101
+ EntityPresenter.new(
102
+ entity: entity,
103
+ presentation_context: presentation_context
104
+ )
105
+ end
106
+
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_slow_helper'
2
+
3
+ module Hydramata
4
+ module Works
5
+ describe 'instantiate entity from persisted work type' do
6
+ before do
7
+ @article = Hydramata::Works::WorkTypes::Storage.create!(identity: 'article', name_for_application_usage: 'article')
8
+ @predicate_set = Hydramata::Works::PredicateSets::Storage.create!(identity: 'required', work_type: @article, presentation_sequence: 1, name_for_application_usage: 'required')
9
+ @title_predicate = Hydramata::Works::Predicates::Storage.create!(identity: "http://purl.org/dc/terms/dc_title", name_for_application_usage: 'title')
10
+ @predicate_set.predicate_presentation_sequences.create!(presentation_sequence: 1, predicate: @title_predicate)
11
+ @alternate_predicate = Hydramata::Works::Predicates::Storage.create!(identity: "http://purl.org/dc/terms/dc_alternate", name_for_application_usage: 'alternate')
12
+ @predicate_set.predicate_presentation_sequences.create!(presentation_sequence: 2, predicate: @alternate_predicate)
13
+ end
14
+
15
+ let(:work) do
16
+ Entity.new(work_type: 'article') do |work|
17
+ work.properties << Property.new(predicate: 'http://purl.org/dc/terms/dc_title', values: ["Hello", "World"])
18
+ end
19
+ end
20
+
21
+ it 'should have #fieldsets' do
22
+ expect(work.work_type.fieldsets.size).to eq(1)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,75 @@
1
+ require 'spec_active_record_helper'
2
+ require 'hydramata/works/entity'
3
+ require 'hydramata/works/work_types/storage'
4
+ require 'hydramata/works/conversions/work_type'
5
+ require 'hydramata/works/conversions/property'
6
+
7
+ module Hydramata
8
+ module Works
9
+ class UserInputToEntityCoercer
10
+ def self.call(collaborators = {})
11
+ new(collaborators).call
12
+ end
13
+ attr_reader :input, :entity
14
+ def initialize(collaborators = {})
15
+ @input = collaborators.fetch(:input)
16
+ @entity = collaborators.fetch(:entity)
17
+ end
18
+
19
+ def call
20
+ entity.work_type = input.fetch(:work_type)
21
+ input.each do |predicate, values|
22
+ next if predicate.to_s == 'work_type'
23
+ entity.properties << { predicate: predicate, values: values }
24
+ end
25
+ entity
26
+ end
27
+ end
28
+
29
+ describe 'New user input to in memory' do
30
+ include Conversions
31
+
32
+ it 'should create an appropriate object' do
33
+ UserInputToEntityCoercer.call(entity: entity, input: input.fetch(:work))
34
+
35
+ expect(entity.work_type).to eq(WorkType('Special Work Type'))
36
+ expect(entity.properties.fetch(:title)).to eq(Property(:title, 'Hello', 'World', 'Bang!'))
37
+ expect(entity.properties.fetch(:abstract)).to eq(Property(:abstract, 'Long Text', 'Longer Text'))
38
+ expect(entity.properties.fetch(:keyword)).to eq(Property(:keyword, 'Programming'))
39
+ end
40
+
41
+ let(:input) do
42
+ {
43
+ work: {
44
+ work_type: 'Special Work Type',
45
+ title: ['Hello', 'World', 'Bang!'],
46
+ abstract: ['Long Text', 'Longer Text'],
47
+ keyword: ['Programming']
48
+ }
49
+ }
50
+ end
51
+
52
+ let(:predicate_title) { Predicates::Storage.new(identity: 'title') }
53
+ let(:predicate_abstract) { Predicates::Storage.new(identity: 'abstract') }
54
+ let(:predicate_keyword) { Predicates::Storage.new(identity: 'keyword') }
55
+ let(:work_type) { WorkTypes::Storage.new(identity: 'Special Work Type') }
56
+ let(:predicate_set_required) { PredicateSets::Storage.new(identity: 'required', work_type: work_type, presentation_sequence: 1) }
57
+ let(:predicate_set_optional) { PredicateSets::Storage.new(identity: 'optional', work_type: work_type, presentation_sequence: 2) }
58
+
59
+ before do
60
+ predicate_title.save!
61
+ predicate_abstract.save!
62
+ predicate_keyword.save!
63
+ work_type.save!
64
+ predicate_set_optional.save!
65
+ predicate_set_required.save!
66
+ PredicatePresentationSequences::Storage.create!(predicate: predicate_title, predicate_set: predicate_set_required, presentation_sequence: 1)
67
+ PredicatePresentationSequences::Storage.create!(predicate: predicate_abstract, predicate_set: predicate_set_optional, presentation_sequence: 1)
68
+ PredicatePresentationSequences::Storage.create!(predicate: predicate_keyword, predicate_set: predicate_set_optional, presentation_sequence: 2)
69
+ end
70
+
71
+ let(:entity) { Entity.new }
72
+
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,107 @@
1
+ require 'spec_fast_helper'
2
+ require 'hydramata/works/conversions/property_set'
3
+ require 'hydramata/works/conversions/property'
4
+ require 'hydramata/works/entity'
5
+ require 'hydramata/works/entity_presenter'
6
+ require 'hydramata/works/property_presenter'
7
+ require 'hydramata/works/fieldset_presenter'
8
+
9
+ module Hydramata
10
+ module Works
11
+ describe 'translation services' do
12
+ include Conversions
13
+ let(:entity) { Entity.new {|e| e.work_type = work_type } }
14
+
15
+ context 'for entities' do
16
+ let(:presenter) { EntityPresenter.new(entity: entity, presentation_structure: nil) }
17
+ context 'with existing work type translations' do
18
+ let(:work_type) { 'Work Type Translated' }
19
+ it 'translates its :name from the lookup table' do
20
+ expect(presenter.t(:name)).to eq('I Am a Translated Work Type!')
21
+ end
22
+ end
23
+ context 'with :name_for_application_usage set' do
24
+ let(:work_type) { WorkType.new(identity: 'Work Type Translated', name_for_application_usage: 'Work Type with Translated Name') }
25
+ it 'translates its :name from the lookup table' do
26
+ expect(presenter.t(:name)).to eq('I Am Translating the Name for Application Usage!')
27
+ end
28
+ end
29
+ context 'without existing work type translations' do
30
+ let(:work_type) { 'Non-Translated Work Type' }
31
+ it 'translates its :name by using the work type directly' do
32
+ expect(presenter.t(:name)).to eq('Non-Translated Work Type')
33
+ end
34
+ end
35
+ end
36
+
37
+ context 'for property_sets' do
38
+ let(:presenter) { FieldsetPresenter.new(entity: entity, fieldset: fieldset) }
39
+ context 'with existing property set and work type translations' do
40
+ let(:fieldset) { PropertySet(identity: 'Property Set Translated') }
41
+ let(:work_type) { 'Work Type Translated' }
42
+ it 'translates its :name from the lookup table' do
43
+ expect(presenter.t(:name)).to eq('I Am a Translated Property Set for a Translated Work Type!')
44
+ end
45
+ end
46
+ context 'with existing property set but not work type translations' do
47
+ let(:fieldset) { PropertySet(identity: 'Property Set Translated') }
48
+ let(:work_type) { 'Non-Translated Work Type' }
49
+ it 'translates its :name' do
50
+ expect(presenter.t(:name)).to eq('I Am a Translated Property Set with a non-Translated Work Type!')
51
+ end
52
+ end
53
+
54
+ context 'without property set translations' do
55
+ let(:fieldset) { PropertySet(identity: 'Non-Translated Property Set') }
56
+ let(:work_type) { 'Non-Translated Work Type' }
57
+ it 'translates its :name by using the work type directly' do
58
+ expect(presenter.t(:name)).to eq('Non-Translated Property Set')
59
+ end
60
+ end
61
+ end
62
+
63
+ context 'for properts' do
64
+ let(:presenter) { PropertyPresenter.new(entity: entity, fieldset: fieldset, property: property) }
65
+ context 'with existing property and work type translations' do
66
+ let(:fieldset) { PropertySet(identity: 'Property Set Translated') }
67
+ let(:property) { Property('Property Translated') }
68
+ let(:work_type) { 'Work Type Translated' }
69
+ it 'translates its :name from the lookup table' do
70
+ expect(presenter.t(:name)).to eq('I Am a Translated Property for a Translated Work Type!')
71
+ end
72
+ end
73
+ context 'with existing property but not property set translations' do
74
+ let(:fieldset) { PropertySet(identity: 'Non-Translated Property Set') }
75
+ let(:property) { Property('Property Translated') }
76
+ let(:work_type) { 'Non-Translated Work Type' }
77
+ it 'translates its :name' do
78
+ expect(presenter.t(:name)).to eq('I Am a Translated Property with a non-Translated Work Type!')
79
+ end
80
+ end
81
+
82
+ context 'without property translations' do
83
+ let(:fieldset) { PropertySet(identity: 'Non-Translated Property Set') }
84
+ let(:property) { Property('Non-Translated Property') }
85
+ let(:work_type) { 'Non-Translated Work Type' }
86
+ it 'translates its :name by using the work type directly' do
87
+ expect(presenter.t(:name)).to eq('Non-Translated Property')
88
+ end
89
+ end
90
+ end
91
+
92
+ around do |example|
93
+ begin
94
+ # @TODO - The structure of the hash is not ideal. The order of keys is
95
+ # somewhat counter-intuitive.
96
+ old_backend = I18n.backend
97
+ I18n.backend = old_backend.clone
98
+ translations = Psych.load_file(File.expand_path('../../fixtures/translations.yml', __FILE__))
99
+ I18n.backend.store_translations(:en, translations.fetch('en'))
100
+ example.run
101
+ ensure
102
+ I18n.backend = old_backend
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_slow_helper'
2
+ module Hydramata
3
+ module Works
4
+ describe 'validate entity based on work type structure' do
5
+ let(:predicate) { Predicate.new(identity: 'title', validations: '{"presence": true}') }
6
+ let(:entity) do
7
+ Entity.new(work_type: 'article') do |work|
8
+ work.properties << Property.new(predicate: predicate, values: [])
9
+ end
10
+ end
11
+ let(:form) { EntityForm.new(entity) }
12
+
13
+ it 'should enforce validations' do
14
+ expect(form.valid?).to be_falsey
15
+ expect(form.errors.size).to eq(1)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,299 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://fedoraAdmin:fedoraAdmin@127.0.0.1:8983/fedora/objects/und:f4752f8687n?format=xml
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - '*/*; q=0.5, application/xml'
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Expires:
22
+ - Thu, 01-Jan-1970 00:00:00 GMT
23
+ Set-Cookie:
24
+ - JSESSIONID=17248nboq3adn1ovrh9esgyzq3;Path=/fedora
25
+ Content-Type:
26
+ - text/xml
27
+ Date:
28
+ - Mon, 02 Jun 2014 17:52:45 GMT
29
+ Content-Length:
30
+ - '977'
31
+ Server:
32
+ - Jetty(6.1-SNAPSHOT)
33
+ body:
34
+ encoding: UTF-8
35
+ string: <?xml version="1.0" encoding="UTF-8"?><objectProfile xmlns="http://www.fedora.info/definitions/1/0/access/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
36
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.fedora.info/definitions/1/0/access/
37
+ http://www.fedora.info/definitions/1/0/objectProfile.xsd" pid="und:f4752f8687n"
38
+ ><objLabel></objLabel><objOwnerId>fedoraAdmin</objOwnerId><objModels><model>info:fedora/afmodel:SeniorThesis</model><model>info:fedora/fedora-system:FedoraObject-3.0</model></objModels><objCreateDate>2014-06-02T17:52:44.573Z</objCreateDate><objLastModDate>2014-06-02T17:52:45.371Z</objLastModDate><objDissIndexViewURL>http://localhost:8983/fedora/objects/und%3Af4752f8687n/methods/fedora-system%3A3/viewMethodIndex</objDissIndexViewURL><objItemIndexViewURL>http://localhost:8983/fedora/objects/und%3Af4752f8687n/methods/fedora-system%3A3/viewItemIndex</objItemIndexViewURL><objState>A</objState></objectProfile>
39
+ http_version:
40
+ recorded_at: Mon, 02 Jun 2014 17:52:45 GMT
41
+ - request:
42
+ method: get
43
+ uri: http://fedoraAdmin:fedoraAdmin@127.0.0.1:8983/fedora/objects/und:f4752f8687n/datastreams?format=xml&profiles=true
44
+ body:
45
+ encoding: US-ASCII
46
+ string: ''
47
+ headers:
48
+ Accept:
49
+ - '*/*; q=0.5, application/xml'
50
+ Accept-Encoding:
51
+ - gzip, deflate
52
+ User-Agent:
53
+ - Ruby
54
+ response:
55
+ status:
56
+ code: 200
57
+ message: OK
58
+ headers:
59
+ Expires:
60
+ - Thu, 01-Jan-1970 00:00:00 GMT
61
+ Set-Cookie:
62
+ - JSESSIONID=b0hi4btwr340vontqipg8f8;Path=/fedora
63
+ Content-Type:
64
+ - text/xml
65
+ Date:
66
+ - Mon, 02 Jun 2014 17:52:45 GMT
67
+ Content-Length:
68
+ - '4066'
69
+ Server:
70
+ - Jetty(6.1-SNAPSHOT)
71
+ body:
72
+ encoding: UTF-8
73
+ string: <?xml version="1.0" encoding="UTF-8"?><objectDatastreams xmlns="http://www.fedora.info/definitions/1/0/access/"
74
+ xmlns:apim="http://www.fedora.info/definitions/1/0/management/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
75
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.fedora.info/definitions/1/0/access/
76
+ http://localhost:8983/fedora/schema/listDatastreams.xsd" pid="und:f4752f8687n" baseURL="http://localhost:8983/fedora/"
77
+ ><datastreamProfile pid="und:f4752f8687n" dsID="DC" ><apim:dsLabel>Dublin
78
+ Core Record for this object</apim:dsLabel><apim:dsVersionID>DC1.0</apim:dsVersionID><apim:dsCreateDate>2014-06-02T17:52:44.573Z</apim:dsCreateDate><apim:dsState>A</apim:dsState><apim:dsMIME>text/xml</apim:dsMIME><apim:dsFormatURI>http://www.openarchives.org/OAI/2.0/oai_dc/</apim:dsFormatURI><apim:dsControlGroup>X</apim:dsControlGroup><apim:dsSize>344</apim:dsSize><apim:dsVersionable>true</apim:dsVersionable><apim:dsInfoType></apim:dsInfoType><apim:dsLocation>und:f4752f8687n+DC+DC1.0</apim:dsLocation><apim:dsLocationType></apim:dsLocationType><apim:dsChecksumType>DISABLED</apim:dsChecksumType><apim:dsChecksum>none</apim:dsChecksum></datastreamProfile><datastreamProfile
79
+ pid="und:f4752f8687n" dsID="RELS-EXT" ><apim:dsLabel>Fedora Object-to-Object
80
+ Relationship Metadata</apim:dsLabel><apim:dsVersionID>RELS-EXT.0</apim:dsVersionID><apim:dsCreateDate>2014-06-02T17:52:44.744Z</apim:dsCreateDate><apim:dsState>A</apim:dsState><apim:dsMIME>application/rdf+xml</apim:dsMIME><apim:dsFormatURI></apim:dsFormatURI><apim:dsControlGroup>X</apim:dsControlGroup><apim:dsSize>317</apim:dsSize><apim:dsVersionable>true</apim:dsVersionable><apim:dsInfoType></apim:dsInfoType><apim:dsLocation>und:f4752f8687n+RELS-EXT+RELS-EXT.0</apim:dsLocation><apim:dsLocationType></apim:dsLocationType><apim:dsChecksumType>DISABLED</apim:dsChecksumType><apim:dsChecksum>none</apim:dsChecksum></datastreamProfile><datastreamProfile
81
+ pid="und:f4752f8687n" dsID="properties" ><apim:dsLabel></apim:dsLabel><apim:dsVersionID>properties.0</apim:dsVersionID><apim:dsCreateDate>2014-06-02T17:52:44.775Z</apim:dsCreateDate><apim:dsState>A</apim:dsState><apim:dsMIME>text/xml</apim:dsMIME><apim:dsFormatURI></apim:dsFormatURI><apim:dsControlGroup>M</apim:dsControlGroup><apim:dsSize>54</apim:dsSize><apim:dsVersionable>true</apim:dsVersionable><apim:dsInfoType></apim:dsInfoType><apim:dsLocation>und:f4752f8687n+properties+properties.0</apim:dsLocation><apim:dsLocationType>INTERNAL_ID</apim:dsLocationType><apim:dsChecksumType>DISABLED</apim:dsChecksumType><apim:dsChecksum>none</apim:dsChecksum></datastreamProfile><datastreamProfile
82
+ pid="und:f4752f8687n" dsID="rightsMetadata" ><apim:dsLabel></apim:dsLabel><apim:dsVersionID>rightsMetadata.0</apim:dsVersionID><apim:dsCreateDate>2014-06-02T17:52:44.806Z</apim:dsCreateDate><apim:dsState>A</apim:dsState><apim:dsMIME>text/xml</apim:dsMIME><apim:dsFormatURI></apim:dsFormatURI><apim:dsControlGroup>M</apim:dsControlGroup><apim:dsSize>556</apim:dsSize><apim:dsVersionable>true</apim:dsVersionable><apim:dsInfoType></apim:dsInfoType><apim:dsLocation>und:f4752f8687n+rightsMetadata+rightsMetadata.0</apim:dsLocation><apim:dsLocationType>INTERNAL_ID</apim:dsLocationType><apim:dsChecksumType>DISABLED</apim:dsChecksumType><apim:dsChecksum>none</apim:dsChecksum></datastreamProfile><datastreamProfile
83
+ pid="und:f4752f8687n" dsID="descMetadata" ><apim:dsLabel></apim:dsLabel><apim:dsVersionID>descMetadata.0</apim:dsVersionID><apim:dsCreateDate>2014-06-02T17:52:45.371Z</apim:dsCreateDate><apim:dsState>A</apim:dsState><apim:dsMIME>text/plain</apim:dsMIME><apim:dsFormatURI></apim:dsFormatURI><apim:dsControlGroup>M</apim:dsControlGroup><apim:dsSize>847</apim:dsSize><apim:dsVersionable>true</apim:dsVersionable><apim:dsInfoType></apim:dsInfoType><apim:dsLocation>und:f4752f8687n+descMetadata+descMetadata.0</apim:dsLocation><apim:dsLocationType>INTERNAL_ID</apim:dsLocationType><apim:dsChecksumType>DISABLED</apim:dsChecksumType><apim:dsChecksum>none</apim:dsChecksum></datastreamProfile></objectDatastreams>
84
+ http_version:
85
+ recorded_at: Mon, 02 Jun 2014 17:52:45 GMT
86
+ - request:
87
+ method: get
88
+ uri: http://fedoraAdmin:fedoraAdmin@127.0.0.1:8983/fedora/objects/und:f4752f8687n/datastreams/RELS-EXT/content
89
+ body:
90
+ encoding: US-ASCII
91
+ string: ''
92
+ headers:
93
+ Accept:
94
+ - '*/*; q=0.5, application/xml'
95
+ Accept-Encoding:
96
+ - gzip, deflate
97
+ User-Agent:
98
+ - Ruby
99
+ response:
100
+ status:
101
+ code: 200
102
+ message: OK
103
+ headers:
104
+ Expires:
105
+ - Thu, 01-Jan-1970 00:00:00 GMT
106
+ Set-Cookie:
107
+ - JSESSIONID=133y0mnohe9fvhd3rd8rctx3;Path=/fedora
108
+ Content-Disposition:
109
+ - inline; filename="Fedora Object-to-Object Relationship Metadata.rdf"
110
+ Content-Length:
111
+ - '317'
112
+ Content-Type:
113
+ - application/rdf+xml
114
+ Date:
115
+ - Mon, 02 Jun 2014 17:52:45 GMT
116
+ Server:
117
+ - Jetty(6.1-SNAPSHOT)
118
+ body:
119
+ encoding: UTF-8
120
+ string: |2
121
+
122
+ <rdf:RDF xmlns:fedora-model="info:fedora/fedora-system:def/model#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
123
+ <rdf:Description rdf:about="info:fedora/und:f4752f8687n">
124
+ <fedora-model:hasModel rdf:resource="info:fedora/afmodel:SeniorThesis"></fedora-model:hasModel>
125
+ </rdf:Description>
126
+ </rdf:RDF>
127
+ http_version:
128
+ recorded_at: Mon, 02 Jun 2014 17:52:45 GMT
129
+ - request:
130
+ method: get
131
+ uri: http://fedoraAdmin:fedoraAdmin@127.0.0.1:8983/fedora/objects/und:f4752f8687n/datastreams/DC/content
132
+ body:
133
+ encoding: US-ASCII
134
+ string: ''
135
+ headers:
136
+ Accept:
137
+ - '*/*; q=0.5, application/xml'
138
+ Accept-Encoding:
139
+ - gzip, deflate
140
+ User-Agent:
141
+ - Ruby
142
+ response:
143
+ status:
144
+ code: 200
145
+ message: OK
146
+ headers:
147
+ Expires:
148
+ - Thu, 01-Jan-1970 00:00:00 GMT
149
+ Set-Cookie:
150
+ - JSESSIONID=isia3sh1xtq7uc4p983h2s94;Path=/fedora
151
+ Content-Disposition:
152
+ - inline; filename="Dublin Core Record for this object.xml"
153
+ Content-Length:
154
+ - '344'
155
+ Content-Type:
156
+ - text/xml
157
+ Date:
158
+ - Mon, 02 Jun 2014 17:52:45 GMT
159
+ Server:
160
+ - Jetty(6.1-SNAPSHOT)
161
+ body:
162
+ encoding: UTF-8
163
+ string: |2
164
+
165
+ <oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
166
+ <dc:identifier>und:f4752f8687n</dc:identifier>
167
+ </oai_dc:dc>
168
+ http_version:
169
+ recorded_at: Mon, 02 Jun 2014 17:52:45 GMT
170
+ - request:
171
+ method: get
172
+ uri: http://fedoraAdmin:fedoraAdmin@127.0.0.1:8983/fedora/objects/und:f4752f8687n/datastreams/properties/content
173
+ body:
174
+ encoding: US-ASCII
175
+ string: ''
176
+ headers:
177
+ Accept:
178
+ - '*/*; q=0.5, application/xml'
179
+ Accept-Encoding:
180
+ - gzip, deflate
181
+ User-Agent:
182
+ - Ruby
183
+ response:
184
+ status:
185
+ code: 200
186
+ message: OK
187
+ headers:
188
+ Expires:
189
+ - Thu, 01-Jan-1970 00:00:00 GMT
190
+ Set-Cookie:
191
+ - JSESSIONID=2wcw8zu10k2ct7i2knctgzfj;Path=/fedora
192
+ Content-Disposition:
193
+ - inline; filename="properties.xml"
194
+ Content-Length:
195
+ - '54'
196
+ Content-Type:
197
+ - text/xml
198
+ Date:
199
+ - Mon, 02 Jun 2014 17:52:45 GMT
200
+ Server:
201
+ - Jetty(6.1-SNAPSHOT)
202
+ body:
203
+ encoding: UTF-8
204
+ string: |-
205
+ <fields>
206
+ <depositor>username-1</depositor>
207
+ </fields>
208
+ http_version:
209
+ recorded_at: Mon, 02 Jun 2014 17:52:45 GMT
210
+ - request:
211
+ method: get
212
+ uri: http://fedoraAdmin:fedoraAdmin@127.0.0.1:8983/fedora/objects/und:f4752f8687n/datastreams/rightsMetadata/content
213
+ body:
214
+ encoding: US-ASCII
215
+ string: ''
216
+ headers:
217
+ Accept:
218
+ - '*/*; q=0.5, application/xml'
219
+ Accept-Encoding:
220
+ - gzip, deflate
221
+ User-Agent:
222
+ - Ruby
223
+ response:
224
+ status:
225
+ code: 200
226
+ message: OK
227
+ headers:
228
+ Expires:
229
+ - Thu, 01-Jan-1970 00:00:00 GMT
230
+ Set-Cookie:
231
+ - JSESSIONID=1kmc1i5n0pnhzoo0fk52zo3lb;Path=/fedora
232
+ Content-Disposition:
233
+ - inline; filename="rightsMetadata.xml"
234
+ Content-Length:
235
+ - '556'
236
+ Content-Type:
237
+ - text/xml
238
+ Date:
239
+ - Mon, 02 Jun 2014 17:52:45 GMT
240
+ Server:
241
+ - Jetty(6.1-SNAPSHOT)
242
+ body:
243
+ encoding: UTF-8
244
+ string: "<rightsMetadata xmlns=\"http://hydra-collab.stanford.edu/schemas/rightsMetadata/v1\"
245
+ version=\"0.1\">\n <copyright>\n <human type=\"title\"/>\n <human type=\"description\"/>\n
246
+ \ <machine type=\"uri\"/>\n </copyright>\n <access type=\"discover\">\n
247
+ \ <human/>\n <machine/>\n </access>\n <access type=\"read\">\n <human/>\n
248
+ \ <machine>\n \n <group>registered</group></machine>\n </access>\n
249
+ \ <access type=\"edit\">\n <human/>\n <machine><person>username-1</person></machine>\n
250
+ \ </access>\n <embargo>\n <human/>\n <machine/>\n </embargo>\n</rightsMetadata>"
251
+ http_version:
252
+ recorded_at: Mon, 02 Jun 2014 17:52:45 GMT
253
+ - request:
254
+ method: get
255
+ uri: http://fedoraAdmin:fedoraAdmin@127.0.0.1:8983/fedora/objects/und:f4752f8687n/datastreams/descMetadata/content
256
+ body:
257
+ encoding: US-ASCII
258
+ string: ''
259
+ headers:
260
+ Accept:
261
+ - '*/*; q=0.5, application/xml'
262
+ Accept-Encoding:
263
+ - gzip, deflate
264
+ User-Agent:
265
+ - Ruby
266
+ response:
267
+ status:
268
+ code: 200
269
+ message: OK
270
+ headers:
271
+ Expires:
272
+ - Thu, 01-Jan-1970 00:00:00 GMT
273
+ Set-Cookie:
274
+ - JSESSIONID=1okrb7frmjfn51ceptriwjteti;Path=/fedora
275
+ Content-Disposition:
276
+ - inline; filename="descMetadata.txt"
277
+ Content-Length:
278
+ - '847'
279
+ Content-Type:
280
+ - text/plain
281
+ Date:
282
+ - Mon, 02 Jun 2014 17:52:45 GMT
283
+ Server:
284
+ - Jetty(6.1-SNAPSHOT)
285
+ body:
286
+ encoding: UTF-8
287
+ string: |
288
+ <info:fedora/und:f4752f8687n> <http://purl.org/dc/terms/created> "2014-06-02" .
289
+ <info:fedora/und:f4752f8687n> <http://purl.org/dc/terms/language> "English" .
290
+ <info:fedora/und:f4752f8687n> <http://purl.org/dc/terms/publisher> "University of Notre Dame" .
291
+ <info:fedora/und:f4752f8687n> <http://purl.org/dc/terms/title> "Title 1" .
292
+ <info:fedora/und:f4752f8687n> <http://purl.org/dc/terms/dateSubmitted> "2014-06-04Z"^^<http://www.w3.org/2001/XMLSchema#date> .
293
+ <info:fedora/und:f4752f8687n> <http://purl.org/dc/terms/modified> "2014-06-03Z"^^<http://www.w3.org/2001/XMLSchema#date> .
294
+ <info:fedora/und:f4752f8687n> <http://purl.org/dc/terms/rights> "Attribution 3.0 United States" .
295
+ <info:fedora/und:f4752f8687n> <http://purl.org/dc/terms/creator> "Creator Name1" .
296
+ <info:fedora/und:f4752f8687n> <http://purl.org/dc/terms/description> "Hello World!" .
297
+ http_version:
298
+ recorded_at: Mon, 02 Jun 2014 17:52:45 GMT
299
+ recorded_with: VCR 2.7.0