relational_exporter 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 27528505c9ae963ac90a8dec1a21aadba17fecd7
4
- data.tar.gz: e84bb8298c019cc46dca592d3da020bf03f6c564
3
+ metadata.gz: 8c1b454011ca52b5ec7122722273f8503e1bd55a
4
+ data.tar.gz: 3c8f0d8b4371f5177d4b04b46debd9ef0df49287
5
5
  SHA512:
6
- metadata.gz: 12fc7ca1f8478f07f1c76f23fa05e91a4d89620f9656ab72d133c768c2b5e5cc8fbe8397f3e2742a9f35b47ef3e7cf28d271205334df573c8aacbb8f7201ae01
7
- data.tar.gz: 202c03846dcc21b7cd8f0c367d6ff841c346cc6cd5e8f6f79af0834966f0ee06a5e8d9fad5aa50e04f7d72ce22b0ea4a62b746863f4f022a96813e366a0e41a8
6
+ metadata.gz: 5ce81c194f3d0168cdf9dd88ba22f35e8a1909e269d925a2b560b302f3930054ca0c505d7f975ad50e52988c6cd7ea0880ddd1870e0a5f912a628428500e9890
7
+ data.tar.gz: 3db2e8d53cfe005eadf99f53034d50a325f0b1c4d477fd7999fae25f3019f77f5225f86854f9190c41398a21736b21af75d8c4ddee571dc36041659298ff0fa6
data/README.md CHANGED
@@ -4,8 +4,8 @@ A gem to make it easy to export data from relational databases. RelationalExport
4
4
 
5
5
  ## TODO
6
6
 
7
+ * Add concurrency for faster exports
7
8
  * Support multiple formats (currently only CSV)
8
- * Integrate serializers of some sort
9
9
  * Improve DSL
10
10
  * Clean up the code
11
11
 
@@ -89,6 +89,30 @@ Or install it yourself as:
89
89
  end
90
90
  ```
91
91
 
92
+ ## Support for Active Model Serializers
93
+
94
+ Install the [`active_model_serializers`](https://github.com/rails-api/active_model_serializers) gem in your application to take advantage of easy serialization. For CSV exports, `relational_exporter` will look for a serializer when rendering the CSV row. If your serializer implements the `self.csv_header_prefix_for_key(key)` method, `relational_exporter` will use that method to determine the column header for a given model attribute.
95
+
96
+ Example:
97
+
98
+ ```ruby
99
+ class PersonSerializer < ActiveModel::Serializer
100
+ attributes :id, :name, :brother_name
101
+
102
+ def self.csv_header_prefix_for_key(key)
103
+ key == :brother_name ? '' : 'Person'
104
+ end
105
+ end
106
+ ```
107
+
108
+ Would generate a CSV header row like:
109
+
110
+ ```
111
+ PersonId,PersonName,BrotherName
112
+ ```
113
+
114
+ Notice how the 'BrotherName' is not prefixed with 'Person'
115
+
92
116
  ## Contributing
93
117
 
94
118
  1. Fork it
@@ -58,7 +58,7 @@ module RelationalExporter
58
58
 
59
59
  # Add main record headers
60
60
  serialized_attributes(single).each do |field, value|
61
- header_row << [main_klass.to_s.underscore, field].join('_').classify if csv.header_row?
61
+ header_row << csv_header_prefix_for_key(main_klass, field) if csv.header_row?
62
62
  row << value
63
63
  end
64
64
 
@@ -101,7 +101,7 @@ module RelationalExporter
101
101
 
102
102
  max_associated.times do |i|
103
103
  fields.each do |field|
104
- header_row << [association_klass.to_s.underscore, i+1, field].join('_').classify
104
+ header_row << csv_header_prefix_for_key(association_klass, field, i+1)
105
105
  end
106
106
  end
107
107
  end
@@ -121,28 +121,36 @@ module RelationalExporter
121
121
 
122
122
  private
123
123
 
124
+ def csv_header_prefix_for_key(klass, key, index=nil)
125
+ if klass.respond_to?(:active_model_serializer) && !klass.active_model_serializer.nil? && klass.active_model_serializer.respond_to?(:csv_header_prefix_for_key)
126
+ header_prefix = klass.active_model_serializer.csv_header_prefix_for_key key.to_sym
127
+ else
128
+ header_prefix = klass.to_s
129
+ end
130
+
131
+ header_prefix + index.to_s + key.to_s.classify
132
+ end
133
+
124
134
  def serialized_attributes(object)
125
- return nil if object.nil?
135
+ return {} if object.nil?
126
136
 
127
137
  klass, model = object.is_a?(Class) ? [object, object.first] : [object.class, object]
128
138
 
129
139
  return {} if model.nil?
130
140
 
131
141
  if model.respond_to?(:active_model_serializer) && !model.active_model_serializer.nil?
132
- serialized = model.active_model_serializer.new(model).as_json(root: false) rescue nil
133
- # elsif defined?(BaseSerializer)
134
- # serialized = BaseSerializer.new(model).as_json(root: false) rescue nil
142
+ serialized = model.active_model_serializer.new(model).as_json(root: false)
135
143
  end
136
144
 
137
145
  serialized = model.attributes if serialized.nil?
138
146
  serialized
139
147
  end
140
148
 
141
- def get_row_arr(records, fields, max_count=1, &block)
149
+ def get_row_arr(records, fields, max_count, &block)
142
150
  max_count.times do |i|
143
- record = serialized_attributes records[i]
151
+ record = records[i].nil? ? {} : serialized_attributes(records[i])
144
152
  fields.each do |field|
145
- val = record[field] rescue nil
153
+ val = record[field]
146
154
  yield val
147
155
  end
148
156
  end
@@ -1,3 +1,3 @@
1
1
  module RelationalExporter
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relational_exporter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Hammond
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-04 00:00:00.000000000 Z
11
+ date: 2014-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie