active-triples 0.8.1 → 0.8.2

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +8 -9
  3. data/CHANGES.md +69 -0
  4. data/Gemfile +0 -2
  5. data/Guardfile +1 -2
  6. data/active-triples.gemspec +3 -3
  7. data/lib/active/triples.rb +1 -0
  8. data/lib/active_triples.rb +4 -0
  9. data/lib/active_triples/configurable.rb +3 -1
  10. data/lib/active_triples/configuration.rb +1 -0
  11. data/lib/active_triples/configuration/item.rb +1 -0
  12. data/lib/active_triples/configuration/item_factory.rb +1 -0
  13. data/lib/active_triples/configuration/merge_item.rb +5 -2
  14. data/lib/active_triples/extension_strategy.rb +1 -0
  15. data/lib/active_triples/identifiable.rb +1 -0
  16. data/lib/active_triples/list.rb +2 -0
  17. data/lib/active_triples/nested_attributes.rb +1 -1
  18. data/lib/active_triples/node_config.rb +5 -3
  19. data/lib/active_triples/persistable.rb +1 -0
  20. data/lib/active_triples/persistence_strategies/parent_strategy.rb +104 -29
  21. data/lib/active_triples/persistence_strategies/persistence_strategy.rb +15 -7
  22. data/lib/active_triples/persistence_strategies/repository_strategy.rb +26 -22
  23. data/lib/active_triples/properties.rb +84 -6
  24. data/lib/active_triples/property.rb +35 -4
  25. data/lib/active_triples/property_builder.rb +38 -4
  26. data/lib/active_triples/rdf_source.rb +225 -75
  27. data/lib/active_triples/reflection.rb +42 -3
  28. data/lib/active_triples/relation.rb +330 -73
  29. data/lib/active_triples/repositories.rb +4 -2
  30. data/lib/active_triples/resource.rb +1 -0
  31. data/lib/active_triples/schema.rb +1 -0
  32. data/lib/active_triples/undefined_property_error.rb +27 -0
  33. data/lib/active_triples/version.rb +2 -1
  34. data/spec/active_triples/configurable_spec.rb +3 -2
  35. data/spec/active_triples/configuration_spec.rb +2 -1
  36. data/spec/active_triples/extension_strategy_spec.rb +2 -1
  37. data/spec/active_triples/identifiable_spec.rb +7 -11
  38. data/spec/active_triples/list_spec.rb +1 -4
  39. data/spec/active_triples/nested_attributes_spec.rb +4 -3
  40. data/spec/active_triples/persistable_spec.rb +4 -1
  41. data/spec/active_triples/persistence_strategies/parent_strategy_spec.rb +141 -11
  42. data/spec/active_triples/persistence_strategies/persistence_strategy_spec.rb +1 -0
  43. data/spec/active_triples/persistence_strategies/repository_strategy_spec.rb +32 -17
  44. data/spec/active_triples/properties_spec.rb +68 -33
  45. data/spec/active_triples/property_builder_spec.rb +36 -0
  46. data/spec/active_triples/property_spec.rb +15 -1
  47. data/spec/active_triples/rdf_source_spec.rb +544 -6
  48. data/spec/active_triples/reflection_spec.rb +78 -0
  49. data/spec/active_triples/relation_spec.rb +505 -3
  50. data/spec/active_triples/repositories_spec.rb +3 -1
  51. data/spec/active_triples/resource_spec.rb +90 -147
  52. data/spec/active_triples/schema_spec.rb +3 -2
  53. data/spec/active_triples_spec.rb +1 -0
  54. data/spec/integration/dummies/dummy_resource_a.rb +6 -0
  55. data/spec/integration/dummies/dummy_resource_b.rb +6 -0
  56. data/spec/integration/parent_persistence_spec.rb +18 -0
  57. data/spec/integration/reciprocal_properties_spec.rb +69 -0
  58. data/spec/pragmatic_context_spec.rb +10 -8
  59. data/spec/spec_helper.rb +5 -0
  60. data/spec/support/active_model_lint.rb +4 -6
  61. data/spec/support/dummies/basic_persistable.rb +2 -11
  62. data/spec/support/matchers.rb +11 -0
  63. data/spec/support/shared_examples/persistence_strategy.rb +3 -16
  64. metadata +20 -13
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveTriples
2
3
  ##
3
4
  # Defines module methods for registering an RDF::Repository for
@@ -26,9 +27,10 @@ module ActiveTriples
26
27
  #
27
28
  # @return [RDF::Repository] gives the original repository on success
28
29
  #
29
- # @raise [RuntimeError] raised if the repository is not an `RDF::Repository`
30
+ # @raise [ArgumentError] raised if the repository is not an `RDF::Repository`
30
31
  def add_repository(name, repo)
31
- raise "Repositories must be an RDF::Repository" unless repo.kind_of? RDF::Repository
32
+ raise ArgumentError, "Repositories must be an RDF::Repository" unless
33
+ repo.kind_of? RDF::Repository
32
34
  repositories[name] = repo
33
35
  end
34
36
  module_function :add_repository
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'deprecation'
2
3
 
3
4
  module ActiveTriples
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveTriples
2
3
  ##
3
4
  # Super class which provides a simple property DSL for defining property ->
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ module ActiveTriples
3
+ ##
4
+ # An error class to be raised when attempting to reflect on an undefined
5
+ # property.
6
+ #
7
+ # @example
8
+ # begin
9
+ # my_source.set_value(:fake_property, 'blah')
10
+ # rescue ActiveTriples::UndefinedPropertyError => e
11
+ # e.property => 'fake_property'
12
+ # e.klass => 'MySourceClass'
13
+ # end
14
+ #
15
+ class UndefinedPropertyError < ArgumentError
16
+ attr_reader :property, :klass
17
+
18
+ def initialize(property, klass)
19
+ @property = property
20
+ @klass = klass
21
+ end
22
+
23
+ def message
24
+ "The property `#{@property}` is not defined on class '#{@klass}'"
25
+ end
26
+ end
27
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveTriples
2
- VERSION = "0.8.1".freeze
3
+ VERSION = "0.8.2".freeze
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "spec_helper"
2
3
 
3
4
  describe ActiveTriples::Configurable do
@@ -22,7 +23,7 @@ describe ActiveTriples::Configurable do
22
23
 
23
24
  describe '#configure' do
24
25
  before do
25
- DummyConfigurable.configure base_uri: "http://example.org/base", type: RDF::RDFS.Class, rdf_label: RDF::DC.title
26
+ DummyConfigurable.configure base_uri: "http://example.org/base", type: RDF::RDFS.Class, rdf_label: RDF::Vocab::DC.title
26
27
  end
27
28
 
28
29
  it 'should set a base uri' do
@@ -35,7 +36,7 @@ describe ActiveTriples::Configurable do
35
36
  end
36
37
 
37
38
  it 'should set an rdf_label' do
38
- expect(DummyConfigurable.rdf_label).to eq RDF::DC.title
39
+ expect(DummyConfigurable.rdf_label).to eq RDF::Vocab::DC.title
39
40
  end
40
41
 
41
42
  it 'should set a type' do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe ActiveTriples::Configuration do
@@ -43,7 +44,7 @@ RSpec.describe ActiveTriples::Configuration do
43
44
  describe "#merge" do
44
45
  let(:starting_hash) do
45
46
  {
46
- :rdf_label => RDF::SKOS.prefLabel,
47
+ :rdf_label => RDF::Vocab::SKOS.prefLabel,
47
48
  :type => RDF::RDFS.Class
48
49
  }
49
50
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe ActiveTriples::ExtensionStrategy do
@@ -6,7 +7,7 @@ RSpec.describe ActiveTriples::ExtensionStrategy do
6
7
  describe ".apply" do
7
8
  it "should copy the property to the asset" do
8
9
  asset = build_asset
9
- property = build_property("name", {:predicate => RDF::DC.title})
10
+ property = build_property("name", {:predicate => RDF::Vocab::DC.title})
10
11
 
11
12
  subject.apply(asset, property)
12
13
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
  require 'active_model'
3
4
 
@@ -19,12 +20,12 @@ describe ActiveTriples::Identifiable do
19
20
  before do
20
21
  class MyResource
21
22
  include ActiveTriples::RDFSource
22
- property :relation, predicate: RDF::DC.relation, class_name: 'ActiveExample'
23
+ property :relation, predicate: RDF::Vocab::DC.relation, class_name: 'ActiveExample'
23
24
  end
24
25
 
25
- klass.property :title, predicate: RDF::DC.title
26
- klass.property :identifier, predicate: RDF::DC.identifier
27
- klass.property :description, predicate: RDF::DC.description
26
+ klass.property :title, predicate: RDF::Vocab::DC.title
27
+ klass.property :identifier, predicate: RDF::Vocab::DC.identifier
28
+ klass.property :description, predicate: RDF::Vocab::DC.description
28
29
 
29
30
  subject.resource.title = 'Moomin Valley in November'
30
31
  subject.resource.identifier = 'moomvember'
@@ -84,7 +85,7 @@ describe ActiveTriples::Identifiable do
84
85
 
85
86
  describe '::properties' do
86
87
  before do
87
- klass.property :title, :predicate => RDF::DC.title
88
+ klass.property :title, :predicate => RDF::Vocab::DC.title
88
89
  end
89
90
  it 'can be set' do
90
91
  expect(klass.properties).to include 'title'
@@ -116,7 +117,7 @@ describe ActiveTriples::Identifiable do
116
117
  end
117
118
 
118
119
  it 'does not effect other classes' do
119
- klass.property :identifier, :predicate => RDF::DC.identifier
120
+ klass.property :identifier, :predicate => RDF::Vocab::DC.identifier
120
121
  expect(ActiveExampleTwo.properties).to be_empty
121
122
  end
122
123
  end
@@ -140,11 +141,6 @@ describe ActiveTriples::Identifiable do
140
141
  it 'has a parent' do
141
142
  expect(parent.relation.first.parent).to eq parent
142
143
  end
143
-
144
- it 'has a parent after reload' do
145
- parent.relation.node_cache = {}
146
- expect(parent.relation.first.parent).to eq parent
147
- end
148
144
  end
149
145
  end
150
146
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
  require 'nokogiri'
3
4
  require 'linkeddata'
@@ -31,10 +32,6 @@ describe ActiveTriples::List do
31
32
  expect(subject.subject).not_to eq RDF.nil
32
33
  end
33
34
 
34
- it 'has a non-nil subject' do
35
- expect(subject.subject).not_to eq RDF.nil
36
- end
37
-
38
35
  it 'has type of rdf:List' do
39
36
  expect(subject.type.first).to eq RDF.List
40
37
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe "nesting attribute behavior" do
@@ -28,7 +29,7 @@ describe "nesting attribute behavior" do
28
29
  include ActiveTriples::RDFSource
29
30
  property :topic, predicate: DummyMADS.Topic, class_name: "Topic"
30
31
  property :personalName, predicate: DummyMADS.PersonalName, class_name: "PersonalName"
31
- property :title, predicate: RDF::DC.title
32
+ property :title, predicate: RDF::Vocab::DC.title
32
33
 
33
34
 
34
35
  accepts_nested_attributes_for :topic, :personalName
@@ -149,12 +150,12 @@ describe "nesting attribute behavior" do
149
150
  before do
150
151
  class SpecResource
151
152
  include ActiveTriples::RDFSource
152
- property :parts, predicate: RDF::DC.hasPart, :class_name=>'Component'
153
+ property :parts, predicate: RDF::Vocab::DC.hasPart, :class_name=>'Component'
153
154
  accepts_nested_attributes_for :parts, allow_destroy: true
154
155
 
155
156
  class Component
156
157
  include ActiveTriples::RDFSource
157
- property :label, predicate: RDF::DC.title
158
+ property :label, predicate: RDF::Vocab::DC.title
158
159
  end
159
160
  end
160
161
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe ActiveTriples::Persistable do
@@ -5,7 +6,9 @@ describe ActiveTriples::Persistable do
5
6
 
6
7
  let(:klass) { Class.new { include ActiveTriples::Persistable } }
7
8
 
8
- let(:statement) { RDF::Statement(RDF::Node.new, RDF::DC.title, 'Moomin') }
9
+ let(:statement) do
10
+ RDF::Statement(RDF::Node.new, RDF::Vocab::DC.title, 'Moomin')
11
+ end
9
12
 
10
13
  it 'raises an error with no #graph implementation' do
11
14
  expect { subject << statement }.to raise_error(NameError, /graph/)
@@ -1,25 +1,121 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe ActiveTriples::ParentStrategy do
4
5
  subject { described_class.new(rdf_source) }
5
6
  let(:rdf_source) { BasicPersistable.new }
6
-
7
+
7
8
  shared_context 'with a parent' do
9
+ let(:parent) { BasicPersistable.new }
10
+
8
11
  before do
9
12
  subject.parent = parent
10
- end
11
13
 
12
- let(:parent) { BasicPersistable.new }
14
+ rdf_source.set_persistence_strategy(described_class)
15
+ rdf_source.persistence_strategy.parent = parent
16
+ end
13
17
  end
14
18
 
15
19
  context 'with a parent' do
16
20
  include_context 'with a parent'
17
21
  it_behaves_like 'a persistence strategy'
22
+
23
+ describe '#persisted?' do
24
+ context 'before persist!' do
25
+ it 'returns false' do
26
+ expect(subject).not_to be_persisted
27
+ end
28
+ end
29
+
30
+ context 'after persist!' do
31
+ context "when the parent is not persisted" do
32
+ before { subject.persist! }
33
+ it { is_expected.not_to be_persisted }
34
+ end
35
+
36
+ context "when the parent is persisted" do
37
+ before do
38
+ allow(parent).to receive(:persisted?).and_return(true)
39
+ subject.persist!
40
+ end
41
+ it { is_expected.to be_persisted }
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ describe '#destroy' do
48
+ include_context 'with a parent'
49
+
50
+ before do
51
+ rdf_source.insert(*statements)
52
+ subject.persist!
53
+ end
54
+
55
+ let(:statements) do
56
+ [RDF::Statement(subject.source.rdf_subject, RDF::Vocab::DC.title, 'moomin'),
57
+ RDF::Statement(:node, RDF::Vocab::DC.relation, subject.source.rdf_subject),
58
+ RDF::Statement(:node, RDF::Vocab::DC.relation, :other_node)]
59
+ end
60
+
61
+ it 'removes graph from the parent' do
62
+ subject.destroy
63
+
64
+ statements.each do |statement|
65
+ expect(subject.parent.statements).not_to have_statement statement
66
+ end
67
+ end
68
+
69
+ it 'removes subjects from parent' do
70
+ subject.destroy
71
+ expect(subject.parent).not_to have_subject(rdf_source)
72
+ end
73
+
74
+ it 'removes objects from parent' do
75
+ subject.destroy
76
+ expect(subject.parent).not_to have_object(rdf_source)
77
+ end
78
+ end
79
+
80
+ describe '#ancestors' do
81
+ it 'raises NilParentError when enumerating' do
82
+ expect { subject.ancestors.next }
83
+ .to raise_error described_class::NilParentError
84
+ end
85
+
86
+ context 'with parent' do
87
+ include_context 'with a parent'
88
+
89
+ it 'gives the parent' do
90
+ expect(subject.ancestors).to contain_exactly(parent)
91
+ end
92
+
93
+ context 'and nested parents' do
94
+ let(:parents) do
95
+ [double('second', persistence_strategy: double('strategy2')),
96
+ double('third', persistence_strategy: double('strategy3'))]
97
+ end
98
+ let(:last) { double('last', persistence_strategy: double('last_strategy')) }
99
+
100
+ it 'gives all ancestors' do
101
+ allow(parent.persistence_strategy)
102
+ .to receive(:parent).and_return(parents.first)
103
+ allow(parents.first.persistence_strategy)
104
+ .to receive(:parent).and_return(parents[1])
105
+ allow(parents[1].persistence_strategy)
106
+ .to receive(:parent).and_return(last)
107
+
108
+ expect(subject.ancestors)
109
+ .to contain_exactly(*(parents << parent << last))
110
+ end
111
+ end
112
+ end
18
113
  end
19
114
 
20
115
  describe '#final_parent' do
21
116
  it 'raises an error with no parent' do
22
- expect { subject.final_parent }.to raise_error described_class::NilParentError
117
+ expect { subject.final_parent }
118
+ .to raise_error described_class::NilParentError
23
119
  end
24
120
 
25
121
  context 'with single parent' do
@@ -32,22 +128,20 @@ describe ActiveTriples::ParentStrategy do
32
128
 
33
129
  context 'with parent chain' do
34
130
  include_context 'with a parent'
35
- let(:last) { double('last') }
131
+ let(:last) { double('last', persistence_strategy: nil) }
36
132
 
37
133
  it 'gives last parent terminating when no futher parents given' do
38
- allow(parent).to receive(:parent).and_return(last)
134
+ allow(parent.persistence_strategy).to receive(:parent).and_return(last)
39
135
  expect(subject.final_parent).to eq last
40
136
  end
41
137
 
42
138
  it 'gives last parent terminating parent is nil' do
43
- allow(parent).to receive(:parent).and_return(last)
44
- allow(last).to receive(:parentt).and_return(nil)
139
+ allow(parent.persistence_strategy).to receive(:parent).and_return(last)
45
140
  expect(subject.final_parent).to eq last
46
141
  end
47
142
 
48
143
  it 'gives last parent terminating parent is same as current' do
49
- allow(parent).to receive(:parent).and_return(last)
50
- allow(last).to receive(:parentt).and_return(last)
144
+ allow(parent.persistence_strategy).to receive(:parent).and_return(last)
51
145
  expect(subject.final_parent).to eq last
52
146
  end
53
147
  end
@@ -83,7 +177,8 @@ describe ActiveTriples::ParentStrategy do
83
177
  include_context 'with a parent'
84
178
 
85
179
  it 'writes to #final_parent graph' do
86
- rdf_source << RDF::Statement.new(RDF::Node.new, RDF::DC.title, 'moomin')
180
+ rdf_source << [RDF::Node.new, RDF::Vocab::DC.title, 'moomin']
181
+
87
182
  subject.persist!
88
183
  expect(subject.final_parent.statements)
89
184
  .to contain_exactly *rdf_source.statements
@@ -91,3 +186,38 @@ describe ActiveTriples::ParentStrategy do
91
186
  end
92
187
  end
93
188
  end
189
+
190
+ describe ActiveTriples::ParentStrategy::Ancestors do
191
+ subject { described_class.new(rdf_source) }
192
+
193
+ let(:rdf_source) { BasicPersistable.new }
194
+
195
+ describe '#each' do
196
+ it 'raises NilParentError' do
197
+ expect { subject.each }
198
+ .to raise_error ActiveTriples::ParentStrategy::NilParentError
199
+ end
200
+
201
+ context 'with parents' do
202
+ let(:parent) { BasicPersistable.new }
203
+ let(:last) { BasicPersistable.new }
204
+
205
+ before do
206
+ parent.set_persistence_strategy(ActiveTriples::ParentStrategy)
207
+ parent.persistence_strategy.parent = last
208
+ rdf_source.set_persistence_strategy(ActiveTriples::ParentStrategy)
209
+ rdf_source.persistence_strategy.parent = parent
210
+ end
211
+
212
+ it { expect(subject.each).to be_a Enumerator }
213
+
214
+ it 'enumerates ancestors' do
215
+ expect(subject.each).to contain_exactly(parent, last)
216
+ end
217
+
218
+ it 'yields ancestors' do
219
+ expect { |b| subject.each(&b) }.to yield_successive_args(parent, last)
220
+ end
221
+ end
222
+ end
223
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe ActiveTriples::PersistenceStrategy do
@@ -1,19 +1,40 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe ActiveTriples::RepositoryStrategy do
4
5
  subject { described_class.new(rdf_source) }
5
- let(:rdf_source) { ActiveTriples::Resource.new }
6
+ let(:source_class) { class MySource; include ActiveTriples::RDFSource; end }
7
+ let(:rdf_source) { source_class.new }
6
8
 
7
9
  let(:statement) do
8
- RDF::Statement.new(rdf_source.to_term, RDF::DC.title, 'moomin')
10
+ RDF::Statement.new(rdf_source.to_term, RDF::Vocab::DC.title, 'moomin')
9
11
  end
10
12
 
11
13
  it_behaves_like 'a persistence strategy'
12
14
 
15
+
16
+ describe '#persisted?' do
17
+ context 'before persist!' do
18
+ it 'returns false' do
19
+ expect(subject).not_to be_persisted
20
+ end
21
+ end
22
+
23
+ context 'after persist!' do
24
+ it 'returns true' do
25
+ subject.persist!
26
+ expect(subject).to be_persisted
27
+ end
28
+ end
29
+ end
30
+
13
31
  shared_context 'with repository' do
32
+ let(:repo) { RDF::Repository.new }
14
33
  before do
15
- allow(subject.obj.singleton_class).to receive(:repository)
16
- .and_return(:my_repo)
34
+ source_class.configure repository: :my_repo
35
+
36
+ allow(ActiveTriples::Repositories.repositories)
37
+ .to receive(:[]).with(:my_repo).and_return(repo)
17
38
  end
18
39
  end
19
40
 
@@ -33,7 +54,7 @@ describe ActiveTriples::RepositoryStrategy do
33
54
 
34
55
  it 'leaves other resources unchanged' do
35
56
  subject.repository <<
36
- RDF::Statement(RDF::Node.new, RDF::DC.title, 'snorkmaiden')
57
+ RDF::Statement(RDF::Node.new, RDF::Vocab::DC.title, 'snorkmaiden')
37
58
  expect { subject.destroy }
38
59
  .not_to change { subject.repository.count }
39
60
  end
@@ -45,7 +66,7 @@ describe ActiveTriples::RepositoryStrategy do
45
66
 
46
67
  context 'with subjects' do
47
68
  before do
48
- subject.obj.set_subject! RDF::URI('http://example.org/moomin')
69
+ subject.source.set_subject! RDF::URI('http://example.org/moomin')
49
70
  end
50
71
 
51
72
  include_examples 'destroy resource'
@@ -80,13 +101,7 @@ describe ActiveTriples::RepositoryStrategy do
80
101
 
81
102
  context 'with unknown content in repo' do
82
103
  include_context 'with repository' do
83
- before do
84
- allow(ActiveTriples::Repositories.repositories)
85
- .to receive(:[]).with(:my_repo).and_return(repo)
86
- repo << statement
87
- end
88
-
89
- let(:repo) { RDF::Repository.new }
104
+ before { repo << statement }
90
105
  end
91
106
  end
92
107
  end
@@ -103,16 +118,16 @@ describe ActiveTriples::RepositoryStrategy do
103
118
  context 'with repository configured' do
104
119
  include_context 'with repository'
105
120
 
106
- let(:repo) { double('repo') }
107
-
108
121
  it 'when repository is not registered raises an error' do
122
+ source_class.configure repository: :no_repo
123
+
124
+ allow(ActiveTriples::Repositories.repositories)
125
+ .to receive(:[]).with(:no_repo).and_call_original
109
126
  expect { subject.repository }
110
127
  .to raise_error ActiveTriples::RepositoryNotFoundError
111
128
  end
112
129
 
113
130
  it 'gets repository' do
114
- allow(ActiveTriples::Repositories.repositories)
115
- .to receive(:[]).with(:my_repo).and_return(repo)
116
131
  expect(subject.repository).to eq repo
117
132
  end
118
133
  end