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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5abd3830f2bf5e0f595989c683cffa60824b5d9f
|
4
|
+
data.tar.gz: 0eb17250b5757d7b3c22d360ef51b03940bf94ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7d82826bdb6bcf86ff7a9121eaba7ef67639d28a92b275f4c2e194ddebf295b6844cc803bf88eabed3e1c9b800355720f29848657a69a967195eb6ac100230c
|
7
|
+
data.tar.gz: e819eb7ff555c71e83fc5a99531276b21bc0d1b36d59cdbd1e616d71cf42212da436db177faef2111502045a8ec7ed85b2d28a1794965912de9f4ee3bde08859
|
data/active_data_frame.gemspec
CHANGED
@@ -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.
|
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.
|
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
|
-
|
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,
|
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
|
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
|
-
|
18
|
-
|
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
|
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 =
|
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]
|
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.
|
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-
|
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.
|
191
|
+
version: 0.1.19
|
192
192
|
- - ">="
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version: 0.1.
|
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.
|
201
|
+
version: 0.1.19
|
202
202
|
- - ">="
|
203
203
|
- !ruby/object:Gem::Version
|
204
|
-
version: 0.1.
|
204
|
+
version: 0.1.19
|
205
205
|
description: An active data frame helper
|
206
206
|
email:
|
207
207
|
- wc@pico.net.nz
|