rasti-db 4.1.0 → 4.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +26 -0
- data/README.md +1 -1
- data/lib/rasti/db/query.rb +22 -12
- data/lib/rasti/db/version.rb +1 -1
- data/spec/minitest_helper.rb +20 -5
- data/spec/query_spec.rb +23 -0
- metadata +3 -3
- data/.travis.yml +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 331138443b43eefbd6f4e9008755646f790a7a12329d5fb342936b97de8d9bfe
|
4
|
+
data.tar.gz: 9723170bbbf65352a112312a6b72953a69055ceca9d115763705d6363b00e669
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '00777167854dfaa0f0e133b157ac97e56a8a94c840b79a024a2f0af507a995a77f72372b263ee4a00770970d0f6646f0c034ee5cee733dae892bb85cae78f756'
|
7
|
+
data.tar.gz: 66f2f804441640d2cfe7ed3694000092e9d8f7541e6478c4be98b475b7e3d70de7d8a7c78c63b19a8542c89cf1ff7311291f6c09f8d339ba8a2d257a2a671efe
|
@@ -0,0 +1,26 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ '**' ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ '**' ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
|
12
|
+
name: Tests
|
13
|
+
runs-on: ubuntu-latest
|
14
|
+
strategy:
|
15
|
+
matrix:
|
16
|
+
ruby-version: ['2.1', '2.2', '2.3', '2.4', '2.5', '2.6', '2.7', '3.0', 'jruby-9.2.9.0']
|
17
|
+
|
18
|
+
steps:
|
19
|
+
- uses: actions/checkout@v3
|
20
|
+
- name: Set up Ruby
|
21
|
+
uses: ruby/setup-ruby@v1
|
22
|
+
with:
|
23
|
+
ruby-version: ${{ matrix.ruby-version }}
|
24
|
+
bundler-cache: true
|
25
|
+
- name: Run tests
|
26
|
+
run: bundle exec rake
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Rasti::DB
|
2
2
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/rasti-db.svg)](https://rubygems.org/gems/rasti-db)
|
4
|
-
[![
|
4
|
+
[![CI](https://github.com/gabynaiman/rasti-db/actions/workflows/ci.yml/badge.svg)](https://github.com/gabynaiman/rasti-db/actions/workflows/ci.yml)
|
5
5
|
[![Coverage Status](https://coveralls.io/repos/github/gabynaiman/rasti-db/badge.svg?branch=master)](https://coveralls.io/github/gabynaiman/rasti-db?branch=master)
|
6
6
|
[![Code Climate](https://codeclimate.com/github/gabynaiman/rasti-db.svg)](https://codeclimate.com/github/gabynaiman/rasti-db)
|
7
7
|
|
data/lib/rasti/db/query.rb
CHANGED
@@ -58,17 +58,15 @@ module Rasti
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def select_computed_attributes(*computed_attributes)
|
61
|
-
ds = computed_attributes.inject(dataset) do |
|
61
|
+
ds = computed_attributes.inject(dataset) do |inner_ds, name|
|
62
62
|
computed_attribute = collection_class.computed_attributes[name]
|
63
|
-
computed_attribute.apply_join(
|
63
|
+
computed_attribute.apply_join(inner_ds, environment).select_append(computed_attribute.identifier.as(name))
|
64
64
|
end
|
65
65
|
build_query dataset: ds
|
66
66
|
end
|
67
67
|
|
68
68
|
def all
|
69
|
-
|
70
|
-
collection_class.model.new row
|
71
|
-
end
|
69
|
+
build_models dataset.all
|
72
70
|
end
|
73
71
|
alias_method :to_a, :all
|
74
72
|
|
@@ -114,13 +112,11 @@ module Rasti
|
|
114
112
|
end
|
115
113
|
|
116
114
|
def first
|
117
|
-
|
118
|
-
row ? build_model(row) : nil
|
115
|
+
build_model dataset.first
|
119
116
|
end
|
120
117
|
|
121
118
|
def last
|
122
|
-
|
123
|
-
row ? build_model(row) : nil
|
119
|
+
build_model dataset.last
|
124
120
|
end
|
125
121
|
|
126
122
|
def detect(*args, &block)
|
@@ -137,8 +133,8 @@ module Rasti
|
|
137
133
|
|
138
134
|
raise NQL::InvalidExpressionError.new(filter_expression) if sentence.nil?
|
139
135
|
|
140
|
-
ds = sentence.computed_attributes(collection_class).inject(dataset) do |
|
141
|
-
collection_class.computed_attributes[name].apply_join
|
136
|
+
ds = sentence.computed_attributes(collection_class).inject(dataset) do |inner_ds, name|
|
137
|
+
collection_class.computed_attributes[name].apply_join inner_ds, environment
|
142
138
|
end
|
143
139
|
query = build_query dataset: ds
|
144
140
|
|
@@ -164,7 +160,21 @@ module Rasti
|
|
164
160
|
end
|
165
161
|
|
166
162
|
def build_model(row)
|
167
|
-
|
163
|
+
row ? build_models([row]).first : nil
|
164
|
+
end
|
165
|
+
|
166
|
+
def build_models(rows)
|
167
|
+
with_graph(rows).map do |row|
|
168
|
+
collection_class.model.new slice_defined_attributes(row)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
def slice_defined_attributes(row)
|
173
|
+
row.select { |k,_| defined_attributes.include? k }
|
174
|
+
end
|
175
|
+
|
176
|
+
def defined_attributes
|
177
|
+
@defined_attributes ||= collection_class.model.attribute_names.to_set
|
168
178
|
end
|
169
179
|
|
170
180
|
def chainable(&block)
|
data/lib/rasti/db/version.rb
CHANGED
data/spec/minitest_helper.rb
CHANGED
@@ -19,7 +19,8 @@ Post = Rasti::DB::Model[:id, :title, :body, :user_id, :user, :comments, :cat
|
|
19
19
|
Comment = Rasti::DB::Model[:id, :text, :user_id, :user, :post_id, :post, :tags]
|
20
20
|
Category = Rasti::DB::Model[:id, :name, :posts]
|
21
21
|
Person = Rasti::DB::Model[:document_number, :first_name, :last_name, :birth_date, :user_id, :user, :languages, :full_name]
|
22
|
-
Language = Rasti::DB::Model[:id, :name, :people]
|
22
|
+
Language = Rasti::DB::Model[:id, :name, :people, :countries]
|
23
|
+
Country = Rasti::DB::Model[:id, :name, :language_id]
|
23
24
|
|
24
25
|
|
25
26
|
class Users < Rasti::DB::Collection
|
@@ -47,8 +48,8 @@ class Posts < Rasti::DB::Collection
|
|
47
48
|
one_to_many :comments
|
48
49
|
|
49
50
|
query :created_by, ->(user_id) { where user_id: user_id }
|
50
|
-
|
51
|
-
query :entitled do |title|
|
51
|
+
|
52
|
+
query :entitled do |title|
|
52
53
|
where title: title
|
53
54
|
end
|
54
55
|
|
@@ -106,6 +107,11 @@ class Languages < Rasti::DB::Collection
|
|
106
107
|
|
107
108
|
many_to_many :people, collection: People, relation_data_source_name: :default
|
108
109
|
one_to_many :posts
|
110
|
+
one_to_many :countries
|
111
|
+
end
|
112
|
+
|
113
|
+
class Countries < Rasti::DB::Collection
|
114
|
+
many_to_one :language
|
109
115
|
end
|
110
116
|
|
111
117
|
|
@@ -114,7 +120,7 @@ class Minitest::Spec
|
|
114
120
|
let(:users) { Users.new environment }
|
115
121
|
|
116
122
|
let(:posts) { Posts.new environment }
|
117
|
-
|
123
|
+
|
118
124
|
let(:comments) { Comments.new environment }
|
119
125
|
|
120
126
|
let(:categories) { Categories.new environment }
|
@@ -123,9 +129,11 @@ class Minitest::Spec
|
|
123
129
|
|
124
130
|
let(:languages) { Languages.new environment }
|
125
131
|
|
132
|
+
let(:countries) { Countries.new environment }
|
133
|
+
|
126
134
|
let(:driver) { (RUBY_ENGINE == 'jruby') ? 'jdbc:sqlite::memory:' : {adapter: :sqlite} }
|
127
135
|
|
128
|
-
let :environment do
|
136
|
+
let :environment do
|
129
137
|
Rasti::DB::Environment.new default: Rasti::DB::DataSource.new(db),
|
130
138
|
custom: Rasti::DB::DataSource.new(custom_db)
|
131
139
|
end
|
@@ -179,6 +187,13 @@ class Minitest::Spec
|
|
179
187
|
primary_key [:language_id, :document_number]
|
180
188
|
end
|
181
189
|
|
190
|
+
db.create_table :countries do
|
191
|
+
primary_key :id
|
192
|
+
String :name, null: false, unique: true
|
193
|
+
Integer :population, null: false
|
194
|
+
Integer :language_id, null: false, index: true
|
195
|
+
end
|
196
|
+
|
182
197
|
end
|
183
198
|
end
|
184
199
|
|
data/spec/query_spec.rb
CHANGED
@@ -32,6 +32,8 @@ describe 'Query' do
|
|
32
32
|
db[:categories_posts].insert post_id: 2, category_id: 2
|
33
33
|
db[:categories_posts].insert post_id: 2, category_id: 3
|
34
34
|
db[:categories_posts].insert post_id: 3, category_id: 3
|
35
|
+
|
36
|
+
db[:countries].insert name: 'Argentina', population: 40000000, language_id: 1
|
35
37
|
end
|
36
38
|
|
37
39
|
let(:users_query) { Rasti::DB::Query.new collection_class: Users, dataset: db[:users], environment: environment }
|
@@ -44,6 +46,8 @@ describe 'Query' do
|
|
44
46
|
|
45
47
|
let(:languages_query) { Rasti::DB::Query.new collection_class: Languages, dataset: custom_db[:languages], environment: environment }
|
46
48
|
|
49
|
+
let(:countries_query) { Rasti::DB::Query.new collection_class: Countries, dataset: db[:countries], environment: environment }
|
50
|
+
|
47
51
|
it 'Count' do
|
48
52
|
users_query.count.must_equal 10
|
49
53
|
end
|
@@ -166,6 +170,25 @@ describe 'Query' do
|
|
166
170
|
end
|
167
171
|
end
|
168
172
|
|
173
|
+
describe 'Ignore undefined attributes' do
|
174
|
+
|
175
|
+
it 'First level' do
|
176
|
+
countries_query.raw.first.must_equal id: 1,
|
177
|
+
name: 'Argentina',
|
178
|
+
population: 40000000,
|
179
|
+
language_id: 1
|
180
|
+
|
181
|
+
[countries_query.detect(id: 1), countries_query.where(id: 1).order(:name).last, countries_query.all.first].each do |country|
|
182
|
+
country.must_equal Country.new(language_id: 1, id: 1, name: 'Argentina')
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
it 'Graph nested' do
|
187
|
+
languages_query.graph(:countries).first.countries.must_equal [Country.new(language_id: 1, id: 1, name: 'Argentina')]
|
188
|
+
end
|
189
|
+
|
190
|
+
end
|
191
|
+
|
169
192
|
it 'Map' do
|
170
193
|
users_query.map(&:name).must_equal db[:users].map(:name)
|
171
194
|
end
|
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: 4.1.
|
4
|
+
version: 4.1.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: 2022-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
@@ -294,10 +294,10 @@ extensions: []
|
|
294
294
|
extra_rdoc_files: []
|
295
295
|
files:
|
296
296
|
- ".coveralls.yml"
|
297
|
+
- ".github/workflows/ci.yml"
|
297
298
|
- ".gitignore"
|
298
299
|
- ".ruby-gemset"
|
299
300
|
- ".ruby-version"
|
300
|
-
- ".travis.yml"
|
301
301
|
- Gemfile
|
302
302
|
- LICENSE.txt
|
303
303
|
- README.md
|
data/.travis.yml
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
|
3
|
-
rvm:
|
4
|
-
- 2.1
|
5
|
-
- 2.2
|
6
|
-
- 2.3
|
7
|
-
- 2.4
|
8
|
-
- 2.5
|
9
|
-
- 2.6
|
10
|
-
- 2.7
|
11
|
-
- 3.0
|
12
|
-
- jruby-9.2.9.0
|
13
|
-
- ruby-head
|
14
|
-
- jruby-head
|
15
|
-
|
16
|
-
matrix:
|
17
|
-
fast_finish: true
|
18
|
-
allow_failures:
|
19
|
-
- rvm: ruby-head
|
20
|
-
- rvm: jruby-head
|
21
|
-
|
22
|
-
jdk:
|
23
|
-
- openjdk8
|