baza_models 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/baza_models.gemspec +3 -3
- data/lib/baza_models/helpers/ransacker_helper.rb +40 -2
- data/lib/baza_models/model.rb +2 -2
- data/lib/baza_models/query.rb +47 -0
- data/lib/baza_models/query/sql_generator.rb +3 -6
- data/spec/baza_models/model_spec.rb +10 -0
- data/spec/baza_models/query_spec.rb +69 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1efdb34a4c3ec8e1fbefa2bff8e24906d880d77b
|
4
|
+
data.tar.gz: 7951d6da1f4bc03c5a77de5494e2431c9d5628b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b82f2aabc5d395d51ebe3128b8fdb6a033f5f840cea62a830287925046b0d2e3d56cf0d63198581ff37cc603bad7cbadc8220d4656570d6812e0db0d6f29650b
|
7
|
+
data.tar.gz: d88efce0327adc63a0c619c8172aa55c3000a7c6f82c031eaecc65b0129c7f2f83173f7e5d696b90b3aef6302328490e1df4c0b7dba4d38139b51789799135f5
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.7
|
data/baza_models.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: baza_models 0.0.
|
5
|
+
# stub: baza_models 0.0.7 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "baza_models"
|
9
|
-
s.version = "0.0.
|
9
|
+
s.version = "0.0.7"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["kaspernj"]
|
14
|
-
s.date = "2016-
|
14
|
+
s.date = "2016-05-05"
|
15
15
|
s.description = "ActiveRecord like models for the Baza database framework"
|
16
16
|
s.email = "k@spernj.org"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -1,8 +1,46 @@
|
|
1
1
|
module BazaModels::Helpers::RansackerHelper
|
2
|
-
def
|
2
|
+
def bm_paginate_content(collection)
|
3
3
|
require "html_gen"
|
4
4
|
|
5
|
-
|
5
|
+
new_params = params.dup
|
6
|
+
current_page = collection.page
|
7
|
+
total_pages = collection.total_pages
|
8
|
+
|
9
|
+
container = HtmlGen::Element.new(:div)
|
10
|
+
|
11
|
+
if current_page > 1
|
12
|
+
new_params[:page] = current_page - 1
|
13
|
+
container.add_ele(:a, str: "Previous", attr: {href: url_for(new_params)})
|
14
|
+
else
|
15
|
+
container.add_ele(:span, str: "Previous")
|
16
|
+
end
|
17
|
+
|
18
|
+
1.upto(collection.total_pages) do |page_i|
|
19
|
+
new_params[:page] = page_i
|
20
|
+
|
21
|
+
link = container.add_ele(:a, attr: {href: url_for(new_params)})
|
22
|
+
|
23
|
+
if page_i == current_page
|
24
|
+
link.add_ele(:b, str: page_i.to_s)
|
25
|
+
else
|
26
|
+
link.add_str(page_i.to_s)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
if current_page < total_pages
|
31
|
+
new_params[:page] = current_page + 1
|
32
|
+
container.add_ele(:a, str: "Next", attr: {href: url_for(new_params)})
|
33
|
+
else
|
34
|
+
container.add_ele(:span, str: "Next")
|
35
|
+
end
|
36
|
+
|
37
|
+
container.html
|
38
|
+
end
|
39
|
+
|
40
|
+
def bm_sort_link(ransacker, attribute, label = nil)
|
41
|
+
require "html_gen"
|
42
|
+
|
43
|
+
label = ransacker.klass.human_attribute_name(attribute) if label.to_s.strip.empty?
|
6
44
|
|
7
45
|
new_params = params.clone
|
8
46
|
new_params[:q] ||= {}
|
data/lib/baza_models/model.rb
CHANGED
@@ -44,8 +44,8 @@ class BazaModels::Model
|
|
44
44
|
end
|
45
45
|
|
46
46
|
QUERY_METHODS = [
|
47
|
-
:all, :any?, :each, :empty?, :none?, :count, :find, :first, :find_first, :last, :length,
|
48
|
-
:joins, :group, :where, :order, :limit, :to_a, :accessible_by, :ransack
|
47
|
+
:average, :all, :any?, :destroy_all, :each, :empty?, :ids, :maximum, :minimum, :none?, :count, :find, :first, :find_first, :last, :length,
|
48
|
+
:size, :select, :includes, :joins, :group, :where, :order, :pluck, :sum, :limit, :to_a, :accessible_by, :ransack
|
49
49
|
].freeze
|
50
50
|
QUERY_METHODS.each do |query_method|
|
51
51
|
(class << self; self; end).__send__(:define_method, query_method) do |*args, &blk|
|
data/lib/baza_models/query.rb
CHANGED
@@ -41,10 +41,29 @@ class BazaModels::Query
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
def average(column_name)
|
45
|
+
query = select("AVG(#{table_sql}.#{column_sql(column_name)}) AS average")
|
46
|
+
@db.query(query.to_sql).fetch.fetch(:average).to_f
|
47
|
+
end
|
48
|
+
|
44
49
|
def empty?
|
45
50
|
!any?
|
46
51
|
end
|
47
52
|
|
53
|
+
def ids
|
54
|
+
pluck(:id)
|
55
|
+
end
|
56
|
+
|
57
|
+
def maximum(column_name)
|
58
|
+
query = select("MAX(#{table_sql}.#{column_sql(column_name)}) AS maximum")
|
59
|
+
@db.query(query.to_sql).fetch.fetch(:maximum).to_f
|
60
|
+
end
|
61
|
+
|
62
|
+
def minimum(column_name)
|
63
|
+
query = select("MIN(#{table_sql}.#{column_sql(column_name)}) AS minimum")
|
64
|
+
@db.query(query.to_sql).fetch.fetch(:minimum).to_f
|
65
|
+
end
|
66
|
+
|
48
67
|
def none?
|
49
68
|
!any?
|
50
69
|
end
|
@@ -75,6 +94,26 @@ class BazaModels::Query
|
|
75
94
|
length
|
76
95
|
end
|
77
96
|
|
97
|
+
def pluck(*column_names)
|
98
|
+
results = @db.query(select(column_names).to_sql).to_a
|
99
|
+
results.map do |result|
|
100
|
+
if column_names.length == 1
|
101
|
+
result.fetch(column_names.first)
|
102
|
+
else
|
103
|
+
new_result = []
|
104
|
+
column_names.each do |column_name|
|
105
|
+
new_result << result.fetch(column_name)
|
106
|
+
end
|
107
|
+
new_result
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def sum(column_name)
|
113
|
+
query = select("SUM(#{table_sql}.#{column_sql(column_name)}) AS sum")
|
114
|
+
@db.query(query.to_sql).fetch.fetch(:sum).to_f
|
115
|
+
end
|
116
|
+
|
78
117
|
def new(attributes)
|
79
118
|
raise "No previous model" unless @previous_model
|
80
119
|
raise "No relation" unless @relation
|
@@ -430,6 +469,14 @@ private
|
|
430
469
|
end
|
431
470
|
end
|
432
471
|
|
472
|
+
def table_sql
|
473
|
+
@table_sql ||= "#{@db.sep_table}#{@db.escape_table(@model.table_name)}#{@db.sep_table}"
|
474
|
+
end
|
475
|
+
|
476
|
+
def column_sql(column_name)
|
477
|
+
"#{@db.sep_col}#{@db.escape_column(column_name)}#{@db.sep_col}"
|
478
|
+
end
|
479
|
+
|
433
480
|
def method_missing(method_name, *args, &blk)
|
434
481
|
return super unless @model
|
435
482
|
|
@@ -2,10 +2,7 @@ class BazaModels::Query::SqlGenerator
|
|
2
2
|
def initialize(args)
|
3
3
|
@query = args.fetch(:query)
|
4
4
|
|
5
|
-
instance_variables = [
|
6
|
-
:selects, :joins, :wheres, :groups, :orders, :per, :limit, :offset,
|
7
|
-
:model, :table_name, :reverse_order
|
8
|
-
]
|
5
|
+
instance_variables = [:db, :selects, :joins, :wheres, :groups, :orders, :per, :limit, :offset, :model, :table_name, :reverse_order]
|
9
6
|
instance_variables.each do |instance_variable|
|
10
7
|
value = @query.instance_variable_get(:"@#{instance_variable}")
|
11
8
|
instance_variable_set(:"@#{instance_variable}", value)
|
@@ -16,12 +13,12 @@ class BazaModels::Query::SqlGenerator
|
|
16
13
|
sql = "SELECT "
|
17
14
|
|
18
15
|
if @selects.empty?
|
19
|
-
sql << "
|
16
|
+
sql << "#{@db.sep_table}#{@model.table_name}#{@db.sep_table}.*"
|
20
17
|
else
|
21
18
|
sql << @selects.join(", ")
|
22
19
|
end
|
23
20
|
|
24
|
-
sql << " FROM
|
21
|
+
sql << " FROM #{@db.sep_table}#{@model.table_name}#{@db.sep_table}"
|
25
22
|
|
26
23
|
unless @joins.empty?
|
27
24
|
@joins.each do |join|
|
@@ -27,6 +27,16 @@ describe "BazaModels::Model" do
|
|
27
27
|
expect(user.to_param).to eq user.id.to_s
|
28
28
|
end
|
29
29
|
|
30
|
+
it "#destroy_all" do
|
31
|
+
5.times do |n|
|
32
|
+
User.create! email: "user#{n}@example.com"
|
33
|
+
end
|
34
|
+
|
35
|
+
expect(User.count).to eq 5
|
36
|
+
User.destroy_all
|
37
|
+
expect(User.count).to eq 0
|
38
|
+
end
|
39
|
+
|
30
40
|
it "#email=" do
|
31
41
|
user.email = "newemail@example.com"
|
32
42
|
expect(user.email).to eq "newemail@example.com"
|
@@ -7,6 +7,17 @@ describe BazaModels::Query do
|
|
7
7
|
let(:role_user) { Role.new(user: user, role: "user") }
|
8
8
|
let(:role_admin) { Role.new(user: user, role: "administrator") }
|
9
9
|
|
10
|
+
context "#average" do
|
11
|
+
it "calculates the average" do
|
12
|
+
5.times do |n|
|
13
|
+
User.create! id: n + 1, email: "user#{n}@example.com"
|
14
|
+
end
|
15
|
+
|
16
|
+
expect(User.average(:id)).to eq 3.0
|
17
|
+
expect(User.where("id >= 4").average(:id)).to eq 4.5
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
10
21
|
context "#where" do
|
11
22
|
before do
|
12
23
|
user.save!
|
@@ -38,6 +49,17 @@ describe BazaModels::Query do
|
|
38
49
|
end
|
39
50
|
end
|
40
51
|
|
52
|
+
context "#ids" do
|
53
|
+
it "returns the ids of the models" do
|
54
|
+
5.times do |n|
|
55
|
+
User.create! id: n + 1, email: "user#{n}@example.com"
|
56
|
+
end
|
57
|
+
|
58
|
+
expect(User.ids).to eq [1, 2, 3, 4, 5]
|
59
|
+
expect(User.where("id >= 3").ids).to eq [3, 4, 5]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
41
63
|
context "#joins" do
|
42
64
|
before do
|
43
65
|
user.save!
|
@@ -133,6 +155,28 @@ describe BazaModels::Query do
|
|
133
155
|
expect(Role.last).to eq role_admin
|
134
156
|
end
|
135
157
|
|
158
|
+
describe "#maximum" do
|
159
|
+
it "returns the maximum" do
|
160
|
+
5.times do |n|
|
161
|
+
User.create! id: n + 1, email: "user#{n}@example.com"
|
162
|
+
end
|
163
|
+
|
164
|
+
expect(User.maximum(:id)).to eq 5
|
165
|
+
expect(User.where("id < 4").maximum(:id)).to eq 3
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
describe "#minimum" do
|
170
|
+
it "returns the minimum" do
|
171
|
+
5.times do |n|
|
172
|
+
User.create! id: n + 1, email: "user#{n}@example.com"
|
173
|
+
end
|
174
|
+
|
175
|
+
expect(User.minimum(:id)).to eq 1
|
176
|
+
expect(User.where("id >= 3").minimum(:id)).to eq 3
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
136
180
|
describe "#order" do
|
137
181
|
it "converts symbols to escaped strings" do
|
138
182
|
sql = Role.order(:role).to_sql
|
@@ -140,6 +184,20 @@ describe BazaModels::Query do
|
|
140
184
|
end
|
141
185
|
end
|
142
186
|
|
187
|
+
describe "#pluck" do
|
188
|
+
it "returns the given columns in an array" do
|
189
|
+
5.times do |n|
|
190
|
+
User.create! id: n + 1, email: "user#{n + 1}@example.com"
|
191
|
+
end
|
192
|
+
|
193
|
+
expect(User.pluck(:id, :email)).to eq [
|
194
|
+
[1, "user1@example.com"], [2, "user2@example.com"], [3, "user3@example.com"], [4, "user4@example.com"], [5, "user5@example.com"]
|
195
|
+
]
|
196
|
+
expect(User.where("id >= 4").pluck(:id, :email)).to eq [[4, "user4@example.com"], [5, "user5@example.com"]]
|
197
|
+
expect(User.pluck(:id)).to eq [1, 2, 3, 4, 5]
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
143
201
|
describe "#reverse_order" do
|
144
202
|
before do
|
145
203
|
role_user.save!
|
@@ -162,6 +220,17 @@ describe BazaModels::Query do
|
|
162
220
|
end
|
163
221
|
end
|
164
222
|
|
223
|
+
describe "#sum" do
|
224
|
+
it "returns the sum" do
|
225
|
+
5.times do |n|
|
226
|
+
User.create! id: n + 1, email: "user#{n}@example.com"
|
227
|
+
end
|
228
|
+
|
229
|
+
expect(User.sum(:id)).to eq 15.0
|
230
|
+
expect(User.where("id >= 3").sum(:id)).to eq 12.0
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
165
234
|
it "#new" do
|
166
235
|
user.save!
|
167
236
|
expect(user.roles.length).to eq 0
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: baza_models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kaspernj
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: array_enumerator
|