active_data_frame 0.1.6 → 0.1.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
  SHA1:
3
- metadata.gz: 32b9b56e2515e43f2a30a10a35fd3c86d8de0bdf
4
- data.tar.gz: 875f4e3f4cd9f19d4b0141b4c34a9420a36a06cd
3
+ metadata.gz: 5abd3830f2bf5e0f595989c683cffa60824b5d9f
4
+ data.tar.gz: 0eb17250b5757d7b3c22d360ef51b03940bf94ad
5
5
  SHA512:
6
- metadata.gz: a4558730591012b79e19b19588a925e54b6678fdc279dc457bbad11c08ffdd3b2d4fd55c5d5668e90ed19c1ada58cd9ec73614fbfdbb72765f904ddd5c0509d1
7
- data.tar.gz: f9b7852d03b01c23144c12780b87953e8d89fa039635e3bd2a7eb3029ad9ce0df6ee882c8bc1a2b902b7500a74d861aa8ace3720eb9d4b62b79abc5f40e8f9cc
6
+ metadata.gz: c7d82826bdb6bcf86ff7a9121eaba7ef67639d28a92b275f4c2e194ddebf295b6844cc803bf88eabed3e1c9b800355720f29848657a69a967195eb6ac100230c
7
+ data.tar.gz: e819eb7ff555c71e83fc5a99531276b21bc0d1b36d59cdbd1e616d71cf42212da436db177faef2111502045a8ec7ed85b2d28a1794965912de9f4ee3bde08859
@@ -31,5 +31,5 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency 'minitest-reporters', '~> 1.1', '>= 1.1.0'
32
32
  spec.add_development_dependency 'minitest-around', '0.4.1'
33
33
  spec.add_runtime_dependency 'activerecord', '~> 5.0'
34
- spec.add_runtime_dependency 'rmatrix', '~> 0.1.17', '>=0.1.17'
34
+ spec.add_runtime_dependency 'rmatrix', '~> 0.1.19', '>=0.1.19'
35
35
  end
@@ -22,18 +22,21 @@ module ActiveDataFrame
22
22
  def [](*ranges)
23
23
  result = get(extract_ranges(ranges))
24
24
  if @value_map
25
- result.map{|row| reverse_value_map[row]}
25
+ result.to_type(M::Typecode::OBJECT).mmap{|row| reverse_value_map[row]}.tap do |mapped|
26
+ mapped.row_map = result.row_map
27
+ end
26
28
  else
27
29
  result
28
30
  end
29
31
  end
30
32
 
31
33
  def []=(from, values)
32
- values = Array(values).flatten.map(&@value_map.method(:[])) if @value_map
34
+
33
35
  from = column_map[from] if column_map && column_map[from]
34
36
  if values.kind_of?(Hash)
35
37
  values = verify_and_cleanse_hash_values(values)
36
38
  else
39
+ values = Array(values).flatten.map(&@value_map.method(:[])) if @value_map
37
40
  values = M[values, typecode: block_type::TYPECODE].to_a.flatten
38
41
  end
39
42
  set(from, values)
@@ -42,6 +45,7 @@ module ActiveDataFrame
42
45
  def verify_and_cleanse_hash_values(map)
43
46
  length = nil
44
47
  map.transform_values do |values|
48
+ values = Array(values).flatten.map(&@value_map.method(:[])) if @value_map
45
49
  cleansed = M[values, typecode: block_type::TYPECODE].to_a.flatten
46
50
  raise "All streams provided via a hash must be of the same length" if length && length != cleansed.length
47
51
  length ||= cleansed.length
@@ -51,7 +55,7 @@ module ActiveDataFrame
51
55
 
52
56
  def clear(*ranges)
53
57
  extract_ranges(ranges).each do |r|
54
- set(r.first, M.blank(columns: r.last - r.first, typecode: block_type::TYPECODE), trim: true)
58
+ set(r.first, V.blank(columns: r.last - r.first, typecode: block_type::TYPECODE).to_a, trim: true)
55
59
  end
56
60
  end
57
61
 
@@ -129,7 +129,7 @@ module ActiveDataFrame
129
129
  #
130
130
  ids = existing_slice.map {|_, (_, id)| id}
131
131
  updates = columns.map.with_index do |column, column_idx|
132
- [column, "CASE period_index\n#{existing_slice.map{|period_index, (values, _)| "WHEN #{period_index} then #{values[column_idx]}"}.join("\n")} \nEND\n"]
132
+ [column, "CASE \n#{existing_slice.map{|period_index, (values, df_id)| "WHEN period_index=#{period_index} AND data_frame_id=#{df_id} then #{values[column_idx]}" }.join("\n")} \nEND\n"]
133
133
  end.to_h
134
134
  update_statement = updates.map{|cl, up| "#{cl} = #{up}" }.join(', ')
135
135
  Database.execute(<<-SQL
@@ -14,8 +14,11 @@ module ActiveDataFrame
14
14
 
15
15
  def self.set_all(scope, block_type, data_frame_type, from, values, trim: false)
16
16
  if trim || ActiveRecord::Base.connection_config[:adapter] === 'mysql2'
17
- scope.each do |instance|
18
- Row.new(block_type, data_frame_type, instance).patch(from, values.kind_of?(Hash) ? values[instance.id] : values)
17
+ case values
18
+ when Hash then scope.where(id: values.keys)
19
+ .each{|instance| Row.new(block_type, data_frame_type, instance)
20
+ .patch(from, values[instance.id]) }
21
+ else scope.each{|instance| Row.new(block_type, data_frame_type, instance).patch(from, values) }
19
22
  end
20
23
  else
21
24
  upsert_all(scope, block_type, data_frame_type, from, values)
@@ -111,7 +114,7 @@ module ActiveDataFrame
111
114
  existing = self.class.suppress_logs{
112
115
  blocks_between(all_bounds).pluck(:period_index, *block_type::COLUMNS).map{|pi, *values| [pi, values]}.to_h
113
116
  }
114
- result = M.blank(typecode: block_type::TYPECODE, columns: all_bounds.map(&:length).sum)
117
+ result = V.blank(typecode: block_type::TYPECODE, columns: all_bounds.map(&:length).sum)
115
118
 
116
119
  iterate_bounds(all_bounds) do |index, left, right, cursor, size|
117
120
  if block = existing[index]
@@ -220,7 +220,7 @@ module ActiveDataFrame
220
220
  M[values, typecode: block_type::TYPECODE].mask{|x|
221
221
  index += 1
222
222
  !all_bounds.any?{|b| (b.from.position..b.to.position).include?(index) } || filter[x, args.values.first ]
223
- }.where.to_a.map{|v| block_type::BLOCK_SIZE * period_index + v}.to_a
223
+ }.where.to_a.flatten.map{|v| block_type::BLOCK_SIZE * period_index + v}.to_a
224
224
  end
225
225
 
226
226
  if column_map
@@ -238,7 +238,7 @@ module ActiveDataFrame
238
238
  case_map = build_case_map(all_bounds)
239
239
  existing = blocks_between(all_bounds).group(:period_index).pluck(:period_index, *column_cases(case_map, agg))
240
240
  .map{|pi, *values| [pi, values]}.to_h
241
- result = M.blank(columns: all_bounds.map(&:length).sum, typecode: block_type::TYPECODE)
241
+ result = V.blank(columns: all_bounds.map(&:length).sum, typecode: block_type::TYPECODE)
242
242
 
243
243
  iterate_bounds(all_bounds) do |index, left, right, cursor, size|
244
244
  if block = existing[index]
@@ -1,3 +1,3 @@
1
1
  module ActiveDataFrame
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_data_frame
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wouter Coppieters
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-19 00:00:00.000000000 Z
11
+ date: 2018-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -188,20 +188,20 @@ dependencies:
188
188
  requirements:
189
189
  - - "~>"
190
190
  - !ruby/object:Gem::Version
191
- version: 0.1.17
191
+ version: 0.1.19
192
192
  - - ">="
193
193
  - !ruby/object:Gem::Version
194
- version: 0.1.17
194
+ version: 0.1.19
195
195
  type: :runtime
196
196
  prerelease: false
197
197
  version_requirements: !ruby/object:Gem::Requirement
198
198
  requirements:
199
199
  - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: 0.1.17
201
+ version: 0.1.19
202
202
  - - ">="
203
203
  - !ruby/object:Gem::Version
204
- version: 0.1.17
204
+ version: 0.1.19
205
205
  description: An active data frame helper
206
206
  email:
207
207
  - wc@pico.net.nz