active-triples 0.8.1 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +8 -9
- data/CHANGES.md +69 -0
- data/Gemfile +0 -2
- data/Guardfile +1 -2
- data/active-triples.gemspec +3 -3
- data/lib/active/triples.rb +1 -0
- data/lib/active_triples.rb +4 -0
- data/lib/active_triples/configurable.rb +3 -1
- data/lib/active_triples/configuration.rb +1 -0
- data/lib/active_triples/configuration/item.rb +1 -0
- data/lib/active_triples/configuration/item_factory.rb +1 -0
- data/lib/active_triples/configuration/merge_item.rb +5 -2
- data/lib/active_triples/extension_strategy.rb +1 -0
- data/lib/active_triples/identifiable.rb +1 -0
- data/lib/active_triples/list.rb +2 -0
- data/lib/active_triples/nested_attributes.rb +1 -1
- data/lib/active_triples/node_config.rb +5 -3
- data/lib/active_triples/persistable.rb +1 -0
- data/lib/active_triples/persistence_strategies/parent_strategy.rb +104 -29
- data/lib/active_triples/persistence_strategies/persistence_strategy.rb +15 -7
- data/lib/active_triples/persistence_strategies/repository_strategy.rb +26 -22
- data/lib/active_triples/properties.rb +84 -6
- data/lib/active_triples/property.rb +35 -4
- data/lib/active_triples/property_builder.rb +38 -4
- data/lib/active_triples/rdf_source.rb +225 -75
- data/lib/active_triples/reflection.rb +42 -3
- data/lib/active_triples/relation.rb +330 -73
- data/lib/active_triples/repositories.rb +4 -2
- data/lib/active_triples/resource.rb +1 -0
- data/lib/active_triples/schema.rb +1 -0
- data/lib/active_triples/undefined_property_error.rb +27 -0
- data/lib/active_triples/version.rb +2 -1
- data/spec/active_triples/configurable_spec.rb +3 -2
- data/spec/active_triples/configuration_spec.rb +2 -1
- data/spec/active_triples/extension_strategy_spec.rb +2 -1
- data/spec/active_triples/identifiable_spec.rb +7 -11
- data/spec/active_triples/list_spec.rb +1 -4
- data/spec/active_triples/nested_attributes_spec.rb +4 -3
- data/spec/active_triples/persistable_spec.rb +4 -1
- data/spec/active_triples/persistence_strategies/parent_strategy_spec.rb +141 -11
- data/spec/active_triples/persistence_strategies/persistence_strategy_spec.rb +1 -0
- data/spec/active_triples/persistence_strategies/repository_strategy_spec.rb +32 -17
- data/spec/active_triples/properties_spec.rb +68 -33
- data/spec/active_triples/property_builder_spec.rb +36 -0
- data/spec/active_triples/property_spec.rb +15 -1
- data/spec/active_triples/rdf_source_spec.rb +544 -6
- data/spec/active_triples/reflection_spec.rb +78 -0
- data/spec/active_triples/relation_spec.rb +505 -3
- data/spec/active_triples/repositories_spec.rb +3 -1
- data/spec/active_triples/resource_spec.rb +90 -147
- data/spec/active_triples/schema_spec.rb +3 -2
- data/spec/active_triples_spec.rb +1 -0
- data/spec/integration/dummies/dummy_resource_a.rb +6 -0
- data/spec/integration/dummies/dummy_resource_b.rb +6 -0
- data/spec/integration/parent_persistence_spec.rb +18 -0
- data/spec/integration/reciprocal_properties_spec.rb +69 -0
- data/spec/pragmatic_context_spec.rb +10 -8
- data/spec/spec_helper.rb +5 -0
- data/spec/support/active_model_lint.rb +4 -6
- data/spec/support/dummies/basic_persistable.rb +2 -11
- data/spec/support/matchers.rb +11 -0
- data/spec/support/shared_examples/persistence_strategy.rb +3 -16
- metadata +20 -13
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
RSpec.describe ActiveTriples::Schema do
|
@@ -5,11 +6,11 @@ RSpec.describe ActiveTriples::Schema do
|
|
5
6
|
|
6
7
|
describe ".property" do
|
7
8
|
it "should define a property" do
|
8
|
-
subject.property :title, :predicate => RDF::DC.title
|
9
|
+
subject.property :title, :predicate => RDF::Vocab::DC.title
|
9
10
|
|
10
11
|
property = subject.properties.first
|
11
12
|
expect(property.name).to eq :title
|
12
|
-
expect(property.predicate).to eq RDF::DC.title
|
13
|
+
expect(property.predicate).to eq RDF::Vocab::DC.title
|
13
14
|
end
|
14
15
|
end
|
15
16
|
end
|
data/spec/active_triples_spec.rb
CHANGED
@@ -0,0 +1,6 @@
|
|
1
|
+
class DummyResourceA
|
2
|
+
include ActiveTriples::RDFSource
|
3
|
+
configure :type => RDF::URI('http://example.org/type/ResourceA')
|
4
|
+
property :label, :predicate => RDF::URI('http://example.org/ontology/label')
|
5
|
+
property :has_resource, :predicate => RDF::URI('http://example.org/ontology/has_resource'), :class_name => DummyResourceB
|
6
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
class DummyResourceB
|
2
|
+
include ActiveTriples::RDFSource
|
3
|
+
configure :type => RDF::URI('http://example.org/type/ResourceB')
|
4
|
+
property :label, :predicate => RDF::URI('http://example.org/ontology/label')
|
5
|
+
property :in_resource, :predicate => RDF::URI('http://example.org/ontology/in_resource'), :class_name => DummyResourceA
|
6
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe "When using the ParentPersistenceStrategy" do
|
5
|
+
context "a new child object" do
|
6
|
+
before do
|
7
|
+
class ParentThing < ActiveTriples::Resource
|
8
|
+
property :child, predicate: RDF::URI('http://example.org/#child')
|
9
|
+
end
|
10
|
+
|
11
|
+
class ChildThing < ActiveTriples::Resource; end
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { ParentThing.new.child.build }
|
15
|
+
|
16
|
+
it { is_expected.not_to be_persisted }
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
autoload :DummyResourceA, 'integration/dummies/dummy_resource_a'
|
3
|
+
autoload :DummyResourceB, 'integration/dummies/dummy_resource_b'
|
4
|
+
|
5
|
+
describe 'reciprocal properties' do
|
6
|
+
context 'when using repository strategy for all' do
|
7
|
+
before do
|
8
|
+
ActiveTriples::Repositories.add_repository :default, RDF::Repository.new
|
9
|
+
end
|
10
|
+
|
11
|
+
let (:a) do
|
12
|
+
# a = DummyResourceA.new(RDF::URI('http://example.com/a'))
|
13
|
+
a = DummyResourceA.new
|
14
|
+
a.label = 'resource A'
|
15
|
+
a
|
16
|
+
end
|
17
|
+
|
18
|
+
let (:b) do
|
19
|
+
# b = DummyResourceB.new(RDF::URI('http://example.com/b'))
|
20
|
+
b = DummyResourceB.new
|
21
|
+
b.label = 'resource B'
|
22
|
+
b
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should allow A -> B -> A' do
|
26
|
+
expect(a.persistence_strategy).to be_kind_of ActiveTriples::RepositoryStrategy
|
27
|
+
expect(b.persistence_strategy).to be_kind_of ActiveTriples::RepositoryStrategy
|
28
|
+
|
29
|
+
a.has_resource = b
|
30
|
+
expect(a.has_resource).to eq [b]
|
31
|
+
expect(a.label).to eq ['resource A']
|
32
|
+
expect(b.label).to eq ['resource B']
|
33
|
+
|
34
|
+
b.in_resource = a
|
35
|
+
expect(b.in_resource).to eq [a]
|
36
|
+
expect(a.label).to eq ['resource A']
|
37
|
+
expect(b.label).to eq ['resource B']
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'when using parent_strategy for some' do
|
42
|
+
let (:a) do
|
43
|
+
d = DummyResourceA.new(RDF::URI('http://example.com/a'))
|
44
|
+
d.label = 'resource A'
|
45
|
+
d
|
46
|
+
end
|
47
|
+
|
48
|
+
let (:b) do
|
49
|
+
p = DummyResourceB.new(RDF::URI('http://example.com/b'),a)
|
50
|
+
p.label = 'resource B'
|
51
|
+
p
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'should allow A -> B -> A' do
|
55
|
+
expect(a.persistence_strategy).to be_kind_of ActiveTriples::RepositoryStrategy
|
56
|
+
expect(b.persistence_strategy).to be_kind_of ActiveTriples::ParentStrategy
|
57
|
+
|
58
|
+
a.has_resource = b
|
59
|
+
expect(a.has_resource).to eq [b]
|
60
|
+
expect(a.label).to eq ['resource A']
|
61
|
+
expect(b.label).to eq ['resource B']
|
62
|
+
|
63
|
+
b.in_resource = a
|
64
|
+
expect(b.in_resource).to eq [a]
|
65
|
+
expect(a.label).to eq ['resource A']
|
66
|
+
expect(b.label).to eq ['resource B']
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'spec_helper'
|
2
3
|
require 'pragmatic_context'
|
3
4
|
|
@@ -6,9 +7,9 @@ describe 'PragmaticContext integration' do
|
|
6
7
|
class DummyLicense
|
7
8
|
include ActiveTriples::RDFSource
|
8
9
|
include PragmaticContext::Contextualizable
|
9
|
-
property :title, :predicate => RDF::DC.title
|
10
|
+
property :title, :predicate => RDF::Vocab::DC.title
|
10
11
|
|
11
|
-
contextualize :title, :as => RDF::DC.title.to_s
|
12
|
+
contextualize :title, :as => RDF::Vocab::DC.title.to_s
|
12
13
|
end
|
13
14
|
|
14
15
|
class DummyResource
|
@@ -16,11 +17,12 @@ describe 'PragmaticContext integration' do
|
|
16
17
|
include PragmaticContext::Contextualizable
|
17
18
|
|
18
19
|
configure :type => RDF::URI('http://example.org/SomeClass')
|
19
|
-
property :license, :predicate => RDF::DC.license,
|
20
|
-
|
20
|
+
property :license, :predicate => RDF::Vocab::DC.license,
|
21
|
+
:class_name => DummyLicense
|
22
|
+
property :title, :predicate => RDF::Vocab::DC.title
|
21
23
|
|
22
|
-
contextualize :title, :as => RDF::DC.title.to_s
|
23
|
-
contextualize :license, :as => RDF::DC.license.to_s
|
24
|
+
contextualize :title, :as => RDF::Vocab::DC.title.to_s
|
25
|
+
contextualize :license, :as => RDF::Vocab::DC.license.to_s
|
24
26
|
end
|
25
27
|
|
26
28
|
license.title = 'cc'
|
@@ -30,8 +32,8 @@ describe 'PragmaticContext integration' do
|
|
30
32
|
end
|
31
33
|
|
32
34
|
after do
|
33
|
-
Object.send(:remove_const, "DummyResource")
|
34
|
-
Object.send(:remove_const, "DummyLicense")
|
35
|
+
Object.send(:remove_const, "DummyResource")
|
36
|
+
Object.send(:remove_const, "DummyLicense")
|
35
37
|
end
|
36
38
|
|
37
39
|
subject { DummyResource.new('http://example.org/test') }
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'coveralls'
|
2
3
|
Coveralls.wear!
|
3
4
|
|
@@ -5,12 +6,16 @@ require 'bundler/setup'
|
|
5
6
|
Bundler.setup
|
6
7
|
|
7
8
|
require 'rdf/spec'
|
9
|
+
require 'rdf/vocab'
|
10
|
+
require 'webmock/rspec'
|
8
11
|
require 'active_triples'
|
9
12
|
|
10
13
|
require 'pry' unless ENV["CI"]
|
11
14
|
|
12
15
|
Dir['./spec/support/**/*.rb'].each { |f| require f }
|
13
16
|
|
17
|
+
WebMock.disable_net_connect!
|
18
|
+
|
14
19
|
RSpec.configure do |config|
|
15
20
|
config.color = true
|
16
21
|
config.tty = true
|
@@ -1,17 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
shared_examples_for "an ActiveModel" do
|
2
|
-
subject {
|
3
|
+
subject { am_lint_class.new }
|
3
4
|
|
4
5
|
describe '#to_key' do
|
5
6
|
it 'should respond' do
|
6
7
|
expect(subject).to respond_to :to_key
|
7
8
|
end
|
8
9
|
|
9
|
-
|
10
|
-
# @todo FIXME: this is wrong according to
|
11
|
-
# http://api.rubyonrails.org/classes/ActiveModel/Conversion.html#method-i-to_key
|
12
|
-
xit 'should return nil when #persisted? is false ' do
|
10
|
+
it 'should return an array of keys ' do
|
13
11
|
def subject.persisted?() false end
|
14
|
-
expect(subject.to_key).to
|
12
|
+
expect(subject.to_key).to contain_exactly(subject.id)
|
15
13
|
end
|
16
14
|
end
|
17
15
|
|
@@ -1,13 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
class BasicPersistable
|
2
|
-
include ActiveTriples::
|
3
|
-
|
4
|
-
attr_reader :graph
|
5
|
-
|
6
|
-
def initialize
|
7
|
-
@graph = RDF::Graph.new
|
8
|
-
end
|
9
|
-
|
10
|
-
def rdf_subject
|
11
|
-
RDF::Node.new
|
12
|
-
end
|
3
|
+
include ActiveTriples::RDFSource
|
13
4
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec::Matchers.define :be_a_relation_containing do |*expected|
|
5
|
+
match do |actual|
|
6
|
+
expect(actual.class).to eq ActiveTriples::Relation
|
7
|
+
expect(actual).to contain_exactly(*expected)
|
8
|
+
true
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
shared_examples 'a persistence strategy' do
|
2
3
|
shared_context 'with changes' do
|
3
4
|
before do
|
4
|
-
subject.
|
5
|
+
subject.source <<
|
6
|
+
RDF::Statement.new(RDF::Node.new, RDF::Vocab::DC.title, 'moomin')
|
5
7
|
end
|
6
8
|
end
|
7
9
|
|
@@ -18,19 +20,4 @@ shared_examples 'a persistence strategy' do
|
|
18
20
|
end
|
19
21
|
end
|
20
22
|
end
|
21
|
-
|
22
|
-
describe '#persisted?' do
|
23
|
-
context 'before persist!' do
|
24
|
-
it 'returns false' do
|
25
|
-
expect(subject).not_to be_persisted
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context 'after persist!' do
|
30
|
-
it 'returns true' do
|
31
|
-
subject.persist!
|
32
|
-
expect(subject).to be_persisted
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
23
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-triples
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Johnson
|
@@ -9,36 +9,36 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-04-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdf
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - '='
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 1.
|
20
|
+
version: '1.99'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - '='
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 1.
|
27
|
+
version: '1.99'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: linkeddata
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '1.
|
34
|
+
version: '1.99'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '1.
|
41
|
+
version: '1.99'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: activemodel
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,16 +113,16 @@ dependencies:
|
|
113
113
|
name: rdf-spec
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
|
-
- - "
|
116
|
+
- - "~>"
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version: '
|
118
|
+
version: '1.99'
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
|
-
- - "
|
123
|
+
- - "~>"
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: '
|
125
|
+
version: '1.99'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: coveralls
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -237,6 +237,7 @@ files:
|
|
237
237
|
- lib/active_triples/repositories.rb
|
238
238
|
- lib/active_triples/resource.rb
|
239
239
|
- lib/active_triples/schema.rb
|
240
|
+
- lib/active_triples/undefined_property_error.rb
|
240
241
|
- lib/active_triples/version.rb
|
241
242
|
- spec/active_triples/configurable_spec.rb
|
242
243
|
- spec/active_triples/configuration_spec.rb
|
@@ -249,17 +250,24 @@ files:
|
|
249
250
|
- spec/active_triples/persistence_strategies/persistence_strategy_spec.rb
|
250
251
|
- spec/active_triples/persistence_strategies/repository_strategy_spec.rb
|
251
252
|
- spec/active_triples/properties_spec.rb
|
253
|
+
- spec/active_triples/property_builder_spec.rb
|
252
254
|
- spec/active_triples/property_spec.rb
|
253
255
|
- spec/active_triples/rdf_source_spec.rb
|
256
|
+
- spec/active_triples/reflection_spec.rb
|
254
257
|
- spec/active_triples/relation_spec.rb
|
255
258
|
- spec/active_triples/repositories_spec.rb
|
256
259
|
- spec/active_triples/resource_spec.rb
|
257
260
|
- spec/active_triples/schema_spec.rb
|
258
261
|
- spec/active_triples_spec.rb
|
262
|
+
- spec/integration/dummies/dummy_resource_a.rb
|
263
|
+
- spec/integration/dummies/dummy_resource_b.rb
|
264
|
+
- spec/integration/parent_persistence_spec.rb
|
265
|
+
- spec/integration/reciprocal_properties_spec.rb
|
259
266
|
- spec/pragmatic_context_spec.rb
|
260
267
|
- spec/spec_helper.rb
|
261
268
|
- spec/support/active_model_lint.rb
|
262
269
|
- spec/support/dummies/basic_persistable.rb
|
270
|
+
- spec/support/matchers.rb
|
263
271
|
- spec/support/shared_examples/persistence_strategy.rb
|
264
272
|
homepage: https://github.com/no-reply/ActiveTriples
|
265
273
|
licenses:
|
@@ -286,4 +294,3 @@ signing_key:
|
|
286
294
|
specification_version: 4
|
287
295
|
summary: RDF graphs in ActiveModel wrappers.
|
288
296
|
test_files: []
|
289
|
-
has_rdoc:
|