baza_models 0.0.6 → 0.0.7
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/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
|