baza_models 0.0.5 → 0.0.6

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: 6dbce57502f93c9b90c5d5dba534b57b4db38d2a
4
- data.tar.gz: 2b6dc34ac4dbfcfeb36b38ad8e49f07ea80c41ae
3
+ metadata.gz: 24043c37709619d4fa62e93c29aca64d38343f52
4
+ data.tar.gz: 3f314d8915ee7c914cd6c3d7831a5719c66d965d
5
5
  SHA512:
6
- metadata.gz: 90cdb2022ec8e2b869777e34cf83752f6074f045c1fff4c1489e013f3956b2f192410d56847401e9f954a6f92f44794e849ad809243ea274bd5e6aee5c7d5bdb
7
- data.tar.gz: 3b6c290cc503f5314a8bcf3769ab003ea27d39b297bbf11fcd407f9bc05d903adabd722b37455c1e37cce72924cc538512e4dfb8f105ed95d09dd4c63a0208f6
6
+ metadata.gz: 3936eb5b728fa94d82cf3703027ef015c8c910328d6d912994ad27cf91a62a8bfbfd58f9235b383917c78bae607def2f206a263cf8c59d41e4a19db0310da279
7
+ data.tar.gz: 74070bf381abb76c1d46a0e2542321023b6fb047e08387dd839acf2b31141deb17108c35770ca19c37139af5596248963df82e0b76107debce70a29f06a53c4d
data/Gemfile CHANGED
@@ -4,10 +4,11 @@ source "http://rubygems.org"
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
 
6
6
  gem "array_enumerator", ">= 0.0.10"
7
- gem "baza", "~> 0.0.20"
7
+ gem "baza", "~> 0.0.21"
8
8
  gem "string-cases", ">= 0.0.3"
9
9
  gem "auto_autoloader", ">= 0.0.1"
10
10
  gem "html_gen", ">= 0.0.12", require: false
11
+ gem "simple_delegate", ">= 0.0.2"
11
12
 
12
13
  # Add dependencies to develop your gem here.
13
14
  # Include everything needed to run rake, tests, features, etc.
data/Gemfile.lock CHANGED
@@ -19,11 +19,13 @@ GEM
19
19
  ast (2.2.0)
20
20
  auto_autoloader (0.0.4)
21
21
  string-cases
22
- baza (0.0.20)
22
+ baza (0.0.21)
23
23
  array_enumerator (~> 0.0.10)
24
+ auto_autoloader (~> 0.0.1)
24
25
  datet (~> 0.0.25)
25
26
  event_handler (~> 0.0.0)
26
- string-cases (~> 0.0.1)
27
+ simple_delegate (~> 0.0.2)
28
+ string-cases (~> 0.0.4)
27
29
  wref (~> 0.0.8)
28
30
  builder (3.2.2)
29
31
  codeclimate-test-reporter (0.4.7)
@@ -108,6 +110,7 @@ GEM
108
110
  ruby-progressbar (~> 1.7)
109
111
  unicode-display_width (~> 0.3)
110
112
  ruby-progressbar (1.7.5)
113
+ simple_delegate (0.0.2)
111
114
  simplecov (0.10.0)
112
115
  docile (~> 1.1.0)
113
116
  json (~> 1.8)
@@ -129,7 +132,7 @@ PLATFORMS
129
132
  DEPENDENCIES
130
133
  array_enumerator (>= 0.0.10)
131
134
  auto_autoloader (>= 0.0.1)
132
- baza (~> 0.0.20)
135
+ baza (~> 0.0.21)
133
136
  best_practice_project!
134
137
  bundler (~> 1.0)
135
138
  codeclimate-test-reporter
@@ -141,6 +144,7 @@ DEPENDENCIES
141
144
  rdoc (~> 3.12)
142
145
  rspec (~> 3.3.0)
143
146
  rubocop (= 0.37.0)
147
+ simple_delegate (>= 0.0.2)
144
148
  sqlite3
145
149
  string-cases (>= 0.0.3)
146
150
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.5
1
+ 0.0.6
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 ruby lib
5
+ # stub: baza_models 0.0.6 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "baza_models"
9
- s.version = "0.0.5"
9
+ s.version = "0.0.6"
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-09"
14
+ s.date = "2016-04-11"
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 = [
@@ -39,6 +39,7 @@ Gem::Specification.new do |s|
39
39
  "lib/baza_models/helpers.rb",
40
40
  "lib/baza_models/helpers/ransacker_helper.rb",
41
41
  "lib/baza_models/model.rb",
42
+ "lib/baza_models/model/active_record_column_adapater.rb",
42
43
  "lib/baza_models/model/belongs_to_relations.rb",
43
44
  "lib/baza_models/model/custom_validations.rb",
44
45
  "lib/baza_models/model/delegation.rb",
@@ -46,12 +47,14 @@ Gem::Specification.new do |s|
46
47
  "lib/baza_models/model/has_one_relations.rb",
47
48
  "lib/baza_models/model/manipulation.rb",
48
49
  "lib/baza_models/model/queries.rb",
50
+ "lib/baza_models/model/reflection.rb",
49
51
  "lib/baza_models/model/scopes.rb",
50
52
  "lib/baza_models/model/translation_functionality.rb",
51
53
  "lib/baza_models/model/validations.rb",
52
54
  "lib/baza_models/query.rb",
53
55
  "lib/baza_models/query/inspector.rb",
54
56
  "lib/baza_models/query/not.rb",
57
+ "lib/baza_models/query/pagination.rb",
55
58
  "lib/baza_models/query/sql_generator.rb",
56
59
  "lib/baza_models/ransacker.rb",
57
60
  "lib/baza_models/ransacker/relationship_scanner.rb",
@@ -80,6 +83,7 @@ Gem::Specification.new do |s|
80
83
  "spec/baza_models/model/validations_spec.rb",
81
84
  "spec/baza_models/model_spec.rb",
82
85
  "spec/baza_models/query/not_spec.rb",
86
+ "spec/baza_models/query/pagination_spec.rb",
83
87
  "spec/baza_models/query_spec.rb",
84
88
  "spec/baza_models/ransacker_spec.rb",
85
89
  "spec/baza_models/validators/confirmation_validator_spec.rb",
@@ -107,10 +111,11 @@ Gem::Specification.new do |s|
107
111
 
108
112
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
109
113
  s.add_runtime_dependency(%q<array_enumerator>, [">= 0.0.10"])
110
- s.add_runtime_dependency(%q<baza>, ["~> 0.0.20"])
114
+ s.add_runtime_dependency(%q<baza>, ["~> 0.0.21"])
111
115
  s.add_runtime_dependency(%q<string-cases>, [">= 0.0.3"])
112
116
  s.add_runtime_dependency(%q<auto_autoloader>, [">= 0.0.1"])
113
117
  s.add_runtime_dependency(%q<html_gen>, [">= 0.0.12"])
118
+ s.add_runtime_dependency(%q<simple_delegate>, [">= 0.0.2"])
114
119
  s.add_development_dependency(%q<rspec>, ["~> 3.3.0"])
115
120
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
116
121
  s.add_development_dependency(%q<bundler>, ["~> 1.0"])
@@ -123,10 +128,11 @@ Gem::Specification.new do |s|
123
128
  s.add_development_dependency(%q<orm_adapter>, [">= 0"])
124
129
  else
125
130
  s.add_dependency(%q<array_enumerator>, [">= 0.0.10"])
126
- s.add_dependency(%q<baza>, ["~> 0.0.20"])
131
+ s.add_dependency(%q<baza>, ["~> 0.0.21"])
127
132
  s.add_dependency(%q<string-cases>, [">= 0.0.3"])
128
133
  s.add_dependency(%q<auto_autoloader>, [">= 0.0.1"])
129
134
  s.add_dependency(%q<html_gen>, [">= 0.0.12"])
135
+ s.add_dependency(%q<simple_delegate>, [">= 0.0.2"])
130
136
  s.add_dependency(%q<rspec>, ["~> 3.3.0"])
131
137
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
132
138
  s.add_dependency(%q<bundler>, ["~> 1.0"])
@@ -140,10 +146,11 @@ Gem::Specification.new do |s|
140
146
  end
141
147
  else
142
148
  s.add_dependency(%q<array_enumerator>, [">= 0.0.10"])
143
- s.add_dependency(%q<baza>, ["~> 0.0.20"])
149
+ s.add_dependency(%q<baza>, ["~> 0.0.21"])
144
150
  s.add_dependency(%q<string-cases>, [">= 0.0.3"])
145
151
  s.add_dependency(%q<auto_autoloader>, [">= 0.0.1"])
146
152
  s.add_dependency(%q<html_gen>, [">= 0.0.12"])
153
+ s.add_dependency(%q<simple_delegate>, [">= 0.0.2"])
147
154
  s.add_dependency(%q<rspec>, ["~> 3.3.0"])
148
155
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
149
156
  s.add_dependency(%q<bundler>, ["~> 1.0"])
@@ -0,0 +1,32 @@
1
+ class BazaModels::Model::ActiveRecordColumnAdapater
2
+ def initialize(baza_column)
3
+ @baza_column = baza_column
4
+ end
5
+
6
+ def name
7
+ @baza_column.name
8
+ end
9
+
10
+ def null
11
+ @baza_column.null?
12
+ end
13
+
14
+ def sql_type
15
+ result = @baza_column.type.to_s.clone
16
+ result << "(#{@baza_column.maxlength})" if @baza_column.maxlength
17
+ result
18
+ end
19
+
20
+ def type
21
+ case @baza_column.type
22
+ when :int
23
+ :integer
24
+ when :tinyint
25
+ :boolean
26
+ when :varchar, :string, :text
27
+ :string
28
+ else
29
+ raise "Unknown type: #{@baza_column.type}"
30
+ end
31
+ end
32
+ end
@@ -41,8 +41,8 @@ module BazaModels::Model::HasManyRelations
41
41
  define_method(relation_name) do
42
42
  class_instance = StringCases.constantize(relation.fetch(:class_name))
43
43
  query = class_instance.where(relation.fetch(:foreign_key) => id)
44
- query._previous_model = self
45
- query._relation = relation
44
+ query.previous_model = self
45
+ query.relation = relation
46
46
 
47
47
  all_args.each do |arg|
48
48
  query = query.instance_exec(&arg) if arg.is_a?(Proc)
@@ -46,8 +46,8 @@ module BazaModels::Model::HasOneRelations
46
46
  class_instance = StringCases.constantize(relation.fetch(:class_name))
47
47
 
48
48
  query = class_instance.where(relation.fetch(:foreign_key) => id)
49
- query._previous_model = self
50
- query._relation = relation
49
+ query.previous_model = self
50
+ query.relation = relation
51
51
 
52
52
  all_args.each do |arg|
53
53
  query = query.instance_exec(&arg) if arg.is_a?(Proc)
@@ -40,7 +40,7 @@ module BazaModels::Model::Manipulation
40
40
  end
41
41
 
42
42
  fire_callbacks(:before_create)
43
- self.created_at = Time.now if has_attribute?(:created_at) && !created_at?
43
+ self.created_at ||= Time.now if has_attribute?(:created_at)
44
44
 
45
45
  @data[:id] = db.insert(table_name, @changes, return_id: true)
46
46
 
@@ -0,0 +1,25 @@
1
+ class BazaModels::Model::Reflection
2
+ def initialize(relationship)
3
+ @relationship = relationship
4
+ end
5
+
6
+ def class_name
7
+ @relationship.fetch(:class_name)
8
+ end
9
+
10
+ def collection?
11
+ @relationship.fetch(:type) == :has_many
12
+ end
13
+
14
+ def foreign_key
15
+ @relationship.fetch(:foreign_key).to_s
16
+ end
17
+
18
+ def klass
19
+ StringCases.constantize(class_name)
20
+ end
21
+
22
+ def name
23
+ @relationship.fetch(:relation_name)
24
+ end
25
+ end
@@ -9,7 +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
- @scopes[name] = true
12
+ @scopes[name] = {blk: blk}
13
13
 
14
14
  (class << self; self; end).__send__(:define_method, name) do
15
15
  blk.call
@@ -91,6 +91,11 @@ class BazaModels::Model
91
91
 
92
92
  attr_writer :db
93
93
 
94
+ def self.attribute_names
95
+ init_model
96
+ @table.columns.map(&:name).map(&:clone)
97
+ end
98
+
94
99
  def self.db
95
100
  @db = nil if @db && @db.closed?
96
101
  return @db if @db
@@ -107,6 +112,33 @@ class BazaModels::Model
107
112
  @db.transaction(&blk)
108
113
  end
109
114
 
115
+ def self.columns
116
+ init_model
117
+ @table.columns.map do |column|
118
+ BazaModels::Model::ActiveRecordColumnAdapater.new(column)
119
+ end
120
+ end
121
+
122
+ def self.columns_hash
123
+ init_model
124
+ result = {}
125
+
126
+ @table.columns do |column|
127
+ result[column.name] = BazaModels::Model::ActiveRecordColumnAdapater.new(column)
128
+ end
129
+
130
+ result
131
+ end
132
+
133
+ def self.reflections
134
+ result = {}
135
+ relationships.each_value do |relationship|
136
+ result[relationship.fetch(:relation_name).to_s] = BazaModels::Model::Reflection.new(relationship)
137
+ end
138
+
139
+ result
140
+ end
141
+
110
142
  class << self
111
143
  attr_writer :db, :table_name
112
144
  end
@@ -134,15 +166,15 @@ class BazaModels::Model
134
166
  self
135
167
  end
136
168
 
137
- def self.init_model
138
- return if @model_initialized
169
+ def self.init_model(args = {})
170
+ return if @model_initialized && !args[:force]
139
171
 
140
172
  @table = db.tables[table_name]
141
173
 
142
174
  @__blank_attributes ||= {}
143
175
 
144
176
  @table.columns do |column|
145
- init_attribute_from_column(column)
177
+ init_attribute_from_column(column) unless @model_initialized
146
178
  @__blank_attributes[column.name.to_sym] = nil
147
179
  end
148
180
 
@@ -0,0 +1,54 @@
1
+ module BazaModels::Query::Pagination
2
+ def current_page
3
+ if @page
4
+ @page
5
+ else
6
+ raise "Page has not been set"
7
+ end
8
+ end
9
+
10
+ def out_of_bounds?
11
+ current_page > total_pages
12
+ end
13
+
14
+ def page(some_page = :non_given)
15
+ if some_page == :non_given
16
+ @page ||= 1
17
+ else
18
+ some_page ||= 1
19
+ some_page = some_page.to_i
20
+ offset = (some_page - 1) * per
21
+
22
+ clone(page: some_page, offset: offset, limit: per)
23
+ end
24
+ end
25
+
26
+ def paginated?
27
+ @page != nil
28
+ end
29
+
30
+ def per(value = :non_given)
31
+ if value == :non_given
32
+ @per ||= 30
33
+ else
34
+ value = value.to_i
35
+ offset = (page - 1) * value
36
+ clone(limit: value, offset: offset, per: value)
37
+ end
38
+ end
39
+
40
+ alias per_page per
41
+
42
+ def total_entries
43
+ @model.count
44
+ end
45
+
46
+ def total_pages
47
+ pages_count = (count.to_f / per.to_f)
48
+
49
+ pages_count = 1 if pages_count.nan? || pages_count == Float::INFINITY
50
+ pages_count = pages_count.ceil
51
+ pages_count = 1 if pages_count == 0
52
+ pages_count
53
+ end
54
+ end
@@ -3,7 +3,7 @@ class BazaModels::Query::SqlGenerator
3
3
  @query = args.fetch(:query)
4
4
 
5
5
  instance_variables = [
6
- :selects, :joins, :wheres, :groups, :orders, :limit, :offset,
6
+ :selects, :joins, :wheres, :groups, :orders, :per, :limit, :offset,
7
7
  :model, :table_name, :reverse_order
8
8
  ]
9
9
  instance_variables.each do |instance_variable|
@@ -3,7 +3,9 @@ require "array_enumerator"
3
3
  class BazaModels::Query
4
4
  AutoAutoloader.autoload_sub_classes(self, __FILE__)
5
5
 
6
- attr_accessor :_previous_model, :_relation
6
+ include BazaModels::Query::Pagination
7
+
8
+ attr_accessor :previous_model, :relation
7
9
 
8
10
  def initialize(args)
9
11
  @args = args
@@ -17,7 +19,11 @@ class BazaModels::Query
17
19
  @includes = args[:includes] || []
18
20
  @joins = args[:joins] || []
19
21
  @groups = args[:groups] || []
22
+ @offset = args[:offset]
20
23
  @orders = args[:orders] || []
24
+ @page = args[:page]
25
+ @per = args[:per]
26
+ @previous_model = args[:previous_model]
21
27
  @limit = args[:limit]
22
28
 
23
29
  @joins_tracker = {}
@@ -29,9 +35,9 @@ class BazaModels::Query
29
35
 
30
36
  def any?
31
37
  if @db.query(clone.select(:id).limit(1).to_sql).fetch
32
- return true
38
+ true
33
39
  else
34
- return false
40
+ false
35
41
  end
36
42
  end
37
43
 
@@ -44,21 +50,21 @@ class BazaModels::Query
44
50
  end
45
51
 
46
52
  def count
47
- if @_previous_model && @_previous_model.new_record?
48
- return autoloaded_cache_or_create.length
53
+ if @previous_model && @previous_model.new_record?
54
+ autoloaded_cache_or_create.length
49
55
  else
50
- query = clone
51
-
52
- query.instance_variable_set(:@selects, [])
53
- query = clone.select("COUNT(*) AS count")
56
+ query = clone(selects: [])
57
+ .select("COUNT(*) AS count")
58
+ .limit(nil)
59
+ .offset(nil)
54
60
 
55
61
  @db.query(query.to_sql).fetch.fetch(:count)
56
62
  end
57
63
  end
58
64
 
59
65
  def length
60
- if @_previous_model && !any_wheres_other_than_relation? && @_previous_model.autoloads[@_relation.fetch(:relation_name)]
61
- @_previous_model.autoloads[@_relation.fetch(:relation_name)].length
66
+ if @previous_model && !any_wheres_other_than_relation? && @previous_model.autoloads[@relation.fetch(:relation_name)]
67
+ @previous_model.autoloads[@relation.fetch(:relation_name)].length
62
68
  else
63
69
  count
64
70
  end
@@ -70,10 +76,10 @@ class BazaModels::Query
70
76
  end
71
77
 
72
78
  def new(attributes)
73
- raise "No previous model" unless @_previous_model
74
- raise "No relation" unless @_relation
79
+ raise "No previous model" unless @previous_model
80
+ raise "No relation" unless @relation
75
81
 
76
- new_sub_model = @model.new(@_relation.fetch(:foreign_key) => @_previous_model.id)
82
+ new_sub_model = @model.new(@relation.fetch(:foreign_key) => @previous_model.id)
77
83
  new_sub_model.assign_attributes(attributes)
78
84
  autoloaded_cache_or_create << new_sub_model
79
85
 
@@ -121,39 +127,41 @@ class BazaModels::Query
121
127
  def select(select = nil, &blk)
122
128
  if !select && blk
123
129
  to_enum.select(&blk)
130
+ elsif select.is_a?(Symbol)
131
+ clone(selects: @selects + ["`#{@model.table_name}`.`#{select}`"])
124
132
  else
125
- if select.is_a?(Symbol)
126
- @selects << "`#{@model.table_name}`.`#{select}`"
127
- else
128
- @selects << select
129
- end
130
-
131
- self
133
+ clone(selects: @selects + [select])
132
134
  end
133
135
  end
134
136
 
135
137
  def offset(offset)
136
- @offset = offset
137
- self
138
+ clone(offset: offset)
138
139
  end
139
140
 
140
141
  def limit(limit)
141
- @limit = limit
142
- self
142
+ clone(limit: limit)
143
143
  end
144
144
 
145
- def includes(name)
146
- @includes << name
147
- self
145
+ def includes(*names)
146
+ clone(includes: @includes + names)
148
147
  end
149
148
 
150
- def where(args = nil)
151
- if args.is_a?(String)
152
- @wheres << "(#{args})"
153
- elsif args.is_a?(Array)
154
- str = args.shift
149
+ def where(*args)
150
+ first_arg = args.first
151
+ new_wheres = @wheres.dup
152
+
153
+ if first_arg.is_a?(String)
154
+ new_where = "(#{args.shift})"
155
155
 
156
156
  args.each do |arg|
157
+ new_where.sub!("?", @db.sqlval(arg))
158
+ end
159
+
160
+ new_wheres << new_where
161
+ elsif first_arg.is_a?(Array)
162
+ str = first_arg.shift
163
+
164
+ first_arg.each do |arg|
157
165
  if arg.is_a?(Symbol)
158
166
  arg = "`#{@model.table_name}`.`#{@db.escape_column(arg)}`"
159
167
  elsif arg.is_a?(FalseClass)
@@ -167,22 +175,22 @@ class BazaModels::Query
167
175
  str.sub!("?", arg)
168
176
  end
169
177
 
170
- @wheres << "(#{str})"
171
- elsif args == nil
178
+ new_wheres << "(#{str})"
179
+ elsif first_arg == nil
172
180
  return Not.new(query: self)
173
181
  else
174
- args.each do |key, value|
182
+ first_arg.each do |key, value|
175
183
  if value.is_a?(Hash)
176
184
  value.each do |hash_key, hash_value|
177
- @wheres << "`#{key}`.`#{key_convert(hash_key, hash_value)}` #{value_with_mode(value_convert(hash_value))}"
185
+ new_wheres << "`#{key}`.`#{key_convert(hash_key, hash_value)}` #{value_with_mode(value_convert(hash_value))}"
178
186
  end
179
187
  else
180
- @wheres << "`#{@model.table_name}`.`#{key_convert(key, value)}` #{value_with_mode(value_convert(value))}"
188
+ new_wheres << "`#{@model.table_name}`.`#{key_convert(key, value)}` #{value_with_mode(value_convert(value))}"
181
189
  end
182
190
  end
183
191
  end
184
192
 
185
- self
193
+ clone(wheres: new_wheres)
186
194
  end
187
195
 
188
196
  def joins(*arguments)
@@ -199,26 +207,22 @@ class BazaModels::Query
199
207
 
200
208
  def group(name)
201
209
  if name.is_a?(Symbol)
202
- @groups << "`#{@model.table_name}`.`#{name}`"
210
+ clone(groups: @groups + ["`#{@model.table_name}`.`#{name}`"])
203
211
  elsif name.is_a?(String)
204
- @groups << name
212
+ clone(groups: @groups + [name])
205
213
  else
206
214
  raise "Didn't know how to group by that argument: #{name}"
207
215
  end
208
-
209
- self
210
216
  end
211
217
 
212
218
  def order(name)
213
219
  if name.is_a?(Symbol)
214
- @orders << "`#{@model.table_name}`.`#{name}`"
220
+ clone(orders: @orders + ["`#{@model.table_name}`.`#{name}`"])
215
221
  elsif name.is_a?(String)
216
- @orders << name
222
+ clone(orders: @orders + [name])
217
223
  else
218
224
  raise "Didn't know how to order by that argument: #{name}"
219
225
  end
220
-
221
- self
222
226
  end
223
227
 
224
228
  def reverse_order
@@ -310,11 +314,11 @@ class BazaModels::Query
310
314
  end
311
315
 
312
316
  def <<(model)
313
- raise "No previous model set" unless @_previous_model
314
- raise "No relation" unless @_relation
317
+ raise "No previous model set" unless @previous_model
318
+ raise "No relation" unless @relation
315
319
 
316
320
  if model.persisted?
317
- model.update_attributes!(@_relation.fetch(:foreign_key) => @_previous_model.id)
321
+ model.update_attributes!(@relation.fetch(:foreign_key) => @previous_model.id)
318
322
  else
319
323
  autoloaded_cache_or_create << model
320
324
  end
@@ -336,25 +340,6 @@ class BazaModels::Query
336
340
  "'#{@db.esc(value)}'"
337
341
  end
338
342
 
339
- def page(some_page)
340
- some_page ||= 1
341
- offset = (some_page.to_i - 1) * per
342
-
343
- clone.offset(offset).limit(30)
344
- end
345
-
346
- def per
347
- @per ||= 30
348
- end
349
-
350
- def total_pages
351
- pages_count = (count.to_f / @per.to_f)
352
- pages_count = 1 if pages_count.nan? || pages_count == Float::INFINITY
353
- pages_count = pages_count.to_i
354
- pages_count = 1 if pages_count == 0
355
- pages_count
356
- end
357
-
358
343
  def ransack(params)
359
344
  BazaModels::Ransacker.new(class: @model, params: params, query: self)
360
345
  end
@@ -366,12 +351,12 @@ private
366
351
  end
367
352
 
368
353
  def autoloaded_cache_or_create
369
- @_previous_model.autoloads[@_relation.fetch(:relation_name)] ||= []
354
+ @previous_model.autoloads[@relation.fetch(:relation_name)] ||= []
370
355
  autoloaded_cache
371
356
  end
372
357
 
373
358
  def autoloaded_cache
374
- @_previous_model.autoloads.fetch(@_relation.fetch(:relation_name))
359
+ @previous_model.autoloads.fetch(@relation.fetch(:relation_name))
375
360
  end
376
361
 
377
362
  def any_mods?
@@ -379,8 +364,8 @@ private
379
364
  end
380
365
 
381
366
  def any_wheres_other_than_relation?
382
- if @_previous_model && @_relation && @wheres.length == 1
383
- looks_like = "`#{@_relation.fetch(:table_name)}`.`#{@_relation.fetch(:foreign_key)}` = #{@_previous_model.id}"
367
+ if @previous_model && @relation && @wheres.length == 1
368
+ looks_like = "`#{@relation.fetch(:table_name)}`.`#{@relation.fetch(:foreign_key)}` = #{@previous_model.id}"
384
369
 
385
370
  return false if @wheres.first == looks_like
386
371
  end
@@ -389,24 +374,28 @@ private
389
374
  end
390
375
 
391
376
  def autoloaded_on_previous_model?
392
- if @_previous_model && @_relation
393
- return true if @_previous_model.autoloads.include?(@_relation.fetch(:relation_name))
377
+ if @previous_model && @relation
378
+ return true if @previous_model.autoloads.include?(@relation.fetch(:relation_name))
394
379
  end
395
380
 
396
381
  false
397
382
  end
398
383
 
399
- def clone
400
- BazaModels::Query.new(
384
+ def clone(args = {})
385
+ BazaModels::Query.new({
401
386
  model: @model,
402
- selects: @selects.dup,
403
- wheres: @wheres.dup,
387
+ selects: @selects,
388
+ wheres: @wheres,
404
389
  joins: @joins.dup,
405
- includes: @includes.dup,
406
- groups: @groups.dup,
407
- orders: @orders.dup,
390
+ includes: @includes,
391
+ groups: @groups,
392
+ offset: @offset,
393
+ orders: @orders,
394
+ page: @page,
395
+ per: @per,
396
+ previous_model: @previous_model,
408
397
  limit: @limit
409
- )
398
+ }.merge(args))
410
399
  end
411
400
 
412
401
  def key_convert(key, value)
@@ -440,4 +429,14 @@ private
440
429
  "= #{@db.sqlval(value)}"
441
430
  end
442
431
  end
432
+
433
+ def method_missing(method_name, *args, &blk)
434
+ return super unless @model
435
+
436
+ scopes = @model.instance_variable_get(:@scopes)
437
+ return super if !scopes || !scopes.key?(method_name)
438
+
439
+ block = scopes.fetch(method_name).fetch(:blk)
440
+ instance_exec(*args, &block)
441
+ end
443
442
  end
@@ -85,26 +85,42 @@ private
85
85
  hash
86
86
  end
87
87
 
88
- def add_filter_to_query(args)
88
+ def add_join_parts
89
89
  @ransacker.query = @ransacker.query.joins(join_parts_as_hash) if @join_parts.any?
90
+ end
90
91
 
91
- column_query = "#{@db.sep_col}#{@db.escape_column(args.fetch(:column_name))}#{@db.sep_col}"
92
- table_query = "#{@db.sep_table}#{@db.escape_table(@klass.table_name)}#{@db.sep_table}"
93
-
94
- if @mode == :cont
95
- @ransacker.query = @ransacker
96
- .query
97
- .where("#{table_query}.#{column_query} LIKE #{@db.sep_val}%#{@klass.db.esc(@value)}%#{@db.sep_val}")
98
- elsif @mode == :eq
99
- @ransacker.query = @ransacker
100
- .query
101
- .where("#{table_query}.#{column_query} = #{@db.sep_val}#{@klass.db.esc(@value)}#{@db.sep_val}")
102
- elsif @mode == :sort
92
+ def add_filter_to_query(args)
93
+ @column_query = "#{@db.sep_col}#{@db.escape_column(args.fetch(:column_name))}#{@db.sep_col}"
94
+ @table_query = "#{@db.sep_table}#{@db.escape_table(@klass.table_name)}#{@db.sep_table}"
95
+
96
+ case @mode
97
+ when :cont
98
+ return if @value.empty?
99
+ add_query_with_symbol("LIKE", "%#{@klass.db.esc(@value)}%")
100
+ when :eq
101
+ add_query_with_symbol("=")
102
+ when :lt
103
+ add_query_with_symbol("<")
104
+ when :lteq
105
+ add_query_with_symbol("<=")
106
+ when :gt
107
+ add_query_with_symbol(">")
108
+ when :gteq
109
+ add_query_with_symbol(">=")
110
+ when :sort
111
+ add_join_parts
103
112
  @ransacker.query = @ransacker
104
113
  .query
105
- .order("#{table_query}.#{column_query} #{@value}")
114
+ .order("#{@table_query}.#{@column_query} #{@value}")
106
115
  else
107
116
  raise "Unknown mode: #{@mode}"
108
117
  end
109
118
  end
119
+
120
+ def add_query_with_symbol(symbol, value = @value)
121
+ add_join_parts
122
+ @ransacker.query = @ransacker
123
+ .query
124
+ .where("#{@table_query}.#{@column_query} #{symbol} #{@klass.db.sqlval(value)}")
125
+ end
110
126
  end
@@ -8,6 +8,7 @@ class BazaModels::Ransacker
8
8
  @klass = args.fetch(:class)
9
9
  @db = @klass.db
10
10
  @params = args.fetch(:params)
11
+ @_registered_params = @params # Support for SimpleFormRansack
11
12
  @query = args.fetch(:query)
12
13
  end
13
14
 
@@ -22,32 +23,25 @@ private
22
23
  @add_filters_to_query_executed = true
23
24
  return unless @params
24
25
 
26
+ ransackable_scopes = @klass.ransackable_scopes.map(&:to_s) if @klass.respond_to?(:ransackable_scopes)
27
+
25
28
  @params.each do |key, value|
26
- if (match = key.to_s.match(/\A(.+?)_eq\Z/))
27
- filter_eq(match[1], value)
28
- elsif (match = key.to_s.match(/\A(.+?)_cont\Z/))
29
- filter_cont(match[1], value)
29
+ if (match = key.to_s.match(/\A(.+?)_(cont|eq|lt|lteq|gt|gteq)\Z/))
30
+ filter(match[1], value, match[2])
30
31
  elsif key.to_s == "s"
31
32
  match = value.to_s.match(/\A([A-z_\d]+)\s+(asc|desc)\Z/)
32
33
  raise "Couldn't sort-match: #{value}" unless match
33
34
  sort_by(column_name: match[1], sort_mode: match[2])
35
+ elsif ransackable_scopes && ransackable_scopes.include?(key.to_s)
36
+ @query = @query.__send__(key, value)
34
37
  end
35
38
  end
36
39
  end
37
40
 
38
- def filter_eq(column_name, value)
39
- BazaModels::Ransacker::RelationshipScanner.new(
40
- column_name: column_name,
41
- mode: :eq,
42
- ransacker: self,
43
- value: value
44
- )
45
- end
46
-
47
- def filter_cont(column_name, value)
41
+ def filter(column_name, value, mode)
48
42
  BazaModels::Ransacker::RelationshipScanner.new(
49
43
  column_name: column_name,
50
- mode: :cont,
44
+ mode: mode.to_sym,
51
45
  ransacker: self,
52
46
  value: value
53
47
  )
@@ -47,6 +47,6 @@ describe BazaModels::Query do
47
47
  end
48
48
 
49
49
  it "#column_names" do
50
- expect(User.to_adapter.column_names).to eq %w(id organization_id email email_confirmation created_at updated_at)
50
+ expect(User.to_adapter.column_names).to eq %w(id organization_id email email_confirmation created_at updated_at admin)
51
51
  end
52
52
  end
@@ -151,6 +151,51 @@ describe "BazaModels::Model" do
151
151
  expect(count).to eq 1
152
152
  end
153
153
 
154
+ it "#attribute_names" do
155
+ expect(User.attribute_names).to eq %w(id organization_id email email_confirmation created_at updated_at admin)
156
+ end
157
+
158
+ it "#columns" do
159
+ id_column = User.columns.find { |column| column.name == "id" }
160
+
161
+ expect(id_column.name).to eq "id"
162
+ expect(id_column.type).to eq :integer
163
+ end
164
+
165
+ it "#columns_hash" do
166
+ columns_hash = User.columns_hash
167
+
168
+ id_column = columns_hash["id"]
169
+
170
+ expect(id_column.type).to eq :integer
171
+ expect(id_column.name).to eq "id"
172
+ expect(id_column.null).to eq true
173
+ expect(id_column.sql_type).to eq "int"
174
+
175
+ email_column = columns_hash["email"]
176
+
177
+ expect(email_column.type).to eq :string
178
+ expect(email_column.name).to eq "email"
179
+ expect(email_column.sql_type).to eq "varchar(255)"
180
+
181
+ admin_column = columns_hash["admin"]
182
+
183
+ expect(admin_column.type).to eq :boolean
184
+ expect(admin_column.name).to eq "admin"
185
+ expect(admin_column.sql_type).to eq "tinyint"
186
+ end
187
+
188
+ it "#reflections" do
189
+ reflections = User.reflections
190
+
191
+ person_reflection = reflections.values.find { |reflection| reflection.name == :person }
192
+ expect(person_reflection.name).to eq :person
193
+ expect(person_reflection.class_name).to eq "Person"
194
+ expect(person_reflection.foreign_key).to eq "user_id"
195
+ expect(person_reflection.klass).to eq Person
196
+ expect(person_reflection.collection?).to eq false
197
+ end
198
+
154
199
  it "doesnt care if initialized data has keys as strings" do
155
200
  user = User.new("email" => "test@example.com")
156
201
  expect(user.email).to eq "test@example.com"
@@ -0,0 +1,64 @@
1
+ require "spec_helper"
2
+
3
+ describe BazaModels::Query::Pagination do
4
+ include DatabaseHelper
5
+
6
+ before do
7
+ User.transaction do
8
+ 100.times { |n| User.create! email: "user#{n}@example.com" }
9
+ end
10
+ end
11
+
12
+ describe "#out_of_bounds?" do
13
+ it "returns the right values under the right conditions" do
14
+ collection = User.all.page(5)
15
+ expect(collection.out_of_bounds?).to eq true
16
+
17
+ collection = User.all.page(4)
18
+ expect(collection.out_of_bounds?).to eq false
19
+ end
20
+ end
21
+
22
+ describe "#paginated?" do
23
+ it "returns the right values under the right conditions" do
24
+ collection = User.all
25
+ expect(collection.paginated?).to eq false
26
+
27
+ collection = collection.page(3)
28
+ expect(collection.paginated?).to eq true
29
+ end
30
+ end
31
+
32
+ describe "#per #total_pages" do
33
+ it "sets a custom per_page" do
34
+ collection = User
35
+ .all
36
+ .per_page(40)
37
+
38
+ expect(collection.per_page).to eq 40
39
+ expect(collection.per).to eq 40
40
+ expect(collection.to_a.length).to eq 40
41
+ expect(collection.total_pages).to eq 3
42
+ end
43
+ end
44
+
45
+ describe "#page" do
46
+ it "sets the page and returns the correct numbers" do
47
+ collection = User
48
+ .all
49
+ .page(2)
50
+ .per_page(60)
51
+
52
+ expect(collection.page).to eq 2
53
+ expect(collection.to_a.length).to eq 40
54
+ expect(collection.page(1).to_a.length).to eq 60
55
+ end
56
+ end
57
+
58
+ describe "#total_entries" do
59
+ it "returns the correct number" do
60
+ collection = User.where(email: "user5@example.com")
61
+ expect(collection.total_entries).to eq 100
62
+ end
63
+ end
64
+ end
@@ -5,8 +5,8 @@ describe BazaModels::Query do
5
5
 
6
6
  let!(:organization) { Organization.create!(id: 1, name: "Test organization") }
7
7
  let!(:person) { Person.create!(id: 1, user: user) }
8
- let!(:user) { User.create!(id: 1, organization: organization, email: "test@example.com") }
9
- let!(:another_user) { User.create!(id: 2, organization: nil, email: "another_user@example.com") }
8
+ let!(:user) { User.create!(id: 1, organization: organization, email: "test@example.com", created_at: "2015-06-17 10:00") }
9
+ let!(:another_user) { User.create!(id: 2, organization: nil, email: "another_user@example.com", created_at: "2015-08-20 6:00") }
10
10
  let!(:another_person) { Person.create!(id: 2, user: another_user) }
11
11
 
12
12
  it "eq" do
@@ -17,6 +17,53 @@ describe BazaModels::Query do
17
17
  expect(User.ransack(email_cont: "test").result.to_a).to eq [user]
18
18
  end
19
19
 
20
+ describe "lt" do
21
+ it "finds the right models" do
22
+ expect(User.ransack(id_lt: 3).result.to_a).to eq [user, another_user]
23
+ end
24
+
25
+ it "excludes the right models" do
26
+ expect(User.ransack(id_lt: 2).result.to_a).to eq [user]
27
+ end
28
+ end
29
+
30
+ describe "lteq" do
31
+ it "finds the right models" do
32
+ expect(User.ransack(id_lteq: 2).result.to_a).to eq [user, another_user]
33
+ end
34
+
35
+ it "excludes the right models" do
36
+ expect(User.ransack(id_lteq: 1).result.to_a).to eq [user]
37
+ end
38
+ end
39
+
40
+ describe "gt" do
41
+ it "finds the right models" do
42
+ expect(User.ransack(id_gt: 0).result.to_a).to eq [user, another_user]
43
+ end
44
+
45
+ it "excludes the right models" do
46
+ expect(User.ransack(id_gt: 1).result.to_a).to eq [another_user]
47
+ end
48
+ end
49
+
50
+ describe "gteq" do
51
+ it "finds the right models" do
52
+ expect(User.ransack(id_gteq: 1).result.to_a).to eq [user, another_user]
53
+ end
54
+
55
+ it "excludes the right models" do
56
+ expect(User.ransack(id_gteq: 2).result.to_a).to eq [another_user]
57
+ end
58
+ end
59
+
60
+ describe "since" do
61
+ it "finds the right users" do
62
+ query = User.ransack(created_at_since: "2015-08-20").result
63
+ expect(query.to_a).to eq [another_user]
64
+ end
65
+ end
66
+
20
67
  it "s" do
21
68
  query = User.ransack(s: "email asc")
22
69
 
@@ -41,6 +88,11 @@ describe BazaModels::Query do
41
88
  expect(query.result.to_a).to eq [person]
42
89
  end
43
90
 
91
+ it "ignores empty contains" do
92
+ query = Person.ransack(user_organization_name_cont: "")
93
+ expect(query.result.to_sql).to eq "SELECT `persons`.* FROM `persons`"
94
+ end
95
+
44
96
  it "ignores unknown parameters and doesn't raise exceptions" do
45
97
  Person.ransack(custom_something: "Test").result
46
98
  end
@@ -1,90 +1,97 @@
1
+ require "tempfile"
2
+ require "baza"
3
+
4
+ if RUBY_PLATFORM == "java"
5
+ require "jdbc/sqlite3"
6
+ ::Jdbc::SQLite3.load_driver
7
+ else
8
+ require "sqlite3"
9
+ end
10
+
1
11
  module DatabaseHelper
2
12
  def self.included(base)
3
13
  base.instance_eval do
4
14
  let(:db) { @db }
5
15
 
6
16
  before do
7
- @count ||= 0
8
- @count += 1
9
-
10
- require "tempfile"
11
- require "baza"
12
-
13
- if RUBY_PLATFORM == "java"
14
- require "jdbc/sqlite3"
15
- ::Jdbc::SQLite3.load_driver
16
- else
17
- require "sqlite3"
18
- end
19
-
20
- tempfile = Tempfile.new(["baza_test", ".sqlite3"])
21
- path = tempfile.path
22
- tempfile.close!
23
-
24
- @db = Baza::Db.new(type: :sqlite3, path: path, index_append_table_name: true, debug: false)
25
- BazaModels.primary_db = @db
26
-
27
- @db.tables.create(
28
- :users,
29
- columns: [
30
- {name: :id, type: :int, primarykey: true, autoincr: true},
31
- {name: :organization_id, type: :int},
32
- {name: :email, type: :varchar},
33
- {name: :email_confirmation, type: :varchar},
34
- {name: :created_at, type: :datetime},
35
- {name: :updated_at, type: :datetime}
36
- ],
37
- indexes: [:organization_id, :email])
38
-
39
- @db.tables.create(
40
- :user_passports,
41
- columns: [
42
- {name: :id, type: :int, primarykey: true, autoincr: true},
43
- {name: :user_id, type: :int},
44
- {name: :code, type: :varchar}
45
- ],
46
- indexes: [
47
- :user_id
48
- ])
49
-
50
- @db.tables.create(
51
- :persons,
52
- columns: [
53
- {name: :id, type: :int, primarykey: true, autoincr: true},
54
- {name: :user_id, type: :int}
55
- ],
56
- indexes: [:user_id])
17
+ init_database_connection
18
+ init_database_structure
57
19
 
58
- @db.tables.create(
59
- :roles,
60
- columns: [
61
- {name: :id, type: :int, primarykey: true, autoincr: true},
62
- {name: :user_id, type: :int},
63
- {name: :role, type: :varchar},
64
- {name: :created_at, type: :datetime},
65
- {name: :updated_at, type: :datetime}
66
- ],
67
- indexes: [:user_id]
68
- )
69
-
70
- @db.tables.create(
71
- :organizations,
72
- columns: [
73
- {name: :id, type: :int, primarykey: true, autoincr: true},
74
- {name: :name, type: :varchar}
75
- ]
76
- )
20
+ User.init_model(force: true)
77
21
  end
78
22
 
79
23
  after do
80
24
  BazaModels.primary_db = nil
81
25
 
82
26
  @db.close
83
- path = db.args[:path]
27
+ path = db.args.fetch(:path)
84
28
  File.unlink(path) if File.exist?(path)
85
29
  Thread.current[:baza] = nil
86
30
  @db = nil
87
31
  end
88
32
  end
89
33
  end
34
+
35
+ def init_database_connection
36
+ tempfile = Tempfile.new(["baza_test", ".sqlite3"])
37
+ path = tempfile.path
38
+ tempfile.close!
39
+
40
+ @db = Baza::Db.new(type: :sqlite3, path: path, index_append_table_name: true, debug: false)
41
+ BazaModels.primary_db = @db
42
+ end
43
+
44
+ def init_database_structure
45
+ @db.tables.create(
46
+ :users,
47
+ columns: [
48
+ {name: :id, type: :int, primarykey: true, autoincr: true},
49
+ {name: :organization_id, type: :int},
50
+ {name: :email, type: :varchar},
51
+ {name: :email_confirmation, type: :varchar},
52
+ {name: :created_at, type: :datetime},
53
+ {name: :updated_at, type: :datetime},
54
+ {name: :admin, type: :tinyint}
55
+ ],
56
+ indexes: [:organization_id, :email])
57
+
58
+ @db.tables.create(
59
+ :user_passports,
60
+ columns: [
61
+ {name: :id, type: :int, primarykey: true, autoincr: true},
62
+ {name: :user_id, type: :int},
63
+ {name: :code, type: :varchar}
64
+ ],
65
+ indexes: [
66
+ :user_id
67
+ ])
68
+
69
+ @db.tables.create(
70
+ :persons,
71
+ columns: [
72
+ {name: :id, type: :int, primarykey: true, autoincr: true},
73
+ {name: :user_id, type: :int}
74
+ ],
75
+ indexes: [:user_id])
76
+
77
+ @db.tables.create(
78
+ :roles,
79
+ columns: [
80
+ {name: :id, type: :int, primarykey: true, autoincr: true},
81
+ {name: :user_id, type: :int},
82
+ {name: :role, type: :varchar},
83
+ {name: :created_at, type: :datetime},
84
+ {name: :updated_at, type: :datetime}
85
+ ],
86
+ indexes: [:user_id]
87
+ )
88
+
89
+ @db.tables.create(
90
+ :organizations,
91
+ columns: [
92
+ {name: :id, type: :int, primarykey: true, autoincr: true},
93
+ {name: :name, type: :varchar}
94
+ ]
95
+ )
96
+ end
90
97
  end
@@ -14,6 +14,7 @@ class User < BazaModels::Model
14
14
  validates_confirmation_of :email, if: :validate_confirmation
15
15
 
16
16
  scope :admin_roles_scope, -> { joins(:roles).where(roles: {role: "administrator"}) }
17
+ scope :created_at_since, ->(date) { where("users.created_at >= ?", date) }
17
18
 
18
19
  before_save do
19
20
  self.before_save_block_called ||= 0
@@ -26,6 +27,10 @@ class User < BazaModels::Model
26
27
  __send__(callback_type, :add_callback, callback_type)
27
28
  end
28
29
 
30
+ def self.ransackable_scopes(_auth_object = nil)
31
+ %i(created_at_since)
32
+ end
33
+
29
34
  private
30
35
 
31
36
  def add_callback(callback_type)
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.5
4
+ version: 0.0.6
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-09 00:00:00.000000000 Z
11
+ date: 2016-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: array_enumerator
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.0.20
33
+ version: 0.0.21
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.0.20
40
+ version: 0.0.21
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: string-cases
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.0.12
83
+ - !ruby/object:Gem::Dependency
84
+ name: simple_delegate
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 0.0.2
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 0.0.2
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: rspec
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -248,6 +262,7 @@ files:
248
262
  - lib/baza_models/helpers.rb
249
263
  - lib/baza_models/helpers/ransacker_helper.rb
250
264
  - lib/baza_models/model.rb
265
+ - lib/baza_models/model/active_record_column_adapater.rb
251
266
  - lib/baza_models/model/belongs_to_relations.rb
252
267
  - lib/baza_models/model/custom_validations.rb
253
268
  - lib/baza_models/model/delegation.rb
@@ -255,12 +270,14 @@ files:
255
270
  - lib/baza_models/model/has_one_relations.rb
256
271
  - lib/baza_models/model/manipulation.rb
257
272
  - lib/baza_models/model/queries.rb
273
+ - lib/baza_models/model/reflection.rb
258
274
  - lib/baza_models/model/scopes.rb
259
275
  - lib/baza_models/model/translation_functionality.rb
260
276
  - lib/baza_models/model/validations.rb
261
277
  - lib/baza_models/query.rb
262
278
  - lib/baza_models/query/inspector.rb
263
279
  - lib/baza_models/query/not.rb
280
+ - lib/baza_models/query/pagination.rb
264
281
  - lib/baza_models/query/sql_generator.rb
265
282
  - lib/baza_models/ransacker.rb
266
283
  - lib/baza_models/ransacker/relationship_scanner.rb
@@ -289,6 +306,7 @@ files:
289
306
  - spec/baza_models/model/validations_spec.rb
290
307
  - spec/baza_models/model_spec.rb
291
308
  - spec/baza_models/query/not_spec.rb
309
+ - spec/baza_models/query/pagination_spec.rb
292
310
  - spec/baza_models/query_spec.rb
293
311
  - spec/baza_models/ransacker_spec.rb
294
312
  - spec/baza_models/validators/confirmation_validator_spec.rb