active_export 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +87 -89
- data/lib/active_export/base.rb +6 -5
- data/lib/active_export/configuration.rb +8 -0
- data/lib/active_export/csv.rb +50 -9
- data/lib/active_export/version.rb +1 -1
- data/spec/active_export/base_spec.rb +5 -11
- data/spec/active_export/csv_spec.rb +72 -19
- data/spec/spec_helper.rb +4 -0
- metadata +2 -2
data/README.md
CHANGED
@@ -1,19 +1,44 @@
|
|
1
1
|
# ActiveExport
|
2
2
|
|
3
|
-
|
3
|
+
ActiveExport generate from ActiveRecord or others to CSV String or CSV file.
|
4
4
|
|
5
|
-
You
|
5
|
+
You can write the logic of generating CSV to a YAML file.
|
6
6
|
|
7
|
-
|
7
|
+
Another Support:
|
8
|
+
|
9
|
+
* csv label adapt i18n.
|
10
|
+
* when the value of csv data is null or blank or true or false, change another label<br>
|
11
|
+
ex) nil to '', blank to 'empty', true to 'Yes', false to 'No'<br>
|
12
|
+
|
13
|
+
Example:
|
8
14
|
|
9
15
|
````ruby
|
10
|
-
ActiveExport::Csv.export(Book.
|
16
|
+
ActiveExport::Csv.export(Book.scoped, source_name, namespace)
|
17
|
+
````
|
18
|
+
|
19
|
+
YAML file
|
20
|
+
<pre>
|
21
|
+
namespace:
|
22
|
+
label_prefix: 'book'
|
23
|
+
methods:
|
24
|
+
- name
|
25
|
+
- author.name
|
26
|
+
- price: '(price * 1.095).ceil.to_i'
|
27
|
+
- created_at.strftime('%Y-%m-%d')
|
28
|
+
</pre>
|
29
|
+
|
30
|
+
Write the same way without the ActiveExport:
|
11
31
|
|
12
|
-
|
32
|
+
````ruby
|
13
33
|
CSV.generate do |csv|
|
14
34
|
csv << ['Title', 'Author', 'Price(in Tax)', 'Published Date']
|
15
35
|
Book.all.each do |book|
|
16
|
-
|
36
|
+
csv_data = []
|
37
|
+
csv_data << book.name.blank? ? '' : book.name
|
38
|
+
csv_data << book.author ? book.author.name : ''
|
39
|
+
csv_data << (book.price * 1.095).ceil.to_i
|
40
|
+
csv_data << book.created_at.blank? ? '' : book.created_at.strftime('%Y-%m-%d')
|
41
|
+
csv << csv_data
|
17
42
|
end
|
18
43
|
end
|
19
44
|
end
|
@@ -37,106 +62,68 @@ Or install it yourself as:
|
|
37
62
|
|
38
63
|
Add initalizers `active_export.rb`
|
39
64
|
|
40
|
-
|
41
|
-
|
42
|
-
[YAML file format][yaml-file-format]
|
65
|
+
touch config/initializers/active_export.rb
|
43
66
|
|
44
|
-
|
45
|
-
|
46
|
-
## Example
|
47
|
-
|
48
|
-
ActiveRecord:
|
67
|
+
Write configuration code to `active_export.rb`
|
49
68
|
|
50
69
|
````ruby
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
70
|
+
ActiveExportconfigure do |config|
|
71
|
+
config.sources = { default: Rails.root.join('config', 'active_export.yml') }
|
72
|
+
# config.default_csv_optoins = { col_sep: ',', row_sep: "\n", force_quotes: true }
|
73
|
+
# config.default_find_in_batches_options = {} # default
|
74
|
+
# config.default_value_label_scope = [:default_value_labels] # default
|
75
|
+
# config.always_reload = false # default
|
76
|
+
# config.no_source_raise_error = false # default
|
56
77
|
end
|
57
78
|
````
|
58
79
|
|
59
|
-
|
60
|
-
|
61
|
-
| id | name | author_id | price | created_at |
|
62
|
-
|:--:|:----:|:---------:|:-----:|:----------:|
|
63
|
-
| 1 | Ruby | 1 | 50 | 2012/08/01 00:00:00 UTC |
|
64
|
-
| 2 | Java | 2 | 30 | 2012/08/02 00:00:00 UTC |
|
65
|
-
|
66
|
-
Author records:
|
80
|
+
Create `active_export.yml` And write csv export method
|
67
81
|
|
68
|
-
|
69
|
-
|:--:|:-----:|
|
70
|
-
| 1 | Bob |
|
71
|
-
| 2 | Alice |
|
82
|
+
touch config/active_export.yml
|
72
83
|
|
73
|
-
`
|
84
|
+
Write Csv generate logic to `active_export.yml`
|
74
85
|
|
75
86
|
<pre>
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
87
|
+
namespace_1:
|
88
|
+
label_prefix: 'book'
|
89
|
+
methods:
|
90
|
+
- method
|
91
|
+
- method
|
92
|
+
...
|
93
|
+
namespace_2:
|
94
|
+
label_prefix: ...
|
95
|
+
...
|
84
96
|
</pre>
|
85
97
|
|
86
|
-
|
98
|
+
Call Export method
|
87
99
|
|
88
|
-
|
89
|
-
|
90
|
-
config.sources = { default: Rails.root.join('config', 'active_export.yml') }
|
91
|
-
## option fields
|
92
|
-
# config.default_csv_optoins = { col_sep: ',', row_sep: "\n", force_quotes: true }
|
93
|
-
# config.always_reload = false # default
|
94
|
-
# config.no_source_raise_error = false # default
|
95
|
-
end
|
96
|
-
````
|
100
|
+
ActiveExport::Csv.export(Book.scoped, :default, :namespace_1)
|
101
|
+
ActiveExport::Csv.export_file(Book.scoped, :default, :namespace_1, filename)
|
97
102
|
|
98
|
-
|
103
|
+
## ActiveExport::Csv
|
99
104
|
|
100
|
-
|
101
|
-
book:
|
102
|
-
label_prefix: 'book'
|
103
|
-
methods:
|
104
|
-
- name
|
105
|
-
- author.name
|
106
|
-
- price
|
107
|
-
- created_at: creaetd_at.strftime('%Y/%m/%d')
|
108
|
-
````
|
105
|
+
Support 2 methods:
|
109
106
|
|
110
|
-
|
107
|
+
* `export(data, source_name, namespace, options = {})` ... Generate Csv string
|
108
|
+
* `export_file(data, source_name, namespace, filename, options = {})` ... Generate Csv file
|
111
109
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
110
|
+
options:
|
111
|
+
|
112
|
+
* `:eval_methods` ... override export method from YAML file.
|
113
|
+
* `:label_keys` ... override csv header label from YAML file.
|
114
|
+
* `:label_prefix` ... override csv header label prefix from YAML file.
|
115
|
+
* `:csv_options` ... Csv generate options.
|
116
|
+
* `:header` ... false to not export Csv header labels.
|
119
117
|
|
120
118
|
## YAML file format
|
121
119
|
|
122
|
-
|
123
|
-
|
124
|
-
label_prefix:
|
120
|
+
<pre>
|
121
|
+
namespace:
|
122
|
+
label_prefix: label_prefix
|
125
123
|
methods:
|
126
|
-
-
|
127
|
-
-
|
128
|
-
|
129
|
-
```
|
130
|
-
|
131
|
-
### Method_name examples
|
132
|
-
|
133
|
-
```
|
134
|
-
book:
|
135
|
-
- "author.name" # call [instance].author.name
|
136
|
-
- "price > 0" # call [instance].price > 0 # => true or false
|
137
|
-
- "price.to_f / 2.0" # call [instance].price.to_f / 2.0
|
138
|
-
- "sprintf("%#b", price)" # call sprintf("%#b", [instance].price)
|
139
|
-
```
|
124
|
+
- method_name
|
125
|
+
- label_name: method_name
|
126
|
+
</pre>
|
140
127
|
|
141
128
|
### I18n field priority
|
142
129
|
|
@@ -165,12 +152,23 @@ label_prefix ... "book"
|
|
165
152
|
source_name ... "default"
|
166
153
|
namespace ... "book_1"
|
167
154
|
|
168
|
-
1.
|
169
|
-
2.
|
170
|
-
3.
|
171
|
-
4.
|
155
|
+
1. `active_export.default.book_1.book_name`
|
156
|
+
2. `activerecord.attributes.book.name`
|
157
|
+
3. `activemode.attributes.book.name`
|
158
|
+
4. `book_name`.humanize # => Book name
|
172
159
|
</pre>
|
173
160
|
|
161
|
+
|
162
|
+
### methods examples
|
163
|
+
|
164
|
+
```
|
165
|
+
book:
|
166
|
+
- "author.name" # call [instance].author.name
|
167
|
+
- "price > 0" # call [instance].price > 0 # => true or false
|
168
|
+
- "price.to_f / 2.0" # call [instance].price.to_f / 2.0
|
169
|
+
- "sprintf("%#b", price)" # call sprintf("%#b", [instance].price)
|
170
|
+
```
|
171
|
+
|
174
172
|
## Contributing
|
175
173
|
|
176
174
|
1. Fork it
|
data/lib/active_export/base.rb
CHANGED
@@ -5,15 +5,16 @@ require 'active_support'
|
|
5
5
|
|
6
6
|
module ActiveExport
|
7
7
|
class Base
|
8
|
-
attr_accessor :source_name, :namespace, :label_prefix, :source, :label_keys, :eval_methods
|
8
|
+
attr_accessor :source_name, :namespace, :label_prefix, :source, :label_keys, :eval_methods, :options
|
9
9
|
attr_reader :config
|
10
10
|
def initialize(source_name, namespace, options = {})
|
11
11
|
@source_name = source_name.to_sym
|
12
12
|
@namespace = namespace.to_sym
|
13
13
|
@config = ::ActiveExport.configuration
|
14
|
-
@label_keys = options.has_key?(:label_keys) ? options
|
15
|
-
@eval_methods = options.has_key?(:eval_methods) ? options
|
16
|
-
@label_prefix = options.has_key?(:label_prefix) ? options
|
14
|
+
@label_keys = options.has_key?(:label_keys) ? options.delete(:label_keys) : nil
|
15
|
+
@eval_methods = options.has_key?(:eval_methods) ? options.delete(:eval_methods) : nil
|
16
|
+
@label_prefix = options.has_key?(:label_prefix) ? options.delete(:label_prefix) : nil
|
17
|
+
@options = options
|
17
18
|
end
|
18
19
|
|
19
20
|
class << self
|
@@ -90,7 +91,7 @@ module ActiveExport
|
|
90
91
|
def source
|
91
92
|
@source ||= ::ActiveExport[self.source_name][self.namespace]
|
92
93
|
rescue => e
|
93
|
-
raise e if config.no_source_raise_error
|
94
|
+
raise e if self.config.no_source_raise_error
|
94
95
|
return {}
|
95
96
|
end
|
96
97
|
|
@@ -2,10 +2,17 @@
|
|
2
2
|
|
3
3
|
module ActiveExport
|
4
4
|
class Configuration
|
5
|
+
# YAML file list
|
5
6
|
attr_accessor :sources
|
7
|
+
# Default options export CSV
|
6
8
|
attr_accessor :default_csv_options
|
9
|
+
# Default options using `find_in_batches`
|
10
|
+
attr_accessor :default_find_in_batches_options
|
11
|
+
# Set true, no cached YAML file data
|
7
12
|
attr_accessor :always_reload
|
13
|
+
# Export data default labels when value is nil or blank or true or false
|
8
14
|
attr_accessor :default_value_label_scope
|
15
|
+
# Set true, if selected source file does not exists, ActiveExport raise error
|
9
16
|
attr_accessor :no_source_raise_error
|
10
17
|
|
11
18
|
def initialize
|
@@ -14,6 +21,7 @@ module ActiveExport
|
|
14
21
|
@always_reload = false
|
15
22
|
@default_value_label_scope = [:default_value_labels]
|
16
23
|
@no_source_raise_error = false
|
24
|
+
@default_find_in_batches_options = {}
|
17
25
|
end
|
18
26
|
end
|
19
27
|
end
|
data/lib/active_export/csv.rb
CHANGED
@@ -4,6 +4,7 @@ require 'csv'
|
|
4
4
|
|
5
5
|
module ActiveExport
|
6
6
|
class Csv < ::ActiveExport::Base
|
7
|
+
# Generate Csv String
|
7
8
|
# @param [Array, ActiveRecord::Relation] data
|
8
9
|
# @param [Symbol, String] source
|
9
10
|
# @param [Symobl, String] namespace
|
@@ -12,26 +13,54 @@ module ActiveExport
|
|
12
13
|
# @option options [Array] :label_keys
|
13
14
|
# @option options [String] :label_prefix
|
14
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
|
15
17
|
# @exmaple
|
16
18
|
# AcriveExport::Csv.export(data, :source, :namespace)
|
17
19
|
def self.export(data, source, namespace, options = {})
|
18
|
-
new(source, namespace, options).export(data
|
20
|
+
new(source, namespace, options).export(data)
|
19
21
|
end
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
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
|
24
32
|
|
25
|
-
|
26
|
-
# 1.9.2
|
33
|
+
def export(data)
|
27
34
|
CSV.generate(csv_options) do |csv|
|
28
|
-
csv << generate_header
|
29
|
-
data
|
30
|
-
|
35
|
+
csv << generate_header if header?
|
36
|
+
export_data(data, csv)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def export_file(data, filename)
|
41
|
+
File.atomic_write(filename) do |file|
|
42
|
+
CSV.open(file, "wb", csv_options) do |csv|
|
43
|
+
csv << generate_header if header?
|
44
|
+
export_data(data, csv)
|
31
45
|
end
|
32
46
|
end
|
47
|
+
filename
|
33
48
|
end
|
34
49
|
|
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
|
+
protected
|
35
64
|
def generate_header
|
36
65
|
self.label_keys.inject([]) {|result, key|
|
37
66
|
result << translate(key_name(key))
|
@@ -44,5 +73,17 @@ module ActiveExport
|
|
44
73
|
result << convert(v)
|
45
74
|
}
|
46
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
|
+
|
81
|
+
def csv_options
|
82
|
+
self.config.default_csv_options.merge( self.options[:csv_options] || {} )
|
83
|
+
end
|
84
|
+
|
85
|
+
def header?
|
86
|
+
{ header: true }.merge(self.options)[:header]
|
87
|
+
end
|
47
88
|
end
|
48
89
|
end
|
@@ -4,19 +4,11 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe ActiveExport::Base do
|
6
6
|
before {
|
7
|
-
@default_locale = I18n.locale
|
8
|
-
I18n.locale = :en
|
9
|
-
|
10
7
|
ActiveExport.configure do |config|
|
11
8
|
config.sources = { default: fixture_file('csv_1.yml') }
|
12
9
|
end
|
13
10
|
}
|
14
11
|
|
15
|
-
after {
|
16
|
-
I18n.backend.reload!
|
17
|
-
I18n.locale = @default_locale
|
18
|
-
}
|
19
|
-
|
20
12
|
let(:active_export) { ActiveExport::Base.new('default', 'book_2') }
|
21
13
|
it { active_export.source_name = :default }
|
22
14
|
it { active_export.namespace = :book_2 }
|
@@ -59,6 +51,10 @@ describe ActiveExport::Base do
|
|
59
51
|
|
60
52
|
describe "#source" do
|
61
53
|
before {
|
54
|
+
ActiveExport.configure do |config|
|
55
|
+
config.sources = { }
|
56
|
+
config.no_source_raise_error = true
|
57
|
+
end
|
62
58
|
active_export.source_name = :not_found
|
63
59
|
}
|
64
60
|
it { expect { active_export.source }.to raise_error RuntimeError }
|
@@ -85,9 +81,7 @@ describe ActiveExport::Base do
|
|
85
81
|
context "active_export" do
|
86
82
|
before do
|
87
83
|
I18n.backend.store_translations :en, active_export: {
|
88
|
-
default: {
|
89
|
-
book: { author_name: 'author_name' }
|
90
|
-
}
|
84
|
+
default: { book: { author_name: 'author_name' } }
|
91
85
|
}
|
92
86
|
end
|
93
87
|
it { should == 'author_name' }
|
@@ -3,16 +3,6 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe ActiveExport::Csv do
|
6
|
-
before {
|
7
|
-
@default_locale = I18n.locale
|
8
|
-
I18n.locale = :en
|
9
|
-
}
|
10
|
-
|
11
|
-
after {
|
12
|
-
I18n.backend.reload!
|
13
|
-
I18n.locale = @default_locale
|
14
|
-
}
|
15
|
-
|
16
6
|
describe ".export" do
|
17
7
|
let(:author_1) { Author.create!(name: 'author_1') }
|
18
8
|
let(:author_2) { Author.create!(name: 'author_2') }
|
@@ -37,19 +27,85 @@ describe ActiveExport::Csv do
|
|
37
27
|
}
|
38
28
|
end
|
39
29
|
|
40
|
-
context "add
|
30
|
+
context "add csv_options" do
|
41
31
|
let(:csv_options) {
|
42
32
|
{ force_quotes: false, col_sep: ':'}
|
43
33
|
}
|
44
|
-
subject { ActiveExport::Csv.export(Book.
|
34
|
+
subject { ActiveExport::Csv.export(Book.scoped, :default, :book_1, csv_options: csv_options) }
|
45
35
|
it {
|
46
36
|
should == <<-EOS
|
47
37
|
Book name:Author name:Book price
|
48
|
-
book_2:author_2:38
|
49
38
|
book_1:author_1:58
|
39
|
+
book_2:author_2:38
|
40
|
+
EOS
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
context "header false" do
|
45
|
+
subject { ActiveExport::Csv.export(Book.scoped, :default, :book_1, header: false) }
|
46
|
+
it {
|
47
|
+
should == <<-EOS
|
48
|
+
"book_1","author_1","58"
|
49
|
+
"book_2","author_2","38"
|
50
50
|
EOS
|
51
51
|
}
|
52
52
|
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
describe ".export_file" do
|
57
|
+
let(:filename) { Rails.root.join('tmp', 'test.csv') }
|
58
|
+
before {
|
59
|
+
ActiveExport.configure do |config|
|
60
|
+
config.sources = { default: fixture_file('csv_1.yml') }
|
61
|
+
config.default_csv_options = { col_sep: ',', row_sep: "\n", force_quotes: true }
|
62
|
+
end
|
63
|
+
|
64
|
+
FileUtils.rm(filename) if FileTest.exist?(filename)
|
65
|
+
ActiveExport::Csv.export_file(Book.scoped, :default, :book_1, Rails.root.join('tmp', 'test.csv'))
|
66
|
+
}
|
67
|
+
after {
|
68
|
+
FileUtils.rm(filename) if FileTest.exist?(filename)
|
69
|
+
}
|
70
|
+
|
71
|
+
it { File.read(filename).split("\n").first.should eql %Q("Book name","Author name","Book price") }
|
72
|
+
end
|
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
|
53
109
|
end
|
54
110
|
|
55
111
|
describe ".generate_value" do
|
@@ -63,7 +119,7 @@ book_1:author_1:58
|
|
63
119
|
default_value_labels: { nil: 'not found', blank: 'Blank', true: 'Yes!', false: 'No!' }
|
64
120
|
}
|
65
121
|
}
|
66
|
-
subject { csv_exporter.generate_value
|
122
|
+
subject { csv_exporter.send(:generate_value, book_1) }
|
67
123
|
it { should eql ['book_1', 'author_1', '1000', 'not found', 'Yes!', 'No!'] }
|
68
124
|
end
|
69
125
|
|
@@ -71,11 +127,8 @@ book_1:author_1:58
|
|
71
127
|
let(:label_keys) { %w(name author.name price) }
|
72
128
|
let(:csv_exporter) { ActiveExport::Csv.new(:default, :book_1, label_keys: label_keys, label_prefix: 'book') }
|
73
129
|
|
74
|
-
subject { csv_exporter.generate_header }
|
75
|
-
|
76
|
-
context "no language file" do
|
77
|
-
it { should eql ['Book name', 'Author name', 'Book price'] }
|
78
|
-
end
|
130
|
+
subject { csv_exporter.send(:generate_header) }
|
131
|
+
it { should eql ['Book name', 'Author name', 'Book price'] }
|
79
132
|
|
80
133
|
context "translate" do
|
81
134
|
before do
|
data/spec/spec_helper.rb
CHANGED
@@ -21,9 +21,13 @@ RSpec.configure do |config|
|
|
21
21
|
|
22
22
|
config.before(:each) do
|
23
23
|
DatabaseCleaner.start
|
24
|
+
@default_locale = I18n.locale
|
25
|
+
I18n.locale = :en
|
24
26
|
end
|
25
27
|
|
26
28
|
config.after(:each) do
|
29
|
+
I18n.backend.reload!
|
30
|
+
I18n.locale = @default_locale
|
27
31
|
DatabaseCleaner.clean
|
28
32
|
end
|
29
33
|
end
|
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.2.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-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|