ree_lib 1.0.88 → 1.0.89

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
  SHA256:
3
- metadata.gz: 5617079115b4c9fb7431a6d2e81d7eb34c378173809508312b6f58de711ae0fc
4
- data.tar.gz: e0a0dc4c0dc92bab997e1ce44b4ea7d888ab616be535f011b3e5c9dbfb66a829
3
+ metadata.gz: 42bfcdb43c2ebd44badd128321d5b277951829cd63f0ec4d28157ae6526b04f4
4
+ data.tar.gz: 0c42d2aa910eff7c1fc4da08aab37f21236b1e656b69399deb5f71cf10db127b
5
5
  SHA512:
6
- metadata.gz: faa26811f3b74b634f7726887530bc106eea6576cf4ebc4496bba6f68f2e567c5a9511ea786396f1324a8474c539b40e64d8c12710b92e72d757b1a46727091e
7
- data.tar.gz: 2543ee6346775abed1525a450ba6b203c09e618954092eafff0bda78d395674f3d2005b9f959abeac89bf5fdcfb9399c8b70c1bcb6ce37ddcc0b84622ddfa547
6
+ metadata.gz: d8b868775ba1f7f0e3b692c646389b591d7615289cdd717220568bef46641972d0e281cf4dc8bcdd535b977420503070a5ae7cd06256c2c3a6bdd2366018e62a
7
+ data.tar.gz: 1eef6d917be75f9169788f327bb36833378186ba453af0dd99a791f1a4c5e555e6f2d4976f5b1468a8604ea3f3584847c0dd201bed7317940c2171c6546c1b2e
data/Gemfile.lock CHANGED
@@ -1,53 +1,52 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree_lib (1.0.88)
4
+ ree_lib (1.0.89)
5
5
  bigdecimal (~> 3.1.6)
6
6
  binding_of_caller (~> 1.0.0)
7
- i18n (~> 1.12.0)
8
- loofah (~> 2.18.0)
9
- oj (~> 3.13.17)
7
+ i18n (~> 1.14.1)
8
+ loofah (~> 2.22.0)
9
+ oj (~> 3.16.3)
10
10
  rainbow (~> 3.1.1)
11
11
  ree (~> 1.0.0)
12
- sequel (~> 5.58.0)
12
+ sequel (~> 5.76.0)
13
13
  tzinfo (~> 2.0.5)
14
14
 
15
15
  GEM
16
16
  remote: https://rubygems.org/
17
17
  specs:
18
- abbrev (0.1.2)
19
18
  addressable (2.8.6)
20
19
  public_suffix (>= 2.0.2, < 6.0)
21
20
  bigdecimal (3.1.6)
22
21
  binding_of_caller (1.0.0)
23
22
  debug_inspector (>= 0.0.1)
24
- bootsnap (1.17.0)
23
+ bootsnap (1.17.1)
25
24
  msgpack (~> 1.2)
26
25
  commander (5.0.0)
27
26
  highline (~> 3.0.0)
28
- concurrent-ruby (1.2.2)
27
+ concurrent-ruby (1.2.3)
29
28
  crack (0.4.5)
30
29
  rexml
31
30
  crass (1.0.6)
32
31
  debug_inspector (1.2.0)
33
32
  diff-lcs (1.5.0)
34
- faker (3.2.2)
33
+ faker (3.2.3)
35
34
  i18n (>= 1.8.11, < 2)
36
35
  hashdiff (1.1.0)
37
- highline (3.0.0)
38
- abbrev
39
- i18n (1.12.0)
36
+ highline (3.0.1)
37
+ i18n (1.14.1)
40
38
  concurrent-ruby (~> 1.0)
41
- loofah (2.18.0)
39
+ loofah (2.22.0)
42
40
  crass (~> 1.0.2)
43
- nokogiri (>= 1.5.9)
41
+ nokogiri (>= 1.12.0)
44
42
  msgpack (1.7.2)
45
43
  nokogiri (1.16.0-x86_64-darwin)
46
44
  racc (~> 1.4)
47
45
  nokogiri (1.16.0-x86_64-linux)
48
46
  racc (~> 1.4)
49
- oj (3.13.23)
50
- pg (1.4.6)
47
+ oj (3.16.3)
48
+ bigdecimal (>= 3.0)
49
+ pg (1.5.4)
51
50
  public_suffix (5.0.4)
52
51
  racc (1.7.3)
53
52
  rack (3.0.8)
@@ -58,9 +57,9 @@ GEM
58
57
  ree (1.0.34)
59
58
  commander (~> 5.0.0)
60
59
  rexml (3.2.6)
61
- roda (3.58.0)
60
+ roda (3.76.0)
62
61
  rack
63
- rollbar (3.3.3)
62
+ rollbar (3.5.1)
64
63
  rspec (3.12.0)
65
64
  rspec-core (~> 3.12.0)
66
65
  rspec-expectations (~> 3.12.0)
@@ -74,7 +73,8 @@ GEM
74
73
  diff-lcs (>= 1.2.0, < 2.0)
75
74
  rspec-support (~> 3.12.0)
76
75
  rspec-support (3.12.1)
77
- sequel (5.58.0)
76
+ sequel (5.76.0)
77
+ bigdecimal
78
78
  sqlite3 (1.4.4)
79
79
  timecop (0.9.8)
80
80
  tzinfo (2.0.6)
@@ -95,12 +95,12 @@ PLATFORMS
95
95
  DEPENDENCIES
96
96
  bootsnap
97
97
  faker (~> 3.2)
98
- pg (~> 1.4.1)
98
+ pg (~> 1.5.4)
99
99
  rack-test
100
100
  rake (~> 13.0)
101
101
  ree_lib!
102
- roda (~> 3.58.0)
103
- rollbar (~> 3.3.1)
102
+ roda (~> 3.76.0)
103
+ rollbar (~> 3.5.1)
104
104
  rspec
105
105
  sqlite3 (~> 1.4.4)
106
106
  timecop (~> 0.9.5)
@@ -7,19 +7,11 @@ module ReeActions
7
7
  def self.included(base)
8
8
  base.extend(ClassMethods)
9
9
  base.include(ReeMapper::DSL)
10
- link_dao_cache(base)
11
10
  end
12
11
 
13
12
  def self.extended(base)
14
13
  base.extend(ClassMethods)
15
14
  base.include(ReeMapper::DSL)
16
- link_dao_cache(base)
17
- end
18
-
19
- private_class_method def self.link_dao_cache(base)
20
- base.include(Ree::LinkDSL)
21
- base.link :drop_cache, as: :__ree_dao_drop_cache, from: :ree_dao
22
- base.link :init_cache, as: :__ree_dao_init_cache, from: :ree_dao
23
15
  end
24
16
 
25
17
  module ClassMethods
@@ -52,8 +44,6 @@ module ReeActions
52
44
  alias_method(:__original_call, :call)
53
45
 
54
46
  define_method :call do |user_access, attrs|
55
- __ree_dao_init_cache
56
-
57
47
  if self.class.const_defined?(:ActionCaster)
58
48
  caster = self.class.const_get(:ActionCaster)
59
49
 
@@ -69,8 +59,6 @@ module ReeActions
69
59
  end
70
60
 
71
61
  __original_call(user_access, attrs)
72
- ensure
73
- __ree_dao_drop_cache
74
62
  end
75
63
 
76
64
  nil
@@ -89,94 +89,4 @@ RSpec.describe ReeActions::DSL, type: [:autoclean] do
89
89
  result = ReeActionsTest::TestAction2.new.call('user_access', {user_id: 1})
90
90
  expect(result).to eq(1)
91
91
  }
92
-
93
- it {
94
- module ReeActionsTest
95
- include Ree::PackageDSL
96
-
97
- package do
98
- depends_on :ree_mapper
99
- depends_on :ree_dao
100
- end
101
-
102
- class Db
103
- include Ree::BeanDSL
104
-
105
- bean :db do
106
- singleton
107
- factory :build
108
-
109
- link :build_sqlite_connection, from: :ree_dao
110
- end
111
-
112
- def build
113
- build_sqlite_connection({database: 'sqlite_db'})
114
- end
115
- end
116
-
117
- class User
118
- include ReeDto::EntityDSL
119
-
120
- properties(
121
- id: Nilor[Integer],
122
- name: String,
123
- age: Integer,
124
- )
125
-
126
- attr_accessor :name
127
- end
128
-
129
- class UsersDao
130
- include ReeDao::DSL
131
-
132
- dao :users_dao do
133
- link :db
134
- end
135
-
136
- table :users
137
-
138
- schema ReeActionsTest::User do
139
- integer :id, null: true
140
- string :name
141
- integer :age
142
- end
143
- end
144
-
145
- class TestAction3
146
- include ReeActions::DSL
147
-
148
- action :test_action3 do
149
- link :users_dao
150
- end
151
-
152
- contract Any, Hash => Integer
153
- def call(user_access, attrs)
154
- $user = ReeActionsTest::User.new(name: 'John', age: 30)
155
- users_dao.put($user)
156
-
157
- Thread.new do
158
- users_dao.put(ReeActionsTest::User.new(name: 'Alex', age: 33))
159
- end.join
160
-
161
- Thread.new do
162
- users_dao.put(ReeActionsTest::User.new(name: 'David', age: 21))
163
-
164
- Thread.new do
165
- users_dao.put(ReeActionsTest::User.new(name: 'Sam', age: 19))
166
- end.join
167
- end.join
168
-
169
- $thread_cache = ReeDao::DaoCache.new.get(:users, $user.id)
170
-
171
- attrs[:user_id]
172
- end
173
- end
174
- end
175
-
176
- Thread.new do
177
- ReeActionsTest::TestAction3.new.call('user_access', {user_id: 1})
178
- end.join
179
-
180
- expect($thread_cache).to eq($user.to_h)
181
- }
182
92
  end
@@ -75,34 +75,6 @@
75
75
  "object"
76
76
  ]
77
77
  },
78
- {
79
- "name": "dao_cache",
80
- "schema": "packages/ree_dao/schemas/ree_dao/beans/dao_cache.schema.json",
81
- "tags": [
82
- "object"
83
- ]
84
- },
85
- {
86
- "name": "drop_cache",
87
- "schema": "packages/ree_dao/schemas/ree_dao/functions/drop_cache.schema.json",
88
- "tags": [
89
- "fn"
90
- ]
91
- },
92
- {
93
- "name": "extract_changes",
94
- "schema": "packages/ree_dao/schemas/ree_dao/functions/extract_changes.schema.json",
95
- "tags": [
96
- "fn"
97
- ]
98
- },
99
- {
100
- "name": "init_cache",
101
- "schema": "packages/ree_dao/schemas/ree_dao/functions/init_cache.schema.json",
102
- "tags": [
103
- "fn"
104
- ]
105
- },
106
78
  {
107
79
  "name": "one_to_many",
108
80
  "schema": "packages/ree_dao/schemas/ree_dao/functions/one_to_many.schema.json",
@@ -19,10 +19,9 @@ module ReeDao
19
19
  end
20
20
 
21
21
  module InstanceMethods
22
+ PERSISTENCE_STATE_VARIABLE = :@persistence_state
22
23
  IMPORT_BATCH_SIZE = 1000
23
24
 
24
- package_require("ree_dao/functions/extract_changes")
25
-
26
25
  # override methods
27
26
  def find(id, mapper: nil)
28
27
  where(primary_key => id).first(mapper: mapper)
@@ -50,7 +49,7 @@ module ReeDao
50
49
  key = insert(raw)
51
50
 
52
51
  set_entity_primary_key(entity, raw, key)
53
- set_entity_cache(entity, raw)
52
+ set_persistence_state(entity, raw)
54
53
 
55
54
  entity
56
55
  end
@@ -74,7 +73,7 @@ module ReeDao
74
73
  key = insert_conflict(conflict_opts).insert(raw)
75
74
 
76
75
  set_entity_primary_key(entity, raw, key)
77
- set_entity_cache(entity, raw)
76
+ set_persistence_state(entity, raw)
78
77
 
79
78
  where(primary_key => key).first
80
79
  end
@@ -105,7 +104,7 @@ module ReeDao
105
104
  raw_data = raw[entity]
106
105
 
107
106
  set_entity_primary_key(entity, raw_data, id)
108
- set_entity_cache(entity, raw_data)
107
+ set_persistence_state(entity, raw_data)
109
108
  end
110
109
 
111
110
  nil
@@ -120,10 +119,10 @@ module ReeDao
120
119
  return __original_update(hash_or_entity) if hash_or_entity.is_a?(Hash)
121
120
 
122
121
  raw = opts[:schema_mapper].db_dump(hash_or_entity)
123
- raw = ReeDao::ExtractChanges.new.call(table_name, extract_primary_key(hash_or_entity), raw)
122
+ raw = extract_changes(hash_or_entity, raw)
124
123
 
125
124
  unless raw.empty?
126
- update_entity_cache(hash_or_entity, raw)
125
+ update_persistence_state(hash_or_entity, raw)
127
126
  key_condition = prepare_key_condition_from_entity(hash_or_entity)
128
127
  where(key_condition).__original_update(raw)
129
128
  end
@@ -161,7 +160,7 @@ module ReeDao
161
160
  if m
162
161
  entity = m.db_load(hash)
163
162
 
164
- self.set_entity_cache(entity, hash)
163
+ self.set_persistence_state(entity, hash)
165
164
 
166
165
  entity
167
166
  else
@@ -173,10 +172,6 @@ module ReeDao
173
172
 
174
173
  private
175
174
 
176
- def __ree_dao_cache
177
- ReeDao::DaoCache.new
178
- end
179
-
180
175
  def primary_key
181
176
  opts[:primary_key] || :id
182
177
  end
@@ -209,22 +204,35 @@ module ReeDao
209
204
  end
210
205
  end
211
206
 
212
- def set_entity_cache(entity, raw)
207
+ def set_persistence_state(entity, raw)
213
208
  if !entity.is_a?(Integer) && !entity.is_a?(Symbol)
214
- p_key = extract_primary_key(entity)
209
+ entity.instance_variable_set(PERSISTENCE_STATE_VARIABLE, raw)
210
+ end
211
+ end
215
212
 
216
- if p_key
217
- __ree_dao_cache.set(table_name, p_key, raw)
218
- end
213
+ def update_persistence_state(entity, raw)
214
+ persistence_state = entity.instance_variable_get(PERSISTENCE_STATE_VARIABLE)
215
+
216
+ if persistence_state
217
+ persistence_state.merge!(raw)
219
218
  end
220
219
  end
221
220
 
222
- def update_entity_cache(entity, raw)
223
- cache = __ree_dao_cache.get(table_name, extract_primary_key(entity))
221
+ def extract_changes(entity, hash)
222
+ return hash unless entity.instance_variable_defined?(PERSISTENCE_STATE_VARIABLE)
223
+ changes = {}
224
+
225
+ persistence_state = entity.instance_variable_get(PERSISTENCE_STATE_VARIABLE)
226
+
227
+ hash.each do |column, value|
228
+ previous_column_value = persistence_state[column]
224
229
 
225
- if cache
226
- __ree_dao_cache.set(table_name, extract_primary_key(entity), cache.merge(raw))
230
+ if persistence_state.has_key?(column) && previous_column_value != value
231
+ changes[column] = value
232
+ end
227
233
  end
234
+
235
+ changes
228
236
  end
229
237
 
230
238
  def set_entity_primary_key(entity, raw, key)
@@ -134,10 +134,17 @@ RSpec.describe :build_pg_connection do
134
134
  it {
135
135
  products_dao.delete_all
136
136
 
137
- product = ReeDaoTestPg::Product.new(title: "Product", info: { price: 1337, count: 200 }, labels: ["Sale"])
137
+ product = ReeDaoTestPg::Product.new(
138
+ title: "Product",
139
+ info: {
140
+ price: 1337, count: 200
141
+ },
142
+ labels: ["Sale"]
143
+ )
144
+
138
145
  products_dao.put(product)
139
146
 
140
- product.info[:price] = 1440
147
+ product.info = {price: 1440, count: 200}
141
148
  product.labels << "New"
142
149
 
143
150
  products_dao.update(product)
@@ -152,7 +159,7 @@ RSpec.describe :build_pg_connection do
152
159
  products_dao.delete_all
153
160
 
154
161
  products = Array.new(3) { |i| ReeDaoTestPg::Product.new(title: "Product#{i}", info: { price: 1337, count: 200 }, labels: ["Sale"]) }
155
-
162
+
156
163
  products_dao.import_all(products)
157
164
 
158
165
  expect(products_dao.count).to eq 3
@@ -5,7 +5,6 @@ package_require('ree_dto/entity_dsl')
5
5
 
6
6
  RSpec.describe :build_sqlite_connection do
7
7
  link :build_sqlite_connection, from: :ree_dao
8
- link :dao_cache, from: :ree_dao
9
8
 
10
9
  after do
11
10
  Ree.disable_irb_mode
@@ -131,42 +130,6 @@ RSpec.describe :build_sqlite_connection do
131
130
  expect(user.age).to eq(u.age)
132
131
  }
133
132
 
134
- it {
135
- dao.delete_all
136
-
137
- user = ReeDaoTest::User.new(name: 'John', age: 30)
138
- dao.put(user)
139
-
140
- u = dao.find(user.id)
141
-
142
- expect(u).to be_a(ReeDaoTest::User)
143
-
144
- state = dao_cache.get(:users, u.id)
145
-
146
- expect(state).to be_a(Hash)
147
- expect(state[:id]).to eq(user.id)
148
- expect(state[:age]).to eq(user.age)
149
- expect(state[:name]).to eq(user.name)
150
- }
151
-
152
- it {
153
- dao.delete_all
154
-
155
- user = ReeDaoTest::User.new(name: 'John', age: 30)
156
- dao.put(user)
157
-
158
- u = dao.find(user.id)
159
- expect(u).to be_a(ReeDaoTest::User)
160
- expect(dao_cache.get(:users, u.id)).to_not eq(nil)
161
-
162
- all = dao.all
163
- expect(all.size).to eq(1)
164
- u = all.first
165
-
166
- expect(u).to be_a(ReeDaoTest::User)
167
- expect(dao_cache.get(:users, u.id)).to be_a(Hash)
168
- }
169
-
170
133
  it {
171
134
  dao.delete_all
172
135
 
@@ -1,19 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :t do
4
- link :t, from: :ree_i18n
5
4
  link :add_load_path, from: :ree_i18n
6
5
  link :set_locale, from: :ree_i18n
6
+ link :t, from: :ree_i18n
7
7
 
8
8
  before do
9
9
  add_load_path(Dir[File.join(__dir__, 'locales/*.yml')])
10
10
  end
11
-
11
+
12
12
  it {
13
13
  set_locale(:ru)
14
14
 
15
15
  expect(t('gender.male')).to eq("Мужской")
16
- expect(t('gender.missing')).to eq("translation missing: ru.gender.missing")
16
+ expect(t('gender.missing')).to eq("Translation missing: ru.gender.missing")
17
17
 
18
18
  expect {
19
19
  t('gender.missing', raise: true)
@@ -110,4 +110,4 @@ RSpec.describe :t do
110
110
  )
111
111
  }
112
112
  end
113
- end
113
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.88"
4
+ VERSION = "1.0.89"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ree_lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.88
4
+ version: 1.0.89
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-25 00:00:00.000000000 Z
11
+ date: 2024-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ree
@@ -44,56 +44,56 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 2.18.0
47
+ version: 2.22.0
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: 2.18.0
54
+ version: 2.22.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: oj
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 3.13.17
61
+ version: 3.16.3
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 3.13.17
68
+ version: 3.16.3
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: i18n
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.12.0
75
+ version: 1.14.1
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 1.12.0
82
+ version: 1.14.1
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: sequel
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 5.58.0
89
+ version: 5.76.0
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 5.58.0
96
+ version: 5.76.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: binding_of_caller
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -156,14 +156,14 @@ dependencies:
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 3.58.0
159
+ version: 3.76.0
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: 3.58.0
166
+ version: 3.76.0
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: sqlite3
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -184,14 +184,14 @@ dependencies:
184
184
  requirements:
185
185
  - - "~>"
186
186
  - !ruby/object:Gem::Version
187
- version: 1.4.1
187
+ version: 1.5.4
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
- version: 1.4.1
194
+ version: 1.5.4
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: warden
197
197
  requirement: !ruby/object:Gem::Requirement
@@ -226,14 +226,14 @@ dependencies:
226
226
  requirements:
227
227
  - - "~>"
228
228
  - !ruby/object:Gem::Version
229
- version: 3.3.1
229
+ version: 3.5.1
230
230
  type: :development
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - "~>"
235
235
  - !ruby/object:Gem::Version
236
- version: 3.3.1
236
+ version: 3.5.1
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: faker
239
239
  requirement: !ruby/object:Gem::Requirement
@@ -326,7 +326,6 @@ files:
326
326
  - lib/ree_lib/packages/ree_dao/package/ree_dao/association_methods.rb
327
327
  - lib/ree_lib/packages/ree_dao/package/ree_dao/associations.rb
328
328
  - lib/ree_lib/packages/ree_dao/package/ree_dao/beans/connections.rb
329
- - lib/ree_lib/packages/ree_dao/package/ree_dao/beans/dao_cache.rb
330
329
  - lib/ree_lib/packages/ree_dao/package/ree_dao/contract/dao_dataset_contract.rb
331
330
  - lib/ree_lib/packages/ree_dao/package/ree_dao/contract/entity_contract.rb
332
331
  - lib/ree_lib/packages/ree_dao/package/ree_dao/dataset_extensions.rb
@@ -336,9 +335,6 @@ files:
336
335
  - lib/ree_lib/packages/ree_dao/package/ree_dao/functions/build_dao.rb
337
336
  - lib/ree_lib/packages/ree_dao/package/ree_dao/functions/build_pg_connection.rb
338
337
  - lib/ree_lib/packages/ree_dao/package/ree_dao/functions/build_sqlite_connection.rb
339
- - lib/ree_lib/packages/ree_dao/package/ree_dao/functions/drop_cache.rb
340
- - lib/ree_lib/packages/ree_dao/package/ree_dao/functions/extract_changes.rb
341
- - lib/ree_lib/packages/ree_dao/package/ree_dao/functions/init_cache.rb
342
338
  - lib/ree_lib/packages/ree_dao/package/ree_dao/functions/one_to_many.rb
343
339
  - lib/ree_lib/packages/ree_dao/package/ree_dao/functions/one_to_one.rb
344
340
  - lib/ree_lib/packages/ree_dao/package/ree_dao/functions/persist_assoc.rb
@@ -346,15 +342,11 @@ files:
346
342
  - lib/ree_lib/packages/ree_dao/package/ree_dao/wrappers/pg_array.rb
347
343
  - lib/ree_lib/packages/ree_dao/package/ree_dao/wrappers/pg_jsonb.rb
348
344
  - lib/ree_lib/packages/ree_dao/schemas/ree_dao/beans/connections.schema.json
349
- - lib/ree_lib/packages/ree_dao/schemas/ree_dao/beans/dao_cache.schema.json
350
345
  - lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/agg.schema.json
351
346
  - lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/build_connection.schema.json
352
347
  - lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/build_dao.schema.json
353
348
  - lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/build_pg_connection.schema.json
354
349
  - lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/build_sqlite_connection.schema.json
355
- - lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/drop_cache.schema.json
356
- - lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/extract_changes.schema.json
357
- - lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/init_cache.schema.json
358
350
  - lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/one_to_many.schema.json
359
351
  - lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/one_to_one.schema.json
360
352
  - lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/persist_assoc.schema.json
@@ -1,81 +0,0 @@
1
- class ReeDao::DaoCache
2
- include Ree::BeanDSL
3
-
4
- bean :dao_cache do
5
- link :deep_dup, from: :ree_object
6
-
7
- singleton
8
- after_init :setup
9
- end
10
-
11
- def setup
12
- @threads = {}
13
- end
14
-
15
- def add_thread_cache(thread)
16
- @threads[get_thread_object_id(thread)] ||= {}
17
- end
18
-
19
- def drop_thread_cache(thread)
20
- @threads.delete(get_thread_object_id(thread))
21
- end
22
-
23
- def get(table_name, primary_key)
24
- add_thread_cache(current_thread)
25
- add_table_name(table_name)
26
-
27
- @threads[current_thread_object_id][table_name][primary_key]
28
- end
29
-
30
- def set(table_name, primary_key, data)
31
- add_thread_cache(current_thread)
32
- add_table_name(table_name)
33
- add_primary_key(table_name, primary_key)
34
-
35
- @threads[current_thread_object_id][table_name][primary_key] = deep_dup(data)
36
- end
37
-
38
- private
39
-
40
- def get_thread_object_id(thread)
41
- thread == Thread.main ? thread.object_id : get_parent_thread(thread)
42
- end
43
-
44
- def get_parent_thread(thread)
45
- return thread.object_id if thread == Thread.main
46
-
47
- get_parent_thread(thread.parent)
48
- end
49
-
50
- def current_thread
51
- Thread.current
52
- end
53
-
54
- def current_thread_object_id
55
- get_thread_object_id(current_thread)
56
- end
57
-
58
- def add_table_name(table_name)
59
- current_thr_obj_id = current_thread_object_id
60
-
61
- if !@threads[current_thr_obj_id]
62
- @threads[current_thr_obj_id] ||= {}
63
- end
64
-
65
- @threads[current_thr_obj_id][table_name] ||= {}
66
- end
67
-
68
- def add_primary_key(table_name, primary_key)
69
- current_thr_obj_id = current_thread_object_id
70
-
71
- if !@threads[current_thr_obj_id]
72
- @threads[current_thr_obj_id] ||= {}
73
- end
74
-
75
- if !@threads[current_thr_obj_id][table_name]
76
- @threads[current_thr_obj_id][table_name] ||= {}
77
- end
78
-
79
- @threads[current_thr_obj_id][table_name][primary_key] ||= {}
80
- end
81
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ReeDao::DropCache
4
- include Ree::FnDSL
5
-
6
- fn :drop_cache do
7
- link :dao_cache
8
- end
9
-
10
- contract(None => nil)
11
- def call
12
- dao_cache.drop_thread_cache(Thread.current)
13
- nil
14
- end
15
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ReeDao::ExtractChanges
4
- include Ree::FnDSL
5
-
6
- fn :extract_changes do
7
- link :dao_cache, as: :__ree_dao_cache
8
- end
9
-
10
- contract(Symbol, Any, Hash => Hash)
11
- def call(table_name, primary_key, hash)
12
- cached = __ree_dao_cache.get(table_name, primary_key)
13
- return hash unless cached
14
- changes = {}
15
-
16
- hash.each do |column, value|
17
- previous_column_value = cached[column]
18
-
19
- if cached.has_key?(column) && previous_column_value != value
20
- changes[column] = value
21
- end
22
- end
23
-
24
- changes
25
- end
26
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ReeDao::InitCache
4
- include Ree::FnDSL
5
-
6
- fn :init_cache do
7
- link :dao_cache
8
- end
9
-
10
- contract(None => nil)
11
- def call
12
- dao_cache.add_thread_cache(Thread.current)
13
- nil
14
- end
15
- end
@@ -1,22 +0,0 @@
1
- {
2
- "schema_type": "object",
3
- "schema_version": "1.1",
4
- "name": "dao_cache",
5
- "path": "packages/ree_dao/package/ree_dao/beans/dao_cache.rb",
6
- "mount_as": "object",
7
- "class": "ReeDao::DaoCache",
8
- "factory": null,
9
- "methods": [
10
-
11
- ],
12
- "links": [
13
- {
14
- "target": "deep_dup",
15
- "package_name": "ree_object",
16
- "as": "deep_dup",
17
- "imports": [
18
-
19
- ]
20
- }
21
- ]
22
- }
@@ -1,31 +0,0 @@
1
- {
2
- "schema_type": "object",
3
- "schema_version": "1.1",
4
- "name": "drop_cache",
5
- "path": "packages/ree_dao/package/ree_dao/functions/drop_cache.rb",
6
- "mount_as": "fn",
7
- "class": "ReeDao::DropCache",
8
- "factory": null,
9
- "methods": [
10
- {
11
- "doc": "",
12
- "throws": [
13
-
14
- ],
15
- "return": "Any",
16
- "args": [
17
-
18
- ]
19
- }
20
- ],
21
- "links": [
22
- {
23
- "target": "dao_cache",
24
- "package_name": "ree_dao",
25
- "as": "dao_cache",
26
- "imports": [
27
-
28
- ]
29
- }
30
- ]
31
- }
@@ -1,45 +0,0 @@
1
- {
2
- "schema_type": "object",
3
- "schema_version": "1.1",
4
- "name": "extract_changes",
5
- "path": "packages/ree_dao/package/ree_dao/functions/extract_changes.rb",
6
- "mount_as": "fn",
7
- "class": "ReeDao::ExtractChanges",
8
- "factory": null,
9
- "methods": [
10
- {
11
- "doc": "",
12
- "throws": [
13
-
14
- ],
15
- "return": "Hash",
16
- "args": [
17
- {
18
- "arg": "table_name",
19
- "arg_type": "req",
20
- "type": "Symbol"
21
- },
22
- {
23
- "arg": "primary_key",
24
- "arg_type": "req",
25
- "type": "Any"
26
- },
27
- {
28
- "arg": "hash",
29
- "arg_type": "req",
30
- "type": "Hash"
31
- }
32
- ]
33
- }
34
- ],
35
- "links": [
36
- {
37
- "target": "dao_cache",
38
- "package_name": "ree_dao",
39
- "as": "__ree_dao_cache",
40
- "imports": [
41
-
42
- ]
43
- }
44
- ]
45
- }
@@ -1,31 +0,0 @@
1
- {
2
- "schema_type": "object",
3
- "schema_version": "1.1",
4
- "name": "init_cache",
5
- "path": "packages/ree_dao/package/ree_dao/functions/init_cache.rb",
6
- "mount_as": "fn",
7
- "class": "ReeDao::InitCache",
8
- "factory": null,
9
- "methods": [
10
- {
11
- "doc": "",
12
- "throws": [
13
-
14
- ],
15
- "return": "Any",
16
- "args": [
17
-
18
- ]
19
- }
20
- ],
21
- "links": [
22
- {
23
- "target": "dao_cache",
24
- "package_name": "ree_dao",
25
- "as": "dao_cache",
26
- "imports": [
27
-
28
- ]
29
- }
30
- ]
31
- }