hydramata-works 0.0.1.prerelease

Sign up to get free protection for your applications and to get access to all the features.
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