baza_models 0.0.1 → 0.0.2
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 +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +3 -3
- data/VERSION +1 -1
- data/baza_models.gemspec +6 -6
- data/lib/baza_models/autoloader.rb +4 -4
- data/lib/baza_models/model.rb +7 -3
- data/lib/baza_models/model/belongs_to_relations.rb +2 -1
- data/lib/baza_models/model/manipulation.rb +2 -2
- data/lib/baza_models/model/queries.rb +1 -3
- data/lib/baza_models/query.rb +42 -12
- data/spec/baza_models/autoloader_spec.rb +1 -0
- data/spec/baza_models/model/has_many_relations_spec.rb +1 -1
- data/spec/baza_models/model/manipulation_spec.rb +1 -0
- data/spec/baza_models/model/queries_spec.rb +1 -1
- data/spec/baza_models/model_spec.rb +12 -0
- data/spec/baza_models/query_spec.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7af27121360692e3093505352f08c8f855cef0d
|
4
|
+
data.tar.gz: f926660c9fb19321c9cfc68e93b04bcd5dc06a26
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c2f9cf0eecae07319682e1dff0413dc09809c75981ade008bf34648660a4f8f9478d03fef7209fc04d331074432e48e15c15e76847b56b6e036b9e196d6023b
|
7
|
+
data.tar.gz: 5dff49f599cb002d1e8731af809ae8c42c19b6920e0a801cd0846b8fa2adc8ab595292f42d6d43502e30838c95907b1681014cc0224a030ba9996ce9c151b6de
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -114,7 +114,7 @@ GEM
|
|
114
114
|
simplecov-html (~> 0.10.0)
|
115
115
|
simplecov-html (0.10.0)
|
116
116
|
sqlite3 (1.3.10)
|
117
|
-
string-cases (0.0.
|
117
|
+
string-cases (0.0.2)
|
118
118
|
thread_safe (0.3.5)
|
119
119
|
thread_safe (0.3.5-java)
|
120
120
|
tins (1.6.0)
|
@@ -140,7 +140,7 @@ DEPENDENCIES
|
|
140
140
|
rspec (~> 3.3.0)
|
141
141
|
rubocop
|
142
142
|
sqlite3
|
143
|
-
string-cases
|
143
|
+
string-cases (>= 0.0.2)
|
144
144
|
|
145
145
|
BUNDLED WITH
|
146
|
-
1.
|
146
|
+
1.11.2
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
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
|
+
# stub: baza_models 0.0.2 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "baza_models"
|
9
|
-
s.version = "0.0.
|
9
|
+
s.version = "0.0.2"
|
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 = "
|
14
|
+
s.date = "2016-01-06"
|
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 = [
|
@@ -104,7 +104,7 @@ Gem::Specification.new do |s|
|
|
104
104
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
105
105
|
s.add_runtime_dependency(%q<array_enumerator>, [">= 0"])
|
106
106
|
s.add_runtime_dependency(%q<baza>, ["~> 0.0.20"])
|
107
|
-
s.add_runtime_dependency(%q<string-cases>, [">= 0"])
|
107
|
+
s.add_runtime_dependency(%q<string-cases>, [">= 0.0.2"])
|
108
108
|
s.add_development_dependency(%q<rspec>, ["~> 3.3.0"])
|
109
109
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
110
110
|
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
@@ -118,7 +118,7 @@ Gem::Specification.new do |s|
|
|
118
118
|
else
|
119
119
|
s.add_dependency(%q<array_enumerator>, [">= 0"])
|
120
120
|
s.add_dependency(%q<baza>, ["~> 0.0.20"])
|
121
|
-
s.add_dependency(%q<string-cases>, [">= 0"])
|
121
|
+
s.add_dependency(%q<string-cases>, [">= 0.0.2"])
|
122
122
|
s.add_dependency(%q<rspec>, ["~> 3.3.0"])
|
123
123
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
124
124
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
@@ -133,7 +133,7 @@ Gem::Specification.new do |s|
|
|
133
133
|
else
|
134
134
|
s.add_dependency(%q<array_enumerator>, [">= 0"])
|
135
135
|
s.add_dependency(%q<baza>, ["~> 0.0.20"])
|
136
|
-
s.add_dependency(%q<string-cases>, [">= 0"])
|
136
|
+
s.add_dependency(%q<string-cases>, [">= 0.0.2"])
|
137
137
|
s.add_dependency(%q<rspec>, ["~> 3.3.0"])
|
138
138
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
139
139
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
@@ -85,7 +85,7 @@ private
|
|
85
85
|
end
|
86
86
|
|
87
87
|
@db.select(relation.fetch(:table_name), id: model_ids) do |model_data|
|
88
|
-
model = ::Object.const_get(relation.fetch(:class_name)).new(model_data)
|
88
|
+
model = ::Object.const_get(relation.fetch(:class_name)).new(model_data, init: true)
|
89
89
|
|
90
90
|
orig_model_id = model_id_mappings.fetch(model_data.fetch(:id))
|
91
91
|
orig_model = @models.detect { |array_model| array_model.id == orig_model_id }
|
@@ -101,9 +101,9 @@ private
|
|
101
101
|
result = {models: []}
|
102
102
|
|
103
103
|
@db.select(relation.fetch(:table_name), relation.fetch(:foreign_key) => model_ids) do |model_data|
|
104
|
-
model = ::Object.const_get(relation.fetch(:class_name)).new(model_data)
|
104
|
+
model = ::Object.const_get(relation.fetch(:class_name)).new(model_data, init: true)
|
105
105
|
|
106
|
-
orig_model_id = model_data.fetch(relation.fetch(:foreign_key))
|
106
|
+
orig_model_id = model_data.fetch(relation.fetch(:foreign_key).to_sym)
|
107
107
|
orig_model = @models.detect { |array_model| array_model.id == orig_model_id }
|
108
108
|
|
109
109
|
orig_model.autoloads[autoload_name] ||= []
|
@@ -119,7 +119,7 @@ private
|
|
119
119
|
result = {models: []}
|
120
120
|
|
121
121
|
@db.select(relation.fetch(:table_name), relation.fetch(:foreign_key) => model_ids) do |model_data|
|
122
|
-
model = ::Object.const_get(relation.fetch(:class_name)).new(model_data)
|
122
|
+
model = ::Object.const_get(relation.fetch(:class_name)).new(model_data, init: true)
|
123
123
|
|
124
124
|
orig_model_id = model_data.fetch(relation.fetch(:foreign_key))
|
125
125
|
orig_model = @models.detect { |array_model| array_model.id == orig_model_id }
|
data/lib/baza_models/model.rb
CHANGED
@@ -30,6 +30,7 @@ class BazaModels::Model
|
|
30
30
|
|
31
31
|
# Define all callback methods.
|
32
32
|
CALLBACK_TYPES = [
|
33
|
+
:after_initialize, :after_find,
|
33
34
|
:before_create, :after_create, :before_save, :after_save, :before_destroy, :after_destroy,
|
34
35
|
:before_validation, :after_validation, :before_validation_on_create, :after_validation_on_create,
|
35
36
|
:before_validation_on_update, :after_validation_on_update
|
@@ -53,9 +54,8 @@ class BazaModels::Model
|
|
53
54
|
end
|
54
55
|
end
|
55
56
|
|
56
|
-
|
57
57
|
QUERY_METHODS = [
|
58
|
-
:all, :any?, :empty?, :none?, :count, :first, :find_first, :last, :length, :select, :includes,
|
58
|
+
:all, :any?, :empty?, :none?, :count, :find, :first, :find_first, :last, :length, :select, :includes,
|
59
59
|
:joins, :group, :where, :order, :limit, :to_a, :accessible_by
|
60
60
|
]
|
61
61
|
QUERY_METHODS.each do |query_method|
|
@@ -81,13 +81,13 @@ class BazaModels::Model
|
|
81
81
|
@new_record = false
|
82
82
|
else
|
83
83
|
@new_record = true
|
84
|
+
fire_callbacks(:after_initialize)
|
84
85
|
end
|
85
86
|
end
|
86
87
|
|
87
88
|
# rubocop:disable Style/TrivialAccessors
|
88
89
|
def new_record?
|
89
90
|
# rubocop:enable Style/TrivialAccessors
|
90
|
-
|
91
91
|
@new_record
|
92
92
|
end
|
93
93
|
|
@@ -114,6 +114,10 @@ class BazaModels::Model
|
|
114
114
|
BazaModels::BazaOrmAdapter.new(class: self)
|
115
115
|
end
|
116
116
|
|
117
|
+
def self.transaction(&blk)
|
118
|
+
@db.transaction(&blk)
|
119
|
+
end
|
120
|
+
|
117
121
|
class << self
|
118
122
|
attr_writer :db, :table_name
|
119
123
|
end
|
@@ -36,7 +36,8 @@ module BazaModels::Model::BelongsToRelations
|
|
36
36
|
class_name = StringCases.snake_to_camel(relation_name)
|
37
37
|
end
|
38
38
|
|
39
|
-
|
39
|
+
foreign_id = @data.fetch(relation.fetch(:foreign_key))
|
40
|
+
Object.const_get(class_name).find(foreign_id) if foreign_id
|
40
41
|
end
|
41
42
|
end
|
42
43
|
|
@@ -7,12 +7,12 @@ module BazaModels::Model::Manipulation
|
|
7
7
|
if args[:validate] == false || valid?
|
8
8
|
new_record = new_record?
|
9
9
|
fire_callbacks(:before_save)
|
10
|
-
self.updated_at = Time.now if has_attribute?(:updated_at)
|
10
|
+
self.updated_at = Time.now if changed? && has_attribute?(:updated_at)
|
11
11
|
|
12
12
|
if new_record
|
13
13
|
status = create
|
14
14
|
else
|
15
|
-
db.update(table_name, @changes, id: id)
|
15
|
+
db.update(table_name, @changes, id: id) if changed?
|
16
16
|
status = true
|
17
17
|
end
|
18
18
|
|
data/lib/baza_models/query.rb
CHANGED
@@ -64,7 +64,19 @@ class BazaModels::Query
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def find(id)
|
67
|
-
clone.where(id: id).limit(1).to_enum.first
|
67
|
+
model = clone.where(id: id).limit(1).to_enum.first
|
68
|
+
|
69
|
+
if model
|
70
|
+
model.__send__(:fire_callbacks, :after_find)
|
71
|
+
else
|
72
|
+
raise BazaModels::Errors::RecordNotFound
|
73
|
+
end
|
74
|
+
|
75
|
+
model
|
76
|
+
end
|
77
|
+
|
78
|
+
def find_by(args)
|
79
|
+
clone.where(args).limit(1).to_enum.first
|
68
80
|
end
|
69
81
|
|
70
82
|
def first
|
@@ -89,14 +101,18 @@ class BazaModels::Query
|
|
89
101
|
query.reverse_order.to_enum.first
|
90
102
|
end
|
91
103
|
|
92
|
-
def select(select)
|
93
|
-
if select
|
94
|
-
|
104
|
+
def select(select = nil, &blk)
|
105
|
+
if !select && blk
|
106
|
+
to_enum.select(&blk)
|
95
107
|
else
|
96
|
-
|
97
|
-
|
108
|
+
if select.is_a?(Symbol)
|
109
|
+
@selects << "`#{@model.table_name}`.`#{select}`"
|
110
|
+
else
|
111
|
+
@selects << select
|
112
|
+
end
|
98
113
|
|
99
|
-
|
114
|
+
self
|
115
|
+
end
|
100
116
|
end
|
101
117
|
|
102
118
|
def offset(offset)
|
@@ -128,7 +144,7 @@ class BazaModels::Query
|
|
128
144
|
elsif arg.is_a?(TrueClass)
|
129
145
|
arg = "1"
|
130
146
|
else
|
131
|
-
arg =
|
147
|
+
arg = @db.sqlval(arg)
|
132
148
|
end
|
133
149
|
|
134
150
|
str.sub!("?", arg)
|
@@ -141,10 +157,10 @@ class BazaModels::Query
|
|
141
157
|
args.each do |key, value|
|
142
158
|
if value.is_a?(Hash)
|
143
159
|
value.each do |hash_key, hash_value|
|
144
|
-
@wheres << "`#{key}`.`#{hash_key}` =
|
160
|
+
@wheres << "`#{key}`.`#{key_convert(hash_key, hash_value)}` = #{@db.sqlval(value_convert(hash_value))}"
|
145
161
|
end
|
146
162
|
else
|
147
|
-
@wheres << "`#{@model.table_name}`.`#{key}` =
|
163
|
+
@wheres << "`#{@model.table_name}`.`#{key_convert(key, value)}` = #{@db.sqlval(value_convert(value))}"
|
148
164
|
end
|
149
165
|
end
|
150
166
|
end
|
@@ -193,6 +209,10 @@ class BazaModels::Query
|
|
193
209
|
self
|
194
210
|
end
|
195
211
|
|
212
|
+
def map(&blk)
|
213
|
+
to_enum.map(&blk)
|
214
|
+
end
|
215
|
+
|
196
216
|
def to_enum
|
197
217
|
return autoloaded_cache if should_use_autoload?
|
198
218
|
|
@@ -249,7 +269,7 @@ class BazaModels::Query
|
|
249
269
|
end
|
250
270
|
|
251
271
|
def find_first(args)
|
252
|
-
where(args).first
|
272
|
+
clone.where(args).first
|
253
273
|
end
|
254
274
|
|
255
275
|
def to_a
|
@@ -416,7 +436,7 @@ private
|
|
416
436
|
|
417
437
|
def any_wheres_other_than_relation?
|
418
438
|
if @_previous_model && @_relation && @wheres.length == 1
|
419
|
-
looks_like = "`#{@_relation.fetch(:table_name)}`.`#{@_relation.fetch(:foreign_key)}` =
|
439
|
+
looks_like = "`#{@_relation.fetch(:table_name)}`.`#{@_relation.fetch(:foreign_key)}` = #{@_previous_model.id}"
|
420
440
|
|
421
441
|
return false if @wheres.first == looks_like
|
422
442
|
end
|
@@ -444,4 +464,14 @@ private
|
|
444
464
|
limit: @limit
|
445
465
|
)
|
446
466
|
end
|
467
|
+
|
468
|
+
def key_convert(key, value)
|
469
|
+
return "#{key}_id" if value.is_a?(BazaModels::Model)
|
470
|
+
key
|
471
|
+
end
|
472
|
+
|
473
|
+
def value_convert(value)
|
474
|
+
return value.id if value.is_a?(BazaModels::Model)
|
475
|
+
value
|
476
|
+
end
|
447
477
|
end
|
@@ -29,6 +29,7 @@ describe BazaModels::Autoloader do
|
|
29
29
|
expect(role.user).to eq user
|
30
30
|
expect(role.autoloads).to have_received(:[]).with(:user)
|
31
31
|
expect(role.autoloads[:user]).to eq user
|
32
|
+
expect(role.autoloads[:user].id).to eq user.id
|
32
33
|
end
|
33
34
|
|
34
35
|
it "autoloads via includes on has_one relations" do
|
@@ -40,7 +40,7 @@ describe BazaModels::Model::HasManyRelations do
|
|
40
40
|
|
41
41
|
it "supports class_name and proc-arguments" do
|
42
42
|
expect(user.admin_roles.to_a).to eq [role_admin]
|
43
|
-
expect(user.admin_roles.to_sql).to eq "SELECT `roles`.* FROM `roles` WHERE `roles`.`user_id` =
|
43
|
+
expect(user.admin_roles.to_sql).to eq "SELECT `roles`.* FROM `roles` WHERE `roles`.`user_id` = #{user.id} AND `roles`.`role` = 'administrator'"
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -89,6 +89,18 @@ describe "BazaModels::Model" do
|
|
89
89
|
expect(user.after_destroy_called).to eq 1
|
90
90
|
end
|
91
91
|
|
92
|
+
it "#after_initialize" do
|
93
|
+
expect(user.instance_variable_get(:@after_initialize_called)).to eq 1
|
94
|
+
end
|
95
|
+
|
96
|
+
it "#after_find" do
|
97
|
+
user.save!
|
98
|
+
|
99
|
+
user_found = User.find(user.id)
|
100
|
+
expect(user_found.instance_variable_get(:@after_find_called)).to eq 1
|
101
|
+
expect(user.instance_variable_get(:@after_find_called)).to eq nil
|
102
|
+
end
|
103
|
+
|
92
104
|
it "can use callbacks as blocks" do
|
93
105
|
expect(user.before_save_block_called).to eq nil
|
94
106
|
user.save!
|
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.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kaspernj
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: array_enumerator
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.0.2
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.0.2
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|