exporter 0.0.2 → 0.0.3

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: 54d0c5d2182a7f626aaf086115972ee69a59a703
4
- data.tar.gz: 50105309abf883eb09c562b24a97872eabc136bb
3
+ metadata.gz: 9b8edc0551e8c2615785995f42f8b534ad188c63
4
+ data.tar.gz: aad26a14494806cdca3274e96e0dd93c9f2d26e2
5
5
  SHA512:
6
- metadata.gz: ab1442f9da308cf03f68ae7449dec7dae6f1492419c5445a7465c383793fb05898138efe9cf7de00c857fad510eecefb68046c1c23493b0e37b02429f83709d3
7
- data.tar.gz: 4af2065a2f20a3fcdc997313b798079a50b39a00b9080675b847c3199afee0a2f3cfeb04d136592266bd13cb672e09001716042857fd5532555dc8dfb2ade0d8
6
+ metadata.gz: d443e04b11b5c3d96fddb7457282a48f86dc0bb628f1b6a42d0af0a0d24bebb4b0a4c2ec15b552603f9c9e1192a59e5db72daa9d2faed6a7277db2caed9d354a
7
+ data.tar.gz: dde08124573c9c8dd5b281b5afd8cf17446c9c9c223ad7a8c50da8b7646284bdc5bb557626fa4d6c0e87087fac1042246b89809ab1ef2bff7958a69363ab21a4
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ .DS_Store
1
2
  *.gem
2
3
  *.rbc
3
4
  .bundle
data/Gemfile CHANGED
@@ -2,4 +2,8 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in exporter.gemspec
4
4
  gemspec
5
- gem 'coveralls', require: false
5
+ gem 'activerecord'
6
+ group :test do
7
+ gem 'rspec'
8
+ gem 'coveralls', require: false
9
+ end
data/README.md CHANGED
@@ -1,8 +1,13 @@
1
1
  # Exporter
2
+ [![Gem Version](https://badge.fury.io/rb/exporter.png)](http://badge.fury.io/rb/exporter)
2
3
  [![Build Status](https://travis-ci.org/voanhduy1512/exporter.png?branch=master)](https://travis-ci.org/voanhduy1512/exporter)
3
4
  [![Code Climate](https://codeclimate.com/github/voanhduy1512/exporter.png)](https://codeclimate.com/github/voanhduy1512/exporter)
4
5
  [![Coverage Status](https://coveralls.io/repos/voanhduy1512/exporter/badge.png)](https://coveralls.io/r/voanhduy1512/exporter)
5
6
  [![Dependency Status](https://gemnasium.com/voanhduy1512/exporter.png)](https://gemnasium.com/voanhduy1512/exporter)
7
+
8
+
9
+
10
+
6
11
  ## Installation
7
12
 
8
13
  Add this line to your application's Gemfile:
@@ -20,11 +25,3 @@ Or install it yourself as:
20
25
  ## Usage
21
26
 
22
27
  TODO: Write usage instructions here
23
-
24
- ## Contributing
25
-
26
- 1. Fork it
27
- 2. Create your feature branch (`git checkout -b my-new-feature`)
28
- 3. Commit your changes (`git commit -am 'Add some feature'`)
29
- 4. Push to the branch (`git push origin my-new-feature`)
30
- 5. Create new Pull Request
data/exporter.gemspec CHANGED
@@ -20,6 +20,5 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
- spec.add_development_dependency "rspec"
24
- spec.add_development_dependency 'coveralls'
23
+ spec.add_development_dependency 'sqlite3'
25
24
  end
data/lib/exporter.rb CHANGED
@@ -2,13 +2,15 @@ require "exporter/version"
2
2
  require "exporter/configuration"
3
3
  require "exporter/document"
4
4
  require "exporter/exporter"
5
+ require "exporter/documents/csv_document"
6
+ require "exporter/exporters/csv_exporter"
5
7
 
6
8
  module Exporter
7
9
  def self.configuration
8
10
  @configuration ||= Configuration.new
9
11
  end
10
12
 
11
- def self.export(data, export_type, options)
13
+ def self.export(data, export_type, options={})
12
14
  exporter = @configuration.exporter(data.class, export_type)
13
15
  if exporter
14
16
  exporter.export(data, options)
@@ -17,3 +19,5 @@ module Exporter
17
19
  end
18
20
  end
19
21
  end
22
+
23
+ Exporter.configuration.register(Array, :csv, Exporter::CsvExporter)
@@ -9,7 +9,7 @@ module Exporter
9
9
  end
10
10
 
11
11
  def can_export?(data_type, export_type)
12
- (@exporters[data_type] && @exporters[data_type][export_type]) ? true : false
12
+ @exporters[data_type] && @exporters[data_type][export_type]
13
13
  end
14
14
 
15
15
  def exporter(data_type, export_type)
@@ -5,9 +5,9 @@ module Exporter
5
5
  def initialize(data)
6
6
  @data = data
7
7
  end
8
-
8
+
9
9
  def to_file(path)
10
- raise NotImplementedError.new("You must implement this to_file method.")
10
+ File.open(path, 'w') {|f| f.write(@data) }
11
11
  end
12
12
  end
13
13
  end
@@ -0,0 +1,7 @@
1
+ module Exporter
2
+ class CsvDocument < Document
3
+ def to_file(path)
4
+ File.open(path, 'w') {|f| f.write(@data) }
5
+ end
6
+ end
7
+ end
@@ -1,13 +1,13 @@
1
1
  module Exporter
2
2
  class Exporter
3
- def export(data, options)
3
+ def self.export(data, options)
4
4
  document = process(data, options)
5
5
  raise TypeError.new('process method must return an Document object') unless document.kind_of? Document
6
6
  document
7
7
  end
8
8
 
9
9
  protected
10
- def process(data, options)
10
+ def self.process(data, options)
11
11
  raise NotImplementedError.new("You must implement this process method.")
12
12
  end
13
13
  end
@@ -0,0 +1,25 @@
1
+ require 'CSV'
2
+ module Exporter
3
+ class CsvExporter < Exporter
4
+ def self.process(data, options)
5
+
6
+ raise TypeError.new('data must be an array') unless data.class.eql? Array
7
+ raise TypeError.new('Data must be an ActiveRecord') unless data[0].kind_of? ActiveRecord::Base
8
+
9
+ if options[:columns]
10
+ columns = options[:columns]
11
+ else
12
+ columns = data[0].class.attribute_names
13
+ end
14
+
15
+ data = CSV.generate do |csv|
16
+ csv << columns
17
+ data.each do |d|
18
+ csv << d.attributes.values_at(*columns)
19
+ end
20
+ end
21
+
22
+ CsvDocument.new(data)
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module Exporter
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -1,8 +1,18 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Exporter do
4
+ let(:data){
5
+ [
6
+ Exporter::User.create(:name => 'aaa', :email => 'aaa@aaa.aaa'),
7
+ Exporter::User.create(:name => 'bbb', :email => 'bbb@bbb.bbb')
8
+ ]
9
+ }
4
10
  describe '.export' do
5
11
  it 'return an Exporter::Document' do
12
+ document = Exporter.export(data, :csv)
13
+ puts document.kind_of? Exporter::Document
14
+ puts document.class
15
+ expect(document).to be_kind_of(Exporter::Document)
6
16
  end
7
17
  end
8
18
  end
@@ -0,0 +1,4 @@
1
+ module Exporter
2
+ class User < ActiveRecord::Base
3
+ end
4
+ end
data/spec/spec_helper.rb CHANGED
@@ -4,10 +4,16 @@
4
4
  # loaded once.
5
5
  #
6
6
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
- require 'coveralls'
8
- Coveralls.wear!
7
+
8
+ if ENV['TRAVIS']
9
+ require 'coveralls'
10
+ Coveralls.wear!
11
+ end
9
12
 
10
13
  require "exporter"
14
+ require 'active_record'
15
+ require 'models/user'
16
+
11
17
  RSpec.configure do |config|
12
18
  config.treat_symbols_as_metadata_keys_with_true_values = true
13
19
  config.run_all_when_everything_filtered = true
@@ -21,3 +27,16 @@ RSpec.configure do |config|
21
27
  # --seed 1234
22
28
  config.order = 'random'
23
29
  end
30
+
31
+ ActiveRecord::Base.establish_connection(
32
+ :adapter => 'sqlite3',
33
+ :database => ':memory:'
34
+ )
35
+ ActiveRecord::Schema.define do
36
+ self.verbose = false
37
+
38
+ create_table :users, :force => true do |t|
39
+ t.string :name
40
+ t.string :email
41
+ end
42
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exporter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Võ Anh Duy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-15 00:00:00.000000000 Z
11
+ date: 2013-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -39,21 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - '>='
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: coveralls
42
+ name: sqlite3
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - '>='
@@ -85,9 +71,12 @@ files:
85
71
  - lib/exporter.rb
86
72
  - lib/exporter/configuration.rb
87
73
  - lib/exporter/document.rb
74
+ - lib/exporter/documents/csv_document.rb
88
75
  - lib/exporter/exporter.rb
76
+ - lib/exporter/exporters/csv_exporter.rb
89
77
  - lib/exporter/version.rb
90
78
  - spec/lib/exporter_spec.rb
79
+ - spec/models/user.rb
91
80
  - spec/spec_helper.rb
92
81
  homepage: ''
93
82
  licenses:
@@ -115,4 +104,5 @@ specification_version: 4
115
104
  summary: A simple data exporter
116
105
  test_files:
117
106
  - spec/lib/exporter_spec.rb
107
+ - spec/models/user.rb
118
108
  - spec/spec_helper.rb