hydramata-works 0.0.1.prerelease
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.hound.yml +818 -0
- data/.rspec +2 -0
- data/.travis.yml +20 -0
- data/CONTRIBUTING.md +220 -0
- data/Gemfile +36 -0
- data/Guardfile +36 -0
- data/LICENSE +15 -0
- data/README.md +36 -0
- data/Rakefile +47 -0
- data/TODO.md +74 -0
- data/VISION.md +19 -0
- data/app/forms/hydramata/works/entity_form.rb +92 -0
- data/app/forms/hydramata/works/validation_service.rb +78 -0
- data/app/models/hydramata/works/data_definition.rb +57 -0
- data/app/models/hydramata/works/entities.rb +11 -0
- data/app/models/hydramata/works/entity.rb +75 -0
- data/app/models/hydramata/works/predicate.rb +35 -0
- data/app/models/hydramata/works/predicate_presentation_sequences/storage.rb +29 -0
- data/app/models/hydramata/works/predicate_set.rb +44 -0
- data/app/models/hydramata/works/predicate_sets/storage.rb +45 -0
- data/app/models/hydramata/works/predicates.rb +14 -0
- data/app/models/hydramata/works/predicates/storage.rb +33 -0
- data/app/models/hydramata/works/presentation_structure.rb +29 -0
- data/app/models/hydramata/works/property.rb +72 -0
- data/app/models/hydramata/works/property_set.rb +89 -0
- data/app/models/hydramata/works/validations.rb +6 -0
- data/app/models/hydramata/works/value.rb +34 -0
- data/app/models/hydramata/works/work_type.rb +49 -0
- data/app/models/hydramata/works/work_types.rb +14 -0
- data/app/models/hydramata/works/work_types/storage.rb +42 -0
- data/app/parsers/hydramata/works/datastream_parser.rb +36 -0
- data/app/parsers/hydramata/works/datastream_parsers/rdf_ntriples_parser.rb +60 -0
- data/app/parsers/hydramata/works/datastream_parsers/simple_xml_parser.rb +27 -0
- data/app/parsers/hydramata/works/predicate_parser.rb +31 -0
- data/app/parsers/hydramata/works/predicate_parsers/simple_parser.rb +13 -0
- data/app/parsers/hydramata/works/validations_parser.rb +22 -0
- data/app/parsers/hydramata/works/value_parser.rb +26 -0
- data/app/parsers/hydramata/works/value_parsers.rb +27 -0
- data/app/parsers/hydramata/works/value_parsers/date_parser.rb +13 -0
- data/app/parsers/hydramata/works/value_parsers/interrogation_parser.rb +18 -0
- data/app/parsers/hydramata/works/value_parsers/simple_parser.rb +14 -0
- data/app/presenters/hydramata/works/base_presenter.rb +146 -0
- data/app/presenters/hydramata/works/dom_attributes_builder.rb +24 -0
- data/app/presenters/hydramata/works/entity_presenter.rb +67 -0
- data/app/presenters/hydramata/works/fieldset_presenter.rb +54 -0
- data/app/presenters/hydramata/works/property_presenter.rb +51 -0
- data/app/presenters/hydramata/works/value_presenter.rb +60 -0
- data/app/renderers/hydramata/works/entity_renderer.rb +45 -0
- data/app/views/hydramata/works/fieldsets/_edit.html.erb +4 -0
- data/app/views/hydramata/works/fieldsets/_show.html.erb +8 -0
- data/app/views/hydramata/works/fieldsets/_show.json.jbuilder +8 -0
- data/app/views/hydramata/works/properties/_edit.html.erb +12 -0
- data/app/views/hydramata/works/properties/_show.html.erb +3 -0
- data/app/views/hydramata/works/properties/_show.json.jbuilder +1 -0
- data/app/views/hydramata/works/works/_edit.html.erb +8 -0
- data/app/views/hydramata/works/works/_new.html.erb +8 -0
- data/app/views/hydramata/works/works/_show.html.erb +3 -0
- data/app/views/hydramata/works/works/_show.json.jbuilder +13 -0
- data/app/wranglers/hydramata/works/fedora_wrangler.rb +66 -0
- data/bin/rails +12 -0
- data/db/migrate/20140606132349_create_hydramata_work_predicates.rb +13 -0
- data/db/migrate/20140606132350_create_hydramata_work_types.rb +9 -0
- data/db/migrate/20140606132351_create_hydramata_work_predicate_sets.rb +13 -0
- data/db/migrate/20140606132352_create_hydramata_work_predicate_presentation_sequences.rb +12 -0
- data/db/migrate/20140623200635_add_validations_to_predicates.rb +5 -0
- data/db/migrate/20140627134133_adding_item_type_schema_dot_org_to_work_type.rb +5 -0
- data/db/migrate/20140627140840_adding_item_prop_schema_dot_org_to_predicate.rb +5 -0
- data/db/seeds.rb +36 -0
- data/documents/administrative-set-strawperson.md +45 -0
- data/documents/diagrams/hydramata-refactor-tasks.dot +88 -0
- data/documents/diagrams/hydramata-sip-dip-aip.dot +88 -0
- data/documents/diagrams/hydramata-work-architecture.dot +129 -0
- data/documents/diagrams/hydramata-work-subcomponents.dot +36 -0
- data/documents/diagrams/map-from-database-to-work-object.dot +44 -0
- data/documents/diagrams/map-from-fedora-to-work-object.dot +51 -0
- data/documents/diagrams/map-from-input-to-work-object.dot +37 -0
- data/documents/diagrams/map-from-work-object-to-database.dot +31 -0
- data/documents/diagrams/work-rendering.dot +53 -0
- data/documents/diagrams/work-structure.dot +32 -0
- data/documents/handling-work.md +224 -0
- data/documents/high-level-stories.md +105 -0
- data/documents/hydramata-components.md +82 -0
- data/documents/interface-between-work-and-permissions.md +131 -0
- data/documents/interface-between-work-and-workflow.md +6 -0
- data/documents/timeline.md +75 -0
- data/fs +3 -0
- data/gemfiles/rails4.1.gemfile +12 -0
- data/gemfiles/rails4.gemfile +13 -0
- data/hydramata-works.gemspec +43 -0
- data/lib/hydramata-works.rb +23 -0
- data/lib/hydramata/works/conversions.rb +21 -0
- data/lib/hydramata/works/conversions/exceptions.rb +18 -0
- data/lib/hydramata/works/conversions/predicate.rb +22 -0
- data/lib/hydramata/works/conversions/predicate_set.rb +28 -0
- data/lib/hydramata/works/conversions/presented_fieldsets.rb +28 -0
- data/lib/hydramata/works/conversions/presenter.rb +13 -0
- data/lib/hydramata/works/conversions/property.rb +31 -0
- data/lib/hydramata/works/conversions/property_set.rb +23 -0
- data/lib/hydramata/works/conversions/translation_key_fragment.rb +20 -0
- data/lib/hydramata/works/conversions/value.rb +20 -0
- data/lib/hydramata/works/conversions/work_type.rb +26 -0
- data/lib/hydramata/works/engine.rb +31 -0
- data/lib/hydramata/works/linters.rb +99 -0
- data/lib/hydramata/works/linters/implement_data_definition_interface_matcher.rb +17 -0
- data/lib/hydramata/works/linters/implement_entity_interface_matcher.rb +16 -0
- data/lib/hydramata/works/linters/implement_predicate_interface_matcher.rb +17 -0
- data/lib/hydramata/works/linters/implement_predicate_set_interface_matcher.rb +8 -0
- data/lib/hydramata/works/linters/implement_property_set_interface_matcher.rb +8 -0
- data/lib/hydramata/works/linters/implement_value_interface_matcher.rb +8 -0
- data/lib/hydramata/works/linters/implement_work_type_interface_matcher.rb +13 -0
- data/lib/hydramata/works/linters/interface_matcher_builder.rb +36 -0
- data/lib/hydramata/works/translator.rb +67 -0
- data/lib/hydramata/works/version.rb +5 -0
- data/lib/hydramata_works.rb +2 -0
- data/lib/tasks/hydramata_work_tasks.rake +4 -0
- data/run_each_spec_in_isolation +16 -0
- data/run_each_spec_in_isolation.txt +110 -0
- data/script/analyzer.rb +124 -0
- data/script/fast_specs +22 -0
- data/spec/features/fedora_to_in_memory_spec.rb +60 -0
- data/spec/features/format_and_view_path_overrides_spec.rb +72 -0
- data/spec/features/in_memory_to_output_buffer_spec.rb +109 -0
- data/spec/features/instantiate_entity_from_persisted_work_type_spec.rb +26 -0
- data/spec/features/new_user_input_to_in_memory_spec.rb +75 -0
- data/spec/features/translation_services_spec.rb +107 -0
- data/spec/features/validate_entity_based_on_work_type_structure_spec.rb +19 -0
- data/spec/fixtures/cassettes/fedora-object.yml +299 -0
- data/spec/fixtures/translations.yml +20 -0
- data/spec/forms/hydramata/works/entity_form_spec.rb +83 -0
- data/spec/forms/hydramata/works/validation_service_spec.rb +32 -0
- data/spec/lib/hydramata-work_spec.rb +14 -0
- data/spec/lib/hydramata/works/conversions/predicate_set_spec.rb +50 -0
- data/spec/lib/hydramata/works/conversions/predicate_spec.rb +43 -0
- data/spec/lib/hydramata/works/conversions/presented_fieldsets_spec.rb +52 -0
- data/spec/lib/hydramata/works/conversions/presenter_spec.rb +22 -0
- data/spec/lib/hydramata/works/conversions/property_set_spec.rb +42 -0
- data/spec/lib/hydramata/works/conversions/property_spec.rb +68 -0
- data/spec/lib/hydramata/works/conversions/translation_key_fragment_spec.rb +45 -0
- data/spec/lib/hydramata/works/conversions/value_spec.rb +36 -0
- data/spec/lib/hydramata/works/conversions/work_type_spec.rb +55 -0
- data/spec/lib/hydramata/works/translator_spec.rb +81 -0
- data/spec/models/hydramata/works/data_definition_spec.rb +53 -0
- data/spec/models/hydramata/works/entity_spec.rb +50 -0
- data/spec/models/hydramata/works/predicate_presentation_sequences/storage_spec.rb +15 -0
- data/spec/models/hydramata/works/predicate_set_spec.rb +63 -0
- data/spec/models/hydramata/works/predicate_sets/storage_spec.rb +37 -0
- data/spec/models/hydramata/works/predicate_spec.rb +16 -0
- data/spec/models/hydramata/works/predicates/storage_spec.rb +78 -0
- data/spec/models/hydramata/works/predicates_spec.rb +18 -0
- data/spec/models/hydramata/works/presentation_structure_spec.rb +27 -0
- data/spec/models/hydramata/works/property_set_spec.rb +135 -0
- data/spec/models/hydramata/works/property_spec.rb +74 -0
- data/spec/models/hydramata/works/value_spec.rb +61 -0
- data/spec/models/hydramata/works/work_type_spec.rb +45 -0
- data/spec/models/hydramata/works/work_types/storage_spec.rb +74 -0
- data/spec/models/hydramata/works/work_types_spec.rb +16 -0
- data/spec/parsers/hydramata/works/datastream_parser_spec.rb +29 -0
- data/spec/parsers/hydramata/works/datastream_parsers/rdf_ntriples_parser_spec.rb +65 -0
- data/spec/parsers/hydramata/works/datastream_parsers/simple_xml_parser_spec.rb +37 -0
- data/spec/parsers/hydramata/works/predicate_parser_spec.rb +30 -0
- data/spec/parsers/hydramata/works/predicate_parsers/simple_parser_spec.rb +20 -0
- data/spec/parsers/hydramata/works/validations_parser_spec.rb +31 -0
- data/spec/parsers/hydramata/works/value_parser_spec.rb +22 -0
- data/spec/parsers/hydramata/works/value_parsers/simple_parser_spec.rb +20 -0
- data/spec/parsers/hydramata/works/value_parsers_spec.rb +36 -0
- data/spec/presenters/hydramata/works/base_presenter_spec.rb +111 -0
- data/spec/presenters/hydramata/works/dom_attributes_builder_spec.rb +26 -0
- data/spec/presenters/hydramata/works/entity_presenter_spec.rb +51 -0
- data/spec/presenters/hydramata/works/fieldset_presenter_spec.rb +58 -0
- data/spec/presenters/hydramata/works/property_presenter_spec.rb +42 -0
- data/spec/presenters/hydramata/works/value_presenter_spec.rb +49 -0
- data/spec/renderers/hydramata/works/entity_renderer_spec.rb +25 -0
- data/spec/spec_active_record_helper.rb +30 -0
- data/spec/spec_fast_helper.rb +12 -0
- data/spec/spec_slow_helper.rb +56 -0
- data/spec/spec_view_helper.rb +14 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +21 -0
- data/spec/views/hydramata/works/fieldsets/_edit.html.erb_spec.rb +29 -0
- data/spec/views/hydramata/works/fieldsets/_show.html.erb_spec.rb +25 -0
- data/spec/views/hydramata/works/properties/_edit.html.erb_spec.rb +22 -0
- data/spec/views/hydramata/works/properties/_show.html.erb_spec.rb +22 -0
- data/spec/views/hydramata/works/works/_edit.html.erb_spec.rb +23 -0
- data/spec/views/hydramata/works/works/_new.html.erb_spec.rb +23 -0
- data/spec/views/hydramata/works/works/_show.html.erb_spec.rb +24 -0
- data/spec/wranglers/hydramata/works/fedora_wrangler_spec.rb +26 -0
- metadata +466 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
en:
|
2
|
+
hydramata:
|
3
|
+
work:
|
4
|
+
works:
|
5
|
+
work_type_with_translated_name:
|
6
|
+
name: I Am Translating the Name for Application Usage!
|
7
|
+
work_type_translated:
|
8
|
+
fieldsets:
|
9
|
+
property_set_translated:
|
10
|
+
name: I Am a Translated Property Set for a Translated Work Type!
|
11
|
+
properties:
|
12
|
+
property_translated:
|
13
|
+
name: I Am a Translated Property for a Translated Work Type!
|
14
|
+
name: I Am a Translated Work Type!
|
15
|
+
fieldsets:
|
16
|
+
property_set_translated:
|
17
|
+
name: I Am a Translated Property Set with a non-Translated Work Type!
|
18
|
+
properties:
|
19
|
+
property_translated:
|
20
|
+
name: I Am a Translated Property with a non-Translated Work Type!
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'spec_fast_helper'
|
2
|
+
require 'hydramata/works/entity_form'
|
3
|
+
require 'hydramata/works/linters'
|
4
|
+
require 'hydramata/works/entity'
|
5
|
+
|
6
|
+
module Hydramata
|
7
|
+
module Works
|
8
|
+
describe EntityForm do
|
9
|
+
let(:identity) { nil }
|
10
|
+
let(:validation_service) { double(call: true) }
|
11
|
+
let(:entity) do
|
12
|
+
Entity.new(identity: identity) do |entity|
|
13
|
+
entity.properties << { predicate: :first_name, value: 'Jeremy' }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
subject { described_class.new(entity, validation_service: validation_service) }
|
17
|
+
|
18
|
+
it_behaves_like 'ActiveModel'
|
19
|
+
|
20
|
+
context 'valid?' do
|
21
|
+
context 'when errors are not set' do
|
22
|
+
let(:validation_service) { double(call: true) }
|
23
|
+
it 'should be true (eg valid)' do
|
24
|
+
expect(subject.valid?).to be_truthy
|
25
|
+
expect(validation_service).to have_received(:call)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
context 'when errors are encountered' do
|
29
|
+
let(:validation_service) { ->(entity) { entity.errors.add(:base, 'Found some errors!') } }
|
30
|
+
it 'should be false (eg not valid)' do
|
31
|
+
expect(subject.valid?).to be_falsey
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'has a meaningful inspect' do
|
37
|
+
expect(subject.inspect).to include("EntityForm")
|
38
|
+
expect(subject.inspect).to include(entity.inspect)
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'entity\'s properties' do
|
42
|
+
it 'should respond to a given predicate' do
|
43
|
+
expect(subject).to respond_to(:first_name)
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should expose the predicate name as a method' do
|
47
|
+
expect(subject.first_name).to eq(['Jeremy'])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'with collaborating entity without an identity' do
|
52
|
+
let(:identity) { '' }
|
53
|
+
it 'is not #persisted?' do
|
54
|
+
expect(subject.persisted?).to be_falsey
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'has a nil #to_param' do
|
58
|
+
expect(subject.to_param).to be_nil
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'has a nil #to_key' do
|
62
|
+
expect(subject.to_key).to be_nil
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'with collaborating entity with an identity' do
|
67
|
+
let(:identity) { '1234' }
|
68
|
+
it 'is #persisted?' do
|
69
|
+
expect(subject.persisted?).to be_truthy
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'uses the entity#identity to derive #to_param' do
|
73
|
+
expect(subject.to_param).to eq(identity)
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'uses the entity#identity to derive #to_key' do
|
77
|
+
expect(subject.to_key).to eq([identity])
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_fast_helper'
|
2
|
+
require 'hydramata/works/validation_service'
|
3
|
+
require 'hydramata/works/entity_form'
|
4
|
+
require 'hydramata/works/predicate'
|
5
|
+
require 'hydramata/works/entity'
|
6
|
+
require 'active_model/validations/presence'
|
7
|
+
|
8
|
+
module Hydramata
|
9
|
+
module Works
|
10
|
+
describe ValidationService do
|
11
|
+
let(:title) { nil }
|
12
|
+
let(:title_predicate) { Predicate.new(identity: 'title', validations: { presence: true }) }
|
13
|
+
let(:entity) do
|
14
|
+
Entity.new(work_type: 'article') do |entity|
|
15
|
+
entity.properties << { predicate: title_predicate }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
let(:entity_form) { EntityForm.new(entity) }
|
19
|
+
subject { described_class }
|
20
|
+
|
21
|
+
context '#call' do
|
22
|
+
it 'runs validations attached to each predicate' do
|
23
|
+
expect { subject.call(entity_form) }.
|
24
|
+
to change { entity_form.errors.full_messages }.
|
25
|
+
from([]).
|
26
|
+
to(['title can\'t be blank'])
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_fast_helper'
|
2
|
+
require 'hydramata-works'
|
3
|
+
|
4
|
+
module Hydramata
|
5
|
+
describe Works do
|
6
|
+
it 'has a .table_name_prefix to conform to Rails::Engine' do
|
7
|
+
expect(described_class.table_name_prefix).to eq('hydramata_works_')
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'has a .use_relative_model_naming? to conform to Rails::Engine' do
|
11
|
+
expect(described_class.use_relative_model_naming?).to eq(true)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_fast_helper'
|
2
|
+
require 'hydramata/works/conversions/predicate_set'
|
3
|
+
require 'hydramata/works/linters/implement_predicate_set_interface_matcher'
|
4
|
+
|
5
|
+
module Hydramata
|
6
|
+
module Works
|
7
|
+
describe Conversions do
|
8
|
+
include Conversions
|
9
|
+
|
10
|
+
context '#PredicateSet' do
|
11
|
+
it 'should convert a "well-formed" Hash to a PredicateSet object' do
|
12
|
+
expect(PredicateSet(identity: 'hello', work_type: 'Work Type')).to implement_predicate_set_interface
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should raise an error if the Hash is not "well-formed"' do
|
16
|
+
expect { PredicateSet(other: 'hello') }.to raise_error
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should raise an error when input is unexpected' do
|
20
|
+
expect { PredicateSet(double) }.to raise_error
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should raise an error when Array is empty' do
|
24
|
+
expect { PredicateSet([]) }.to raise_error
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should handle an Array of 2 elements' do
|
28
|
+
expect(PredicateSet([:fieldset, [:predicate1, :predicate2]])).to implement_predicate_set_interface
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should handle an Array of 3 elements' do
|
32
|
+
expect(PredicateSet([:fieldset, :predicate1, :predicate2])).to implement_predicate_set_interface
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should handle an Array of 1 element' do
|
36
|
+
expect(PredicateSet([:fieldset])).to implement_predicate_set_interface
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should handle a String' do
|
40
|
+
expect(PredicateSet('An Identity')).to implement_predicate_set_interface
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should use #to_predicate_set for conversion if input responds to #to_predicate_set' do
|
44
|
+
object = double(to_predicate_set: PredicateSet.new(identity: 'hello'))
|
45
|
+
expect(PredicateSet(object)).to implement_predicate_set_interface
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_fast_helper'
|
2
|
+
require 'hydramata/works/conversions/predicate'
|
3
|
+
require 'hydramata/works/linters/implement_predicate_interface_matcher'
|
4
|
+
|
5
|
+
module Hydramata
|
6
|
+
module Works
|
7
|
+
describe Conversions do
|
8
|
+
include Conversions
|
9
|
+
|
10
|
+
context '#Predicate' do
|
11
|
+
it 'should convert a String to a Predicate object' do
|
12
|
+
expect(Predicate('hello')).to implement_predicate_interface
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should convert a Symbol to a Predicate object' do
|
16
|
+
expect(Predicate(:hello)).to implement_predicate_interface
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should return the same predicate if a Predicate is given' do
|
20
|
+
predicate = Predicate(:hello)
|
21
|
+
expect(Predicate(predicate).object_id).to eq(predicate.object_id)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should convert a "well-formed" Hash to a Predicate object' do
|
25
|
+
expect(Predicate(identity: 'hello')).to implement_predicate_interface
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should raise an error if the Hash is not "well-formed"' do
|
29
|
+
expect { Predicate(other: 'hello') }.to raise_error
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should raise an error object is unexpected' do
|
33
|
+
expect { Predicate([]) }.to raise_error
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should converate an object that responds to #to_predicate to a predicate' do
|
37
|
+
object = double(to_predicate: Predicate.new)
|
38
|
+
expect(Predicate(object)).to implement_predicate_interface
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_fast_helper'
|
2
|
+
require 'hydramata/works/entity'
|
3
|
+
require 'hydramata/works/presentation_structure'
|
4
|
+
require 'hydramata/works/conversions/presented_fieldsets'
|
5
|
+
|
6
|
+
module Hydramata
|
7
|
+
module Works
|
8
|
+
describe Conversions do
|
9
|
+
include Conversions
|
10
|
+
|
11
|
+
context '#PresentedFieldsets' do
|
12
|
+
let(:entity) do
|
13
|
+
Entity.new.tap do |entity|
|
14
|
+
entity.work_type = 'Hello'
|
15
|
+
entity.properties << { predicate: :title, value: 'Hello' }
|
16
|
+
entity.properties << { predicate: :title, value: 'World' }
|
17
|
+
entity.properties << { predicate: :title, value: 'Bang!' }
|
18
|
+
entity.properties << { predicate: :abstract, value: 'Long Text' }
|
19
|
+
entity.properties << { predicate: :abstract, value: 'Longer Text' }
|
20
|
+
entity.properties << { predicate: :keyword, value: 'Programming' }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:presentation_structure) do
|
25
|
+
PresentationStructure.new.tap do |struct|
|
26
|
+
struct.fieldsets << [:required, [:title]]
|
27
|
+
struct.fieldsets << [:optional, [:abstract, :keyword]]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should munge together the presentation structure and entity' do
|
32
|
+
presented_fieldsets = PresentedFieldsets(entity: entity, presentation_structure: presentation_structure)
|
33
|
+
|
34
|
+
expect(presented_fieldsets.count).to eq(2)
|
35
|
+
|
36
|
+
required_fieldset = presented_fieldsets[0]
|
37
|
+
expect(required_fieldset.entity).to eq(entity)
|
38
|
+
expect(required_fieldset.count).to eq(1)
|
39
|
+
expect(required_fieldset.name.to_s).to eq('required')
|
40
|
+
expect(required_fieldset[:title].values).to eq(['Hello', 'World', 'Bang!'])
|
41
|
+
|
42
|
+
optional_fieldset = presented_fieldsets[1]
|
43
|
+
expect(optional_fieldset.entity).to eq(entity)
|
44
|
+
expect(optional_fieldset.count).to eq(2)
|
45
|
+
expect(optional_fieldset.name.to_s).to eq('optional')
|
46
|
+
expect(optional_fieldset[:abstract].values).to eq(['Long Text', 'Longer Text'])
|
47
|
+
expect(optional_fieldset[:keyword].values).to eq(['Programming'])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_fast_helper'
|
2
|
+
require 'hydramata/works/conversions/presenter'
|
3
|
+
|
4
|
+
module Hydramata
|
5
|
+
module Works
|
6
|
+
describe Conversions do
|
7
|
+
include Conversions
|
8
|
+
|
9
|
+
context '#Presenter' do
|
10
|
+
it 'converts an object that implements #to_presenter' do
|
11
|
+
object = double(to_presenter: :presenter)
|
12
|
+
expect(Presenter(object)).to eq(:presenter)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'does not convert an object that does not implement a #to_presenter' do
|
16
|
+
object = double
|
17
|
+
expect(Presenter(object)).to eq(object)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_fast_helper'
|
2
|
+
require 'hydramata/works/conversions/property_set'
|
3
|
+
require 'hydramata/works/conversions/predicate_set'
|
4
|
+
require 'hydramata/works/linters/implement_property_set_interface_matcher'
|
5
|
+
|
6
|
+
module Hydramata
|
7
|
+
module Works
|
8
|
+
describe Conversions do
|
9
|
+
include Conversions
|
10
|
+
|
11
|
+
context '#PropertySet' do
|
12
|
+
it 'should convert an object that implements #to_property_set' do
|
13
|
+
object = double('Object', to_property_set: PropertySet.new )
|
14
|
+
expect(PropertySet(object)).to implement_property_set_interface
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should raise an error object is unexpected' do
|
18
|
+
expect { PropertySet([]) }.to raise_error
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should convert a PredicateSet to a PropertySet' do
|
22
|
+
object = PredicateSet.new(identity: 'hello')
|
23
|
+
expect(PropertySet(object)).to implement_property_set_interface
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should preserive a PropertySet as that PropertySet' do
|
27
|
+
object = PropertySet.new(identity: 'hello')
|
28
|
+
expect(PropertySet(object).object_id).to eq(object.object_id)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should attempt to convert the input to a PredicateSet then a PropertySet' do
|
32
|
+
object_to_convert = { identity: 'hello' }
|
33
|
+
expect(self).
|
34
|
+
to receive(:PredicateSet).
|
35
|
+
with(object_to_convert).
|
36
|
+
and_call_original
|
37
|
+
expect(PropertySet(object_to_convert)).to implement_property_set_interface
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'spec_fast_helper'
|
2
|
+
require 'hydramata/works/conversions/property'
|
3
|
+
|
4
|
+
module Hydramata
|
5
|
+
module Works
|
6
|
+
describe Conversions do
|
7
|
+
include Conversions
|
8
|
+
|
9
|
+
context '#Property' do
|
10
|
+
|
11
|
+
context 'with 0 args' do
|
12
|
+
it 'should raise an error' do
|
13
|
+
expect { Property() }.to raise_error
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'with 1 arg' do
|
18
|
+
it 'should convert a Predicate to a Property' do
|
19
|
+
predicate = Predicate.new(identity: 'id')
|
20
|
+
expect(Property(predicate)).to be_an_instance_of(Property)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should attempt to convert something odd to a Property via a Predicate conversion' do
|
24
|
+
object_to_convert = double
|
25
|
+
expect(self).
|
26
|
+
to receive(:Predicate).
|
27
|
+
with(object_to_convert).
|
28
|
+
and_return(Predicate.new)
|
29
|
+
expect(Property(object_to_convert)).to be_an_instance_of(Property)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should preserve a Property' do
|
33
|
+
property = Property.new(predicate: 'a predicate')
|
34
|
+
expect(Property(property).object_id).to eq(property.object_id)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should convert a Hash to a property' do
|
38
|
+
expect(Property(predicate: 'a predicate')).to be_an_instance_of(Property)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should convert a Hash with values' do
|
42
|
+
expect(Property(predicate: 'a predicate', values: [1,2,3]).values).to eq([1,2,3])
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'with 2 args' do
|
47
|
+
it 'should convert two arguements to a Property' do
|
48
|
+
expect(Property('a predicate', 'a value')).to be_an_instance_of(Property)
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should gracefully handle two arguements where last arguement is an array' do
|
52
|
+
expect(Property('a predicate', ['a value']).values).to eq([['a value']])
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should preserve the property but append the values' do
|
56
|
+
property = Property.new(predicate: 'a predicate')
|
57
|
+
expect {
|
58
|
+
Property(property, 'hello')
|
59
|
+
}.
|
60
|
+
to change { property.values }.
|
61
|
+
from([]).
|
62
|
+
to(['hello'])
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_fast_helper'
|
2
|
+
require 'hydramata/works/conversions/translation_key_fragment'
|
3
|
+
|
4
|
+
module Hydramata
|
5
|
+
module Works
|
6
|
+
describe Conversions do
|
7
|
+
include Conversions
|
8
|
+
context 'TranslationKeyFragment' do
|
9
|
+
context 'successfully converts' do
|
10
|
+
it 'a String' do
|
11
|
+
expect(TranslationKeyFragment('hello')).to eq('hello')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'to a normalized format' do
|
15
|
+
expect(TranslationKeyFragment('Hello World: Welcome')).to eq('hello_world_welcome')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'a Symbol' do
|
19
|
+
expect(TranslationKeyFragment(:hello)).to eq('hello')
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'a Hash with :to_translation_key_fragment key' do
|
23
|
+
object = { to_translation_key_fragment: 'fragment' }
|
24
|
+
expect(TranslationKeyFragment(object)).to eq('fragment')
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'an object that implements #to_translation_key_fragment' do
|
28
|
+
object = double(to_translation_key_fragment: 'fragment')
|
29
|
+
expect(TranslationKeyFragment(object)).to eq('fragment')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'will not convert' do
|
34
|
+
it 'an unexpected object' do
|
35
|
+
expect { TranslationKeyFragment(double) }.to raise_error
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'nil' do
|
39
|
+
expect { TranslationKeyFragment(nil) }.to raise_error
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|