cassilds-model 0.1.7 → 0.1.8

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.
@@ -135,18 +135,18 @@ module CassandraModel
135
135
  res = {}
136
136
  attrs.each do |key, item|
137
137
  res[key] = case item
138
- when Hash
139
- ::JSON.dump(item)
140
- when ::Integer
141
- Cassandra::Long.new(item).bytes
142
- when ::Time
143
- Cassandra::Long.new(item.utc.to_i).bytes
144
- when ::DateTime
145
- Cassandra::Long.new(item.to_time.utc.to_i).bytes
146
- else
147
- # String, Cassandra::Long, Float, Boolean, TimeuuidType
148
- item.to_s
149
- end
138
+ when Hash
139
+ ::JSON.dump(item)
140
+ when ::Integer
141
+ Cassandra::Long.new(item).bytes
142
+ when ::Time
143
+ Cassandra::Long.new(item.utc.to_i).bytes
144
+ when ::DateTime
145
+ Cassandra::Long.new(item.to_time.utc.to_i).bytes
146
+ else
147
+ # String, Cassandra::Long, Float, Boolean, TimeuuidType
148
+ item.to_s
149
+ end
150
150
  end
151
151
  return res
152
152
  end
@@ -180,13 +180,14 @@ module CassandraModel
180
180
  raise RecordNotFound, "Couldn't find #{name} without an ID" if key.blank?
181
181
  options = options || {}
182
182
  readonly = options.delete(:readonly)
183
+ column_names = options.delete(:select) || columns.stringify_keys.keys
183
184
 
184
185
  model = nil
185
186
  benchmark("CassandraModel[#{self.name}].find_one, key: #{key.to_s}") do
186
- ret = connection.get_columns(column_family, key, columns.stringify_keys.keys, options)
187
+ ret = connection.get_columns(column_family, key, column_names, options)
187
188
  unless ret.empty?
188
189
  attrs = {}
189
- columns.stringify_keys.keys.each_with_index do |key, idx|
190
+ column_names.each_with_index do |key, idx|
190
191
  attrs[key] = ret[idx]
191
192
  end
192
193
  model = init_model(key, attrs)
@@ -215,6 +216,7 @@ module CassandraModel
215
216
  readonly = options.delete(:readonly)
216
217
  keyrange = options[:keyrange]
217
218
  keyrange = ''..'' if keyrange.blank?
219
+
218
220
  column_names = []
219
221
  if select.kind_of?(String)
220
222
  column_names = select.split(',').collect! {|n| n.strip!}
@@ -263,6 +265,7 @@ module CassandraModel
263
265
  raise(CassandraModelError, "Columns param cannot be nil") if columns.nil?
264
266
  options = options || {}
265
267
  readonly = options.delete(:readonly)
268
+
266
269
  column_names = []
267
270
  if columns.kind_of?(String)
268
271
  column_names = columns.split(',').collect! {|n| n.strip!}
@@ -277,7 +280,7 @@ module CassandraModel
277
280
  ret = connection.get_columns(column_family, key, column_names, options)
278
281
  unless ret.empty?
279
282
  attrs = {}
280
- columns.each_with_index do |key, idx|
283
+ column_names.each_with_index do |key, idx|
281
284
  attrs[key] = ret[idx]
282
285
  end
283
286
  model = init_model(key, attrs)
@@ -291,14 +294,15 @@ module CassandraModel
291
294
  options = options || {}
292
295
  nofilter = options.delete(:no_filter)
293
296
  readonly = options.delete(:readonly)
297
+ columns_names = options.delete(:select) || columns.stringify_keys.keys
294
298
  keyrange = options[:keyrange]
295
299
  keyrange = ''..'' if keyrange.blank?
296
300
 
297
301
  records = []
298
302
  benchmark("CassandraModel[#{self.name}].find_every, keyrange: #{keyrange.to_s}") do
299
- results = connection.get_range(column_family,
300
- :columns => columns.stringify_keys.keys,
301
- :start => keyrange.first, :finish => keyrange.last, :count => (options[:count] || 100), :key_count => (options[:limit] || 100))
303
+ results = connection.get_range(column_family, :columns => columns_names,
304
+ :start => keyrange.first, :finish => keyrange.last,
305
+ :count => (options[:count] || 100), :key_count => (options[:limit] || 100))
302
306
 
303
307
  (results || {}).each { |key, columns|
304
308
  model = init_model(key, columns)
@@ -337,27 +341,24 @@ module CassandraModel
337
341
  end
338
342
 
339
343
  def find_some(ids, options)
344
+ ids = ids.map {|i| validate_key_type(i)}
345
+
340
346
  options = options || {}
341
- result = find_every(options)
342
-
343
- # Determine expected size from limit and offset, not just ids.size.
344
- expected_size =
345
- if options[:limit] && ids.size > options[:limit]
346
- options[:limit]
347
- else
348
- ids.size
349
- end
347
+ nofilter = options.delete(:no_filter)
348
+ readonly = options.delete(:readonly)
349
+ column_names = options.delete(:select) || columns.stringify_keys.keys
350
350
 
351
- # 11 ids with limit 3, offset 9 should give 2 results.
352
- if options[:offset] && (ids.size - options[:offset] < expected_size)
353
- expected_size = ids.size - options[:offset]
351
+ result = []
352
+ benchmark("CassandraModel[#{self.name}].find_some, keys: #{ids.to_s}") do
353
+ ret = connection.multi_get_columns(column_family, ids, column_names, options)
354
+ (ret || {}).each do |key, value|
355
+ model = init_model(key, value)
356
+ model.readonly! if readonly
357
+ result << model unless nofilter && model.deleted?
358
+ end
354
359
  end
355
360
 
356
- if result.size == expected_size
357
- result
358
- else
359
- raise RecordNotFound, "Couldn't find all #{name.pluralize} with IDs (#{ids.inspect}) (found #{result.size} results, but was looking for #{expected_size})"
360
- end
361
+ result
361
362
  end
362
363
 
363
364
  VALID_FIND_OPTIONS = [ :select, :keyrange, :conditions, :limit, :count, :offset,
@@ -1,3 +1,3 @@
1
1
  class CassandraModel
2
- VERSION = '0.1.7'
2
+ VERSION = '0.1.8'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cassilds-model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-09-26 00:00:00.000000000Z
13
+ date: 2011-10-05 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: shoulda
17
- requirement: &22412180 !ruby/object:Gem::Requirement
17
+ requirement: &22780920 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *22412180
25
+ version_requirements: *22780920
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: cassilds
28
- requirement: &22410620 !ruby/object:Gem::Requirement
28
+ requirement: &22780400 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 0.12.1
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *22410620
36
+ version_requirements: *22780400
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: cassilds-connection-pool
39
- requirement: &22407200 !ruby/object:Gem::Requirement
39
+ requirement: &22779920 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 0.0.2
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *22407200
47
+ version_requirements: *22779920
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: simple_uuid
50
- requirement: &22406500 !ruby/object:Gem::Requirement
50
+ requirement: &22779440 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,7 +55,7 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *22406500
58
+ version_requirements: *22779440
59
59
  description: Cassandra-model allows you to map ColumnFamily/SuperColumnFamily in Cassandra
60
60
  to Ruby objects. It was designed to be fast and simple.
61
61
  email: