enum_csv 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5adcc47fbd7b34a09baac9c8ac6c54f86c316ba1
4
+ data.tar.gz: 47d03538cf37af19be66993d618526b6bc03dddb
5
+ SHA512:
6
+ metadata.gz: 532750b7c690dd1960462a18ddb610915cc70effa99c46719e1ffc4108503b3715e9f4ec26f62ff591765bda336a7f22add9438e6f43ef367659cf9319aadacd
7
+ data.tar.gz: e72e5b42e72913a3840f297f4a6684f26424e77aaff93136bc2174aaf37d3a110e8d87066130e410cd47e131f8fc23a1ba6b5a81b76b892d2be7774f77fa3bee
@@ -0,0 +1,3 @@
1
+ === 1.0.0 (2013-12-18)
2
+
3
+ * Initial Public Release
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2013 Jeremy Evans
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to
5
+ deal in the Software without restriction, including without limitation the
6
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
+ THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,46 @@
1
+ = EnumCSV
2
+
3
+ EnumCSV exposes a single method, csv, for easily creating CSV
4
+ output/files from enumerable objects. It is a super simple wrapper
5
+ class for ruby's csv library.
6
+
7
+ = Installation
8
+
9
+ sudo gem install enum_csv
10
+
11
+ = Source Code
12
+
13
+ Source code is available on GitHub at https://github.com/jeremyevans/enum_csv
14
+
15
+ = Examples
16
+
17
+ The default behavior just expects an enumerable of arrays (such as an array of
18
+ arrays), and returns a string containing the CSV output:
19
+
20
+ EnumCSV.csv([[1, 2]]) => "1,2\n"
21
+
22
+ You can use the :headers option to set custom headers:
23
+
24
+ EnumCSV.csv([[1, 2], [3,"4,5"]], :headers=>['A', 'B']) => "A,B\n1,2\n3,\"4,5\"\n"
25
+
26
+ The :file option can be used to output to a file:
27
+
28
+ EnumCSV.csv([[1, 2]], :file=>'foo.csv') => nil # output written to foo.csv
29
+
30
+ If a block is passed to the method, all items in the enumerable are yielded to
31
+ the block, and the block should return an array with the data to use in the CSV
32
+ output:
33
+
34
+ EnumCSV.csv([{:a=>1, :b=>2}, {:a=>3, b=>4}]){|line| [l[:b], l[:a] + 10]} => "2,11\n4,13\n"
35
+
36
+ = Ruby 1.8 Usage
37
+
38
+ On Ruby 1.8, you need to install the fastercsv gem to use this library.
39
+
40
+ = License
41
+
42
+ MIT
43
+
44
+ = Author
45
+
46
+ Jeremy Evans <code@jeremyevans.net>
@@ -0,0 +1,69 @@
1
+ require "rake"
2
+ require "rake/clean"
3
+
4
+ CLEAN.include ["enum_csv-*.gem", "rdoc", "coverage"]
5
+
6
+ desc "Build enum_csv gem"
7
+ task :package=>[:clean] do |p|
8
+ sh %{#{FileUtils::RUBY} -S gem build enum_csv.gemspec}
9
+ end
10
+
11
+ ### Specs
12
+
13
+ begin
14
+ begin
15
+ # RSpec 1
16
+ require "spec/rake/spectask"
17
+ spec_class = Spec::Rake::SpecTask
18
+ spec_files_meth = :spec_files=
19
+ rescue LoadError
20
+ # RSpec 2
21
+ require "rspec/core/rake_task"
22
+ spec_class = RSpec::Core::RakeTask
23
+ spec_files_meth = :pattern=
24
+ end
25
+
26
+ spec = lambda do |name, files, d|
27
+ lib_dir = File.join(File.dirname(File.expand_path(__FILE__)), 'lib')
28
+ ENV['RUBYLIB'] ? (ENV['RUBYLIB'] += ":#{lib_dir}") : (ENV['RUBYLIB'] = lib_dir)
29
+ desc d
30
+ spec_class.new(name) do |t|
31
+ t.send(spec_files_meth, files)
32
+ end
33
+ end
34
+
35
+ task :default => [:spec]
36
+ spec.call("spec", Dir["spec/*_spec.rb"], "Run specs")
37
+ rescue LoadError
38
+ task :default do
39
+ puts "Must install rspec >=2.0 to run the default task (which runs specs)"
40
+ end
41
+ end
42
+
43
+ ### RDoc
44
+
45
+ RDOC_DEFAULT_OPTS = ["--quiet", "--line-numbers", "--inline-source", '--title', 'EnumCSV: Create CSV from Enumerables']
46
+
47
+ begin
48
+ gem 'rdoc', '= 3.12.2'
49
+ gem 'hanna-nouveau'
50
+ RDOC_DEFAULT_OPTS.concat(['-f', 'hanna'])
51
+ rescue Gem::LoadError
52
+ end
53
+
54
+ rdoc_task_class = begin
55
+ require "rdoc/task"
56
+ RDoc::Task
57
+ rescue LoadError
58
+ require "rake/rdoctask"
59
+ Rake::RDocTask
60
+ end
61
+
62
+ RDOC_OPTS = RDOC_DEFAULT_OPTS + ['--main', 'README.rdoc']
63
+
64
+ rdoc_task_class.new do |rdoc|
65
+ rdoc.rdoc_dir = "rdoc"
66
+ rdoc.options += RDOC_OPTS
67
+ rdoc.rdoc_files.add %w"README.rdoc CHANGELOG MIT-LICENSE lib/**/*.rb"
68
+ end
69
+
@@ -0,0 +1,44 @@
1
+ # EnumCSV exposes a single method, csv, for easily creating CSV
2
+ # output/files from enumerable objects.
3
+ module EnumCSV
4
+ if RUBY_VERSION >= '1.9'
5
+ require 'csv'
6
+ else
7
+ require 'fastercsv'
8
+ # Use FasterCSV on ruby 1.8
9
+ CSV = ::FasterCSV
10
+ end
11
+
12
+ # Create CSV from the given Enumerable object. If a block is given,
13
+ # each item in the enumerable is yielded to the block, and the block
14
+ # should return an array of of items to use for the CSV line.
15
+ #
16
+ # Options:
17
+ # :headers :: Should be an array of headers to use as the first
18
+ # line of the CSV output.
19
+ # :file :: Output to the given file and return nil instead of
20
+ # returning a string with the CSV output.
21
+ # all other options :: Passed to CSV.open or CSV.generate
22
+ def csv(enum, opts={})
23
+ if opts[:headers].is_a?(Array) && !opts.has_key?(:write_headers)
24
+ opts = opts.merge(:write_headers=>true)
25
+ end
26
+
27
+ csv_proc = proc do |csv|
28
+ enum.each do |line|
29
+ line = yield(line) if block_given?
30
+ csv << line
31
+ end
32
+ end
33
+
34
+ if opts[:file]
35
+ opts = opts.dup
36
+ file = opts.delete(:file)
37
+ CSV.open(file, 'wb', opts, &csv_proc)
38
+ nil
39
+ else
40
+ CSV.generate(opts, &csv_proc)
41
+ end
42
+ end
43
+ module_function :csv
44
+ end
@@ -0,0 +1,43 @@
1
+ require File.join(File.dirname(File.expand_path(__FILE__)), '../lib/enum_csv')
2
+
3
+ describe "EnumCSV.csv" do
4
+ TEST_FILE = File.join(File.dirname(File.expand_path(__FILE__)), 'test.csv')
5
+ after(:all) do
6
+ File.delete(TEST_FILE)
7
+ end
8
+
9
+ it "should return string of CSV data for enumerable" do
10
+ EnumCSV.csv([[1, 2]]).should == "1,2\n"
11
+ EnumCSV.csv([[1, 2], [3, 4]]).should == "1,2\n3,4\n"
12
+ EnumCSV.csv([[1, '2,3'], [3, 4]]).should == "1,\"2,3\"\n3,4\n"
13
+ EnumCSV.csv([[1, nil], [3, 4]]).should == "1,\n3,4\n"
14
+ end
15
+
16
+ it "should support :headers option for a headers string" do
17
+ EnumCSV.csv([[1, 2]], :headers=>['a', 'b']).should == "a,b\n1,2\n"
18
+ EnumCSV.csv([[1, 2], [3, 4]], :headers=>['a', 'b']).should == "a,b\n1,2\n3,4\n"
19
+ EnumCSV.csv([[1, '2,3'], [3, 4]], :headers=>['a,b', 'c']).should == "\"a,b\",c\n1,\"2,3\"\n3,4\n"
20
+ EnumCSV.csv([[1, nil], [3, 4]], :headers=>['a', nil]).should == "a,\n1,\n3,4\n"
21
+ end
22
+
23
+ it "should support :file option for writing to a file" do
24
+ EnumCSV.csv([[1, 2]], :file=>TEST_FILE).should be_nil
25
+ File.read(TEST_FILE).should == "1,2\n"
26
+ EnumCSV.csv([[1, 2]], :file=>TEST_FILE, :headers=>['a', 'b'])
27
+ File.read(TEST_FILE).should == "a,b\n1,2\n"
28
+ end
29
+
30
+ it "should support other csv options" do
31
+ EnumCSV.csv([[1, 2]], :row_sep=>'|').should == "1,2|"
32
+ EnumCSV.csv([[1, 2], [3, 4]], :col_sep=>'^').should == "1^2\n3^4\n"
33
+ end
34
+
35
+ it "should yield elements to the block if given" do
36
+ EnumCSV.csv([[1, 2]]){|l| l.map{|i| i*2}}.should == "2,4\n"
37
+ EnumCSV.csv([[1, 2]], :headers=>['a', 'b']){|l| l.map{|i| i*2}}.should == "a,b\n2,4\n"
38
+ end
39
+
40
+ it "should be callable as a method if including the module" do
41
+ Class.new{include EnumCSV}.new.send(:csv, [[1, 2]]).should == "1,2\n"
42
+ end
43
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: enum_csv
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jeremy Evans
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-18 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |
14
+ EnumCSV exposes a single method, csv, for easily creating CSV
15
+ output/files from enumerable objects.
16
+ email: code@jeremyevans.net
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files:
20
+ - README.rdoc
21
+ - CHANGELOG
22
+ - MIT-LICENSE
23
+ files:
24
+ - MIT-LICENSE
25
+ - CHANGELOG
26
+ - README.rdoc
27
+ - Rakefile
28
+ - spec/enum_csv_spec.rb
29
+ - lib/enum_csv.rb
30
+ homepage: http://gihub.com/jeremyevans/enum_csv
31
+ licenses:
32
+ - MIT
33
+ metadata: {}
34
+ post_install_message:
35
+ rdoc_options:
36
+ - --quiet
37
+ - --line-numbers
38
+ - --inline-source
39
+ - --title
40
+ - 'EnumCSV: Create CSV from Enumerables'
41
+ - --main
42
+ - README.rdoc
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubyforge_project:
57
+ rubygems_version: 2.0.14
58
+ signing_key:
59
+ specification_version: 4
60
+ summary: Create CSV from Enumerables
61
+ test_files: []