isomorfeus-data 2.0.18 → 2.0.22

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