active_data_frame 0.1.6 → 0.1.7

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