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,18 @@
1
+ require 'spec_fast_helper'
2
+ require 'hydramata/works/predicates'
3
+ require 'hydramata/works/linters/implement_predicate_interface_matcher'
4
+
5
+
6
+ module Hydramata
7
+ module Works
8
+ describe Predicates do
9
+
10
+ context '.find' do
11
+ it 'uses the identity to construct the appropriate predicate' do
12
+ expect(described_class.find('name', { something: 'george' })).to implement_predicate_interface
13
+ end
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_fast_helper'
2
+ require 'hydramata/works/presentation_structure'
3
+
4
+ module Hydramata
5
+ module Works
6
+ describe PresentationStructure do
7
+ subject { described_class.new }
8
+ let(:fieldset) { [:required, [:title]] }
9
+
10
+ context '.build' do
11
+ let(:object) { double('Object with predicate sets', predicate_sets: ['predicate_1', 'predicate_2']) }
12
+ it 'should transform an entities predicate_sets to fieldsets' do
13
+ structure = described_class.build_from(object)
14
+ expect(structure.fieldsets).to eq(object.predicate_sets)
15
+ end
16
+ end
17
+
18
+ context '#fieldsets' do
19
+ it 'can be appended' do
20
+ expect { subject.fieldsets << fieldset }.
21
+ to change { subject.fieldsets.count }.
22
+ by(1)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,135 @@
1
+ require 'spec_fast_helper'
2
+ require 'hydramata/works/property_set'
3
+
4
+ module Hydramata
5
+ module Works
6
+ describe PropertySet do
7
+ subject { PropertySet.new }
8
+ let(:property) { Property.new(predicate: :title, value: 'value one') }
9
+
10
+ context 'predicate order' do
11
+ it 'the first predicate pushed will return as the first' do
12
+ subject << (first = Property.new(predicate: :one, value: 1))
13
+ subject << (second = Property.new(predicate: :two, value: 2))
14
+ subject << (third = Property.new(predicate: :three, value: 3))
15
+
16
+ # Note: I am pushing a Property with the same predicate as the first
17
+ # object pushed. This will modify
18
+ subject << Property.new(predicate: :one, value: 4)
19
+
20
+ expect { |b| subject.each(&b) }.to yield_successive_args(first, second, third)
21
+ end
22
+ end
23
+
24
+ it 'exposes #properties' do
25
+ subject << property
26
+ expect(subject.properties).to eq([property])
27
+ end
28
+
29
+ it 'allows properties to be pushed onto it' do
30
+ expect { subject << property }.
31
+ to change { subject.count }.
32
+ by(1)
33
+ end
34
+
35
+ it 'amends an existing property if a common predicate is found' do
36
+ property = Property.new(predicate: :title, value: 'value one')
37
+ property_with_same_predicate = Property.new(predicate: :title, value: 'another')
38
+ subject << property
39
+ expect do
40
+ expect { subject << property_with_same_predicate }.
41
+ to_not change { subject.count }
42
+ end.to change { property.values }.
43
+ from(['value one']).
44
+ to(['value one', 'another'])
45
+ end
46
+
47
+ context 'data retrieval methods' do
48
+ before { subject << property }
49
+
50
+ context '#predicates' do
51
+ it 'should be the predicate names' do
52
+ expect(subject.predicates).to eq [property.predicate.to_s]
53
+ end
54
+ end
55
+
56
+ context '#fetch' do
57
+ it 'should raise an error if the predicate is not found' do
58
+ expect { subject.fetch(:missing) }.to raise_error(KeyError)
59
+ end
60
+
61
+ it 'should return the values if the predicate exists' do
62
+ expect(subject.fetch(property.predicate)).to eq(property)
63
+ end
64
+ end
65
+
66
+ context '#key?' do
67
+ it 'should be false if predicate does not exist' do
68
+ expect(subject.key?(:missing)).to be_falsey
69
+ end
70
+
71
+ it 'should return the values if the predicate exists' do
72
+ expect(subject.key?(property.predicate)).to be_truthy
73
+ end
74
+ end
75
+
76
+ context '#[]' do
77
+ it 'should return nil if the predicate is not found' do
78
+ expect(subject[:missing]).to eq(Property.new(predicate: :missing))
79
+ end
80
+
81
+ it 'should return the values if the predicate exists' do
82
+ expect(subject[property.predicate]).to eq(property)
83
+ end
84
+ end
85
+
86
+ context '#each' do
87
+ it 'should yield the predicate and normalized values' do
88
+ expect { |b| subject.each(&b) }.to yield_with_args(property)
89
+ end
90
+ end
91
+
92
+ context '#==' do
93
+ it 'should return true if underlying properties are identical' do
94
+ property_set = described_class.new
95
+ other = described_class.new
96
+
97
+ expect(property_set == other).to be_truthy
98
+ end
99
+
100
+ it 'should return false if different classes' do
101
+ property_set = described_class.new
102
+ other = 'abc'
103
+
104
+ expect(property_set == other).to be_falsey
105
+ end
106
+
107
+ it 'should return false if underlyng properties are different' do
108
+ property_set = described_class.new
109
+ other = described_class.new
110
+ property_set << property
111
+
112
+ expect(property_set == other).to be_falsey
113
+ end
114
+
115
+ it 'should return true if empty property set and hash are compared' do
116
+ property_set = described_class.new
117
+ other = {}
118
+
119
+ expect(property_set == other).to be_truthy
120
+ end
121
+ end
122
+
123
+ context '#subset' do
124
+ let(:a_second_property) { { predicate: :another_predicate, value: 'another value' } }
125
+ it 'should return a property set that only has the specified keys' do
126
+ subject << a_second_property
127
+ subset = described_class.new
128
+ subset << property
129
+ expect(subject.subset(property.predicate)).to eq(subset)
130
+ end
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,74 @@
1
+ require 'spec_fast_helper'
2
+ require 'hydramata/works/property'
3
+
4
+ module Hydramata
5
+ module Works
6
+ describe Property do
7
+ let(:predicate) { 'Predicate' }
8
+ let(:value) { double('Value') }
9
+ subject { described_class.new(predicate: predicate) }
10
+
11
+ it { should respond_to :values }
12
+ it { should respond_to :name }
13
+
14
+ it 'should delegate #each to #values' do
15
+ subject << value
16
+ expect { |b| subject.each(&b) }.to yield_with_args(value)
17
+ end
18
+
19
+ it 'can append to values' do
20
+ expect { subject << value }.
21
+ to change { subject.values }.
22
+ from([]).
23
+ to([value])
24
+ end
25
+
26
+ it 'should have a #to_translation_key_fragment' do
27
+ expect(subject.to_translation_key_fragment).to eq(subject.predicate.to_translation_key_fragment)
28
+ end
29
+
30
+ context 'case equality' do
31
+ it 'should delegate to the compared object' do
32
+ object = double('Double')
33
+ expect(object).
34
+ to receive(:instance_of?).
35
+ with(Property).
36
+ and_return(true)
37
+ expect(Property === object).to eq(true)
38
+ end
39
+ end
40
+
41
+ context 'equality' do
42
+ it 'is not equal if the predicates are different' do
43
+ property = described_class.new(predicate: :hello)
44
+ other = described_class.new(predicate: :goodbye)
45
+ expect(property == other).to eq(false)
46
+ end
47
+
48
+ it 'is equal if the predicates and values are the same' do
49
+ property = described_class.new(predicate: :hello, values: [123])
50
+ other = described_class.new(predicate: :hello, values: [123])
51
+ expect(property == other).to eq(true)
52
+ end
53
+
54
+ it 'is not equal if the predicates are the same but values are the different' do
55
+ property = described_class.new(predicate: :hello, values: [123])
56
+ other = described_class.new(predicate: :hello, values: [123, 345])
57
+ expect(property == other).to eq(false)
58
+ end
59
+
60
+ it 'is not equal if the predicates are different but the values are the same' do
61
+ property = described_class.new(predicate: :goodbye, values: [123])
62
+ other = described_class.new(predicate: :hello, values: [123])
63
+ expect(property == other).to eq(false)
64
+ end
65
+
66
+ it 'is not equal if of different classes' do
67
+ property = described_class.new(predicate: :goodbye, values: [123])
68
+ other = Struct.new(:predicate, :values).new(:goodbye, [123])
69
+ expect(property == other).to eq(false)
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_fast_helper'
2
+ require 'date'
3
+ require 'hydramata/works/value'
4
+ require 'hydramata/works/linters/implement_value_interface_matcher'
5
+
6
+ module Hydramata
7
+ module Works
8
+ describe Value do
9
+ let(:raw_object) { double('Raw Object') }
10
+ let(:value) { 123456789 }
11
+ subject { described_class.new(value: value, raw_object: raw_object) }
12
+
13
+ it { should implement_value_interface }
14
+
15
+ it 'should have a #raw_object' do
16
+ expect(subject.raw_object).to eq(raw_object)
17
+ end
18
+
19
+ it 'should have a friendly inspect message, because tracking it down could be a pain' do
20
+ expect(subject.inspect).to include("#{described_class}")
21
+ expect(subject.inspect).to include(raw_object.inspect)
22
+ expect(subject.inspect).to include(value.inspect)
23
+ end
24
+
25
+ it 'should be an instance of the presented object\'s class' do
26
+ expect(subject.instance_of?(value.class)).to be_truthy
27
+ end
28
+
29
+ context '#==' do
30
+ context 'for two value objects' do
31
+ it 'should not be true if underlying objects do not match' do
32
+ expect(described_class.new(value: 123) == described_class.new(value: 1234)).to be_falsey
33
+ end
34
+ it 'should be true if underlying objects match' do
35
+ expect(described_class.new(value: Date.new(2013,1,3)) == described_class.new(value: Date.new(2013,1,3))).to be_truthy
36
+ end
37
+ end
38
+ context 'for integers' do
39
+ let(:value) { 123456789 }
40
+ it 'should be equal when base value is the same' do
41
+ expect(subject == value).to be_truthy
42
+ end
43
+ end
44
+
45
+ context 'for strings' do
46
+ let(:value) { 'Hello World' }
47
+ it 'should be equal when base value is the same' do
48
+ expect(subject == value).to be_truthy
49
+ end
50
+ end
51
+
52
+ context 'for dates' do
53
+ let(:value) { Date.new(2013,1,3) }
54
+ it 'should be equal when base value is the same' do
55
+ expect(subject == Date.new(2013,1,3)).to be_truthy
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,45 @@
1
+ # Instead of using spec_helper, I'm using the twice as fast custom helper
2
+ # for active record objects.
3
+ require 'spec_fast_helper'
4
+ require 'hydramata/works/work_type'
5
+ require 'hydramata/works/linters/implement_work_type_interface_matcher'
6
+ require 'hydramata/works/linters/implement_data_definition_interface_matcher'
7
+
8
+ module Hydramata
9
+ module Works
10
+ describe WorkType do
11
+ subject { described_class.new(identity: 'My Identity') }
12
+ it { should implement_work_type_interface }
13
+ it { should implement_data_definition_interface }
14
+
15
+ context '#predicate_sets=' do
16
+ it 'handles predicate set conversion' do
17
+ subject = described_class.new(identity: 'My Identity', predicate_sets: ['one predicate', 'two predicate'])
18
+ expect(subject.predicate_sets).to eq([PredicateSet.new(identity: 'one predicate'), PredicateSet.new(identity: 'two predicate')])
19
+ end
20
+ end
21
+
22
+ it 'should have #fieldsets that is an alias of #predicate_sets' do
23
+ subject = described_class.new(identity: 'My Identity', predicate_sets: ['one predicate', 'two predicate'])
24
+ expect(subject.fieldsets).to eq(subject.predicate_sets)
25
+ end
26
+
27
+ context '#itemtype_schema_dot_org' do
28
+ it 'should utilize the default' do
29
+ subject = described_class.new(identity: 'My Identity')
30
+ expect(subject.itemtype_schema_dot_org).to match(/\Ahttps?:\/\/schema.org/)
31
+ end
32
+
33
+ it 'should prepend http://schema.org if is missing' do
34
+ subject = described_class.new(identity: 'My Identity', itemtype_schema_dot_org: 'Thing')
35
+ expect(subject.itemtype_schema_dot_org).to eq('http://schema.org/Thing')
36
+ end
37
+
38
+ it 'should accept http directly' do
39
+ subject = described_class.new(identity: 'My Identity', itemtype_schema_dot_org: 'http://schema.org/CreativeWork')
40
+ expect(subject.itemtype_schema_dot_org).to eq('http://schema.org/CreativeWork')
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,74 @@
1
+ # Instead of using spec_helper, I'm using the twice as fast custom helper
2
+ # for active record objects.
3
+ require 'spec_active_record_helper'
4
+ require 'hydramata/works/work_types/storage'
5
+ require 'hydramata/works/linters/implement_work_type_interface_matcher'
6
+
7
+ module Hydramata
8
+ module Works
9
+ module WorkTypes
10
+
11
+ describe Storage do
12
+ subject { described_class.new }
13
+ it { should implement_work_type_interface }
14
+
15
+ let(:identity) { 'http://hello.com/world' }
16
+ subject { described_class.create(identity: identity, name_for_application_usage: 'hello_world') }
17
+
18
+ context '#to_work_type' do
19
+ it 'returns a WorkType object' do
20
+ work_type = described_class.new do |work_type|
21
+ work_type.predicate_sets.build(identity: 'hello')
22
+ end.to_work_type
23
+
24
+ expect(work_type).to implement_work_type_interface
25
+ expect(work_type.predicate_sets.size).to eq(1)
26
+ end
27
+ end
28
+
29
+ context '.find_by_identity' do
30
+
31
+ it 'returns a WorkType object when identity exists' do
32
+ subject # creating the object
33
+ expect(described_class.find_by_identity!(identity)).to implement_work_type_interface
34
+ end
35
+
36
+ it 'returns nil when identity is missing' do
37
+ # @TODO - Should this be a NullPredicate?
38
+ expect { described_class.find_by_identity!(identity) }.to raise_error
39
+ end
40
+ end
41
+
42
+ context '.existing_attributes_for' do
43
+ it 'should return the existing work_type attributes' do
44
+ subject
45
+ keys = [
46
+ :id,
47
+ :identity,
48
+ :name_for_application_usage
49
+ ]
50
+ actual_values = described_class.existing_attributes_for(identity).values_at(keys)
51
+ # Because date comparisons are a bit wonky
52
+ expect(actual_values).to eq(subject.attributes.values_at(keys))
53
+ end
54
+
55
+ it 'should return the identity if a matching work_type was not found' do
56
+ expect(described_class.existing_attributes_for(identity)).to eq(identity: identity)
57
+ end
58
+
59
+ it 'should handle connection failed' do
60
+ expect(described_class).to receive(:find_by_identity!).and_raise(ActiveRecord::ConnectionNotEstablished)
61
+ expect(described_class.existing_attributes_for(identity)).to eq(identity: identity)
62
+ end
63
+ end
64
+
65
+ it 'should have many :predicate_sets' do
66
+ expect { subject.predicate_sets.create(identity: 'required', presentation_sequence: 1) }.
67
+ to change { subject.predicate_sets.count }.
68
+ by(1)
69
+ end
70
+
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_fast_helper'
2
+ require 'hydramata/works/work_types'
3
+ require 'hydramata/works/linters/implement_work_type_interface_matcher'
4
+
5
+
6
+ module Hydramata
7
+ module Works
8
+ describe WorkTypes do
9
+ context '.find' do
10
+ it 'uses the identity to construct the appropriate work_type' do
11
+ expect(described_class.find('name', { something: 'george' })).to implement_work_type_interface
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end