flatten_record 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.1
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-15 00:00:00.000000000 Z
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