baza_models 0.0.11 → 0.0.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +5 -5
  2. data/.github/dependabot.yml +13 -0
  3. data/.rubocop.yml +134 -25
  4. data/.rubocop_todo.yml +47 -32
  5. data/.ruby-version +1 -0
  6. data/Gemfile +15 -13
  7. data/Gemfile.lock +126 -105
  8. data/Rakefile +5 -7
  9. data/VERSION +1 -1
  10. data/baza_models.gemspec +43 -55
  11. data/lib/baza_models/autoloader.rb +1 -0
  12. data/lib/baza_models/errors.rb +2 -3
  13. data/lib/baza_models/helpers/ransacker_helper.rb +2 -2
  14. data/lib/baza_models/model/belongs_to_relations.rb +1 -3
  15. data/lib/baza_models/model/has_many_relations.rb +2 -2
  16. data/lib/baza_models/model/has_one_relations.rb +2 -2
  17. data/lib/baza_models/model/manipulation.rb +20 -18
  18. data/lib/baza_models/model/queries.rb +2 -0
  19. data/lib/baza_models/model/scopes.rb +1 -0
  20. data/lib/baza_models/model/validations.rb +1 -0
  21. data/lib/baza_models/model.rb +24 -27
  22. data/lib/baza_models/query/inspector.rb +2 -0
  23. data/lib/baza_models/query/pagination.rb +5 -7
  24. data/lib/baza_models/query/sql_generator.rb +3 -3
  25. data/lib/baza_models/query.rb +16 -14
  26. data/lib/baza_models/ransacker/relationship_scanner.rb +4 -1
  27. data/lib/baza_models/ransacker.rb +3 -1
  28. data/lib/baza_models/validators/confirmation_validator.rb +1 -3
  29. data/lib/baza_models/validators/uniqueness_validator.rb +2 -4
  30. data/peak_flow.yml +4 -0
  31. data/spec/baza_models/autoloader_spec.rb +1 -1
  32. data/spec/baza_models/baza_orm_adapter_spec.rb +1 -1
  33. data/spec/baza_models/model/has_many_relations_spec.rb +1 -1
  34. data/spec/baza_models/model/manipulation_spec.rb +3 -3
  35. data/spec/baza_models/model_spec.rb +31 -4
  36. data/spec/baza_models/query_spec.rb +14 -6
  37. data/spec/factories/organization.rb +2 -2
  38. data/spec/factories/user.rb +2 -2
  39. data/spec/spec_helper.rb +3 -3
  40. data/spec/support/database_helper.rb +6 -3
  41. data/spec/test_classes/user.rb +2 -1
  42. metadata +70 -42
  43. data/shippable.yml +0 -11
  44. 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
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
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 "jeweler"
15
- Jeweler::Tasks.new do |gem|
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
- Jeweler::RubygemsDotOrgTasks.new
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.11
1
+ 0.0.15
data/baza_models.gemspec CHANGED
@@ -1,17 +1,17 @@
1
- # Generated by jeweler
1
+ # Generated by juwelier
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
3
+ # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: baza_models 0.0.11 ruby lib
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.11"
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 = "2018-01-09"
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
- "shippable.yml",
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 = "2.6.13".freeze
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
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
114
- s.add_runtime_dependency(%q<array_enumerator>.freeze, [">= 0.0.10"])
115
- s.add_runtime_dependency(%q<auto_autoloader>.freeze, [">= 0.0.1"])
116
- s.add_runtime_dependency(%q<baza>.freeze, ["~> 0.0.21"])
117
- s.add_runtime_dependency(%q<html_gen>.freeze, [">= 0.0.12"])
118
- s.add_runtime_dependency(%q<simple_delegate>.freeze, [">= 0.0.2"])
119
- s.add_runtime_dependency(%q<string-cases>.freeze, [">= 0.0.3"])
120
- s.add_development_dependency(%q<best_practice_project>.freeze, [">= 0"])
121
- s.add_development_dependency(%q<bundler>.freeze, ["~> 1.0"])
122
- s.add_development_dependency(%q<factory_girl>.freeze, [">= 0"])
123
- s.add_development_dependency(%q<jdbc-sqlite3>.freeze, [">= 0"])
124
- s.add_development_dependency(%q<jeweler>.freeze, ["= 2.3.6"])
125
- s.add_development_dependency(%q<orm_adapter>.freeze, [">= 0"])
126
- s.add_development_dependency(%q<rdoc>.freeze, ["~> 3.12"])
127
- s.add_development_dependency(%q<rspec>.freeze, ["= 3.6.0"])
128
- s.add_development_dependency(%q<rubocop>.freeze, ["= 0.37.0"])
129
- s.add_development_dependency(%q<sqlite3>.freeze, [">= 0"])
130
- else
131
- s.add_dependency(%q<array_enumerator>.freeze, [">= 0.0.10"])
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.0.10"])
150
- s.add_dependency(%q<auto_autoloader>.freeze, [">= 0.0.1"])
151
- s.add_dependency(%q<baza>.freeze, ["~> 0.0.21"])
152
- s.add_dependency(%q<html_gen>.freeze, [">= 0.0.12"])
153
- s.add_dependency(%q<simple_delegate>.freeze, [">= 0.0.2"])
154
- s.add_dependency(%q<string-cases>.freeze, [">= 0.0.3"])
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, ["~> 1.0"])
157
- s.add_dependency(%q<factory_girl>.freeze, [">= 0"])
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<jeweler>.freeze, ["= 2.3.6"])
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, ["~> 3.12"])
162
- s.add_dependency(%q<rspec>.freeze, ["= 3.6.0"])
163
- s.add_dependency(%q<rubocop>.freeze, ["= 0.37.0"])
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
@@ -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 Style/PredicateName
7
+ # rubocop:disable Naming/PredicateName
8
8
  def has_many(relation_name, *all_args)
9
- # rubocop:enable Style/PredicateName
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 Style/PredicateName
7
+ # rubocop:disable Naming/PredicateName
8
8
  def has_one(relation_name, *all_args)
9
- # rubocop:enable Style/PredicateName
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
- return true
33
+ true
34
34
  else
35
- return false
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
- if @autoloads
51
- @autoloads.each do |relation_name, collection|
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
- collection.each do |model|
55
- model.assign_attributes(relation.fetch(:foreign_key) => id)
56
- model.create! if model.new_record?
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
- return true
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
- return true
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 update_attributes(attributes)
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
- return false
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
- return true
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
 
@@ -9,6 +9,7 @@ module BazaModels::Model::Scopes
9
9
  name = name.to_sym
10
10
 
11
11
  raise "Such a scope already exists" if @scopes.key?(name)
12
+
12
13
  @scopes[name] = {blk: blk}
13
14
 
14
15
  (class << self; self; end).__send__(:define_method, name) do
@@ -22,6 +22,7 @@ module BazaModels::Model::Validations
22
22
 
23
23
  validators[attribute_name].each do |validator|
24
24
  next unless validator.fire?(self)
25
+
25
26
  validator.validate(self, attribute_value)
26
27
  end
27
28
  end
@@ -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, :to_a, :accessible_by, :ransack
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 @db && @db.closed?
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.to_s if 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
- return merged_data == other.__send__(:merged_data)
236
+ merged_data == other.__send__(:merged_data)
237
237
  else
238
- return id == other.id
238
+ id == other.id
239
239
  end
240
240
  end
241
241
 
242
- # rubocop:disable Style/PredicateName
242
+ # rubocop:disable Naming/PredicateName
243
243
  def has_attribute?(name)
244
- # rubocop:enable Style/PredicateName
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
- if @changes.key?(column_name) && @changes.fetch(column_name) != @data.fetch(column_name)
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
- if belongs_to_relations
363
- belongs_to_relations.each do |relation|
364
- if attribute_name.to_s == relation[:relation_name].to_s
365
- attribute_name = :"#{attribute_name}_id"
366
- attribute_value = attribute_value.id if attribute_value
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
- if @page
4
- @page
5
- else
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.to_f)
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 == 0
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 order =~ /\s+desc/i
71
+ if /\s+desc/i.match?(order)
72
72
  order = order.gsub(/\s+desc/i, " ASC")
73
- elsif order =~ /\s+asc/i
73
+ elsif /\s+asc/i.match?(order)
74
74
  order = order.gsub(/\s+asc/i, " DESC")
75
75
  else
76
76
  order = "#{order} DESC"