flatten_record 1.0.1 → 1.0.2
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 +4 -4
- data/lib/flatten_record/meta/associated_attr.rb +4 -4
- data/lib/flatten_record/meta/belongs_to.rb +9 -0
- data/lib/flatten_record/meta/column.rb +5 -19
- data/lib/flatten_record/meta/compute_column.rb +4 -7
- data/lib/flatten_record/meta/id_column.rb +2 -3
- data/lib/flatten_record/meta/method_column.rb +4 -6
- data/lib/flatten_record/meta/node.rb +28 -11
- data/lib/flatten_record/meta/normalized_attr.rb +22 -11
- data/lib/flatten_record/version.rb +1 -1
- data/spec/dummy/log/test.log +17508 -0
- data/spec/lib/flatten_record/flattener/denormalize_spec.rb +140 -0
- data/spec/lib/flatten_record/flattener_spec.rb +0 -40
- metadata +4 -2
@@ -0,0 +1,140 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'support/flattener'
|
3
|
+
|
4
|
+
describe FlattenRecord::Flattener do
|
5
|
+
|
6
|
+
context 'when included' do
|
7
|
+
before { FlattenRecord::Flattener::Test.setup_models }
|
8
|
+
after { FlattenRecord::Flattener::Test.delete_models }
|
9
|
+
|
10
|
+
it 'should respond to the helper methods' do
|
11
|
+
expect(Denormalized).to respond_to(:denormalize)
|
12
|
+
expect(Denormalized).to respond_to(:create_with)
|
13
|
+
expect(Denormalized).to respond_to(:update_with)
|
14
|
+
expect(Denormalized).to respond_to(:destroy_with)
|
15
|
+
expect(Denormalized).to respond_to(:find_with)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context ".denormalize" do
|
20
|
+
before { FlattenRecord::Flattener::Test.setup_models }
|
21
|
+
after { FlattenRecord::Flattener::Test.delete_models }
|
22
|
+
|
23
|
+
context 'when denormalization options is defined' do
|
24
|
+
let(:klass) do
|
25
|
+
Order.class_eval { def grand_total;50;end }
|
26
|
+
|
27
|
+
Denormalized.class_eval do
|
28
|
+
denormalize :order, {
|
29
|
+
compute: [:total_in_usd],
|
30
|
+
methods: [:grand_total],
|
31
|
+
include: {
|
32
|
+
customer: {
|
33
|
+
include: {
|
34
|
+
children: {
|
35
|
+
only: [:name],
|
36
|
+
include: {
|
37
|
+
cats: {
|
38
|
+
only: [:name],
|
39
|
+
include: {
|
40
|
+
owner: { class_name: 'Child', only: [:name] }
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
},
|
48
|
+
}
|
49
|
+
def compute_total_in_usd(item);1000;end
|
50
|
+
end
|
51
|
+
|
52
|
+
Denormalized
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should construct columns' do
|
56
|
+
meta = klass.flattener_meta
|
57
|
+
expect(meta).to_not be_nil
|
58
|
+
|
59
|
+
expect(meta.all_columns).to_not be_empty
|
60
|
+
column_names = meta.all_columns.map(&:name)
|
61
|
+
|
62
|
+
expect(column_names.count).to eq(12)
|
63
|
+
|
64
|
+
expect(column_names).to be_include("order_id")
|
65
|
+
expect(column_names).to be_include("total")
|
66
|
+
expect(column_names).to be_include("grand_total")
|
67
|
+
expect(column_names).to be_include("total_in_usd")
|
68
|
+
expect(column_names).to be_include("customer_id")
|
69
|
+
expect(column_names).to be_include("customer_name")
|
70
|
+
expect(column_names).to be_include("customer_child_id")
|
71
|
+
expect(column_names).to be_include("customer_child_name")
|
72
|
+
expect(column_names).to be_include("customer_child_cat_id")
|
73
|
+
expect(column_names).to be_include("customer_child_cat_name")
|
74
|
+
expect(column_names).to be_include("customer_child_cat_owner_child_id")
|
75
|
+
expect(column_names).to be_include("customer_child_cat_owner_child_name")
|
76
|
+
end
|
77
|
+
end #/context
|
78
|
+
|
79
|
+
context 'when :prefix is defined' do
|
80
|
+
let(:klass) do
|
81
|
+
Order.class_eval { def grand_total;50;end }
|
82
|
+
|
83
|
+
Denormalized.class_eval do
|
84
|
+
denormalize :order, {
|
85
|
+
compute: [:total_in_usd],
|
86
|
+
methods: [:grand_total],
|
87
|
+
include: {
|
88
|
+
customer: {
|
89
|
+
prefix: 'cs_',
|
90
|
+
include: {
|
91
|
+
children: {
|
92
|
+
only: [:name],
|
93
|
+
include: {
|
94
|
+
cats: {
|
95
|
+
only: [:name],
|
96
|
+
include: {
|
97
|
+
owner: { class_name: 'Child', only: [:name] }
|
98
|
+
}
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
102
|
+
}
|
103
|
+
}
|
104
|
+
},
|
105
|
+
}
|
106
|
+
def compute_total_in_usd(item);1000;end
|
107
|
+
end
|
108
|
+
|
109
|
+
Denormalized
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'should contruct columns with prefix' do
|
113
|
+
meta = klass.flattener_meta
|
114
|
+
meta = klass.flattener_meta
|
115
|
+
expect(meta).to_not be_nil
|
116
|
+
|
117
|
+
expect(meta.all_columns).to_not be_empty
|
118
|
+
column_names = meta.all_columns.map(&:name)
|
119
|
+
|
120
|
+
expect(column_names.count).to eq(12)
|
121
|
+
|
122
|
+
expect(column_names).to be_include("order_id")
|
123
|
+
expect(column_names).to be_include("total")
|
124
|
+
expect(column_names).to be_include("grand_total")
|
125
|
+
expect(column_names).to be_include("total_in_usd")
|
126
|
+
expect(column_names).to be_include("cs_id")
|
127
|
+
expect(column_names).to be_include("cs_name")
|
128
|
+
expect(column_names).to be_include("cs_child_id")
|
129
|
+
expect(column_names).to be_include("cs_child_name")
|
130
|
+
expect(column_names).to be_include("cs_child_cat_id")
|
131
|
+
expect(column_names).to be_include("cs_child_cat_name")
|
132
|
+
expect(column_names).to be_include("cs_child_cat_owner_child_id")
|
133
|
+
expect(column_names).to be_include("cs_child_cat_owner_child_name")
|
134
|
+
|
135
|
+
end
|
136
|
+
end #/context
|
137
|
+
|
138
|
+
|
139
|
+
end
|
140
|
+
end
|
@@ -72,46 +72,6 @@ describe FlattenRecord::Flattener do
|
|
72
72
|
order
|
73
73
|
end
|
74
74
|
|
75
|
-
|
76
|
-
it 'should build meta correctly' do
|
77
|
-
meta = klass.flattener_meta
|
78
|
-
expect(meta).to_not be_nil
|
79
|
-
|
80
|
-
expect(meta.all_columns).to_not be_empty
|
81
|
-
column_names = meta.all_columns.map(&:name)
|
82
|
-
|
83
|
-
expect(column_names.count).to eq(12)
|
84
|
-
|
85
|
-
expect(column_names).to be_include("order_id")
|
86
|
-
expect(column_names).to be_include("total")
|
87
|
-
expect(column_names).to be_include("customer_id")
|
88
|
-
expect(column_names).to be_include("grand_total")
|
89
|
-
expect(column_names).to be_include("total_in_usd")
|
90
|
-
expect(column_names).to be_include("customer_id")
|
91
|
-
expect(column_names).to be_include("customer_child_id")
|
92
|
-
expect(column_names).to be_include("customer_child_name")
|
93
|
-
expect(column_names).to be_include("customer_child_cat_id")
|
94
|
-
expect(column_names).to be_include("customer_child_cat_name")
|
95
|
-
expect(column_names).to be_include("customer_child_cat_owner_child_id")
|
96
|
-
expect(column_names).to be_include("customer_child_cat_owner_child_name")
|
97
|
-
end
|
98
|
-
|
99
|
-
context '.create_with' do
|
100
|
-
it 'should be able to create denormalized record' do
|
101
|
-
denormalized = klass.create_with(order_with_customer_with_one_child)
|
102
|
-
expect(denormalized.count).to eq(1)
|
103
|
-
|
104
|
-
record = denormalized.first
|
105
|
-
|
106
|
-
expect(record.total).to eq(100)
|
107
|
-
expect(record.grand_total).to eq(50)
|
108
|
-
expect(record.total_in_usd).to eq(1000)
|
109
|
-
expect(record.customer_name).to eq("Alvin")
|
110
|
-
expect(record.customer_child_name).to eq("Ethan")
|
111
|
-
expect(record.customer_child_cat_name).to eq("Meow")
|
112
|
-
end
|
113
|
-
end #/.create_with
|
114
|
-
|
115
75
|
context '.find_with' do
|
116
76
|
it 'should be able to find related records' do
|
117
77
|
denormalized = klass.create_with(order_with_customer_with_one_child)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flatten_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alvin S.J. Ng
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -122,6 +122,7 @@ files:
|
|
122
122
|
- spec/dummy/public/favicon.ico
|
123
123
|
- spec/dummy/script/rails
|
124
124
|
- spec/lib/flatten_record/flattener/create_with_spec.rb
|
125
|
+
- spec/lib/flatten_record/flattener/denormalize_spec.rb
|
125
126
|
- spec/lib/flatten_record/flattener/update_with_spec.rb
|
126
127
|
- spec/lib/flatten_record/flattener_spec.rb
|
127
128
|
- spec/lib/flatten_record/meta/root_node_spec.rb
|
@@ -187,6 +188,7 @@ test_files:
|
|
187
188
|
- spec/dummy/README.rdoc
|
188
189
|
- spec/dummy/script/rails
|
189
190
|
- spec/lib/flatten_record/flattener/create_with_spec.rb
|
191
|
+
- spec/lib/flatten_record/flattener/denormalize_spec.rb
|
190
192
|
- spec/lib/flatten_record/flattener/update_with_spec.rb
|
191
193
|
- spec/lib/flatten_record/flattener_spec.rb
|
192
194
|
- spec/lib/flatten_record/meta/root_node_spec.rb
|