exportable 0.1.0 → 0.2.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.
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