rmodel 1.0.0 → 1.1.0
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.
- checksums.yaml +4 -4
- data/README.md +65 -3
- data/examples/inject_repo.rb +37 -0
- data/lib/rmodel.rb +3 -0
- data/lib/rmodel/injector.rb +42 -0
- data/lib/rmodel/mongo/query.rb +13 -0
- data/lib/rmodel/mongo/source.rb +0 -5
- data/lib/rmodel/repository.rb +2 -0
- data/lib/rmodel/repository_ext/injectable.rb +9 -0
- data/lib/rmodel/repository_ext/scopable.rb +0 -4
- data/lib/rmodel/repository_ext/timestampable.rb +3 -1
- data/lib/rmodel/scope.rb +5 -0
- data/lib/rmodel/sequel/query.rb +11 -0
- data/lib/rmodel/sequel/source.rb +1 -1
- data/lib/rmodel/version.rb +1 -1
- data/rmodel.gemspec +1 -0
- data/spec/rmodel/mongo/repository_spec.rb +4 -0
- data/spec/rmodel/sequel/repository_spec.rb +6 -1
- data/spec/rmodel/sequel/source_spec.rb +2 -1
- data/spec/shared/repository/injectable.rb +91 -0
- data/spec/shared/repository/scopable.rb +16 -6
- data/spec/shared/repository/timestampable.rb +4 -0
- metadata +23 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc6dc338effa3435151dfc878fb4c211f3e7a389
|
4
|
+
data.tar.gz: 6c794461936c774923c7ebdcf08c762a3ddf8876
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 363d01b511dfa3a9db13a896701fc624a04ee9a83a64fe4fd33ae6859fa7178cb6a20255d665e938709843cbcc1efa9c781b4d165724d6665119f1860e89f041
|
7
|
+
data.tar.gz: 0aa72c78a0b9f7c110488b6518d1d5a0b706a14ef77a269e5b7f69b0f3061a0d622e43d74e524c47e361355792aa2610a2baac5ea2ac15d12e9834659b2349ed
|
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
[](https://travis-ci.org/alexei-lexx/rmodel)
|
2
|
+
[](https://codeclimate.com/github/alexei-lexx/rmodel)
|
2
3
|
|
3
4
|
# Rmodel
|
4
5
|
|
@@ -8,9 +9,9 @@
|
|
8
9
|
* [Scopes](#scopes)
|
9
10
|
* [Timestamps](#timestamps)
|
10
11
|
* [Sugar methods](#sugar-methods)
|
11
|
-
* [Advanced creation of repository](#advanced-creation-of-repository)
|
12
12
|
* [SQL repository](#sql-repository)
|
13
13
|
* [Embedded documents in MongoDB](#embedded-documents-in-mongodb)
|
14
|
+
* [Entity class as a repository](#entity-class-as-a-repository)
|
14
15
|
|
15
16
|
Rmodel is an ORM library, which tends to follow the SOLID principles.
|
16
17
|
|
@@ -165,15 +166,15 @@ a query builder for mongo.
|
|
165
166
|
Also it's possible to use scopes to run the multi-row operations.
|
166
167
|
|
167
168
|
```ruby
|
169
|
+
repo.fetch.have_email.find(1) # return an object with a given id or nil
|
168
170
|
repo.fetch.have_email.delete_all # simply run the operation against the database
|
169
171
|
repo.fetch.have_email.destroy_all # extract users and run repo.destroy for the each one
|
170
|
-
|
172
|
+
repo.fetch.count # 0
|
171
173
|
```
|
172
174
|
|
173
175
|
If you have no scopes then just call
|
174
176
|
|
175
177
|
```ruby
|
176
|
-
repo.all
|
177
178
|
repo.delete_all
|
178
179
|
repo.destroy_all
|
179
180
|
```
|
@@ -356,6 +357,67 @@ repo.insert(flat)
|
|
356
357
|
p repo.find(flat.id)
|
357
358
|
```
|
358
359
|
|
360
|
+
### Entity class as a repository
|
361
|
+
|
362
|
+
Ruby on Rails lovers would like to use the entity's class to fetch, create,
|
363
|
+
update and delete objects. For example `User.find(1)`, `User.create(john)`
|
364
|
+
instead of addressing to the repository object `user_repository.find(1)`.
|
365
|
+
|
366
|
+
Rmodel has a special feature to resemble the Active Record style - the
|
367
|
+
repository injector. Look at the example below.
|
368
|
+
|
369
|
+
```ruby
|
370
|
+
require 'rmodel'
|
371
|
+
|
372
|
+
DB = Mongo::Client.new(['localhost'], database: 'test')
|
373
|
+
|
374
|
+
class UserRepository < Rmodel::Repository
|
375
|
+
scope :start_with do |s|
|
376
|
+
where(name: { '$regex' => "^#{s}", '$options' => 'i' })
|
377
|
+
end
|
378
|
+
|
379
|
+
def initialize
|
380
|
+
source = Rmodel::Mongo::Source.new(DB, :users)
|
381
|
+
mapper = Rmodel::Mongo::Mapper.new(User).define_attributes(:name, :email)
|
382
|
+
|
383
|
+
super(source, mapper)
|
384
|
+
end
|
385
|
+
|
386
|
+
def fetch_johns
|
387
|
+
fetch.start_with('john')
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
User = Struct.new(:id, :name, :email) do
|
392
|
+
include UserRepository.injector
|
393
|
+
end
|
394
|
+
|
395
|
+
User.delete_all
|
396
|
+
|
397
|
+
john = User.new(nil, 'John', 'john@example.com')
|
398
|
+
User.insert(john)
|
399
|
+
|
400
|
+
john.name = 'John Smith'
|
401
|
+
User.update(john)
|
402
|
+
|
403
|
+
User.insert(User.new)
|
404
|
+
|
405
|
+
p User.fetch.start_with('J').count
|
406
|
+
p User.fetch_johns.count
|
407
|
+
```
|
408
|
+
|
409
|
+
Here is the explanation:
|
410
|
+
|
411
|
+
* `UserRepository.injector` is a module that delegates method calls to the
|
412
|
+
underlying repository. It can be included to the class (like User) or extend the
|
413
|
+
object.
|
414
|
+
* UserRepository must have a constructor with an empty list of arguments.
|
415
|
+
* UserRepository is defined as usually. It can have scopes and custom instance
|
416
|
+
methods. All of them become available as methods of User.
|
417
|
+
* Remember `user_repo.find(1)`. Now it's available as `User.find(1)`.
|
418
|
+
* The same `user.fetch.start_with('a')` becomes `User.fetch.start_with('a')`.
|
419
|
+
* And the custom method is available as `User.fetch_johns`.
|
420
|
+
|
359
421
|
## Contributing
|
360
422
|
|
361
423
|
1. Fork it ( https://github.com/alexei-lexx/rmodel/fork )
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'rmodel'
|
2
|
+
|
3
|
+
DB = Mongo::Client.new(['localhost'], database: 'test')
|
4
|
+
|
5
|
+
class UserRepository < Rmodel::Repository
|
6
|
+
scope :start_with do |s|
|
7
|
+
where(name: { '$regex' => "^#{s}", '$options' => 'i' })
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
source = Rmodel::Mongo::Source.new(DB, :users)
|
12
|
+
mapper = Rmodel::Mongo::Mapper.new(User).define_attributes(:name, :email)
|
13
|
+
|
14
|
+
super(source, mapper)
|
15
|
+
end
|
16
|
+
|
17
|
+
def fetch_johns
|
18
|
+
fetch.start_with('john')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
User = Struct.new(:id, :name, :email) do
|
23
|
+
include UserRepository.injector
|
24
|
+
end
|
25
|
+
|
26
|
+
User.delete_all
|
27
|
+
|
28
|
+
john = User.new(nil, 'John', 'john@example.com')
|
29
|
+
User.insert(john)
|
30
|
+
|
31
|
+
john.name = 'John Smith'
|
32
|
+
User.update(john)
|
33
|
+
|
34
|
+
User.insert(User.new)
|
35
|
+
|
36
|
+
p User.fetch.start_with('J').count
|
37
|
+
p User.fetch_johns.count
|
data/lib/rmodel.rb
CHANGED
@@ -2,13 +2,16 @@ require 'active_support/inflector'
|
|
2
2
|
require 'rmodel/version'
|
3
3
|
require 'rmodel/errors'
|
4
4
|
require 'rmodel/scope'
|
5
|
+
require 'rmodel/injector'
|
5
6
|
require 'rmodel/repository'
|
6
7
|
require 'rmodel/uni_hash'
|
7
8
|
require 'rmodel/base_mapper'
|
8
9
|
require 'rmodel/array_mapper'
|
9
10
|
require 'rmodel/dummy_mapper'
|
11
|
+
require 'rmodel/mongo/query'
|
10
12
|
require 'rmodel/mongo/source'
|
11
13
|
require 'rmodel/mongo/mapper'
|
14
|
+
require 'rmodel/sequel/query'
|
12
15
|
require 'rmodel/sequel/source'
|
13
16
|
require 'rmodel/sequel/mapper'
|
14
17
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'lazy_object'
|
2
|
+
|
3
|
+
module Rmodel
|
4
|
+
class Injector < Module
|
5
|
+
def initialize(repository_class)
|
6
|
+
@repository = LazyObject.new { repository_class.new }
|
7
|
+
end
|
8
|
+
|
9
|
+
def included(base)
|
10
|
+
add_method_missing(base)
|
11
|
+
end
|
12
|
+
|
13
|
+
def extended(base)
|
14
|
+
included(base)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def add_method_missing(base)
|
20
|
+
repository = @repository
|
21
|
+
injector = self
|
22
|
+
|
23
|
+
base.define_singleton_method :method_missing do |name, *args|
|
24
|
+
if repository.respond_to?(name)
|
25
|
+
injector.send(:delegate_to_repository, self, name, *args)
|
26
|
+
else
|
27
|
+
super(name, *args)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def delegate_to_repository(base, name, *delegated_args)
|
33
|
+
repository = @repository
|
34
|
+
|
35
|
+
base.define_singleton_method name do |*args|
|
36
|
+
repository.public_send(name, *args)
|
37
|
+
end
|
38
|
+
|
39
|
+
base.public_send(name, *delegated_args)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/rmodel/mongo/source.rb
CHANGED
@@ -1,13 +1,8 @@
|
|
1
|
-
require 'origin'
|
2
1
|
require 'mongo'
|
3
2
|
|
4
3
|
module Rmodel
|
5
4
|
module Mongo
|
6
5
|
class Source
|
7
|
-
class Query
|
8
|
-
include Origin::Queryable
|
9
|
-
end
|
10
|
-
|
11
6
|
def initialize(connection, collection)
|
12
7
|
@connection = connection
|
13
8
|
raise ArgumentError, 'Connection is not setup' unless @connection
|
data/lib/rmodel/repository.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
require 'rmodel/repository_ext/sugarable'
|
2
2
|
require 'rmodel/repository_ext/timestampable'
|
3
3
|
require 'rmodel/repository_ext/scopable'
|
4
|
+
require 'rmodel/repository_ext/injectable'
|
4
5
|
|
5
6
|
module Rmodel
|
6
7
|
class Repository
|
7
8
|
include RepositoryExt::Sugarable
|
8
9
|
include RepositoryExt::Scopable
|
9
10
|
prepend RepositoryExt::Timestampable
|
11
|
+
extend RepositoryExt::Injectable
|
10
12
|
|
11
13
|
def initialize(source, mapper)
|
12
14
|
@source = source or raise ArgumentError, 'Source is not set up'
|
@@ -2,7 +2,9 @@ module Rmodel
|
|
2
2
|
module RepositoryExt
|
3
3
|
module Timestampable
|
4
4
|
def insert_one(object)
|
5
|
-
|
5
|
+
time = now
|
6
|
+
object.created_at = time if able_to_set_created_at?(object)
|
7
|
+
object.updated_at = time if able_to_set_updated_at?(object)
|
6
8
|
super
|
7
9
|
end
|
8
10
|
|
data/lib/rmodel/scope.rb
CHANGED
@@ -21,6 +21,11 @@ module Rmodel
|
|
21
21
|
@repo.destroy_all(self)
|
22
22
|
end
|
23
23
|
|
24
|
+
def find(id)
|
25
|
+
new_raw_query = @raw_query.find_by_id(id)
|
26
|
+
self.class.new(@repo, new_raw_query).first
|
27
|
+
end
|
28
|
+
|
24
29
|
def self.define_scope(name, &block)
|
25
30
|
define_method name do |*args|
|
26
31
|
new_raw_query = @raw_query.instance_exec(*args, &block)
|
data/lib/rmodel/sequel/source.rb
CHANGED
data/lib/rmodel/version.rb
CHANGED
data/rmodel.gemspec
CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency 'mongo', '~> 2.1'
|
24
24
|
spec.add_dependency 'origin'
|
25
25
|
spec.add_dependency 'sequel'
|
26
|
+
spec.add_dependency 'lazy_object'
|
26
27
|
|
27
28
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
28
29
|
spec.add_development_dependency 'rake'
|
@@ -24,7 +24,7 @@ RSpec.describe 'Repository with Sequel' do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
it_behaves_like 'initialization' do
|
27
|
-
before { create_database
|
27
|
+
before { create_database }
|
28
28
|
include_context 'definitions'
|
29
29
|
end
|
30
30
|
|
@@ -50,4 +50,9 @@ RSpec.describe 'Repository with Sequel' do
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
53
|
+
|
54
|
+
it_behaves_like 'injectable repository' do
|
55
|
+
before { create_database }
|
56
|
+
include_context 'definitions'
|
57
|
+
end
|
53
58
|
end
|
@@ -85,7 +85,8 @@ RSpec.describe Rmodel::Sequel::Source do
|
|
85
85
|
|
86
86
|
describe 'build_query' do
|
87
87
|
it 'returns the instance of Sequel::Dataset' do
|
88
|
-
expect(subject.build_query).to
|
88
|
+
expect(subject.build_query).to respond_to :select
|
89
|
+
expect(subject.build_query).to respond_to :order
|
89
90
|
end
|
90
91
|
end
|
91
92
|
|
@@ -0,0 +1,91 @@
|
|
1
|
+
RSpec.shared_examples 'injectable repository' do
|
2
|
+
describe '.injector' do
|
3
|
+
it 'is a module' do
|
4
|
+
expect(Rmodel::Repository.injector).to be_a Module
|
5
|
+
end
|
6
|
+
|
7
|
+
it 'returns the same instance each time' do
|
8
|
+
expected_injector = Rmodel::Repository.injector
|
9
|
+
expect(Rmodel::Repository.injector).to equal expected_injector
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
before do
|
14
|
+
stub_const 'Thing', Struct.new(:id, :name)
|
15
|
+
stub_const 'MyRepository', Class.new(Rmodel::Repository)
|
16
|
+
|
17
|
+
a_source = source
|
18
|
+
mapper = mapper_klass.new(Thing).define_attribute(:name)
|
19
|
+
|
20
|
+
MyRepository.class_eval do
|
21
|
+
define_method :initialize do
|
22
|
+
super(a_source, mapper)
|
23
|
+
end
|
24
|
+
|
25
|
+
def custom_method; end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:repository) do
|
30
|
+
MyRepository.injector.instance_variable_get('@repository').__target_object__
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when it's included in a class" do
|
34
|
+
before do
|
35
|
+
stub_const 'Host', Class.new
|
36
|
+
|
37
|
+
class Host
|
38
|
+
include MyRepository.injector
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'when no method is called' do
|
43
|
+
before { allow(MyRepository).to receive(:new) }
|
44
|
+
|
45
|
+
it "doesn't instantiate the repository" do
|
46
|
+
expect(MyRepository).not_to have_received(:new)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '.find' do
|
51
|
+
it 'is delegated to the repository' do
|
52
|
+
expect(repository).to receive(:find).with(1)
|
53
|
+
Host.find(1)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '.fetch' do
|
58
|
+
it 'is delegated to the repository' do
|
59
|
+
expect(repository).to receive(:fetch)
|
60
|
+
Host.fetch
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '.custom_method' do
|
65
|
+
it 'is delegated to the repository' do
|
66
|
+
expect(repository).to receive(:custom_method)
|
67
|
+
Host.custom_method
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'when it extends an object' do
|
73
|
+
let(:tester) { Object.new }
|
74
|
+
|
75
|
+
before { tester.extend MyRepository.injector }
|
76
|
+
|
77
|
+
describe '.find' do
|
78
|
+
it 'is delegated to the repository' do
|
79
|
+
expect(repository).to receive(:find).with(1)
|
80
|
+
tester.find(1)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe '.custom_method' do
|
85
|
+
it 'is delegated to the repository' do
|
86
|
+
expect(repository).to receive(:custom_method)
|
87
|
+
tester.custom_method
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -20,13 +20,14 @@ RSpec.shared_examples 'scopable repository' do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
let(:mapper) { mapper_klass.new(Thing).define_attributes(:a, :b) }
|
23
|
+
let(:one_thing) { Thing.new(nil, 2, 3) }
|
23
24
|
|
24
25
|
subject { ThingRepository.new(source, mapper) }
|
25
26
|
|
26
27
|
before do
|
27
28
|
create_database if defined?(create_database)
|
28
29
|
|
29
|
-
subject.insert(
|
30
|
+
subject.insert(one_thing)
|
30
31
|
subject.insert(Thing.new(nil, 2, 4))
|
31
32
|
subject.insert(Thing.new(nil, 5, 6))
|
32
33
|
end
|
@@ -103,12 +104,21 @@ RSpec.shared_examples 'scopable repository' do
|
|
103
104
|
end
|
104
105
|
end
|
105
106
|
end
|
106
|
-
end
|
107
107
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
108
|
+
describe '#find' do
|
109
|
+
context 'when an existent id is given' do
|
110
|
+
it 'returns a proper object' do
|
111
|
+
found = subject.fetch.find(one_thing.id)
|
112
|
+
expect(found.id).to eq one_thing.id
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context 'when a non-existent id is given' do
|
117
|
+
it 'returns nil' do
|
118
|
+
found = subject.fetch.find('wrong-id')
|
119
|
+
expect(found).to be_nil
|
120
|
+
end
|
121
|
+
end
|
112
122
|
end
|
113
123
|
end
|
114
124
|
|
@@ -29,6 +29,10 @@ RSpec.shared_examples 'timestampable repository' do
|
|
29
29
|
expect(thing.created_at).not_to be_nil
|
30
30
|
end
|
31
31
|
|
32
|
+
it 'sets the same value to updated_at' do
|
33
|
+
expect(thing.updated_at).to eq thing.created_at
|
34
|
+
end
|
35
|
+
|
32
36
|
it 'saves created_at in the database' do
|
33
37
|
expect(subject.find(thing.id).created_at).not_to be_nil
|
34
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rmodel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexei
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongo
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: lazy_object
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -195,6 +209,7 @@ files:
|
|
195
209
|
- LICENSE.txt
|
196
210
|
- README.md
|
197
211
|
- Rakefile
|
212
|
+
- examples/inject_repo.rb
|
198
213
|
- examples/mongo_embedded.rb
|
199
214
|
- examples/scopes.rb
|
200
215
|
- examples/sql_repository.rb
|
@@ -211,14 +226,18 @@ files:
|
|
211
226
|
- lib/rmodel/base_mapper.rb
|
212
227
|
- lib/rmodel/dummy_mapper.rb
|
213
228
|
- lib/rmodel/errors.rb
|
229
|
+
- lib/rmodel/injector.rb
|
214
230
|
- lib/rmodel/mongo/mapper.rb
|
231
|
+
- lib/rmodel/mongo/query.rb
|
215
232
|
- lib/rmodel/mongo/source.rb
|
216
233
|
- lib/rmodel/repository.rb
|
234
|
+
- lib/rmodel/repository_ext/injectable.rb
|
217
235
|
- lib/rmodel/repository_ext/scopable.rb
|
218
236
|
- lib/rmodel/repository_ext/sugarable.rb
|
219
237
|
- lib/rmodel/repository_ext/timestampable.rb
|
220
238
|
- lib/rmodel/scope.rb
|
221
239
|
- lib/rmodel/sequel/mapper.rb
|
240
|
+
- lib/rmodel/sequel/query.rb
|
222
241
|
- lib/rmodel/sequel/source.rb
|
223
242
|
- lib/rmodel/uni_hash.rb
|
224
243
|
- lib/rmodel/version.rb
|
@@ -235,6 +254,7 @@ files:
|
|
235
254
|
- spec/shared/clean_sequel.rb
|
236
255
|
- spec/shared/repository/crud.rb
|
237
256
|
- spec/shared/repository/initialization.rb
|
257
|
+
- spec/shared/repository/injectable.rb
|
238
258
|
- spec/shared/repository/scopable.rb
|
239
259
|
- spec/shared/repository/sugarable.rb
|
240
260
|
- spec/shared/repository/timestampable.rb
|
@@ -276,6 +296,7 @@ test_files:
|
|
276
296
|
- spec/shared/clean_sequel.rb
|
277
297
|
- spec/shared/repository/crud.rb
|
278
298
|
- spec/shared/repository/initialization.rb
|
299
|
+
- spec/shared/repository/injectable.rb
|
279
300
|
- spec/shared/repository/scopable.rb
|
280
301
|
- spec/shared/repository/sugarable.rb
|
281
302
|
- spec/shared/repository/timestampable.rb
|