active_export 0.2.0 → 0.3.0
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.
- data/.gitignore +1 -1
- data/.travis.yml +12 -0
- data/Gemfile +1 -1
- data/README.md +1 -1
- data/lib/active_export/base.rb +56 -0
- data/lib/active_export/csv.rb +1 -56
- data/lib/active_export/version.rb +1 -1
- data/lib/active_export/xml.rb +41 -0
- data/lib/active_export/yaml.rb +24 -0
- data/lib/active_export.rb +2 -0
- data/spec/active_export/base_spec.rb +37 -0
- data/spec/active_export/csv_spec.rb +0 -37
- data/spec/active_export/xml_spec.rb +50 -0
- data/spec/active_export/yaml_spec.rb +41 -0
- data/spec/fixtures/xml.yml +19 -0
- data/spec/gemfiles/Gemfile.rails.3.0 +10 -0
- data/spec/gemfiles/Gemfile.rails.3.1 +10 -0
- data/spec/gemfiles/Gemfile.rails.3.2 +10 -0
- data/spec/spec_helper.rb +5 -1
- data/tasks/yard.rake +9 -4
- data/tmp/.gitkeep +0 -0
- metadata +18 -2
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# ActiveExport
|
1
|
+
# ActiveExport [](http://travis-ci.org/kengos/active_export)[](https://codeclimate.com/github/kengos/active_export)
|
2
2
|
|
3
3
|
ActiveExport generate from ActiveRecord or others to CSV String or CSV file.
|
4
4
|
|
data/lib/active_export/base.rb
CHANGED
@@ -18,6 +18,30 @@ module ActiveExport
|
|
18
18
|
end
|
19
19
|
|
20
20
|
class << self
|
21
|
+
# Generate Csv String
|
22
|
+
# @param [Array, ActiveRecord::Relation] data
|
23
|
+
# @param [Symbol, String] source
|
24
|
+
# @param [Symobl, String] namespace
|
25
|
+
# @param [Hash] options ({})
|
26
|
+
# @option options [Array] :eval_methods
|
27
|
+
# @option options [Array] :label_keys
|
28
|
+
# @option options [String] :label_prefix
|
29
|
+
# @option options [Hash] :csv_options (see http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html)
|
30
|
+
# @return [String] Csv String
|
31
|
+
def export(data, source, namespace, options = {})
|
32
|
+
new(source, namespace, options).export(data)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Generate Csv File
|
36
|
+
# @param [Array, ActiveRecord::Relation] data
|
37
|
+
# @param [Symbol, String] source YAML File alias name (see ActiveExport::Configuration#sources)
|
38
|
+
# @param [Symbol, String] namespace YAML File namespace
|
39
|
+
# @param [String, Filepath] filename Csv File name
|
40
|
+
# @param [Hash] options ({}) (see .export)
|
41
|
+
def export_file(data, source, namespace, filename, options = {})
|
42
|
+
new(source, namespace, options).export_file(data, filename)
|
43
|
+
end
|
44
|
+
|
21
45
|
def translate(key, scope = [])
|
22
46
|
defaults = [
|
23
47
|
:"active_export.#{scope.join('.')}.#{key.to_s.gsub('.', '_')}",
|
@@ -46,6 +70,19 @@ module ActiveExport
|
|
46
70
|
end
|
47
71
|
end
|
48
72
|
|
73
|
+
# Export data to exporter
|
74
|
+
# @param [Array, ActiveRecord::Relation] data Export target data
|
75
|
+
# @param [Object] Object needs to support '<<' accessor
|
76
|
+
def export_data(data, exporter)
|
77
|
+
if data.respond_to?(:find_in_batches) && data.respond_to?(:orders) && data.orders.blank? && data.respond_to?(:taken) && data.taken.blank?
|
78
|
+
data.find_in_batches(find_in_batches_options) do |group|
|
79
|
+
group.each{|f| exporter << generate_value(f) }
|
80
|
+
end
|
81
|
+
else
|
82
|
+
data.each{|f| exporter << generate_value(f) }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
49
86
|
# Convert value for export string
|
50
87
|
# @todo refactor me
|
51
88
|
def convert(value)
|
@@ -98,5 +135,24 @@ module ActiveExport
|
|
98
135
|
def translate(key, scope = nil)
|
99
136
|
self.class.translate(key, scope || default_scope)
|
100
137
|
end
|
138
|
+
|
139
|
+
protected
|
140
|
+
|
141
|
+
def generate_header
|
142
|
+
self.label_keys.inject([]) {|result, key|
|
143
|
+
result << translate(key_name(key))
|
144
|
+
}
|
145
|
+
end
|
146
|
+
|
147
|
+
def generate_value(row)
|
148
|
+
self.eval_methods.inject([]){|result, f|
|
149
|
+
v = row.send(:eval, f) rescue nil
|
150
|
+
result << convert(v)
|
151
|
+
}
|
152
|
+
end
|
153
|
+
|
154
|
+
def find_in_batches_options
|
155
|
+
self.config.default_find_in_batches_options.merge( self.options[:find_in_batches_options] || {} )
|
156
|
+
end
|
101
157
|
end
|
102
158
|
end
|
data/lib/active_export/csv.rb
CHANGED
@@ -4,32 +4,6 @@ require 'csv'
|
|
4
4
|
|
5
5
|
module ActiveExport
|
6
6
|
class Csv < ::ActiveExport::Base
|
7
|
-
# Generate Csv String
|
8
|
-
# @param [Array, ActiveRecord::Relation] data
|
9
|
-
# @param [Symbol, String] source
|
10
|
-
# @param [Symobl, String] namespace
|
11
|
-
# @param [Hash] options ({})
|
12
|
-
# @option options [Array] :eval_methods
|
13
|
-
# @option options [Array] :label_keys
|
14
|
-
# @option options [String] :label_prefix
|
15
|
-
# @option options [Hash] :csv_options (see http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html)
|
16
|
-
# @return [String] Csv String
|
17
|
-
# @exmaple
|
18
|
-
# AcriveExport::Csv.export(data, :source, :namespace)
|
19
|
-
def self.export(data, source, namespace, options = {})
|
20
|
-
new(source, namespace, options).export(data)
|
21
|
-
end
|
22
|
-
|
23
|
-
# Generate Csv File
|
24
|
-
# @param [Array, ActiveRecord::Relation] data
|
25
|
-
# @param [Symbol, String] source YAML File alias name (see ActiveExport::Configuration#sources)
|
26
|
-
# @param [Symbol, String] namespace YAML File namespace
|
27
|
-
# @param [String, Filepath] filename Csv File name
|
28
|
-
# @param [Hash] options ({}) (see .export)
|
29
|
-
def self.export_file(data, source, namespace, filename, options = {})
|
30
|
-
new(source, namespace, options).export_file(data, filename)
|
31
|
-
end
|
32
|
-
|
33
7
|
def export(data)
|
34
8
|
CSV.generate(csv_options) do |csv|
|
35
9
|
csv << generate_header if header?
|
@@ -38,7 +12,7 @@ module ActiveExport
|
|
38
12
|
end
|
39
13
|
|
40
14
|
def export_file(data, filename)
|
41
|
-
File.atomic_write(filename) do |file|
|
15
|
+
File.atomic_write(filename.to_s) do |file|
|
42
16
|
CSV.open(file, "wb", csv_options) do |csv|
|
43
17
|
csv << generate_header if header?
|
44
18
|
export_data(data, csv)
|
@@ -47,36 +21,7 @@ module ActiveExport
|
|
47
21
|
filename
|
48
22
|
end
|
49
23
|
|
50
|
-
# Export data to exporter
|
51
|
-
# @param [Array, ActiveRecord::Relation] data Export target data
|
52
|
-
# @param [CSV, Array, String] exporter CSV class or Array class, or String class (should support '<<' accessor)
|
53
|
-
def export_data(data, exporter)
|
54
|
-
if data.respond_to?(:find_in_batches) && data.respond_to?(:orders) && data.orders.blank? && data.respond_to?(:taken) && data.taken.blank?
|
55
|
-
data.find_in_batches(find_in_batches_options) do |group|
|
56
|
-
group.each{|f| exporter << generate_value(f) }
|
57
|
-
end
|
58
|
-
else
|
59
|
-
data.each{|f| exporter << generate_value(f) }
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
24
|
protected
|
64
|
-
def generate_header
|
65
|
-
self.label_keys.inject([]) {|result, key|
|
66
|
-
result << translate(key_name(key))
|
67
|
-
}
|
68
|
-
end
|
69
|
-
|
70
|
-
def generate_value(row)
|
71
|
-
self.eval_methods.inject([]){|result, f|
|
72
|
-
v = row.send(:eval, f) rescue nil
|
73
|
-
result << convert(v)
|
74
|
-
}
|
75
|
-
end
|
76
|
-
|
77
|
-
def find_in_batches_options
|
78
|
-
self.config.default_find_in_batches_options.merge( self.options[:find_in_batches_options] || {} )
|
79
|
-
end
|
80
25
|
|
81
26
|
def csv_options
|
82
27
|
self.config.default_csv_options.merge( self.options[:csv_options] || {} )
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module ActiveExport
|
4
|
+
class Xml < ::ActiveExport::Base
|
5
|
+
# @return [String] XML style string
|
6
|
+
def export(data)
|
7
|
+
str = ''
|
8
|
+
str << source[:xml_format][:header]
|
9
|
+
[].tap {|o| export_data(data, o)}.inject([]) do |result, f|
|
10
|
+
result << {}.tap{|o|
|
11
|
+
self.label_keys.each_with_index {|k, i| o[k] = f[i] }
|
12
|
+
}
|
13
|
+
end.each do |f|
|
14
|
+
str << binding(f)
|
15
|
+
end
|
16
|
+
str << source[:xml_format][:footer]
|
17
|
+
str
|
18
|
+
end
|
19
|
+
|
20
|
+
def export_file(data, filename)
|
21
|
+
File.atomic_write(filename.to_s) do |file|
|
22
|
+
file.write export(data)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
# @params [Hash] values Format: { label_1: value_1, ... }
|
29
|
+
def binding(values)
|
30
|
+
result_string = binding_source.dup
|
31
|
+
values.each_pair do |k,v|
|
32
|
+
result_string.gsub!("%%#{k}%%", v)
|
33
|
+
end
|
34
|
+
result_string
|
35
|
+
end
|
36
|
+
|
37
|
+
def binding_source
|
38
|
+
@xml_body ||= source[:xml_format][:body]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
module ActiveExport
|
6
|
+
class Yaml < ::ActiveExport::Base
|
7
|
+
# @return [String] YAML style string
|
8
|
+
# @memo output format(i want)
|
9
|
+
# -
|
10
|
+
# - label: value
|
11
|
+
# - label: value
|
12
|
+
def export(data)
|
13
|
+
[].tap {|o|
|
14
|
+
export_data(data, o)
|
15
|
+
}.to_yaml
|
16
|
+
end
|
17
|
+
|
18
|
+
def export_file(data, filename)
|
19
|
+
File.atomic_write(filename.to_s) do |file|
|
20
|
+
file.write export(data)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/active_export.rb
CHANGED
@@ -74,6 +74,43 @@ describe ActiveExport::Base do
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
+
describe "#export_data" do
|
78
|
+
let(:csv_exporter) { ActiveExport::Base.new(:default, :book_1) }
|
79
|
+
let!(:book_1) { Book.create!(name: 'book_1', author: nil, price: 58) }
|
80
|
+
let!(:book_2) { Book.create!(name: 'book_2', author: nil, price: 58) }
|
81
|
+
let!(:book_3) { Book.create!(name: 'book_2', author: nil, price: 58) }
|
82
|
+
|
83
|
+
it "should not call find_in_batches when has order" do
|
84
|
+
obj = Book.order('id ASC')
|
85
|
+
obj.should_not_receive(:find_in_batches)
|
86
|
+
obj.should_receive(:each)
|
87
|
+
csv_exporter.send(:export_data, obj, [])
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
it "should not call find_in_batches when has limit" do
|
92
|
+
obj = Book.limit(1)
|
93
|
+
obj.should_not_receive(:find_in_batches)
|
94
|
+
obj.should_receive(:each)
|
95
|
+
csv_exporter.send(:export_data, obj, [])
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should not call find_in_batches when specified obj is not ActiveRecord::Relation" do
|
99
|
+
obj = [Book.first]
|
100
|
+
obj.should_not_receive(:find_in_batches)
|
101
|
+
obj.should_receive(:each)
|
102
|
+
csv_exporter.send(:export_data, obj, [])
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should call find_in_batches" do
|
106
|
+
obj = Book.scoped
|
107
|
+
obj.should_receive(:find_in_batches).with({batch_size: 1})
|
108
|
+
obj.should_not_receive(:each)
|
109
|
+
csv_exporter.stub(:find_in_batches_options).and_return({batch_size: 1})
|
110
|
+
csv_exporter.send(:export_data, obj, [])
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
77
114
|
describe ".translate" do
|
78
115
|
let(:i18n_key) { 'author.name' }
|
79
116
|
subject { ActiveExport::Base.translate('author.name', [:default, :book]) }
|
@@ -71,43 +71,6 @@ book_2:author_2:38
|
|
71
71
|
it { File.read(filename).split("\n").first.should eql %Q("Book name","Author name","Book price") }
|
72
72
|
end
|
73
73
|
|
74
|
-
describe "#export_data" do
|
75
|
-
let(:csv_exporter) { ActiveExport::Csv.new(:default, :book_1) }
|
76
|
-
let!(:book_1) { Book.create!(name: 'book_1', author: nil, price: 58) }
|
77
|
-
let!(:book_2) { Book.create!(name: 'book_2', author: nil, price: 58) }
|
78
|
-
let!(:book_3) { Book.create!(name: 'book_2', author: nil, price: 58) }
|
79
|
-
|
80
|
-
it "should not call find_in_batches when has order" do
|
81
|
-
obj = Book.order('id ASC')
|
82
|
-
obj.should_not_receive(:find_in_batches)
|
83
|
-
obj.should_receive(:each)
|
84
|
-
csv_exporter.send(:export_data, obj, [])
|
85
|
-
end
|
86
|
-
|
87
|
-
|
88
|
-
it "should not call find_in_batches when has limit" do
|
89
|
-
obj = Book.limit(1)
|
90
|
-
obj.should_not_receive(:find_in_batches)
|
91
|
-
obj.should_receive(:each)
|
92
|
-
csv_exporter.send(:export_data, obj, [])
|
93
|
-
end
|
94
|
-
|
95
|
-
it "should not call find_in_batches when specified obj is not ActiveRecord::Relation" do
|
96
|
-
obj = [Book.first]
|
97
|
-
obj.should_not_receive(:find_in_batches)
|
98
|
-
obj.should_receive(:each)
|
99
|
-
csv_exporter.send(:export_data, obj, [])
|
100
|
-
end
|
101
|
-
|
102
|
-
it "should call find_in_batches" do
|
103
|
-
obj = Book.scoped
|
104
|
-
obj.should_receive(:find_in_batches).with({batch_size: 1})
|
105
|
-
obj.should_not_receive(:each)
|
106
|
-
csv_exporter.stub(:find_in_batches_options).and_return({batch_size: 1})
|
107
|
-
csv_exporter.send(:export_data, obj, [])
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
74
|
describe ".generate_value" do
|
112
75
|
let(:author_1) { Author.create!(name: 'author_1') }
|
113
76
|
let!(:book_1) { Book.create!(name: 'book_1', author: author_1, price: 1000) }
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe ActiveExport::Xml do
|
6
|
+
before {
|
7
|
+
ActiveExport.configure do |config|
|
8
|
+
config.sources = { xml: fixture_file('xml.yml') }
|
9
|
+
end
|
10
|
+
}
|
11
|
+
|
12
|
+
let(:author_1) { Author.create!(name: 'author_1') }
|
13
|
+
let(:author_2) { Author.create!(name: 'author_2') }
|
14
|
+
let!(:book_1) { Book.create!(name: 'book_1', author: author_1, price: 58) }
|
15
|
+
let!(:book_2) { Book.create!(name: 'book_2', author: author_2, price: 38) }
|
16
|
+
|
17
|
+
let(:expect_string) {
|
18
|
+
<<-EOS
|
19
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
20
|
+
<records>
|
21
|
+
<book>
|
22
|
+
<name>book_1</name>
|
23
|
+
<author_name>author_1</author_name>
|
24
|
+
<price>63.51</price>
|
25
|
+
</book>
|
26
|
+
<book>
|
27
|
+
<name>book_2</name>
|
28
|
+
<author_name>author_2</author_name>
|
29
|
+
<price>41.61</price>
|
30
|
+
</book>
|
31
|
+
</records>
|
32
|
+
EOS
|
33
|
+
}
|
34
|
+
describe ".export" do
|
35
|
+
subject { ActiveExport::Xml.export(Book.scoped, :xml, :book_1) }
|
36
|
+
it { should == expect_string }
|
37
|
+
end
|
38
|
+
|
39
|
+
describe ".export_file" do
|
40
|
+
let(:xml_file) { Rails.root.join('tmp', 'test.xml') }
|
41
|
+
before {
|
42
|
+
FileUtils.rm yaml_file if FileTest.exist?(xml_file)
|
43
|
+
ActiveExport::Xml.export_file(Book.scoped, :xml, :book_1, xml_file)
|
44
|
+
}
|
45
|
+
after {
|
46
|
+
FileUtils.rm xml_file if FileTest.exist?(xml_file)
|
47
|
+
}
|
48
|
+
it { File.read(xml_file).should == expect_string }
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe ActiveExport::Yaml do
|
6
|
+
before {
|
7
|
+
ActiveExport.configure do |config|
|
8
|
+
config.sources = { default: fixture_file('csv_1.yml') }
|
9
|
+
end
|
10
|
+
}
|
11
|
+
|
12
|
+
describe ".export" do
|
13
|
+
let(:author_1) { Author.create!(name: 'author_1') }
|
14
|
+
let(:author_2) { Author.create!(name: 'author_2') }
|
15
|
+
let!(:book_1) { Book.create!(name: 'book_1', author: author_1, price: 58) }
|
16
|
+
let!(:book_2) { Book.create!(name: 'book_2', author: author_2, price: 38) }
|
17
|
+
|
18
|
+
let(:yaml_string) { ActiveExport::Yaml.export(Book.order('id DESC').all, :default, :book_2) }
|
19
|
+
subject { YAML.load(yaml_string) }
|
20
|
+
its([0]) { should == ["book_2", "author_2", "42"] }
|
21
|
+
its([1]) { should == ["book_1", "author_1", "64"] }
|
22
|
+
end
|
23
|
+
|
24
|
+
describe ".export_file" do
|
25
|
+
let(:author_1) { Author.create!(name: 'author_1') }
|
26
|
+
let(:author_2) { Author.create!(name: 'author_2') }
|
27
|
+
let!(:book_1) { Book.create!(name: 'book_1', author: author_1, price: 58) }
|
28
|
+
let!(:book_2) { Book.create!(name: 'book_2', author: author_2, price: 38) }
|
29
|
+
let(:yaml_file) { Rails.root.join('tmp', 'test.yml') }
|
30
|
+
before {
|
31
|
+
FileUtils.rm yaml_file if FileTest.exist?(yaml_file)
|
32
|
+
ActiveExport::Yaml.export_file(Book.scoped, :default, :book_2, yaml_file)
|
33
|
+
}
|
34
|
+
after {
|
35
|
+
FileUtils.rm yaml_file if FileTest.exist?(yaml_file)
|
36
|
+
}
|
37
|
+
subject { YAML.load(File.read(yaml_file)) }
|
38
|
+
its([0]) { should == ["book_1", "author_1", "64"] }
|
39
|
+
its([1]) { should == ["book_2", "author_2", "42"] }
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
book_1:
|
2
|
+
label_prefix: 'book'
|
3
|
+
methods:
|
4
|
+
- name
|
5
|
+
- author.name
|
6
|
+
- price: 'price * 1.095'
|
7
|
+
xml_format:
|
8
|
+
encoding: 'UTF-8'
|
9
|
+
header: |
|
10
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
11
|
+
<records>
|
12
|
+
footer: |
|
13
|
+
</records>
|
14
|
+
body: |
|
15
|
+
<book>
|
16
|
+
<name>%%name%%</name>
|
17
|
+
<author_name>%%author.name%%</author_name>
|
18
|
+
<price>%%price%%</price>
|
19
|
+
</book>
|
data/spec/spec_helper.rb
CHANGED
data/tasks/yard.rake
CHANGED
@@ -1,6 +1,11 @@
|
|
1
|
-
|
2
|
-
require 'yard/rake/yardoc_task'
|
1
|
+
begin
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
require 'yard'
|
4
|
+
require 'yard/rake/yardoc_task'
|
5
|
+
|
6
|
+
YARD::Rake::YardocTask.new do |t|
|
7
|
+
t.files = ['lib/**/*.rb']
|
8
|
+
end
|
9
|
+
|
10
|
+
rescue Exception
|
6
11
|
end
|
data/tmp/.gitkeep
ADDED
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_export
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -35,6 +35,7 @@ extensions: []
|
|
35
35
|
extra_rdoc_files: []
|
36
36
|
files:
|
37
37
|
- .gitignore
|
38
|
+
- .travis.yml
|
38
39
|
- .yardopts
|
39
40
|
- Gemfile
|
40
41
|
- Guardfile
|
@@ -47,12 +48,20 @@ files:
|
|
47
48
|
- lib/active_export/configuration.rb
|
48
49
|
- lib/active_export/csv.rb
|
49
50
|
- lib/active_export/version.rb
|
51
|
+
- lib/active_export/xml.rb
|
52
|
+
- lib/active_export/yaml.rb
|
50
53
|
- spec/active_export/base_spec.rb
|
51
54
|
- spec/active_export/csv_spec.rb
|
52
55
|
- spec/active_export/rails_support_spec.rb
|
56
|
+
- spec/active_export/xml_spec.rb
|
57
|
+
- spec/active_export/yaml_spec.rb
|
53
58
|
- spec/active_export_spec.rb
|
54
59
|
- spec/factories/book.rb
|
55
60
|
- spec/fixtures/csv_1.yml
|
61
|
+
- spec/fixtures/xml.yml
|
62
|
+
- spec/gemfiles/Gemfile.rails.3.0
|
63
|
+
- spec/gemfiles/Gemfile.rails.3.1
|
64
|
+
- spec/gemfiles/Gemfile.rails.3.2
|
56
65
|
- spec/rails/model/author.rb
|
57
66
|
- spec/rails/model/book.rb
|
58
67
|
- spec/rails/model/book_category.rb
|
@@ -61,6 +70,7 @@ files:
|
|
61
70
|
- spec/rails/schema.rb
|
62
71
|
- spec/spec_helper.rb
|
63
72
|
- tasks/yard.rake
|
73
|
+
- tmp/.gitkeep
|
64
74
|
homepage: https://github.com/kengos/active_export
|
65
75
|
licenses: []
|
66
76
|
post_install_message:
|
@@ -89,9 +99,15 @@ test_files:
|
|
89
99
|
- spec/active_export/base_spec.rb
|
90
100
|
- spec/active_export/csv_spec.rb
|
91
101
|
- spec/active_export/rails_support_spec.rb
|
102
|
+
- spec/active_export/xml_spec.rb
|
103
|
+
- spec/active_export/yaml_spec.rb
|
92
104
|
- spec/active_export_spec.rb
|
93
105
|
- spec/factories/book.rb
|
94
106
|
- spec/fixtures/csv_1.yml
|
107
|
+
- spec/fixtures/xml.yml
|
108
|
+
- spec/gemfiles/Gemfile.rails.3.0
|
109
|
+
- spec/gemfiles/Gemfile.rails.3.1
|
110
|
+
- spec/gemfiles/Gemfile.rails.3.2
|
95
111
|
- spec/rails/model/author.rb
|
96
112
|
- spec/rails/model/book.rb
|
97
113
|
- spec/rails/model/book_category.rb
|