isomorfeus-data 2.0.18 → 2.0.22

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: 0ceee66f1fd4e107d808108d8c71d03496a17eae12c9ad38a1d83afd4cf3697b
4
- data.tar.gz: 405224c9f80eb01ca6ecbf3371e258459139c9077700949a8a2b9c22c15e8969
3
+ metadata.gz: a61109439fc578e2cb037c578c437f63f65ff991e63207ea954913a77c0a2df8
4
+ data.tar.gz: efbc79050eb128af7c698081626ef078491dd7ea54d7d0e9827b042699ab1a25
5
5
  SHA512:
6
- metadata.gz: 241acbbc830cef52b87dfa337801102081f92c643223eb06a960940fe4c0d4b1551a190e5c75e2ae0012dd8515e1944f62d9201bd8a65ef4f565479cccc65cf0
7
- data.tar.gz: f55c1b2cd8b276e66b648e3e351ac0be59f74945bf95ad446d0bb3fa1749c236d58252dfc3bb3967f2adbb166a6565e58e94a22713c399a9a96bb53fa9bf1dc0
6
+ metadata.gz: 2f06ed4873695a6bf2fa26ff86eed91f475326a36fb5a363e5347482496a97a681464f852d63acfda528f441eca5b8fa2017522bf563971a38402043197ec9cc
7
+ data.tar.gz: 62897ec244e3fa1b8b480393b1dcf3bfdd06ed01ddbee8713c141164a6ce5c383590fb9c79342ac2760d28a1169abda0631566849f74f07fb13eedb04b37c221
data/README.md CHANGED
@@ -4,7 +4,7 @@ Data access for Isomorfeus.
4
4
 
5
5
  ### Community and Support
6
6
 
7
- At the [Isomorfeus Framework Project](http://isomorfeus.com)
7
+ At the [Isomorfeus Framework Project](https://isomorfeus.com)
8
8
 
9
9
  ### Overview
10
10
 
@@ -1,6 +1,6 @@
1
1
  module Isomorfeus
2
2
  module Data
3
- class FerretAccelerator
3
+ class DocumentAccelerator
4
4
  def self.finalize(fer_acc)
5
5
  proc { fer_acc.close_index }
6
6
  end
@@ -73,7 +73,7 @@ module Isomorfeus
73
73
  def open_index
74
74
  FileUtils.mkdir_p(Isomorfeus.data_documents_path) unless Dir.exist?(Isomorfeus.data_documents_path)
75
75
  field_infos = Isomorfeus::Ferret::Index::FieldInfos.new(store: :yes, index: :yes, term_vector: :with_positions_offsets)
76
- @index = Isomorfeus::Ferret::Index::Index.new(path: index_path, key: :key, auto_flush: true, lock_retry_time: 5)
76
+ @index = Isomorfeus::Ferret::Index::Index.new(path: index_path, key: :key, auto_flush: true, lock_retry_time: 5, field_infos: field_infos)
77
77
  @index.field_infos.add_field(:key, store: :yes, index: :yes, term_vector: :no) unless @index.field_infos[:key]
78
78
  @doc_class.field_options.each do |field, options|
79
79
  @index.field_infos.add_field(field, options) unless @index.field_infos[field]
@@ -0,0 +1,75 @@
1
+ module Isomorfeus
2
+ module Data
3
+ class ObjectAccelerator
4
+ def self.finalize(ham_acc)
5
+ proc { ham_acc.close_index }
6
+ end
7
+
8
+ attr_accessor :index
9
+
10
+ def initialize(&block)
11
+ if block_given?
12
+ res = block.call(self)
13
+ @index = res unless @index
14
+ else
15
+ open_index
16
+ end
17
+ ObjectSpace.define_finalizer(self, self.class.finalize(self))
18
+ end
19
+
20
+ def destroy_index
21
+ close_index
22
+ FileUtils.rm_rf(Isomorfeus.data_object_idx_path)
23
+ end
24
+
25
+ def close_index
26
+ @index.close
27
+ end
28
+
29
+ def create_doc(document)
30
+ @index.add_document(document)
31
+ end
32
+
33
+ def destroy_doc(key)
34
+ id = get_doc_id(key)
35
+ @index.delete(id) if id
36
+ true
37
+ end
38
+
39
+ def load_doc(key)
40
+ id = get_doc_id(key)
41
+ @index.doc(id)&.load&.to_h if id
42
+ end
43
+
44
+ def save_doc(key, document)
45
+ id = get_doc_id(key)
46
+ if id
47
+ @index.update(id, document)
48
+ true
49
+ end
50
+ end
51
+
52
+ def search_each(query, options, &block)
53
+ @index.search_each(query, options, &block)
54
+ end
55
+
56
+ private
57
+
58
+ def get_doc_id(key)
59
+ # special characters must be escaped, characters taken from the ferret query parser documentation
60
+ escaped_key = key.gsub(/([\\\&\:\(\)\[\]\{\}\!\"\~\^\|\<\>\=\*\?\+\-\s])/, '\\\\\1')
61
+ top_docs = @index.search("sid_s_attr:\"#{escaped_key}\"", limit: 1)
62
+ id = top_docs.hits[0].doc if top_docs.total_hits == 1
63
+ end
64
+
65
+ def open_index
66
+ FileUtils.mkdir_p(Isomorfeus.data_object_idx_path) unless Dir.exist?(Isomorfeus.data_object_idx_path)
67
+ @index = Isomorfeus::Ferret::Index::Index.new(path: Isomorfeus.data_object_idx_path, key: :sid_s_attr, auto_flush: true, lock_retry_time: 5)
68
+ @index.field_infos.add_field(:attribute, store: :no, term_vector: :no) unless index.field_infos[:attribute]
69
+ @index.field_infos.add_field(:class_name, store: :no, term_vector: :no) unless index.field_infos[:class_name]
70
+ @index.field_infos.add_field(:value, store: :no) unless index.field_infos[:value]
71
+ @index.field_infos.add_field(:sid_s_attr, store: :yes, term_vector: :no) unless index.field_infos[:sid_s_attr]
72
+ end
73
+ end
74
+ end
75
+ end
@@ -1,6 +1,6 @@
1
1
  module Isomorfeus
2
2
  module Data
3
- class HamsterStorageExpander
3
+ class ObjectExpander
4
4
  class << self
5
5
  def environment
6
6
  @environment
@@ -45,11 +45,12 @@ module Isomorfeus
45
45
  end
46
46
  @db = self.class.environment.database('objects', create: true)
47
47
  @index_db = self.class.environment.database('index', create: true, dupsort: true)
48
+ @use_class_cache = !Isomorfeus.development?
48
49
  ObjectSpace.define_finalizer(self, self.class.finalize(self.class))
49
50
  end
50
51
 
51
52
  def create_object(sid_s, obj)
52
- Isomorfeus::Hamster::Marshal.dump(@db, sid_s, obj)
53
+ Isomorfeus::Hamster::Marshal.dump(@db, sid_s, obj, class_cache: @use_class_cache)
53
54
  end
54
55
 
55
56
  def destroy_object(sid_s)
@@ -58,11 +59,11 @@ module Isomorfeus
58
59
  end
59
60
 
60
61
  def load_object(sid_s)
61
- Isomorfeus::Hamster::Marshal.load(@db, sid_s)
62
+ Isomorfeus::Hamster::Marshal.load(@db, sid_s, class_cache: @use_class_cache)
62
63
  end
63
64
 
64
65
  def save_object(sid_s, obj)
65
- Isomorfeus::Hamster::Marshal.dump(@db, sid_s, obj)
66
+ Isomorfeus::Hamster::Marshal.dump(@db, sid_s, obj, class_cache: @use_class_cache)
66
67
  end
67
68
 
68
69
  def index_delete(key, val)
@@ -79,7 +80,7 @@ module Isomorfeus
79
80
 
80
81
  def each(&block)
81
82
  @db.each do |key, obj|
82
- block.call(Isomorfeus::Hamster::Marshal.unserialize(obj))
83
+ block.call(Isomorfeus::Hamster::Marshal.unserialize(obj, class_cache: @use_class_cache))
83
84
  end
84
85
  end
85
86
 
@@ -18,7 +18,7 @@ module Isomorfeus
18
18
  prev_state
19
19
  end
20
20
  else
21
- prev_state
21
+ prev_state.nil? ? {} : prev_state
22
22
  end
23
23
  end
24
24
 
@@ -1,5 +1,5 @@
1
1
  module Isomorfeus
2
2
  module Data
3
- VERSION = '2.0.18'
3
+ VERSION = '2.0.22'
4
4
  end
5
5
  end
@@ -23,11 +23,11 @@ else
23
23
  require 'active_support/core_ext/hash'
24
24
 
25
25
  require 'isomorfeus-ferret'
26
- require 'isomorfeus/data/ferret_accelerator'
26
+ require 'isomorfeus/data/document_accelerator'
27
27
 
28
28
  require 'isomorfeus-hamster'
29
- require 'isomorfeus/data/hamster_storage_expander'
30
- require 'isomorfeus/data/hamster_accelerator'
29
+ require 'isomorfeus/data/object_expander'
30
+ require 'isomorfeus/data/object_accelerator'
31
31
 
32
32
  require 'isomorfeus_data/lucid_query_result'
33
33
  require 'isomorfeus_data/lucid_object/mixin'
@@ -92,9 +92,9 @@ module LucidDocument
92
92
  def ferret_accelerator
93
93
  return @ferret_accelerator if @ferret_accelerator
94
94
  @ferret_accelerator = if @_setup_index_block
95
- Isomorfeus::Data::FerretAccelerator.new(self, &@_setup_index_block)
95
+ Isomorfeus::Data::DocumentAccelerator.new(self, &@_setup_index_block)
96
96
  else
97
- Isomorfeus::Data::FerretAccelerator.new(self)
97
+ Isomorfeus::Data::DocumentAccelerator.new(self)
98
98
  end
99
99
  end
100
100
 
@@ -90,18 +90,18 @@ module LucidObject
90
90
  def hamster_storage_expander
91
91
  return @hamster_storage_expander if @hamster_storage_expander
92
92
  @hamster_storage_expander = if @_setup_environment_block
93
- Isomorfeus::Data::HamsterStorageExpander.new(&@_setup_index_block)
93
+ Isomorfeus::Data::ObjectExpander.new(&@_setup_index_block)
94
94
  else
95
- Isomorfeus::Data::HamsterStorageExpander.new
95
+ Isomorfeus::Data::ObjectExpander.new
96
96
  end
97
97
  end
98
98
 
99
99
  def hamster_accelerator
100
100
  return @hamster_accelerator if @hamster_accelerator
101
101
  @hamster_accelerator = if @_setup_index_block
102
- Isomorfeus::Data::HamsterAccelerator.new(&@_setup_index_block)
102
+ Isomorfeus::Data::ObjectAccelerator.new(&@_setup_index_block)
103
103
  else
104
- Isomorfeus::Data::HamsterAccelerator.new
104
+ Isomorfeus::Data::ObjectAccelerator.new
105
105
  end
106
106
  end
107
107
 
@@ -113,7 +113,7 @@ module LucidObject
113
113
  query = "+value:#{val} +class_name:#{self.name}"
114
114
  query << " +attribute:#{attr}" if attr != '*'
115
115
  self.hamster_accelerator.search_each(query, options) do |id|
116
- doc = self.hamster_accelerator.load_doc(id)
116
+ doc = self.hamster_accelerator.index.doc(id)&.load
117
117
  if doc
118
118
  sid_s = doc[:sid_s_attr].split(':|:')[0]
119
119
  obj = self.load(key: sid_s)
@@ -123,7 +123,7 @@ module LucidObject
123
123
  else
124
124
  if val == '*'
125
125
  self.hamster_storage_expander.each do |obj|
126
- objs << obj if obj.class.name == self.name
126
+ objs << obj if obj.class == self
127
127
  end
128
128
  else
129
129
  attr_s = ":[#{attr}]"
@@ -145,7 +145,7 @@ module LucidObject
145
145
  self.class.hamster_storage_expander.create_object(self.sid_s, self)
146
146
  self.class.indexed_attributes.each do |attr, idx_type|
147
147
  if idx_type == :text
148
- self._store_text_indexed_attribute(attr)
148
+ self._create_text_indexed_attribute(attr)
149
149
  else
150
150
  self._store_value_indexed_attribute(attr)
151
151
  end
@@ -200,6 +200,11 @@ module LucidObject
200
200
  @_raw_attributes = attributes
201
201
  end
202
202
 
203
+ def _create_text_indexed_attribute(attr)
204
+ doc = { sid_s_attr: "#{self.sid_s}:|:[#{attr}]", value: self.send(attr).to_s, attribute: attr.to_s, class_name: @class_name }
205
+ self.class.hamster_accelerator.create_doc(doc)
206
+ end
207
+
203
208
  def _store_text_indexed_attribute(attr)
204
209
  doc = { sid_s_attr: "#{self.sid_s}:|:[#{attr}]", value: self.send(attr).to_s, attribute: attr.to_s, class_name: @class_name }
205
210
  self.class.hamster_accelerator.save_doc("#{self.sid_s}:|:[#{attr}]", doc)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-data
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.18
4
+ version: 2.0.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-06 00:00:00.000000000 Z
11
+ date: 2022-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 7.0.1
19
+ version: 7.0.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 7.0.1
26
+ version: 7.0.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: oj
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -72,98 +72,98 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.14.8
75
+ version: 0.14.9
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: 0.14.8
82
+ version: 0.14.9
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: isomorfeus-ferret
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.12.3
89
+ version: 0.12.6
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: 0.12.3
96
+ version: 0.12.6
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: isomorfeus-hamster
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.6.2
103
+ version: 0.6.4
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.6.2
110
+ version: 0.6.4
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: isomorfeus-preact
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 10.6.30
117
+ version: 10.6.31
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 10.6.30
124
+ version: 10.6.31
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: isomorfeus-redux
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 4.1.11
131
+ version: 4.1.15
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 4.1.11
138
+ version: 4.1.15
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: isomorfeus-transport
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - '='
144
144
  - !ruby/object:Gem::Version
145
- version: 2.0.18
145
+ version: 2.0.22
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - '='
151
151
  - !ruby/object:Gem::Version
152
- version: 2.0.18
152
+ version: 2.0.22
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: isomorfeus
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - '='
158
158
  - !ruby/object:Gem::Version
159
- version: 2.0.18
159
+ version: 2.0.22
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: 2.0.18
166
+ version: 2.0.22
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: rake
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -192,8 +192,7 @@ dependencies:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
194
  version: 3.10.0
195
- description: Write Browser Apps that transparently access server side data with Graphs
196
- and Collections with ease.
195
+ description: Develop apps with powerful reactive data access and queries.
197
196
  email: jan@kursator.de
198
197
  executables: []
199
198
  extensions: []
@@ -207,13 +206,13 @@ files:
207
206
  - lib/isomorfeus-data.rb
208
207
  - lib/isomorfeus/data/attribute_support.rb
209
208
  - lib/isomorfeus/data/config.rb
210
- - lib/isomorfeus/data/ferret_accelerator.rb
209
+ - lib/isomorfeus/data/document_accelerator.rb
211
210
  - lib/isomorfeus/data/field_support.rb
212
211
  - lib/isomorfeus/data/generic_class_api.rb
213
212
  - lib/isomorfeus/data/generic_instance_api.rb
214
- - lib/isomorfeus/data/hamster_accelerator.rb
215
- - lib/isomorfeus/data/hamster_storage_expander.rb
216
213
  - lib/isomorfeus/data/handler/generic.rb
214
+ - lib/isomorfeus/data/object_accelerator.rb
215
+ - lib/isomorfeus/data/object_expander.rb
217
216
  - lib/isomorfeus/data/reducer.rb
218
217
  - lib/isomorfeus/data/version.rb
219
218
  - lib/isomorfeus_data/lucid_document/base.rb
@@ -228,11 +227,12 @@ files:
228
227
  - opal/uri.rb
229
228
  - opal/uri/common.rb
230
229
  - opal/uri/generic.rb
231
- homepage: http://isomorfeus.com
230
+ homepage: https://isomorfeus.com
232
231
  licenses:
233
232
  - MIT
234
233
  metadata:
235
234
  github_repo: ssh://github.com/isomorfeus/gems
235
+ source_code_uri: https://github.com/isomorfeus/isomorfeus-project/isomorfeus-data
236
236
  post_install_message:
237
237
  rdoc_options: []
238
238
  require_paths:
@@ -251,5 +251,5 @@ requirements: []
251
251
  rubygems_version: 3.3.3
252
252
  signing_key:
253
253
  specification_version: 4
254
- summary: Compose Graphs and Collections of data just as needed for a isomorfeus app.
254
+ summary: Reactive objects, documents, files and queries for isomorfeus.
255
255
  test_files: []
@@ -1,87 +0,0 @@
1
- module Isomorfeus
2
- module Data
3
- class HamsterAccelerator
4
- class << self
5
- def index
6
- @index
7
- end
8
-
9
- def index=(idx)
10
- @index = idx
11
- end
12
-
13
- def ref
14
- @ref ||= 0
15
- end
16
-
17
- def ref=(val)
18
- @ref = val
19
- end
20
-
21
- def refa
22
- self.ref += 1
23
- end
24
-
25
- def refs
26
- self.ref -= 1 if self.ref > 0
27
- end
28
-
29
- def finalize(cls)
30
- proc do
31
- cls.refs
32
- cls.index.close if cls.ref == 0
33
- end
34
- end
35
- end
36
-
37
- def initialize(&block)
38
- if block_given?
39
- res = block.call(self)
40
- self.class.index = res unless self.class.index
41
- else
42
- open_index
43
- end
44
- ObjectSpace.define_finalizer(self, self.class.finalize(self.class))
45
- end
46
-
47
- def destroy_index
48
- close_index
49
- FileUtils.rm_rf(Isomorfeus.data_object_idx_path)
50
- end
51
-
52
- def destroy_doc(id)
53
- self.class.index.delete(id)
54
- true
55
- end
56
-
57
- def load_doc(id)
58
- self.class.index.doc(id)&.load
59
- end
60
-
61
- def save_doc(id, document)
62
- self.class.index.update(id, document)
63
- end
64
-
65
- def search_each(query, options, &block)
66
- self.class.index.search_each(query, options, &block)
67
- end
68
-
69
- private
70
-
71
- def open_index
72
- return self.class.refa if self.class.index
73
- unless Dir.exist?(Isomorfeus.data_object_idx_path)
74
- FileUtils.mkdir_p(Isomorfeus.data_object_idx_path)
75
- fis = Isomorfeus::Ferret::Index::FieldInfos.new
76
- fis.add_field(:attribute, store: :no)
77
- fis.add_field(:class_name, store: :no)
78
- fis.add_field(:value, store: :no)
79
- fis.add_field(:sid_s_attr, store: :yes)
80
- fis.create_index(Isomorfeus.data_object_idx_path)
81
- end
82
- self.class.index = Isomorfeus::Ferret::Index::Index.new(path: Isomorfeus.data_object_idx_path, id_field: :sid_s_attr)
83
- self.class.refa
84
- end
85
- end
86
- end
87
- end