rasti-db 0.4.0 → 0.4.1
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/.travis.yml +1 -0
- data/README.md +21 -1
- data/lib/rasti/db/model.rb +11 -6
- data/lib/rasti/db/version.rb +1 -1
- data/lib/rasti/db.rb +2 -0
- data/rasti-db.gemspec +1 -0
- data/spec/collection_spec.rb +8 -2
- data/spec/model_spec.rb +6 -0
- metadata +22 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25e0bbb3407cfae9d3217b22dff5f9756f451d2c
|
4
|
+
data.tar.gz: 8e92b0f310f1a7761e62b288cf3482b788f6c89c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ce81a8a43cba1212c251d86a7cd32293c649059b0b1674bfb83fbc845cd4f9376ca2cd5f89046eecf26b69c63ce624f255a9f62f67511afca7e86d308eea985
|
7
|
+
data.tar.gz: f61e038f876cb4064fb75b61d2141eda0d013d17841d6b6b1e3933564e147c5a75d35df0f9595e42a7adebd0456e8b8ae7280f07cb1860fd58aa67e9f44a0a03
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -64,15 +64,24 @@ DB.create_table :categories_posts do
|
|
64
64
|
foreign_key :post_id, :posts, null: false, index: true
|
65
65
|
primary_key [:category_id, :post_id]
|
66
66
|
end
|
67
|
+
|
68
|
+
DB.create_table :people do
|
69
|
+
String :document_number, null: false, primary_key: true
|
70
|
+
String :first_name, null: false
|
71
|
+
String :last_name, null: false
|
72
|
+
Date :birth_date, null: false
|
73
|
+
foreign_key :user_id, :users, null: false, unique: true
|
74
|
+
end
|
67
75
|
```
|
68
76
|
|
69
77
|
### Models
|
70
78
|
|
71
79
|
```ruby
|
72
|
-
User = Rasti::DB::Model[:id, :name, :posts, :comments]
|
80
|
+
User = Rasti::DB::Model[:id, :name, :posts, :comments, :person]
|
73
81
|
Post = Rasti::DB::Model[:id, :title, :body, :user_id, :user, :comments, :categories]
|
74
82
|
Comment = Rasti::DB::Model[:id, :text, :user_id, :user, :post_id, :post]
|
75
83
|
Category = Rasti::DB::Model[:id, :name, :posts]
|
84
|
+
Person = Rasti::DB::Model[:document_number, :first_name, :last_name, :birth_date, :user_id, :user]
|
76
85
|
```
|
77
86
|
|
78
87
|
### Collections
|
@@ -81,6 +90,7 @@ Category = Rasti::DB::Model[:id, :name, :posts]
|
|
81
90
|
class Users < Rasti::DB::Collection
|
82
91
|
one_to_many :posts
|
83
92
|
one_to_many :comments
|
93
|
+
one_to_one :person
|
84
94
|
end
|
85
95
|
|
86
96
|
class Posts < Rasti::DB::Collection
|
@@ -113,10 +123,20 @@ class Categories < Rasti::DB::Collection
|
|
113
123
|
many_to_many :posts
|
114
124
|
end
|
115
125
|
|
126
|
+
class People < Rasti::DB::Collection
|
127
|
+
set_collection_name :people
|
128
|
+
set_primary_key :document_number
|
129
|
+
set_foreign_key :document_number
|
130
|
+
set_model Person
|
131
|
+
|
132
|
+
many_to_one :user
|
133
|
+
end
|
134
|
+
|
116
135
|
users = Users.new DB
|
117
136
|
posts = Posts.new DB
|
118
137
|
comments = Comments.new DB
|
119
138
|
categories = Categories.new DB
|
139
|
+
people = People.new DB
|
120
140
|
```
|
121
141
|
|
122
142
|
### Persistence
|
data/lib/rasti/db/model.rb
CHANGED
@@ -18,7 +18,7 @@ module Rasti
|
|
18
18
|
|
19
19
|
def [](*attribute_names)
|
20
20
|
Class.new(self) do
|
21
|
-
attribute
|
21
|
+
attribute(*attribute_names)
|
22
22
|
|
23
23
|
def self.inherited(subclass)
|
24
24
|
subclass.instance_variable_set :@attributes, attributes.dup
|
@@ -82,15 +82,16 @@ module Rasti
|
|
82
82
|
def to_h
|
83
83
|
self.class.attributes.each_with_object({}) do |name, hash|
|
84
84
|
if attributes.key? name
|
85
|
-
|
85
|
+
value = fetch_attribute name
|
86
|
+
case value
|
86
87
|
when Model
|
87
|
-
hash[name] =
|
88
|
+
hash[name] = value.to_h
|
88
89
|
when Array
|
89
|
-
hash[name] =
|
90
|
+
hash[name] = value.map do |e|
|
90
91
|
e.is_a?(Model) ? e.to_h : e
|
91
92
|
end
|
92
93
|
else
|
93
|
-
hash[name] =
|
94
|
+
hash[name] = value
|
94
95
|
end
|
95
96
|
end
|
96
97
|
end
|
@@ -101,7 +102,11 @@ module Rasti
|
|
101
102
|
attr_reader :attributes
|
102
103
|
|
103
104
|
def fetch_attribute(name)
|
104
|
-
attributes.key?(name) ?
|
105
|
+
attributes.key?(name) ? casted_attribute(name) : raise(UninitializedAttributeError, name)
|
106
|
+
end
|
107
|
+
|
108
|
+
def casted_attribute(name)
|
109
|
+
attributes[name].is_a?(Time) ? Timing::TimeInZone.new(attributes[name]) : attributes[name]
|
105
110
|
end
|
106
111
|
|
107
112
|
end
|
data/lib/rasti/db/version.rb
CHANGED
data/lib/rasti/db.rb
CHANGED
data/rasti-db.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_runtime_dependency 'sequel', '~> 5.0'
|
22
22
|
spec.add_runtime_dependency 'consty', '~> 1.0', '>= 1.0.3'
|
23
|
+
spec.add_runtime_dependency 'timing', '~> 0.1', '>= 0.1.3'
|
23
24
|
|
24
25
|
spec.add_development_dependency 'bundler', '~> 1.12'
|
25
26
|
spec.add_development_dependency 'rake', '~> 11.0'
|
data/spec/collection_spec.rb
CHANGED
@@ -368,6 +368,11 @@ describe 'Collection' do
|
|
368
368
|
it 'Graph' do
|
369
369
|
1.upto(3) do |i|
|
370
370
|
db[:users].insert name: "User #{i}"
|
371
|
+
db[:people].insert document_number: "document_#{i}",
|
372
|
+
first_name: "John #{i}",
|
373
|
+
last_name: "Doe #{i}",
|
374
|
+
birth_date: Time.now - i,
|
375
|
+
user_id: i
|
371
376
|
db[:categories].insert name: "Category #{i}"
|
372
377
|
db[:posts].insert user_id: i, title: "Post #{i}", body: '...'
|
373
378
|
db[:categories_posts].insert post_id: i, category_id: i
|
@@ -379,11 +384,12 @@ describe 'Collection' do
|
|
379
384
|
end
|
380
385
|
end
|
381
386
|
|
382
|
-
posts_graph = posts.where(id: 1).graph(
|
387
|
+
posts_graph = posts.where(id: 1).graph('user.person', :categories, 'comments.user.posts.categories').all
|
383
388
|
|
384
389
|
posts_graph.count.must_equal 1
|
385
390
|
|
386
|
-
posts_graph[0].user.must_equal
|
391
|
+
posts_graph[0].user.id.must_equal 1
|
392
|
+
posts_graph[0].user.person.must_equal people.detect(user_id: 1)
|
387
393
|
|
388
394
|
posts_graph[0].categories.must_equal [categories.find(1)]
|
389
395
|
|
data/spec/model_spec.rb
CHANGED
@@ -28,6 +28,12 @@ describe 'Model' do
|
|
28
28
|
proc { post.invalid_method }.must_raise NoMethodError
|
29
29
|
end
|
30
30
|
|
31
|
+
it 'Time conversion' do
|
32
|
+
person = Person.new birth_date: Time.parse('2019-01-07T11:00:00-03:00')
|
33
|
+
|
34
|
+
person.birth_date.must_be_instance_of Timing::TimeInZone
|
35
|
+
end
|
36
|
+
|
31
37
|
end
|
32
38
|
|
33
39
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rasti-db
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel Naiman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
@@ -44,6 +44,26 @@ dependencies:
|
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 1.0.3
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: timing
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0.1'
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 0.1.3
|
57
|
+
type: :runtime
|
58
|
+
prerelease: false
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0.1'
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.1.3
|
47
67
|
- !ruby/object:Gem::Dependency
|
48
68
|
name: bundler
|
49
69
|
requirement: !ruby/object:Gem::Requirement
|