ru.Bee 2.5.9 → 2.6.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/lib/db/development.db +0 -0
- data/lib/db/test.db +0 -0
- data/lib/rubee/cli/server.rb +1 -1
- data/lib/rubee/models/assoc_array.rb +73 -0
- data/lib/rubee/models/sequel_object.rb +41 -14
- data/lib/rubee.rb +1 -1
- data/lib/tests/models/comment_model_test.rb +79 -0
- metadata +3 -22
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 796e02f0a5684f55333e56d9f0431017253e16540393fa419164398d2f275e16
|
|
4
|
+
data.tar.gz: 6ccf0a99ad59c183a7ca366ac91340cf49b4302f010574393bdade7c33aca515
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 66d5ab7ea47e0761ff7c146aec727498e6b4cea1c3874dca437e10066aa1b6184c5d9834e0b7e7b2da378317b112b05f678bd65a7b96998e1b0c565c8f6226f3
|
|
7
|
+
data.tar.gz: c8523d00239a9e14abf3fc3174074de4eeee3935ee51667f1ead8fcdc68a3ed6de26c153d3743b1930914282b7c52fd575492ce6782e2e33c4706377a02f0fe4
|
data/lib/db/development.db
CHANGED
|
Binary file
|
data/lib/db/test.db
CHANGED
|
Binary file
|
data/lib/rubee/cli/server.rb
CHANGED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module Rubee
|
|
2
|
+
class AssocArray < Array
|
|
3
|
+
include Rubee::Hookable
|
|
4
|
+
|
|
5
|
+
before :map, :each, :select, :to_a, :reject, :each_with_object, :each_with_index, :all?, :empty?,
|
|
6
|
+
:find, :find_all, :find_index, :find_last, :find_last_index, :include?, :any?, :none?, :one?, :memeber?,
|
|
7
|
+
:sum, :group_by, :filter, :collect, :filter_map, :min, :max, :min_by, :max_by, :sort, :sort_by,
|
|
8
|
+
:inspect, :to_json, :last, :first, :count, :fill_array
|
|
9
|
+
|
|
10
|
+
def initialize(*args, model, query_dataset, **options)
|
|
11
|
+
super(*args)
|
|
12
|
+
@__model = model
|
|
13
|
+
@__query_dataset = query_dataset
|
|
14
|
+
@__pagination_meta = options[:pagination_meta]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def all
|
|
18
|
+
@__model.all(__query_dataset: @__query_dataset)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def where(*args)
|
|
22
|
+
@__model.where(*args, __query_dataset: @__query_dataset)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def order(*args)
|
|
26
|
+
@__model.order(*args, __query_dataset: @__query_dataset)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def join(*args)
|
|
30
|
+
@__model.join(*args, __query_dataset: @__query_dataset)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def limit(*args)
|
|
34
|
+
@__model.limit(*args, __query_dataset: @__query_dataset)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def offset(*args)
|
|
38
|
+
@__model.offset(*args, __query_dataset: @__query_dataset)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def paginate(*args)
|
|
42
|
+
total_count = @__query_dataset.count
|
|
43
|
+
current_page, per_page = args
|
|
44
|
+
__pagination_meta = {
|
|
45
|
+
current_page:,
|
|
46
|
+
per_page:,
|
|
47
|
+
total_count:,
|
|
48
|
+
first_page?: current_page == 1,
|
|
49
|
+
last_page?: current_page == (total_count / per_page.to_f).ceil,
|
|
50
|
+
prev: current_page > 1 ? current_page - 1 : nil,
|
|
51
|
+
next: current_page < (total_count / per_page.to_f).ceil ? current_page + 1 : nil,
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@__model.paginate(*args, __query_dataset: @__query_dataset, __pagination_meta:)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def pagination_meta
|
|
58
|
+
@__pagination_meta
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def ^
|
|
62
|
+
@__query_dataset
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
private
|
|
66
|
+
|
|
67
|
+
def fill_array
|
|
68
|
+
if @__query_dataset && @__model
|
|
69
|
+
replace @__model.serialize(@__query_dataset)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -116,11 +116,13 @@ module Rubee
|
|
|
116
116
|
klass = Object.const_get(assoc)
|
|
117
117
|
if over
|
|
118
118
|
sequel_dataset = klass
|
|
119
|
+
.dataset
|
|
119
120
|
.join(over.to_sym, "#{singularized_assoc_name.snakeize}_id".to_sym => :id)
|
|
120
121
|
.where(Sequel[over][fk_name.to_sym] => id).select_all(original_assoc).all
|
|
121
|
-
|
|
122
|
+
|
|
123
|
+
AssocArray.new([], klass, sequel_dataset)
|
|
122
124
|
else
|
|
123
|
-
klass.where(fk_name.to_sym => id)
|
|
125
|
+
AssocArray.new([], klass, klass.dataset.where(fk_name.to_sym => id))
|
|
124
126
|
end
|
|
125
127
|
end
|
|
126
128
|
end
|
|
@@ -190,9 +192,7 @@ module Rubee
|
|
|
190
192
|
end
|
|
191
193
|
|
|
192
194
|
def all
|
|
193
|
-
|
|
194
|
-
new(**record_hash)
|
|
195
|
-
end
|
|
195
|
+
AssocArray.new([], self, dataset)
|
|
196
196
|
end
|
|
197
197
|
|
|
198
198
|
def find(id)
|
|
@@ -202,20 +202,47 @@ module Rubee
|
|
|
202
202
|
nil
|
|
203
203
|
end
|
|
204
204
|
|
|
205
|
-
def where(args)
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
205
|
+
def where(args, options = {})
|
|
206
|
+
query_dataset = options[:__query_dataset] || dataset
|
|
207
|
+
|
|
208
|
+
AssocArray.new([], self, query_dataset.where(**args))
|
|
209
209
|
end
|
|
210
210
|
|
|
211
|
-
def order(
|
|
212
|
-
|
|
213
|
-
|
|
211
|
+
def order(args, options = {})
|
|
212
|
+
query_dataset = options[:__query_dataset] || dataset
|
|
213
|
+
|
|
214
|
+
order_arg = if args.is_a? Hash
|
|
215
|
+
args.values[0] == :desc ? Sequel.desc(args.keys[0]) : Sequel.asc(args.keys[0])
|
|
216
|
+
else
|
|
217
|
+
args
|
|
214
218
|
end
|
|
219
|
+
AssocArray.new([], self, query_dataset.order(order_arg))
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def join(assoc, args, options = {})
|
|
223
|
+
query_dataset = options[:__query_dataset] || dataset
|
|
224
|
+
|
|
225
|
+
AssocArray.new([], self, query_dataset.join(assoc, **args))
|
|
215
226
|
end
|
|
216
227
|
|
|
217
|
-
def
|
|
218
|
-
dataset
|
|
228
|
+
def limit(args, options = {})
|
|
229
|
+
query_dataset = options[:__query_dataset] || dataset
|
|
230
|
+
|
|
231
|
+
AssocArray.new([], self, query_dataset.limit(*args))
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def offset(args, options = {})
|
|
235
|
+
query_dataset = options[:__query_dataset] || dataset
|
|
236
|
+
|
|
237
|
+
AssocArray.new([], self, query_dataset.offset(*args))
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def paginate(page = 1, per_page = 10, options = {})
|
|
241
|
+
query_dataset = options[:__query_dataset] || dataset
|
|
242
|
+
offset = (page - 1) * per_page
|
|
243
|
+
|
|
244
|
+
AssocArray.new([], self, query_dataset.offset(offset).limit(per_page),
|
|
245
|
+
pagination_meta: options[:__pagination_meta])
|
|
219
246
|
end
|
|
220
247
|
|
|
221
248
|
def create(attrs)
|
data/lib/rubee.rb
CHANGED
|
@@ -31,6 +31,85 @@ describe 'Comment model' do
|
|
|
31
31
|
_(result.first.text).must_equal('test_enough')
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
|
+
|
|
35
|
+
describe 'where clause chain' do
|
|
36
|
+
it 'returns target records' do
|
|
37
|
+
_(Comment.where(text: 'test_enough').where(user_id: nil).count)
|
|
38
|
+
.must_equal(1)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe 'join chain' do
|
|
43
|
+
it 'returns target records' do
|
|
44
|
+
_(Comment.join(:posts, comment_id: :id).where(text: 'test_enough').count)
|
|
45
|
+
.must_equal(1)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe 'order clause chain' do
|
|
50
|
+
it 'returns target records' do
|
|
51
|
+
Comment.destroy_all cascade: true
|
|
52
|
+
comment = Comment.new(text: 'abcdef')
|
|
53
|
+
comment.save
|
|
54
|
+
|
|
55
|
+
_(Comment.order(text: :desc).where(user_id: nil).count)
|
|
56
|
+
.must_equal(1)
|
|
57
|
+
|
|
58
|
+
_(Comment.order(text: :asc).where(user_id: nil).first.text)
|
|
59
|
+
.must_equal('abcdef')
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
describe 'limit clause chain' do
|
|
64
|
+
it 'returns target records' do
|
|
65
|
+
Comment.destroy_all cascade: true
|
|
66
|
+
comment = Comment.new(text: 'abcdef')
|
|
67
|
+
Comment.new(text: 'abcdef1')
|
|
68
|
+
comment.save
|
|
69
|
+
|
|
70
|
+
_(Comment.limit(1).where(user_id: nil).count)
|
|
71
|
+
.must_equal(1)
|
|
72
|
+
|
|
73
|
+
_(Comment.limit(1).where(user_id: nil).first.text)
|
|
74
|
+
.must_equal('abcdef')
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
describe 'offset clause chain' do
|
|
79
|
+
it 'returns target records' do
|
|
80
|
+
Comment.destroy_all cascade: true
|
|
81
|
+
comment = Comment.new(text: 'abcdef')
|
|
82
|
+
comment.save
|
|
83
|
+
com2 = Comment.new(text: 'abcdef1')
|
|
84
|
+
com2.save
|
|
85
|
+
_(Comment.offset(1).where(user_id: nil).count)
|
|
86
|
+
.must_equal(1)
|
|
87
|
+
|
|
88
|
+
_(Comment.offset(1).where(user_id: nil).first.text)
|
|
89
|
+
.must_equal('abcdef1')
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
describe 'pagination' do
|
|
94
|
+
it 'returns target records' do
|
|
95
|
+
Comment.destroy_all cascade: true
|
|
96
|
+
10.times do |n|
|
|
97
|
+
Comment.new(text: "test_#{n}").save
|
|
98
|
+
end
|
|
99
|
+
comments = Comment.all.paginate(1, 5)
|
|
100
|
+
_(comments.count).must_equal(5)
|
|
101
|
+
_(comments.pagination_meta).must_equal(
|
|
102
|
+
current_page: 1,
|
|
103
|
+
per_page: 5,
|
|
104
|
+
total_count: 10,
|
|
105
|
+
first_page?: true,
|
|
106
|
+
last_page?: false,
|
|
107
|
+
prev: nil,
|
|
108
|
+
next: 2
|
|
109
|
+
)
|
|
110
|
+
Comment.destroy_all
|
|
111
|
+
end
|
|
112
|
+
end
|
|
34
113
|
end
|
|
35
114
|
|
|
36
115
|
describe 'method' do
|
metadata
CHANGED
|
@@ -1,34 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ru.Bee
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Oleg Saltykov
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
-
dependencies:
|
|
12
|
-
- !ruby/object:Gem::Dependency
|
|
13
|
-
name: bundler
|
|
14
|
-
requirement: !ruby/object:Gem::Requirement
|
|
15
|
-
requirements:
|
|
16
|
-
- - "~>"
|
|
17
|
-
- !ruby/object:Gem::Version
|
|
18
|
-
version: '2.1'
|
|
19
|
-
- - ">="
|
|
20
|
-
- !ruby/object:Gem::Version
|
|
21
|
-
version: 2.1.4
|
|
22
|
-
type: :runtime
|
|
23
|
-
prerelease: false
|
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
-
requirements:
|
|
26
|
-
- - "~>"
|
|
27
|
-
- !ruby/object:Gem::Version
|
|
28
|
-
version: '2.1'
|
|
29
|
-
- - ">="
|
|
30
|
-
- !ruby/object:Gem::Version
|
|
31
|
-
version: 2.1.4
|
|
11
|
+
dependencies: []
|
|
32
12
|
description: Application web server written on Ruby
|
|
33
13
|
email:
|
|
34
14
|
- oleg.saltykov@gmail.com
|
|
@@ -264,6 +244,7 @@ files:
|
|
|
264
244
|
- lib/rubee/features.rb
|
|
265
245
|
- lib/rubee/generator.rb
|
|
266
246
|
- lib/rubee/logger.rb
|
|
247
|
+
- lib/rubee/models/assoc_array.rb
|
|
267
248
|
- lib/rubee/models/database_objectable.rb
|
|
268
249
|
- lib/rubee/models/db_tools.rb
|
|
269
250
|
- lib/rubee/models/sequel_object.rb
|