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