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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 788dd830fed7da7ee91d7b4a24524d6ea4726ad6c6aaa1a25eccd473e4a5c58a
4
- data.tar.gz: f5382c6e8f2be46d2b91fcfb2166f0a7b11ca53e529740dfefe0791b4f72b1e7
3
+ metadata.gz: 796e02f0a5684f55333e56d9f0431017253e16540393fa419164398d2f275e16
4
+ data.tar.gz: 6ccf0a99ad59c183a7ca366ac91340cf49b4302f010574393bdade7c33aca515
5
5
  SHA512:
6
- metadata.gz: 41828de01c96529f0f71e62ce4fea2174650cfcbffeff2143f32afb8bc6628cf772d469bd58c364c7c797ea0d28c832fad589a615dbba71da9c0319c609c7aa4
7
- data.tar.gz: 37b42a7e28f68765cb6fe56a5424299b231ec519880b49f23086b4a0572ad4cd33de987f7183f650b1a454cd8e27f5c5646b579e5bf7e1e504f678d506c3cbc8
6
+ metadata.gz: 66d5ab7ea47e0761ff7c146aec727498e6b4cea1c3874dca437e10066aa1b6184c5d9834e0b7e7b2da378317b112b05f678bd65a7b96998e1b0c565c8f6226f3
7
+ data.tar.gz: c8523d00239a9e14abf3fc3174074de4eeee3935ee51667f1ead8fcdc68a3ed6de26c153d3743b1930914282b7c52fd575492ce6782e2e33c4706377a02f0fe4
Binary file
data/lib/db/test.db CHANGED
Binary file
@@ -7,7 +7,7 @@ module Rubee
7
7
  | |_) | | | || _ \| _|
8
8
  | _ <| |__| || |_) | |___
9
9
  |_| \_\\____/ |____/|_____|
10
- Ver: %s ...bzzz
10
+ Ver: %s ⬡ ⬢ ⬢ rubee ⬢ ⬡
11
11
  LOGO
12
12
 
13
13
  class << self
@@ -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
- self.class.serialize(sequel_dataset, klass)
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
- dataset.map do |record_hash|
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
- dataset.where(**args).map do |record_hash|
207
- new(**record_hash)
208
- end
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(*args)
212
- dataset.order(*args).map do |record_hash|
213
- new(**record_hash)
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 join(assoc, args)
218
- dataset.join(assoc, **args)
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
@@ -20,7 +20,7 @@ module Rubee
20
20
  RUBEE_SUPPORT = { "Rubee::Support::Hash" => Hash, "Rubee::Support::String" => String }
21
21
  end
22
22
 
23
- VERSION = '2.5.9'
23
+ VERSION = '2.6.0'
24
24
 
25
25
  require_relative 'rubee/router'
26
26
  require_relative 'rubee/logger'
@@ -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.5.9
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