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 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