groovy 0.4.6 → 0.4.7

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: 2569117dfa3663d6c60ed950be2972c58116e7eaf6d21f5c6640cb91642fee4f
4
- data.tar.gz: 33e1651825dd626dab979e9c504d5de1b7d8162363d42cbeca43873e370cad04
3
+ metadata.gz: 43812d3bd8ef9579ceed22b3d19e78378ceb3a924bfc8d6c0983e49199c26c88
4
+ data.tar.gz: 5960ca73a253d62f31301995c8f643bcaa084a99140b5f59eee0161c816d20e2
5
5
  SHA512:
6
- metadata.gz: 66b311fe79a3f9c8467ddbe9f863a2fd731b9c7dd9df2dbeb49fc1b8d62f4b7b506b2e0ca1f05c6ad7766ede89df0a26cb4a8eae8f96097ff613ab17cadde593
7
- data.tar.gz: c1dbb4f84dfdb79d870a0e498acbc63d7e1268f5cfd1f0951fd16cc7d890b68a6d3679e903eb703b8de4a44b6765070594df0eb53b8cfbeb7ac9fb1499f5dd3f
6
+ metadata.gz: 22cc09a73d9804f5d5e1cb432d3948ff24ef9a28dbd84b5a403b3709477d013089617ebf19b23f4d3450c3c7dc8e15c01ab527698c5efa5821c9d351056777ad
7
+ data.tar.gz: 809b9fa8e3158df7afeb6e80967d7156772094b21b69f6fe7d9f5e6db03626fe8a9b2ee123f89c7bf791ef6e195415524b1e967291d836becdc6173fbd0bfbfc
@@ -28,4 +28,18 @@ populate if Product.count == 0
28
28
 
29
29
  # 50_000 products: 50M
30
30
  # 100_000 products: 50M
31
- # 500_000 products: 62M
31
+ # 500_000 products: 62M
32
+
33
+ module MemInfo
34
+ KERNEL_PAGE_SIZE = `getconf PAGESIZE`.chomp.to_i rescue 4096
35
+ STATM_PATH = "/proc/#{Process.pid}/statm"
36
+ STATM_FOUND = File.exist?(STATM_PATH)
37
+ def self.rss
38
+ STATM_FOUND ? (File.read(STATM_PATH).split(' ')[1].to_i * KERNEL_PAGE_SIZE) / 1024 : 0
39
+ end
40
+ end
41
+
42
+ puts MemInfo.rss
43
+ prices = Product.all.map { |x| x.price }
44
+ puts prices.inspect
45
+ puts MemInfo.rss
@@ -150,7 +150,6 @@ module Groovy
150
150
  # Groonga["#{table_name}.#{name}"] # .search, .similar_search, etc
151
151
  # end
152
152
 
153
-
154
153
  def index_search(column, query, options = {}, &block)
155
154
  results = table.select { |rec| rec[column].match(query) }
156
155
  render_results(results, &block)
@@ -283,13 +282,13 @@ module Groovy
283
282
  end
284
283
  end
285
284
 
286
- attr_reader :id, :attributes, :record, :changes
285
+ attr_reader :id, :record, :changes
287
286
 
288
287
  def initialize(attrs = nil, record = nil, key = nil)
289
288
  @attributes, @vectors, @_key = {}, {}, key # key is used on creation only
290
289
 
291
290
  if set_record(record)
292
- set_attributes_from_record(record)
291
+ # load_attributes_from_record(record)
293
292
  else
294
293
  attrs ||= {}
295
294
  unless attrs.is_a?(Hash)
@@ -307,8 +306,13 @@ module Groovy
307
306
 
308
307
  # get reference to the actual record in the Groonga table,
309
308
  # not the temporary one we get as part of a search result.
310
- def load_record
311
- self.class.table[id]
309
+ # def load_record
310
+ # self.class.table[id]
311
+ # end
312
+
313
+ def attributes
314
+ load_attributes_from_record # populate missing
315
+ @attributes
312
316
  end
313
317
 
314
318
  def inspect
@@ -321,7 +325,9 @@ module Groovy
321
325
  end
322
326
 
323
327
  def [](key)
324
- attributes[key.to_sym]
328
+ k = key.to_sym
329
+ @attributes[k] = get_record_attribute(k) unless @attributes.key?(k)
330
+ @attributes[k]
325
331
  end
326
332
 
327
333
  def []=(key, val)
@@ -382,11 +388,15 @@ module Groovy
382
388
  end
383
389
 
384
390
  def reload
385
- raise RecordNotPersisted if id.nil?
386
- ensure_persisted!
387
- rec = self.class.table[id] # _key
388
- # set_record(rec)
389
- set_attributes_from_record(rec)
391
+ unless new_record?
392
+ # raise RecordNotPersisted if id.nil?
393
+ # ensure_persisted!
394
+ rec = self.class.table[id] # _key
395
+ set_record(rec)
396
+ # load_attributes_from_record
397
+ end
398
+
399
+ @attributes = {}
390
400
  @changes = {}
391
401
  self
392
402
  end
@@ -406,6 +416,7 @@ module Groovy
406
416
  private
407
417
 
408
418
  def get_record_attribute(key)
419
+ return if record.nil?
409
420
  val = record[key]
410
421
  if self.class.schema.time_columns.include?(key)
411
422
  fix_time_value(val)
@@ -423,15 +434,15 @@ module Groovy
423
434
  # record.respond_to?(:_key) ? record._key : id
424
435
  # end
425
436
 
426
- def set_attributes_from_record(rec)
437
+ def load_attributes_from_record
427
438
  self.class.attribute_names.each do |col|
428
- public_send("#{col}=", get_record_attribute(col))
439
+ public_send("#{col}=", get_record_attribute(col)) unless @attributes.key?(col)
429
440
  end
430
441
  end
431
442
 
432
443
  def set_attribute(key, val)
433
- changes[key.to_sym] = [self[key], val] if changes # nil when initializing
434
- attributes[key.to_sym] = val
444
+ changes[key.to_sym] = [self[key], val] if changes # nil before initializing
445
+ @attributes[key.to_sym] = val
435
446
  end
436
447
 
437
448
  def get_ref(name)
@@ -456,7 +467,7 @@ module Groovy
456
467
 
457
468
  def create
458
469
  fire_callbacks(:before_create)
459
- set_record(self.class.insert(attributes, @_key))
470
+ set_record(self.class.insert(@attributes, @_key))
460
471
  fire_callbacks(:after_create)
461
472
  self
462
473
  end
@@ -192,11 +192,16 @@ module Groovy
192
192
  end
193
193
 
194
194
  def [](index)
195
- records[index]
195
+ if r = results[index]
196
+ model.new_from_record(r)
197
+ end
196
198
  end
197
199
 
198
200
  def each(&block)
199
- records.each { |r| block.call(r) }
201
+ # records.each { |r| block.call(r) }
202
+ results.each_with_index do |r, index|
203
+ yield model.new_from_record(r)
204
+ end
200
205
  end
201
206
 
202
207
  def update_all(attrs)
@@ -236,15 +241,15 @@ module Groovy
236
241
  end
237
242
  end
238
243
 
244
+ private
245
+ attr_reader :model, :table, :options, :select_block
246
+
239
247
  def records
240
248
  @records ||= results.map do |r|
241
249
  model.new_from_record(r)
242
250
  end
243
251
  end
244
252
 
245
- private
246
- attr_reader :model, :table, :options, :select_block
247
-
248
253
  def get_last(count = 1)
249
254
  if count > 1
250
255
  records[(size-count)..-1]
@@ -26,6 +26,7 @@ module Groovy
26
26
  def initialize(context, table_name, opts = {})
27
27
  @context, @table_name, @opts = context, table_name, opts || {}
28
28
  @spec, @index_columns = {}, []
29
+ @cache = {}
29
30
  end
30
31
 
31
32
  def table
@@ -33,47 +34,44 @@ module Groovy
33
34
  end
34
35
 
35
36
  def search_table
36
- @search_table ||= context[SEARCH_TABLE_NAME]
37
+ @cache[:search_table] ||= context[SEARCH_TABLE_NAME]
37
38
  end
38
39
 
39
40
  def column_names
40
- get_names table.columns
41
+ @cache[:column_names] ||= get_names(table.columns)
41
42
  end
42
43
 
43
44
  def singular_references
44
- # @singular_references ||=
45
- get_names(table.columns.select(&:reference_column?).reject(&:vector?))
45
+ @cache[:singular_references] ||= get_names(table.columns.select(&:reference_column?).reject(&:vector?))
46
46
  end
47
47
 
48
48
  def plural_references
49
- # @plural_references ||=
50
- get_names(table.columns.select(&:vector?))
49
+ @cache[:plural_references] ||= get_names(table.columns.select(&:vector?))
51
50
  end
52
51
 
53
52
  def attribute_columns
54
- # @attribute_columns ||=
55
- get_names(table.columns.select { |c| c.column? && !c.reference_column? && !c.vector? })
53
+ @cache[:attribute_columns] ||= get_names(table.columns.select { |c| c.column? && !c.reference_column? && !c.vector? })
56
54
  end
57
55
 
58
56
  def time_columns
59
- columns_by_type('Time')
57
+ @cache[:time_columns] ||= columns_by_type('Time')
60
58
  end
61
59
 
62
60
  def integer_columns
63
- columns_by_type('Int32')
61
+ @cache[:integer_columns] ||= columns_by_type('Int32')
64
62
  end
65
63
 
66
64
  def boolean_columns
67
- columns_by_type('Bool')
65
+ @cache[:boolean_columns] ||= columns_by_type('Bool')
68
66
  end
69
67
 
70
68
  def columns_by_type(type)
71
69
  get_names(table.columns.select { |c| c.column? && c.range.name == type })
72
70
  end
73
71
 
74
- # def time_column?(name)
75
- # time_columns.include?(name)
76
- # end
72
+ def reload
73
+ @cache = {}
74
+ end
77
75
 
78
76
  def rebuild!
79
77
  log("Rebuilding!")
@@ -116,6 +114,8 @@ module Groovy
116
114
  @index_columns.each do |col|
117
115
  add_index_on(col)
118
116
  end
117
+
118
+ reload
119
119
  self
120
120
  end
121
121
 
@@ -1,3 +1,3 @@
1
1
  module Groovy
2
- VERSION = '0.4.6'.freeze
2
+ VERSION = '0.4.7'.freeze
3
3
  end
@@ -86,6 +86,28 @@ describe Groovy::Model do
86
86
  end
87
87
 
88
88
  describe '#[]' do
89
+ it 'reads value from record' do
90
+ prod = TestProduct.create!(name: 'A product', price: 100)
91
+ expect(prod.name).to eq('A product')
92
+ expect(prod['name']).to eq('A product')
93
+ expect(prod[:name]).to eq('A product')
94
+
95
+ prod = TestProduct.find(prod.id)
96
+ expect(prod.name).to eq('A product')
97
+ expect(prod['name']).to eq('A product')
98
+ expect(prod[:name]).to eq('A product')
99
+
100
+ prod = TestProduct.new
101
+ expect(prod.name).to eq(nil)
102
+ prod.name = 'Another product'
103
+ expect(prod.name).to eq('Another product')
104
+ prod.reload
105
+ expect(prod.name).to eq(nil)
106
+ prod.name = 'Another product'
107
+ prod.save
108
+ prod.reload
109
+ expect(prod.name).to eq('Another product')
110
+ end
89
111
  end
90
112
 
91
113
  describe '#[]=' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: groovy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.6
4
+ version: 0.4.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomás Pollak