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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 24043c37709619d4fa62e93c29aca64d38343f52
4
- data.tar.gz: 3f314d8915ee7c914cd6c3d7831a5719c66d965d
3
+ metadata.gz: 1efdb34a4c3ec8e1fbefa2bff8e24906d880d77b
4
+ data.tar.gz: 7951d6da1f4bc03c5a77de5494e2431c9d5628b4
5
5
  SHA512:
6
- metadata.gz: 3936eb5b728fa94d82cf3703027ef015c8c910328d6d912994ad27cf91a62a8bfbfd58f9235b383917c78bae607def2f206a263cf8c59d41e4a19db0310da279
7
- data.tar.gz: 74070bf381abb76c1d46a0e2542321023b6fb047e08387dd839acf2b31141deb17108c35770ca19c37139af5596248963df82e0b76107debce70a29f06a53c4d
6
+ metadata.gz: b82f2aabc5d395d51ebe3128b8fdb6a033f5f840cea62a830287925046b0d2e3d56cf0d63198581ff37cc603bad7cbadc8220d4656570d6812e0db0d6f29650b
7
+ data.tar.gz: d88efce0327adc63a0c619c8172aa55c3000a7c6f82c031eaecc65b0129c7f2f83173f7e5d696b90b3aef6302328490e1df4c0b7dba4d38139b51789799135f5
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.6
1
+ 0.0.7
@@ -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.6 ruby lib
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.6"
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-04-11"
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 bm_sort_link(ransacker, attribute)
2
+ def bm_paginate_content(collection)
3
3
  require "html_gen"
4
4
 
5
- label = ransacker.klass.human_attribute_name(attribute)
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] ||= {}
@@ -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, :size, :select, :includes,
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|
@@ -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 << "`#{@model.table_name}`.*"
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 `#{@model.table_name}`"
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.6
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-04-11 00:00:00.000000000 Z
11
+ date: 2016-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: array_enumerator