ree_lib 1.0.88 → 1.0.89

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 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
- }