exportable 0.1.0 → 0.2.0

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: c8fd477c8ee9f17a65df411e7528b5b23f67bf71
4
- data.tar.gz: 07c54ba2aed4aead783feb5aa3e078274ab5da0b
3
+ metadata.gz: 80617bd2dd82271f8d99d1366f57c3be3e67b5ca
4
+ data.tar.gz: 13ec604228898a44064bff2a3bdeb2c7badbfd46
5
5
  SHA512:
6
- metadata.gz: 2c4db4467f13f0dd88789b19f7c7bfea31478f8cfe802a0ad7abe7415e32945257c49ef67623620e050b57909817dbac1eba546506205f7d28883548dc4ac71d
7
- data.tar.gz: da18dc818b4616b0054a4cb72ba51fa3e8f0c451bc4fdd3ed434d10d207698bd3bc854b694d854928aec043b40d5a2cbbca678e73454c7cf04d9600abef1ab58
6
+ metadata.gz: a6e45ef3f75b27f47ad3ada7ec8387b3f4dadd757a2c57c0108bb025b7512d9cefdf2cf3dfe6cade29d3e9c407c64e1973bf1889534289964e057bb129a77a03
7
+ data.tar.gz: c18ec4facc626e50a741e369f2fbffdf98718eb2b588ec776f6284deab89e2ed4131c5dbdd74b41a2c082f9b4f4ce5c4a84491804512fce9c4887da12cc8ce8f
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- exportabe (0.1.0)
4
+ exportable (0.1.0)
5
5
  activerecord (>= 4.0)
6
+ nokogiri
6
7
  spreadsheet
7
8
 
8
9
  GEM
@@ -51,6 +52,11 @@ GEM
51
52
  database_cleaner (1.5.3)
52
53
  diff-lcs (1.2.5)
53
54
  erubis (2.7.0)
55
+ factory_girl (4.7.0)
56
+ activesupport (>= 3.0.0)
57
+ factory_girl_rails (4.7.0)
58
+ factory_girl (~> 4.7.0)
59
+ railties (>= 3.0.0)
54
60
  globalid (0.3.7)
55
61
  activesupport (>= 4.1.0)
56
62
  i18n (0.7.0)
@@ -135,10 +141,11 @@ PLATFORMS
135
141
 
136
142
  DEPENDENCIES
137
143
  database_cleaner
138
- exportabe!
144
+ exportable!
145
+ factory_girl_rails
139
146
  rails (>= 4.0)
140
147
  rspec-rails
141
148
  sqlite3
142
149
 
143
150
  BUNDLED WITH
144
- 1.12.5
151
+ 1.14.0
@@ -13,15 +13,20 @@ Gem::Specification.new do |s|
13
13
  s.summary = "Exporting Rails ActiveRecord models."
14
14
  s.description = 'Exportable will help you in exporting ActiveRecord models in to different output formats including CSV, XLS etc.'
15
15
  s.license = "MIT"
16
+
16
17
  s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
18
  s.bindir = "exe"
18
19
  s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
20
  s.require_paths = ["lib"]
20
21
  s.test_files = Dir["spec/**/*"]
22
+
21
23
  s.add_dependency 'activerecord', ['>= 4.0']
22
24
  s.add_dependency 'spreadsheet'
25
+ s.add_dependency 'nokogiri'
26
+
23
27
  s.add_development_dependency 'rails', ['>= 4.0']
24
28
  s.add_development_dependency 'sqlite3'
25
29
  s.add_development_dependency 'rspec-rails'
26
30
  s.add_development_dependency 'database_cleaner'
31
+ s.add_development_dependency 'factory_girl_rails'
27
32
  end
@@ -11,6 +11,7 @@ module Exportable
11
11
  autoload_under 'export_methods' do
12
12
  autoload :CsvExporter
13
13
  autoload :XlsExporter
14
+ autoload :XmlExporter
14
15
  end
15
16
 
16
17
  def self.included(base)
@@ -3,6 +3,7 @@ module Exportable
3
3
  module ExportMethods
4
4
  include CsvExporter
5
5
  include XlsExporter
6
+ include XmlExporter
6
7
 
7
8
  def export(format, options = {})
8
9
  unless Exportable.formats.include?(format.to_sym)
@@ -0,0 +1,41 @@
1
+ module Exportable
2
+ module ExportMethods
3
+ # Module to handle only XLS exporting
4
+ module XmlExporter
5
+ include Exportable::Utils
6
+ Exportable.formats << :xml
7
+
8
+ def export_xml(options = {})
9
+ export_options = get_export_options(self, @options.merge(options))
10
+ Exporter.new(self).export(export_options)
11
+ end
12
+
13
+ # Exporter class for XML
14
+ class Exporter
15
+ require 'nokogiri'
16
+
17
+ def initialize(model)
18
+ @model = model
19
+ end
20
+
21
+ def export(options)
22
+ Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
23
+ xml.root do
24
+ xml.send(@model.model_name.collection) do
25
+ @model.all.find_each do |record|
26
+ xml.send(@model.model_name.element) do
27
+ options[:fields].each do |attr|
28
+ xml.send(attr, record.send(attr).to_s)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end.to_xml
35
+ end
36
+
37
+
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,3 +1,3 @@
1
1
  module Exportable
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
@@ -4,7 +4,7 @@ require "spec_helper"
4
4
  describe Exportable::ClassMethods, type: :model do
5
5
 
6
6
  before(:each) do
7
- ExportableModel.create!(field_string: "sample string", field_text: "sample text", field_date: Date.today )
7
+ create(:exportable_model)
8
8
  end
9
9
 
10
10
  it "adds 'exportable' method to model" do
@@ -3,7 +3,7 @@ require "spec_helper"
3
3
  describe 'Export CSV' do
4
4
 
5
5
  before(:each) do
6
- ExportableModel.create!(field_string: "sample string", field_text: "sample text", field_date: Date.today )
6
+ create(:exportable_model)
7
7
  end
8
8
 
9
9
  it "responds to export_csv" do
@@ -4,7 +4,7 @@ require "spec_helper"
4
4
  describe Exportable::ExportMethods, type: :model do
5
5
 
6
6
  before(:each) do
7
- ExportableModel.create!(field_string: "sample string", field_text: "sample text", field_date: Date.today )
7
+ create(:exportable_model)
8
8
  ExportableModel.class_eval{ exportable }
9
9
  end
10
10
 
@@ -24,7 +24,7 @@ describe Exportable::ExportMethods, type: :model do
24
24
  end
25
25
 
26
26
  it 'raise error on invalid output format' do
27
- expect{ExportableModel.export(:xml)}.to raise_error(ArgumentError)
27
+ expect{ExportableModel.export(:tsv)}.to raise_error(ArgumentError)
28
28
  end
29
29
  end
30
30
 
@@ -3,8 +3,7 @@ require "spec_helper"
3
3
  describe 'Export XLS' do
4
4
 
5
5
  before(:each) do
6
- ExportableModel.create!(field_string: "sample string", field_text: "sample text",
7
- field_date: Date.today )
6
+ create(:exportable_model)
8
7
  end
9
8
 
10
9
  it "responds to export_csv" do
@@ -0,0 +1,50 @@
1
+ describe 'Export XML' do
2
+
3
+ before(:each) do
4
+ create_list(:exportable_model, 3)
5
+ end
6
+
7
+ it 'responds to export_xml' do
8
+ ExportableModel.class_eval{ exportable }
9
+ expect(ExportableModel.respond_to? 'export_xml').to be_truthy
10
+ end
11
+
12
+ it "exports xml data with 'export_xml' method" do
13
+ ExportableModel.class_eval{ exportable }
14
+ output = Nokogiri::XML.parse(ExportableModel.all.export_xml)
15
+ expect(output.xpath('//exportable_model').length).to eq 3
16
+ end
17
+
18
+ it "exports xml data with 'export' method" do
19
+ ExportableModel.class_eval{ exportable }
20
+ output = Nokogiri::XML.parse(ExportableModel.all.export(:xml))
21
+ expect(output.xpath('//exportable_model').length).to eq 3
22
+ end
23
+
24
+ it "exports xml data with 'only' option" do
25
+ ExportableModel.class_eval{ exportable only: [:field_string] }
26
+ output = Nokogiri::XML.parse(ExportableModel.all.export_xml)
27
+ expect(output.xpath('//field_text').length).to eq 0
28
+ end
29
+
30
+ it "exports xml data with 'except' option" do
31
+ ExportableModel.class_eval{ exportable except: [:field_string] }
32
+ output = Nokogiri::XML.parse(ExportableModel.all.export_xml)
33
+ expect(output.xpath('//field_string').length).to eq 0
34
+ expect(output.xpath('//field_text').length).to eq 3
35
+ end
36
+
37
+
38
+ it "exports xml data with 'methods' option" do
39
+ ExportableModel.class_eval do
40
+ exportable methods: [:title]
41
+ def title
42
+ field_string.upcase
43
+ end
44
+ end
45
+ output = Nokogiri::XML.parse(ExportableModel.all.export_xml)
46
+ expect(output.xpath('//title').length).to eq 3
47
+ end
48
+
49
+
50
+ end
@@ -0,0 +1,7 @@
1
+ FactoryGirl.define do
2
+ factory :exportable_model do
3
+ field_string "sample string"
4
+ field_text "sample text"
5
+ field_date Date.today
6
+ end
7
+ end
@@ -21,23 +21,7 @@ ENV["RAILS_ENV"] = "test"
21
21
  require File.expand_path("../dummy/config/environment.rb", __FILE__)
22
22
  Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each {|f| require f}
23
23
  require 'database_cleaner'
24
-
25
-
26
- RSpec.configure do |config|
27
-
28
- config.before(:suite) do
29
- DatabaseCleaner.strategy = :transaction
30
- DatabaseCleaner.clean_with(:truncation)
31
- end
32
-
33
- config.around(:each) do |example|
34
- DatabaseCleaner.cleaning do
35
- example.run
36
- end
37
- end
38
-
39
- end
40
-
24
+ require 'factory_girl_rails'
41
25
 
42
26
 
43
27
  RSpec.configure do |config|
@@ -125,4 +109,17 @@ RSpec.configure do |config|
125
109
  Kernel.srand config.seed
126
110
  =end
127
111
  config.include Helper::XlsHelper
112
+ config.include FactoryGirl::Syntax::Methods
113
+
114
+ config.before(:suite) do
115
+ DatabaseCleaner.strategy = :transaction
116
+ DatabaseCleaner.clean_with(:truncation)
117
+ end
118
+
119
+ config.around(:each) do |example|
120
+ DatabaseCleaner.cleaning do
121
+ example.run
122
+ end
123
+ end
124
+
128
125
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exportable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sunil Antony
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-01-14 00:00:00.000000000 Z
11
+ date: 2017-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: nokogiri
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rails
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +108,20 @@ dependencies:
94
108
  - - ">="
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: factory_girl_rails
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
97
125
  description: Exportable will help you in exporting ActiveRecord models in to different
98
126
  output formats including CSV, XLS etc.
99
127
  email:
@@ -116,6 +144,7 @@ files:
116
144
  - lib/exportable/export_methods.rb
117
145
  - lib/exportable/export_methods/csv_exporter.rb
118
146
  - lib/exportable/export_methods/xls_exporter.rb
147
+ - lib/exportable/export_methods/xml_exporter.rb
119
148
  - lib/exportable/utils.rb
120
149
  - lib/exportable/version.rb
121
150
  - lib/tasks/exportable_tasks.rake
@@ -158,6 +187,8 @@ files:
158
187
  - spec/exportable/csv_exporter_spec.rb
159
188
  - spec/exportable/export_methods_spec.rb
160
189
  - spec/exportable/xls_exporter_spec.rb
190
+ - spec/exportable/xml_exporter_spec.rb
191
+ - spec/factories/exportable_model.rb
161
192
  - spec/spec_helper.rb
162
193
  - spec/support/helper.rb
163
194
  homepage: https://github.com/chackoantony/exportable
@@ -221,6 +252,8 @@ test_files:
221
252
  - spec/dummy/config.ru
222
253
  - spec/dummy/app/models/exportable_model.rb
223
254
  - spec/dummy/app/models/application_record.rb
255
+ - spec/factories/exportable_model.rb
256
+ - spec/exportable/xml_exporter_spec.rb
224
257
  - spec/exportable/class_methods_spec.rb
225
258
  - spec/exportable/csv_exporter_spec.rb
226
259
  - spec/exportable/export_methods_spec.rb