bmg 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/bmg/reader/excel.rb +1 -1
- data/lib/bmg/version.rb +1 -1
- metadata +2 -14
- data/spec/unit/operator/test_allbut.rb +0 -18
- data/spec/unit/operator/test_autosummarize.rb +0 -183
- data/spec/unit/operator/test_autowrap.rb +0 -88
- data/spec/unit/operator/test_project.rb +0 -18
- data/spec/unit/operator/test_rename.rb +0 -13
- data/spec/unit/reader/example.csv +0 -3
- data/spec/unit/reader/example.numbers +0 -0
- data/spec/unit/reader/example.xlsx +0 -0
- data/spec/unit/reader/test_csv.rb +0 -17
- data/spec/unit/reader/test_excel.rb +0 -17
- data/spec/unit/spec_helper.rb +0 -11
- data/spec/unit/test_relation.rb +0 -132
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6fe9a06a0c6fbf5f5f0523b3ade5d59ac077c3b
|
4
|
+
data.tar.gz: 3d0dd15b128fe42a6eb603b922de1c8889d266c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e608c650a868dc5d4870a6847675dbae8742525a53e255732c6634c85b911f31528d7a57cbd580eb74c3f85610590abfb0e792532a71dee23cf61b20e15aa713
|
7
|
+
data.tar.gz: 1b082e58ffce43e55e85ff36753b0d2d5e579e947a44010dd85a839e82ca4f6a371cb882ae32bc6b34e159936e0f21e1e8f8e944ef4ada4d43ff92ee48fa9b3d
|
data/lib/bmg/reader/excel.rb
CHANGED
data/lib/bmg/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bmg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bernard Lambeau
|
@@ -89,18 +89,6 @@ files:
|
|
89
89
|
- lib/bmg/reader/excel.rb
|
90
90
|
- lib/bmg/relation.rb
|
91
91
|
- lib/bmg/version.rb
|
92
|
-
- spec/unit/operator/test_allbut.rb
|
93
|
-
- spec/unit/operator/test_autosummarize.rb
|
94
|
-
- spec/unit/operator/test_autowrap.rb
|
95
|
-
- spec/unit/operator/test_project.rb
|
96
|
-
- spec/unit/operator/test_rename.rb
|
97
|
-
- spec/unit/reader/example.csv
|
98
|
-
- spec/unit/reader/example.numbers
|
99
|
-
- spec/unit/reader/example.xlsx
|
100
|
-
- spec/unit/reader/test_csv.rb
|
101
|
-
- spec/unit/reader/test_excel.rb
|
102
|
-
- spec/unit/spec_helper.rb
|
103
|
-
- spec/unit/test_relation.rb
|
104
92
|
- tasks/gem.rake
|
105
93
|
- tasks/test.rake
|
106
94
|
homepage: http://github.com/enspirit/bmg
|
@@ -123,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
111
|
version: '0'
|
124
112
|
requirements: []
|
125
113
|
rubyforge_project:
|
126
|
-
rubygems_version: 2.5.
|
114
|
+
rubygems_version: 2.5.2
|
127
115
|
signing_key:
|
128
116
|
specification_version: 4
|
129
117
|
summary: Bmg is Alf's successor.
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
module Bmg
|
3
|
-
module Operator
|
4
|
-
describe Allbut do
|
5
|
-
|
6
|
-
it 'works' do
|
7
|
-
allbut = Allbut.new [{ a: 1, b: 2 }], [:b]
|
8
|
-
expect(allbut.to_a).to eql([{ a: 1 }])
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'removes duplicates' do
|
12
|
-
allbut = Allbut.new [{ a: 1, b: 2 }, { a: 1, b: 3 }], [:b]
|
13
|
-
expect(allbut.to_a).to eql([{ a: 1 }])
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,183 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
module Bmg
|
3
|
-
module Operator
|
4
|
-
describe Autosummarize do
|
5
|
-
|
6
|
-
context 'with empty by and no sums' do
|
7
|
-
let(:by) { [] }
|
8
|
-
let(:sums){ {} }
|
9
|
-
|
10
|
-
it 'filters same tuples' do
|
11
|
-
autosummarize = Autosummarize.new [
|
12
|
-
{ a: 1 },
|
13
|
-
{ a: 1 }
|
14
|
-
], by, sums
|
15
|
-
expect(autosummarize.to_a).to eql([{ a: 1 }])
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context 'with a determinant and no sums' do
|
20
|
-
let(:by) { [:a] }
|
21
|
-
let(:sums){ {} }
|
22
|
-
|
23
|
-
it 'applies Same to every unknown dependent' do
|
24
|
-
autosummarize = Autosummarize.new [
|
25
|
-
{ a: 1, b: 2 },
|
26
|
-
{ a: 1, b: 2 },
|
27
|
-
{ a: 2, b: 2 },
|
28
|
-
], by, sums
|
29
|
-
expect(autosummarize.to_a).to eql([
|
30
|
-
{ a: 1, b: 2 },
|
31
|
-
{ a: 2, b: 2 }
|
32
|
-
])
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context 'with a by and a DistinctList without comparator' do
|
37
|
-
let(:by) { [ :id ] }
|
38
|
-
let(:sums){ { :a => Autosummarize::DistinctList.new } }
|
39
|
-
|
40
|
-
it 'groups as expected' do
|
41
|
-
autosummarize = Autosummarize.new [
|
42
|
-
{ id: 1, a: 1 },
|
43
|
-
{ id: 1, a: 2 },
|
44
|
-
{ id: 2, a: 1 },
|
45
|
-
{ id: 1, a: 2 }
|
46
|
-
], by, sums
|
47
|
-
expect(autosummarize.to_a).to eql([
|
48
|
-
{ id: 1, a: [1, 2] },
|
49
|
-
{ id: 2, a: [1] },
|
50
|
-
])
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'ignores nulls' do
|
54
|
-
autosummarize = Autosummarize.new [
|
55
|
-
{ id: 1, a: 1 },
|
56
|
-
{ id: 1, a: nil }
|
57
|
-
], by, sums
|
58
|
-
expect(autosummarize.to_a).to eql([
|
59
|
-
{ id: 1, a: [1] },
|
60
|
-
])
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'can be used to mimic the Group operator' do
|
64
|
-
autosummarize = Autosummarize.new [
|
65
|
-
{ id: 1, a: { x: 1, y: 2 } },
|
66
|
-
{ id: 1, a: { x: 2, y: 2 } },
|
67
|
-
{ id: 2, a: { x: 1, y: 2 } },
|
68
|
-
{ id: 1, a: { x: 1, y: 2 } }
|
69
|
-
], by, sums
|
70
|
-
expect(autosummarize.to_a).to eql([
|
71
|
-
{ id: 1, a: [{ x: 1, y: 2 }, { x: 2, y: 2 }] },
|
72
|
-
{ id: 2, a: [{ x: 1, y: 2 }] },
|
73
|
-
])
|
74
|
-
end
|
75
|
-
|
76
|
-
it 'supports the :group shortcut' do
|
77
|
-
autosummarize = Autosummarize.new [
|
78
|
-
{ id: 1, a: 1 },
|
79
|
-
{ id: 1, a: 2 },
|
80
|
-
{ id: 2, a: 1 },
|
81
|
-
{ id: 1, a: 2 }
|
82
|
-
], by, { :a => :group }
|
83
|
-
expect(autosummarize.to_a).to eql([
|
84
|
-
{ id: 1, a: [1, 2] },
|
85
|
-
{ id: 2, a: [1] },
|
86
|
-
])
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
context 'with a by and a DistinctList with a comparator' do
|
92
|
-
let(:by) { [ :id ] }
|
93
|
-
let(:sums){ { :a => Autosummarize::DistinctList.new{|x,y| y <=> x } } }
|
94
|
-
|
95
|
-
it 'groups as expected' do
|
96
|
-
autosummarize = Autosummarize.new [
|
97
|
-
{ id: 1, a: 1 },
|
98
|
-
{ id: 1, a: 2 },
|
99
|
-
{ id: 2, a: 1 },
|
100
|
-
{ id: 1, a: 2 }
|
101
|
-
], by, sums
|
102
|
-
expect(autosummarize.to_a).to eql([
|
103
|
-
{ id: 1, a: [2, 1] },
|
104
|
-
{ id: 2, a: [1] },
|
105
|
-
])
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
context 'with a YByX ignoring nulls' do
|
110
|
-
let(:by) { [ :id ] }
|
111
|
-
let(:sums){ { :a => Autosummarize::YByX.new(:y, :x) } }
|
112
|
-
|
113
|
-
it 'groups as expected and ignores nulls' do
|
114
|
-
autosummarize = Autosummarize.new [
|
115
|
-
{ id: 1, a: { x: "foo", y: "bar" } },
|
116
|
-
{ id: 1, a: { x: "foo", y: "baz" } },
|
117
|
-
{ id: 1, a: { x: "gri", y: "gra" } },
|
118
|
-
{ id: 1, a: { x: "gro", y: nil } },
|
119
|
-
{ id: 1, a: { x: nil, y: "gru" } },
|
120
|
-
], by, sums
|
121
|
-
expect(autosummarize.to_a).to eql([
|
122
|
-
{ id: 1, a: { "foo" => "baz", "gri" => "gra" } }
|
123
|
-
])
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
context 'with a YByX preserving nulls' do
|
128
|
-
let(:by) { [ :id ] }
|
129
|
-
let(:sums){ { :a => Autosummarize::YByX.new(:y, :x, true) } }
|
130
|
-
|
131
|
-
it 'groups as expected and ignores nulls' do
|
132
|
-
autosummarize = Autosummarize.new [
|
133
|
-
{ id: 1, a: { x: "foo", y: "bar" } },
|
134
|
-
{ id: 1, a: { x: "foo", y: "baz" } },
|
135
|
-
{ id: 1, a: { x: "gri", y: "gra" } },
|
136
|
-
{ id: 1, a: { x: "gro", y: nil } },
|
137
|
-
{ id: 1, a: { x: nil, y: "gru" } },
|
138
|
-
], by, sums
|
139
|
-
expect(autosummarize.to_a).to eql([
|
140
|
-
{ id: 1, a: { "foo" => "baz", "gri" => "gra", "gro" => nil } }
|
141
|
-
])
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
context 'with a by and a YsByX and no sorter' do
|
146
|
-
let(:by) { [ :id ] }
|
147
|
-
let(:sums){ { :a => Autosummarize::YsByX.new(:y, :x) } }
|
148
|
-
|
149
|
-
it 'filters same tuples' do
|
150
|
-
autosummarize = Autosummarize.new [
|
151
|
-
{ id: 1, a: { x: 1, y: 3 } },
|
152
|
-
{ id: 1, a: { x: 1, y: 2 } },
|
153
|
-
{ id: 2, a: { x: 1, y: 1 } },
|
154
|
-
{ id: 1, a: { x: 2, y: 7 } }
|
155
|
-
], by, sums
|
156
|
-
expect(autosummarize.to_a).to eql([
|
157
|
-
{ id: 1, a: { 1 => [3, 2], 2 => [7] } },
|
158
|
-
{ id: 2, a: { 1 => [1] } }
|
159
|
-
])
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
context 'with a by and a YsByX and a sorter' do
|
164
|
-
let(:by) { [ :id ] }
|
165
|
-
let(:sums){ { :a => Autosummarize::YsByX.new(:y, :x){|u,v| u[:y] <=> v[:y] } } }
|
166
|
-
|
167
|
-
it 'filters same tuples' do
|
168
|
-
autosummarize = Autosummarize.new [
|
169
|
-
{ id: 1, a: { x: 1, y: 3 } },
|
170
|
-
{ id: 1, a: { x: 1, y: 2 } },
|
171
|
-
{ id: 2, a: { x: 1, y: 1 } },
|
172
|
-
{ id: 1, a: { x: 2, y: 7 } }
|
173
|
-
], by, sums
|
174
|
-
expect(autosummarize.to_a).to eql([
|
175
|
-
{ id: 1, a: { 1 => [2, 3], 2 => [7] } },
|
176
|
-
{ id: 2, a: { 1 => [1] } }
|
177
|
-
])
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
end
|
182
|
-
end
|
183
|
-
end
|
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
module Bmg
|
3
|
-
module Operator
|
4
|
-
describe 'Autowrap' do
|
5
|
-
|
6
|
-
context 'when called in default mode' do
|
7
|
-
|
8
|
-
it 'works as an array by default' do
|
9
|
-
autowrap = Autowrap.new [{ a: 1, b: 2 }]
|
10
|
-
expect(autowrap.to_a).to eql([{ a: 1, b: 2 }])
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'wrap levels 1' do
|
14
|
-
autowrap = Autowrap.new [{ a: 1, b_x: 2, b_y: 3 }]
|
15
|
-
expect(autowrap.to_a).to eql([{ a: 1, b: { x: 2, y: 3 } }])
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'wrap levels 2' do
|
19
|
-
autowrap = Autowrap.new [{ a: 1, b_x_u: 2, b_y_v: 3, b_y_w: 4 }]
|
20
|
-
expect(autowrap.to_a).to eql([{ a: 1, b: { x: { u: 2 }, y: { v: 3, w: 4 } } }])
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'keeps LEFT JOIN nils unchanged' do
|
24
|
-
autowrap = Autowrap.new [{ a: 1, b_x: nil, b_y: nil }]
|
25
|
-
expect(autowrap.to_a).to eql([{ a: 1, b: { x: nil, y: nil } }])
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
context 'when specifying the separator to use' do
|
31
|
-
|
32
|
-
it 'works as expected' do
|
33
|
-
autowrap = Autowrap.new [{ :a => 1, :"b.x.u" => 2, "b.y.v" => 3, "b.y.w" => 4 }], split: '.'
|
34
|
-
expect(autowrap.to_a).to eql([{ a: 1, b: { x: { u: 2 }, y: { v: 3, w: 4 } } }])
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
context 'when called with a Proc post processor' do
|
40
|
-
|
41
|
-
let(:post) {
|
42
|
-
->(t,_){ t.delete(:user) if t[:user][:id].nil?; t }
|
43
|
-
}
|
44
|
-
|
45
|
-
it 'wrap levels 2' do
|
46
|
-
aw = Autowrap.new [
|
47
|
-
{ user_id: 1, user_name: "foo", foo: "bar" },
|
48
|
-
{ user_id: nil, user_name: nil, foo: "baz" }
|
49
|
-
], postprocessor: post
|
50
|
-
expected = [
|
51
|
-
{ user: {id: 1, name: "foo"}, foo: "bar" },
|
52
|
-
{ foo: "baz" }
|
53
|
-
]
|
54
|
-
expect(aw.to_a).to eql(expected)
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
context 'when called with :delete post processor' do
|
60
|
-
|
61
|
-
it 'automatically removes the results of nil LEFT JOINs' do
|
62
|
-
autowrap = Autowrap.new [{ a: 1, b_x: nil, b_y: nil }], postprocessor: :delete
|
63
|
-
expect(autowrap.to_a).to eql([{ a: 1 }])
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
context 'when called with :nil post processor' do
|
69
|
-
|
70
|
-
it 'sets the results of nil LEFT JOINs to nil' do
|
71
|
-
autowrap = Autowrap.new [{ a: 1, b_x: nil, b_y: nil }], postprocessor: :nil
|
72
|
-
expect(autowrap.to_a).to eql([{ a: 1, b: nil }])
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
context 'when called with a Hash post processor' do
|
78
|
-
|
79
|
-
it 'sets the results of nil LEFT JOINs to nil' do
|
80
|
-
autowrap = Autowrap.new [{ a: 1, b_x: nil, b_y: nil, c_x: nil, c_y: nil, d_x: nil }], postprocessor: { b: :nil, c: :delete }
|
81
|
-
expect(autowrap.to_a).to eql([{ a: 1, b: nil, d: { x: nil } }])
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
85
|
-
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
module Bmg
|
3
|
-
module Operator
|
4
|
-
describe Project do
|
5
|
-
|
6
|
-
it 'works' do
|
7
|
-
allbut = Project.new [{ a: 1, b: 2 }], [:b]
|
8
|
-
expect(allbut.to_a).to eql([{ b: 2 }])
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'removes duplicates' do
|
12
|
-
allbut = Project.new [{ a: 1, b: 2 }, { a: 2, b: 2 }], [:b]
|
13
|
-
expect(allbut.to_a).to eql([{ b: 2 }])
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
Binary file
|
Binary file
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
module Bmg
|
3
|
-
module Reader
|
4
|
-
describe Csv do
|
5
|
-
|
6
|
-
it 'works' do
|
7
|
-
file = Path.dir/("example.csv")
|
8
|
-
csv = Csv.new(file)
|
9
|
-
expect(csv.to_a).to eql([
|
10
|
-
{id: "1", name: "Bernard Lambeau"},
|
11
|
-
{id: "2", name: "Yoann;Guyot"}
|
12
|
-
])
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
module Bmg
|
3
|
-
module Reader
|
4
|
-
describe Csv do
|
5
|
-
|
6
|
-
it 'works' do
|
7
|
-
file = Path.dir/("example.xlsx")
|
8
|
-
xlsx = Excel.new(file, skip: 1)
|
9
|
-
expect(xlsx.to_a).to eql([
|
10
|
-
{id: 1, name: "Bernard Lambeau"},
|
11
|
-
{id: 2, name: "Yoann Guyot"}
|
12
|
-
])
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/spec/unit/spec_helper.rb
DELETED
data/spec/unit/test_relation.rb
DELETED
@@ -1,132 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
module Bmg
|
3
|
-
describe Relation do
|
4
|
-
|
5
|
-
shared_examples_for "an operator method" do
|
6
|
-
|
7
|
-
it 'returns a relation' do
|
8
|
-
expect(subject).to be_a(Relation)
|
9
|
-
end
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
describe 'allbut' do
|
14
|
-
let(:relation) {
|
15
|
-
Relation.new([
|
16
|
-
{ a: 1, b: 2 },
|
17
|
-
{ a: 1, b: 4 },
|
18
|
-
{ a: 3, b: 4 }
|
19
|
-
])
|
20
|
-
}
|
21
|
-
|
22
|
-
subject {
|
23
|
-
relation.allbut([:b])
|
24
|
-
}
|
25
|
-
|
26
|
-
it_behaves_like "an operator method"
|
27
|
-
|
28
|
-
it 'returns the exected result' do
|
29
|
-
expect(subject.to_a).to eql([
|
30
|
-
{ a: 1 },
|
31
|
-
{ a: 3 }
|
32
|
-
])
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe 'autosummarize' do
|
37
|
-
let(:relation) {
|
38
|
-
Relation.new([
|
39
|
-
{ a: 1, x: 2 },
|
40
|
-
{ a: 1, x: 4 }
|
41
|
-
])
|
42
|
-
}
|
43
|
-
|
44
|
-
subject {
|
45
|
-
relation.autosummarize([:a], x: Operator::Autosummarize::DistinctList.new)
|
46
|
-
}
|
47
|
-
|
48
|
-
it_behaves_like "an operator method"
|
49
|
-
|
50
|
-
it 'returns the exected result' do
|
51
|
-
expect(subject.to_a).to eql([
|
52
|
-
{ a: 1, x: [2, 4] }
|
53
|
-
])
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
describe 'autowrap' do
|
58
|
-
let(:relation) {
|
59
|
-
Relation.new([
|
60
|
-
{ a: 1, b_x: 2, b_y: 3 },
|
61
|
-
{ a: 2, b_x: 4, b_y: 1 }
|
62
|
-
])
|
63
|
-
}
|
64
|
-
|
65
|
-
subject {
|
66
|
-
relation.autowrap
|
67
|
-
}
|
68
|
-
|
69
|
-
it_behaves_like "an operator method"
|
70
|
-
|
71
|
-
it 'returns the exected result' do
|
72
|
-
expect(subject.to_a).to eql([
|
73
|
-
{ a: 1, b: { x: 2, y: 3 } },
|
74
|
-
{ a: 2, b: { x: 4, y: 1 } }
|
75
|
-
])
|
76
|
-
end
|
77
|
-
|
78
|
-
it 'passes the options' do
|
79
|
-
expect(relation.autowrap(split: ".").to_a).to eql([
|
80
|
-
{ a: 1, b_x: 2, b_y: 3 },
|
81
|
-
{ a: 2, b_x: 4, b_y: 1 }
|
82
|
-
])
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
describe 'project' do
|
87
|
-
let(:relation) {
|
88
|
-
Relation.new([
|
89
|
-
{ a: 1, b: 2 },
|
90
|
-
{ a: 1, b: 4 },
|
91
|
-
{ a: 3, b: 4 }
|
92
|
-
])
|
93
|
-
}
|
94
|
-
|
95
|
-
subject {
|
96
|
-
relation.project([:b])
|
97
|
-
}
|
98
|
-
|
99
|
-
it_behaves_like "an operator method"
|
100
|
-
|
101
|
-
it 'returns the exected result' do
|
102
|
-
expect(subject.to_a).to eql([
|
103
|
-
{ b: 2 },
|
104
|
-
{ b: 4 }
|
105
|
-
])
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
describe 'rename' do
|
110
|
-
let(:relation) {
|
111
|
-
Relation.new([
|
112
|
-
{ a: 1, b: 2 },
|
113
|
-
{ a: 2, b: 4 }
|
114
|
-
])
|
115
|
-
}
|
116
|
-
|
117
|
-
subject {
|
118
|
-
relation.rename(b: :c)
|
119
|
-
}
|
120
|
-
|
121
|
-
it_behaves_like "an operator method"
|
122
|
-
|
123
|
-
it 'returns the exected result' do
|
124
|
-
expect(subject.to_a).to eql([
|
125
|
-
{ a: 1, c: 2 },
|
126
|
-
{ a: 2, c: 4 }
|
127
|
-
])
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
end # describe Relation
|
132
|
-
end # module Bmg
|