baza_models 0.0.11 → 0.0.15
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 +5 -5
- data/.github/dependabot.yml +13 -0
- data/.rubocop.yml +134 -25
- data/.rubocop_todo.yml +47 -32
- data/.ruby-version +1 -0
- data/Gemfile +15 -13
- data/Gemfile.lock +126 -105
- data/Rakefile +5 -7
- data/VERSION +1 -1
- data/baza_models.gemspec +43 -55
- data/lib/baza_models/autoloader.rb +1 -0
- data/lib/baza_models/errors.rb +2 -3
- data/lib/baza_models/helpers/ransacker_helper.rb +2 -2
- data/lib/baza_models/model/belongs_to_relations.rb +1 -3
- data/lib/baza_models/model/has_many_relations.rb +2 -2
- data/lib/baza_models/model/has_one_relations.rb +2 -2
- data/lib/baza_models/model/manipulation.rb +20 -18
- data/lib/baza_models/model/queries.rb +2 -0
- data/lib/baza_models/model/scopes.rb +1 -0
- data/lib/baza_models/model/validations.rb +1 -0
- data/lib/baza_models/model.rb +24 -27
- data/lib/baza_models/query/inspector.rb +2 -0
- data/lib/baza_models/query/pagination.rb +5 -7
- data/lib/baza_models/query/sql_generator.rb +3 -3
- data/lib/baza_models/query.rb +16 -14
- data/lib/baza_models/ransacker/relationship_scanner.rb +4 -1
- data/lib/baza_models/ransacker.rb +3 -1
- data/lib/baza_models/validators/confirmation_validator.rb +1 -3
- data/lib/baza_models/validators/uniqueness_validator.rb +2 -4
- data/peak_flow.yml +4 -0
- data/spec/baza_models/autoloader_spec.rb +1 -1
- data/spec/baza_models/baza_orm_adapter_spec.rb +1 -1
- data/spec/baza_models/model/has_many_relations_spec.rb +1 -1
- data/spec/baza_models/model/manipulation_spec.rb +3 -3
- data/spec/baza_models/model_spec.rb +31 -4
- data/spec/baza_models/query_spec.rb +14 -6
- data/spec/factories/organization.rb +2 -2
- data/spec/factories/user.rb +2 -2
- data/spec/spec_helper.rb +3 -3
- data/spec/support/database_helper.rb +6 -3
- data/spec/test_classes/user.rb +2 -1
- metadata +70 -42
- data/shippable.yml +0 -11
- data/spec/baza_models_spec.rb +0 -4
data/Rakefile
CHANGED
@@ -1,18 +1,16 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require "rubygems"
|
4
2
|
require "bundler"
|
5
3
|
begin
|
6
4
|
Bundler.setup(:default, :development)
|
7
5
|
rescue Bundler::BundlerError => e
|
8
|
-
|
9
|
-
|
6
|
+
warn e.message
|
7
|
+
warn "Run `bundle install` to install missing gems"
|
10
8
|
exit e.status_code
|
11
9
|
end
|
12
10
|
require "rake"
|
13
11
|
|
14
|
-
require "
|
15
|
-
|
12
|
+
require "juwelier"
|
13
|
+
Juwelier::Tasks.new do |gem|
|
16
14
|
# gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
|
17
15
|
gem.name = "baza_models"
|
18
16
|
gem.homepage = "http://github.com/kaspernj/baza_models"
|
@@ -23,7 +21,7 @@ Jeweler::Tasks.new do |gem|
|
|
23
21
|
gem.authors = ["kaspernj"]
|
24
22
|
# dependencies defined in Gemfile
|
25
23
|
end
|
26
|
-
|
24
|
+
Juwelier::RubygemsDotOrgTasks.new
|
27
25
|
|
28
26
|
require "rspec/core"
|
29
27
|
require "rspec/core/rake_task"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.15
|
data/baza_models.gemspec
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
# Generated by
|
1
|
+
# Generated by juwelier
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit
|
3
|
+
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: baza_models 0.0.
|
5
|
+
# stub: baza_models 0.0.15 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "baza_models".freeze
|
9
|
-
s.version = "0.0.
|
9
|
+
s.version = "0.0.15"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["kaspernj".freeze]
|
14
|
-
s.date = "
|
14
|
+
s.date = "2021-10-04"
|
15
15
|
s.description = "ActiveRecord like models for the Baza database framework".freeze
|
16
16
|
s.email = "k@spernj.org".freeze
|
17
17
|
s.extra_rdoc_files = [
|
@@ -20,9 +20,11 @@ Gem::Specification.new do |s|
|
|
20
20
|
]
|
21
21
|
s.files = [
|
22
22
|
".document",
|
23
|
+
".github/dependabot.yml",
|
23
24
|
".rspec",
|
24
25
|
".rubocop.yml",
|
25
26
|
".rubocop_todo.yml",
|
27
|
+
".ruby-version",
|
26
28
|
"Gemfile",
|
27
29
|
"Gemfile.lock",
|
28
30
|
"LICENSE.txt",
|
@@ -67,7 +69,7 @@ Gem::Specification.new do |s|
|
|
67
69
|
"lib/baza_models/validators/length_validator.rb",
|
68
70
|
"lib/baza_models/validators/presence_validator.rb",
|
69
71
|
"lib/baza_models/validators/uniqueness_validator.rb",
|
70
|
-
"
|
72
|
+
"peak_flow.yml",
|
71
73
|
"spec/baza_models/autoloader_spec.rb",
|
72
74
|
"spec/baza_models/baza_orm_adapter_spec.rb",
|
73
75
|
"spec/baza_models/class_translation_spec.rb",
|
@@ -91,7 +93,6 @@ Gem::Specification.new do |s|
|
|
91
93
|
"spec/baza_models/validators/format_validator_spec.rb",
|
92
94
|
"spec/baza_models/validators/length_validator_spec.rb",
|
93
95
|
"spec/baza_models/validators/uniqueness_validator_spec.rb",
|
94
|
-
"spec/baza_models_spec.rb",
|
95
96
|
"spec/factories/organization.rb",
|
96
97
|
"spec/factories/user.rb",
|
97
98
|
"spec/spec_helper.rb",
|
@@ -104,63 +105,50 @@ Gem::Specification.new do |s|
|
|
104
105
|
]
|
105
106
|
s.homepage = "http://github.com/kaspernj/baza_models".freeze
|
106
107
|
s.licenses = ["MIT".freeze]
|
107
|
-
s.rubygems_version = "
|
108
|
+
s.rubygems_version = "3.1.6".freeze
|
108
109
|
s.summary = "ActiveRecord like models for the Baza database framework".freeze
|
109
110
|
|
110
111
|
if s.respond_to? :specification_version then
|
111
112
|
s.specification_version = 4
|
113
|
+
end
|
112
114
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
s.add_dependency(%q<auto_autoloader>.freeze, [">= 0.0.1"])
|
133
|
-
s.add_dependency(%q<baza>.freeze, ["~> 0.0.21"])
|
134
|
-
s.add_dependency(%q<html_gen>.freeze, [">= 0.0.12"])
|
135
|
-
s.add_dependency(%q<simple_delegate>.freeze, [">= 0.0.2"])
|
136
|
-
s.add_dependency(%q<string-cases>.freeze, [">= 0.0.3"])
|
137
|
-
s.add_dependency(%q<best_practice_project>.freeze, [">= 0"])
|
138
|
-
s.add_dependency(%q<bundler>.freeze, ["~> 1.0"])
|
139
|
-
s.add_dependency(%q<factory_girl>.freeze, [">= 0"])
|
140
|
-
s.add_dependency(%q<jdbc-sqlite3>.freeze, [">= 0"])
|
141
|
-
s.add_dependency(%q<jeweler>.freeze, ["= 2.3.6"])
|
142
|
-
s.add_dependency(%q<orm_adapter>.freeze, [">= 0"])
|
143
|
-
s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
144
|
-
s.add_dependency(%q<rspec>.freeze, ["= 3.6.0"])
|
145
|
-
s.add_dependency(%q<rubocop>.freeze, ["= 0.37.0"])
|
146
|
-
s.add_dependency(%q<sqlite3>.freeze, [">= 0"])
|
147
|
-
end
|
115
|
+
if s.respond_to? :add_runtime_dependency then
|
116
|
+
s.add_runtime_dependency(%q<array_enumerator>.freeze, [">= 0"])
|
117
|
+
s.add_runtime_dependency(%q<auto_autoloader>.freeze, [">= 0"])
|
118
|
+
s.add_runtime_dependency(%q<baza>.freeze, [">= 0"])
|
119
|
+
s.add_runtime_dependency(%q<html_gen>.freeze, [">= 0"])
|
120
|
+
s.add_runtime_dependency(%q<simple_delegate>.freeze, [">= 0"])
|
121
|
+
s.add_runtime_dependency(%q<string-cases>.freeze, [">= 0"])
|
122
|
+
s.add_development_dependency(%q<best_practice_project>.freeze, [">= 0"])
|
123
|
+
s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
|
124
|
+
s.add_development_dependency(%q<factory_bot>.freeze, [">= 0"])
|
125
|
+
s.add_development_dependency(%q<jdbc-sqlite3>.freeze, [">= 0"])
|
126
|
+
s.add_development_dependency(%q<juwelier>.freeze, [">= 0"])
|
127
|
+
s.add_development_dependency(%q<orm_adapter>.freeze, [">= 0"])
|
128
|
+
s.add_development_dependency(%q<rdoc>.freeze, [">= 0"])
|
129
|
+
s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
|
130
|
+
s.add_development_dependency(%q<rubocop>.freeze, [">= 0"])
|
131
|
+
s.add_development_dependency(%q<rubocop-performance>.freeze, [">= 0"])
|
132
|
+
s.add_development_dependency(%q<rubocop-rspec>.freeze, [">= 0"])
|
133
|
+
s.add_development_dependency(%q<sqlite3>.freeze, [">= 0"])
|
148
134
|
else
|
149
|
-
s.add_dependency(%q<array_enumerator>.freeze, [">= 0
|
150
|
-
s.add_dependency(%q<auto_autoloader>.freeze, [">= 0
|
151
|
-
s.add_dependency(%q<baza>.freeze, ["
|
152
|
-
s.add_dependency(%q<html_gen>.freeze, [">= 0
|
153
|
-
s.add_dependency(%q<simple_delegate>.freeze, [">= 0
|
154
|
-
s.add_dependency(%q<string-cases>.freeze, [">= 0
|
135
|
+
s.add_dependency(%q<array_enumerator>.freeze, [">= 0"])
|
136
|
+
s.add_dependency(%q<auto_autoloader>.freeze, [">= 0"])
|
137
|
+
s.add_dependency(%q<baza>.freeze, [">= 0"])
|
138
|
+
s.add_dependency(%q<html_gen>.freeze, [">= 0"])
|
139
|
+
s.add_dependency(%q<simple_delegate>.freeze, [">= 0"])
|
140
|
+
s.add_dependency(%q<string-cases>.freeze, [">= 0"])
|
155
141
|
s.add_dependency(%q<best_practice_project>.freeze, [">= 0"])
|
156
|
-
s.add_dependency(%q<bundler>.freeze, ["
|
157
|
-
s.add_dependency(%q<
|
142
|
+
s.add_dependency(%q<bundler>.freeze, [">= 0"])
|
143
|
+
s.add_dependency(%q<factory_bot>.freeze, [">= 0"])
|
158
144
|
s.add_dependency(%q<jdbc-sqlite3>.freeze, [">= 0"])
|
159
|
-
s.add_dependency(%q<
|
145
|
+
s.add_dependency(%q<juwelier>.freeze, [">= 0"])
|
160
146
|
s.add_dependency(%q<orm_adapter>.freeze, [">= 0"])
|
161
|
-
s.add_dependency(%q<rdoc>.freeze, ["
|
162
|
-
s.add_dependency(%q<rspec>.freeze, ["
|
163
|
-
s.add_dependency(%q<rubocop>.freeze, ["
|
147
|
+
s.add_dependency(%q<rdoc>.freeze, [">= 0"])
|
148
|
+
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
149
|
+
s.add_dependency(%q<rubocop>.freeze, [">= 0"])
|
150
|
+
s.add_dependency(%q<rubocop-performance>.freeze, [">= 0"])
|
151
|
+
s.add_dependency(%q<rubocop-rspec>.freeze, [">= 0"])
|
164
152
|
s.add_dependency(%q<sqlite3>.freeze, [">= 0"])
|
165
153
|
end
|
166
154
|
end
|
@@ -125,6 +125,7 @@ private
|
|
125
125
|
orig_model = @models.detect { |array_model| array_model.id == orig_model_id }
|
126
126
|
|
127
127
|
raise "Already autoloaded?" if orig_model.autoloads.key?(autoload_name)
|
128
|
+
|
128
129
|
orig_model.autoloads[autoload_name] = model
|
129
130
|
|
130
131
|
result.fetch(:models) << model
|
data/lib/baza_models/errors.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
class BazaModels::Errors
|
2
2
|
class InvalidRecord < RuntimeError; end
|
3
|
+
|
3
4
|
class RecordNotFound < RuntimeError; end
|
4
5
|
|
5
6
|
def initialize
|
@@ -18,9 +19,7 @@ class BazaModels::Errors
|
|
18
19
|
errors.each do |error|
|
19
20
|
message = ""
|
20
21
|
|
21
|
-
unless attribute_name == :base
|
22
|
-
message << "#{StringCases.snake_to_camel(attribute_name)} "
|
23
|
-
end
|
22
|
+
message << "#{StringCases.snake_to_camel(attribute_name)} " unless attribute_name == :base
|
24
23
|
|
25
24
|
message << error
|
26
25
|
messages << message
|
@@ -2,7 +2,7 @@ module BazaModels::Helpers::RansackerHelper
|
|
2
2
|
def bm_paginate_content(collection)
|
3
3
|
require "html_gen"
|
4
4
|
|
5
|
-
new_params = params.dup
|
5
|
+
new_params = params.dup.permit!
|
6
6
|
current_page = collection.page
|
7
7
|
total_pages = collection.total_pages
|
8
8
|
|
@@ -53,7 +53,7 @@ module BazaModels::Helpers::RansackerHelper
|
|
53
53
|
new_params[:q][:s] = sort_asc
|
54
54
|
end
|
55
55
|
|
56
|
-
href = url_for(new_params)
|
56
|
+
href = url_for(new_params.permit!)
|
57
57
|
|
58
58
|
element = HtmlGen::Element.new(:a, str: label, attr: {href: href})
|
59
59
|
element.html
|
@@ -25,9 +25,7 @@ module BazaModels::Model::BelongsToRelations
|
|
25
25
|
@relationships[relation_name] = relation
|
26
26
|
|
27
27
|
define_method(relation_name) do
|
28
|
-
if (model = @changes[relation_name])
|
29
|
-
model
|
30
|
-
elsif (model = autoloads[relation_name])
|
28
|
+
if (model = @changes[relation_name]) || (model = autoloads[relation_name])
|
31
29
|
model
|
32
30
|
else
|
33
31
|
if relation[:class_name]
|
@@ -4,9 +4,9 @@ module BazaModels::Model::HasManyRelations
|
|
4
4
|
end
|
5
5
|
|
6
6
|
module ClassMethods
|
7
|
-
# rubocop:disable
|
7
|
+
# rubocop:disable Naming/PredicateName
|
8
8
|
def has_many(relation_name, *all_args)
|
9
|
-
# rubocop:enable
|
9
|
+
# rubocop:enable Naming/PredicateName
|
10
10
|
|
11
11
|
args = all_args.pop
|
12
12
|
|
@@ -4,9 +4,9 @@ module BazaModels::Model::HasOneRelations
|
|
4
4
|
end
|
5
5
|
|
6
6
|
module ClassMethods
|
7
|
-
# rubocop:disable
|
7
|
+
# rubocop:disable Naming/PredicateName
|
8
8
|
def has_one(relation_name, *all_args)
|
9
|
-
# rubocop:enable
|
9
|
+
# rubocop:enable Naming/PredicateName
|
10
10
|
|
11
11
|
args = all_args.pop
|
12
12
|
|
@@ -30,9 +30,9 @@ module BazaModels::Model::Manipulation
|
|
30
30
|
fire_callbacks(:after_save)
|
31
31
|
fire_callbacks(:after_create) if new_record
|
32
32
|
|
33
|
-
|
33
|
+
true
|
34
34
|
else
|
35
|
-
|
35
|
+
false
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
@@ -47,14 +47,12 @@ module BazaModels::Model::Manipulation
|
|
47
47
|
|
48
48
|
@data[:id] = db.insert(table_name, @changes, return_id: true)
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
relation = self.class.relationships.fetch(relation_name)
|
50
|
+
@autoloads&.each do |relation_name, collection|
|
51
|
+
relation = self.class.relationships.fetch(relation_name)
|
53
52
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
end
|
53
|
+
collection.each do |model|
|
54
|
+
model.assign_attributes(relation.fetch(:foreign_key) => id)
|
55
|
+
model.create! if model.new_record?
|
58
56
|
end
|
59
57
|
end
|
60
58
|
|
@@ -63,7 +61,7 @@ module BazaModels::Model::Manipulation
|
|
63
61
|
|
64
62
|
def create!
|
65
63
|
if create
|
66
|
-
|
64
|
+
true
|
67
65
|
else
|
68
66
|
raise BazaModels::Errors::InvalidRecord, errors.full_messages.join(". ")
|
69
67
|
end
|
@@ -71,25 +69,29 @@ module BazaModels::Model::Manipulation
|
|
71
69
|
|
72
70
|
def save!(args = {})
|
73
71
|
if save(args)
|
74
|
-
|
72
|
+
true
|
75
73
|
else
|
76
74
|
raise BazaModels::Errors::InvalidRecord, errors.full_messages.join(". ")
|
77
75
|
end
|
78
76
|
end
|
79
77
|
|
80
|
-
def
|
78
|
+
def update(attributes)
|
81
79
|
assign_attributes(attributes)
|
82
80
|
save
|
83
81
|
end
|
84
82
|
|
85
|
-
def update_attributes!(attributes)
|
86
|
-
update!(attributes)
|
87
|
-
end
|
88
|
-
|
89
83
|
def update!(attributes)
|
90
84
|
raise BazaModels::Errors::InvalidRecord, @errors.full_messages.join(". ") unless update_attributes(attributes)
|
91
85
|
end
|
92
86
|
|
87
|
+
def update_attributes(attributes)
|
88
|
+
update(attributes)
|
89
|
+
end
|
90
|
+
|
91
|
+
def update_attributes!(attributes)
|
92
|
+
update!(attributes)
|
93
|
+
end
|
94
|
+
|
93
95
|
def assign_attributes(attributes)
|
94
96
|
@changes.merge!(real_attributes(attributes))
|
95
97
|
end
|
@@ -97,7 +99,7 @@ module BazaModels::Model::Manipulation
|
|
97
99
|
def destroy
|
98
100
|
if new_record?
|
99
101
|
errors.add(:base, "cannot destroy new record")
|
100
|
-
|
102
|
+
false
|
101
103
|
else
|
102
104
|
fire_callbacks(:before_destroy)
|
103
105
|
|
@@ -108,7 +110,7 @@ module BazaModels::Model::Manipulation
|
|
108
110
|
|
109
111
|
db.delete(table_name, id: id)
|
110
112
|
fire_callbacks(:after_destroy)
|
111
|
-
|
113
|
+
true
|
112
114
|
end
|
113
115
|
end
|
114
116
|
|
@@ -7,6 +7,7 @@ module BazaModels::Model::Queries
|
|
7
7
|
def find(id)
|
8
8
|
row = db.select(table_name, {id: id}, limit: 1).fetch
|
9
9
|
raise BazaModels::Errors::RecordNotFound, "Record not found by ID: #{id}" unless row
|
10
|
+
|
10
11
|
new(row, init: true)
|
11
12
|
end
|
12
13
|
|
@@ -23,6 +24,7 @@ module BazaModels::Model::Queries
|
|
23
24
|
def find_or_initialize_by(data)
|
24
25
|
model = find_by(data)
|
25
26
|
return model if model
|
27
|
+
|
26
28
|
new(data)
|
27
29
|
end
|
28
30
|
|
data/lib/baza_models/model.rb
CHANGED
@@ -16,6 +16,7 @@ class BazaModels::Model
|
|
16
16
|
|
17
17
|
attr_accessor :data, :db
|
18
18
|
attr_reader :changes, :errors
|
19
|
+
attr_writer :db, :table_name
|
19
20
|
|
20
21
|
# Define all callback methods.
|
21
22
|
CALLBACK_TYPES = [
|
@@ -45,7 +46,7 @@ class BazaModels::Model
|
|
45
46
|
|
46
47
|
QUERY_METHODS = [
|
47
48
|
:average, :all, :any?, :destroy_all, :each, :empty?, :ids, :maximum, :minimum, :none?, :count, :find, :first, :find_first, :last,
|
48
|
-
:length, :size, :select, :includes, :joins, :group, :where, :order, :pluck, :preloads, :sum, :limit, :
|
49
|
+
:length, :size, :select, :includes, :joins, :group, :where, :order, :pluck, :preloads, :sum, :limit, :accessible_by, :ransack
|
49
50
|
].freeze
|
50
51
|
QUERY_METHODS.each do |query_method|
|
51
52
|
(class << self; self; end).__send__(:define_method, query_method) do |*args, &blk|
|
@@ -75,9 +76,7 @@ class BazaModels::Model
|
|
75
76
|
end
|
76
77
|
end
|
77
78
|
|
78
|
-
# rubocop:disable Style/TrivialAccessors
|
79
79
|
def new_record?
|
80
|
-
# rubocop:enable Style/TrivialAccessors
|
81
80
|
@new_record
|
82
81
|
end
|
83
82
|
|
@@ -87,21 +86,23 @@ class BazaModels::Model
|
|
87
86
|
|
88
87
|
def db
|
89
88
|
return @db if @db
|
89
|
+
|
90
90
|
@db ||= self.class.db
|
91
91
|
end
|
92
92
|
|
93
|
-
attr_writer :db
|
94
|
-
|
95
93
|
def self.attribute_names
|
96
94
|
init_model
|
97
95
|
@table.columns.map(&:name).map(&:clone)
|
98
96
|
end
|
99
97
|
|
100
98
|
def self.db
|
101
|
-
@db = nil if
|
99
|
+
@db = nil if
|
100
|
+
@db&.closed?
|
102
101
|
return @db if @db
|
102
|
+
|
103
103
|
@db ||= BazaModels.primary_db
|
104
104
|
raise "No Baza database has been configured" unless @db
|
105
|
+
|
105
106
|
@db
|
106
107
|
end
|
107
108
|
|
@@ -144,8 +145,6 @@ class BazaModels::Model
|
|
144
145
|
attr_writer :db, :table_name
|
145
146
|
end
|
146
147
|
|
147
|
-
attr_writer :table_name
|
148
|
-
|
149
148
|
def autoloads
|
150
149
|
@autoloads ||= {}
|
151
150
|
@autoloads
|
@@ -187,7 +186,7 @@ class BazaModels::Model
|
|
187
186
|
end
|
188
187
|
|
189
188
|
def to_param
|
190
|
-
id
|
189
|
+
id&.to_s
|
191
190
|
end
|
192
191
|
|
193
192
|
def to_key
|
@@ -201,6 +200,7 @@ class BazaModels::Model
|
|
201
200
|
def reload
|
202
201
|
@data = db.single(table_name, {id: id}, limit: 1)
|
203
202
|
raise BazaModels::Errors::RecordNotFound unless @data
|
203
|
+
|
204
204
|
@changes = {}
|
205
205
|
self
|
206
206
|
end
|
@@ -233,15 +233,15 @@ class BazaModels::Model
|
|
233
233
|
return false unless self.class == other.class
|
234
234
|
|
235
235
|
if new_record? && other.new_record?
|
236
|
-
|
236
|
+
merged_data == other.__send__(:merged_data)
|
237
237
|
else
|
238
|
-
|
238
|
+
id == other.id
|
239
239
|
end
|
240
240
|
end
|
241
241
|
|
242
|
-
# rubocop:disable
|
242
|
+
# rubocop:disable Naming/PredicateName
|
243
243
|
def has_attribute?(name)
|
244
|
-
# rubocop:enable
|
244
|
+
# rubocop:enable Naming/PredicateName
|
245
245
|
self.class.column_names.include?(name.to_s)
|
246
246
|
end
|
247
247
|
|
@@ -260,6 +260,7 @@ class BazaModels::Model
|
|
260
260
|
|
261
261
|
def read_attribute(attribute_name)
|
262
262
|
return @changes.fetch(attribute_name) if @changes.key?(attribute_name)
|
263
|
+
|
263
264
|
@data.fetch(attribute_name)
|
264
265
|
end
|
265
266
|
|
@@ -271,6 +272,7 @@ class BazaModels::Model
|
|
271
272
|
changed = false
|
272
273
|
@changes.each do |key, value|
|
273
274
|
next if @data.fetch(key) == value
|
275
|
+
|
274
276
|
changed = true
|
275
277
|
break
|
276
278
|
end
|
@@ -283,10 +285,7 @@ protected
|
|
283
285
|
class << self
|
284
286
|
attr_reader :__blank_attributes
|
285
287
|
end
|
286
|
-
|
287
|
-
# rubocop:disable Style/TrivialAccessors
|
288
288
|
def self.model_initialized?
|
289
|
-
# rubocop:enable Style/TrivialAccessors
|
290
289
|
@model_initialized
|
291
290
|
end
|
292
291
|
|
@@ -310,11 +309,7 @@ protected
|
|
310
309
|
end
|
311
310
|
|
312
311
|
define_method("#{column_name}_changed?") do
|
313
|
-
|
314
|
-
true
|
315
|
-
else
|
316
|
-
false
|
317
|
-
end
|
312
|
+
@changes.key?(column_name) && @changes.fetch(column_name) != @data.fetch(column_name)
|
318
313
|
end
|
319
314
|
|
320
315
|
define_method("will_save_change_to_#{column_name}?") do
|
@@ -359,12 +354,11 @@ protected
|
|
359
354
|
attributes.each do |attribute_name, attribute_value|
|
360
355
|
belongs_to_relations = self.class.instance_variable_get(:@belongs_to_relations)
|
361
356
|
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
end
|
357
|
+
|
358
|
+
belongs_to_relations&.each do |relation|
|
359
|
+
if attribute_name.to_s == relation[:relation_name].to_s
|
360
|
+
attribute_name = :"#{attribute_name}_id"
|
361
|
+
attribute_value = attribute_value.id if attribute_value
|
368
362
|
end
|
369
363
|
end
|
370
364
|
|
@@ -385,16 +379,19 @@ protected
|
|
385
379
|
|
386
380
|
def attribute_before_last_save(attribute_name)
|
387
381
|
return @before_last_save.fetch(attribute_name) if @before_last_save.key?(attribute_name)
|
382
|
+
|
388
383
|
@data.fetch(attribute_name)
|
389
384
|
end
|
390
385
|
|
391
386
|
def will_save_change_to_attribute?(attribute_name)
|
392
387
|
return true if @changes.key?(attribute_name) && @changes[attribute_name] != data[attribute_name]
|
388
|
+
|
393
389
|
false
|
394
390
|
end
|
395
391
|
|
396
392
|
def method_missing(method_name, *args, &blk)
|
397
393
|
return @data.fetch(method_name) if @data.key?(method_name)
|
394
|
+
|
398
395
|
super
|
399
396
|
end
|
400
397
|
end
|
@@ -36,6 +36,7 @@ private
|
|
36
36
|
|
37
37
|
relationship_pair = @model.relationships.detect { |key, _value| key == argument }
|
38
38
|
raise "Could not find a relationship on #{@model.name} by that name: #{argument}" unless relationship_pair
|
39
|
+
|
39
40
|
relationship = relationship_pair[1]
|
40
41
|
|
41
42
|
table_name = relationship.fetch(:table_name)
|
@@ -60,6 +61,7 @@ private
|
|
60
61
|
|
61
62
|
relationship_pair = @model.relationships.detect { |relationship_name, _relationship| relationship_name == key }
|
62
63
|
raise "Could not find a relationship on #{@model.name} by that name: #{value}" unless relationship_pair
|
64
|
+
|
63
65
|
relationship = relationship_pair[1]
|
64
66
|
|
65
67
|
BazaModels::Query::Inspector.new(
|
@@ -1,10 +1,8 @@
|
|
1
1
|
module BazaModels::Query::Pagination
|
2
2
|
def current_page
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
raise "Page has not been set"
|
7
|
-
end
|
3
|
+
raise "Page has not been set" unless @page
|
4
|
+
|
5
|
+
@page
|
8
6
|
end
|
9
7
|
|
10
8
|
def out_of_bounds?
|
@@ -44,11 +42,11 @@ module BazaModels::Query::Pagination
|
|
44
42
|
end
|
45
43
|
|
46
44
|
def total_pages
|
47
|
-
pages_count = (count.to_f / per
|
45
|
+
pages_count = (count.to_f / per)
|
48
46
|
|
49
47
|
pages_count = 1 if pages_count.nan? || pages_count == Float::INFINITY
|
50
48
|
pages_count = pages_count.ceil
|
51
|
-
pages_count = 1 if pages_count
|
49
|
+
pages_count = 1 if pages_count.zero?
|
52
50
|
pages_count
|
53
51
|
end
|
54
52
|
end
|
@@ -9,7 +9,7 @@ class BazaModels::Query::SqlGenerator
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
def to_sql
|
12
|
+
def to_sql # rubocop:disable Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/PerceivedComplexity
|
13
13
|
sql = "SELECT "
|
14
14
|
|
15
15
|
if @selects.empty?
|
@@ -68,9 +68,9 @@ class BazaModels::Query::SqlGenerator
|
|
68
68
|
end
|
69
69
|
|
70
70
|
if @reverse_order
|
71
|
-
if
|
71
|
+
if /\s+desc/i.match?(order)
|
72
72
|
order = order.gsub(/\s+desc/i, " ASC")
|
73
|
-
elsif
|
73
|
+
elsif /\s+asc/i.match?(order)
|
74
74
|
order = order.gsub(/\s+asc/i, " DESC")
|
75
75
|
else
|
76
76
|
order = "#{order} DESC"
|