csvp 0.1.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 +7 -0
- data/lib/csvp.rb +59 -0
- metadata +128 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bd64e586de8ea735f1d88ad7c881bb4d6c637a4b
|
4
|
+
data.tar.gz: 3034ebd73917f9a3f21b6a33e1b911672bbdac55
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8877057a52f562f88d75b89b900dccb12e6a8dfaef081a09687930f47c2aad371a8a11dc3f96f0f6d22405c59f8e4f613e94af0ceb3b93c96e84dd634673897f
|
7
|
+
data.tar.gz: 62c7420dfb8f263ce38ac7085600a6a64c76f3863be6b2c2d16b607245f631b530f1c94a9b39a01e6cd9725419e3582626438fbbbb46c7b737bf1f1b60912160
|
data/lib/csvp.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# Prints Enumerable in CSV format on the best effort basis.
|
2
|
+
#
|
3
|
+
# @param enum [Enumerable]
|
4
|
+
# @param separator [String]
|
5
|
+
# @param quote [String]
|
6
|
+
#
|
7
|
+
# Example:
|
8
|
+
# ?> csvp [{a: 1, b: 2}, {a: 3, b: 4} ]
|
9
|
+
# a,b
|
10
|
+
# 1,2
|
11
|
+
# 3,4
|
12
|
+
#
|
13
|
+
# This implementation attempts to follow https://tools.ietf.org/html/rfc4180
|
14
|
+
|
15
|
+
def csvp(enum, separator: ',', quote: "")
|
16
|
+
return if enum.nil?
|
17
|
+
|
18
|
+
add_quotes = proc { |str| "#{quote}#{str.gsub(quote, quote*2)}#{quote}" }
|
19
|
+
|
20
|
+
# Vectorize scalar values into Enumerables to avoid multiple codepaths.
|
21
|
+
enum = case enum
|
22
|
+
when Struct then enum.to_h
|
23
|
+
when OpenStruct then enum.to_h
|
24
|
+
when -> (obj) { defined?(ActiveRecord::Base) && ActiveRecord::Base === obj } then enum.attributes
|
25
|
+
when -> (obj) { defined?(ActiveRecord::Relation) && ActiveRecord::Relation === obj } then enum.to_a
|
26
|
+
when -> (obj) { !obj.is_a?(Enumerable) } then [enum]
|
27
|
+
else enum
|
28
|
+
end
|
29
|
+
|
30
|
+
columns = case enum.first
|
31
|
+
when Hash then enum.first.keys
|
32
|
+
when Struct then enum.first.members
|
33
|
+
when OpenStruct then enum.first.instance_variable_get("@table").keys
|
34
|
+
when -> (obj) { defined?(ActiveRecord::Base) && ActiveRecord::Base === obj } then enum.first.attributes.keys
|
35
|
+
end
|
36
|
+
puts columns.map(&:to_s).map(&add_quotes).join(separator) if columns
|
37
|
+
|
38
|
+
enum.each do |row|
|
39
|
+
values = case row
|
40
|
+
when Hash then row.values
|
41
|
+
when OpenStruct then row.instance_variable_get("@table").values
|
42
|
+
when -> (obj) { defined?(ActiveRecord::Base) && ActiveRecord::Base === obj } then row.attributes.values
|
43
|
+
when Enumerable then row
|
44
|
+
else [row]
|
45
|
+
end
|
46
|
+
|
47
|
+
puts values.map(&:to_s).map(&add_quotes).join(separator)
|
48
|
+
end
|
49
|
+
|
50
|
+
nil
|
51
|
+
end
|
52
|
+
|
53
|
+
def tsvp(enum)
|
54
|
+
csvp enum, separator: "\t"
|
55
|
+
end
|
56
|
+
|
57
|
+
def qcsvp(enum)
|
58
|
+
csvp enum, quote: "\""
|
59
|
+
end
|
metadata
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: csvp
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Martin Scavnicky
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-06-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.4'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.10'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry-byebug
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: activerecord
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.2'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '4.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: sqlite3
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.3'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.3'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: codecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.1'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.1'
|
97
|
+
description: Print enumerables as CSV effortlessly.
|
98
|
+
email: martin.scavnicky@gmail.com
|
99
|
+
executables: []
|
100
|
+
extensions: []
|
101
|
+
extra_rdoc_files: []
|
102
|
+
files:
|
103
|
+
- lib/csvp.rb
|
104
|
+
homepage: https://github.com/mscavnicky/csvp
|
105
|
+
licenses:
|
106
|
+
- MIT
|
107
|
+
metadata: {}
|
108
|
+
post_install_message:
|
109
|
+
rdoc_options: []
|
110
|
+
require_paths:
|
111
|
+
- lib
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
122
|
+
requirements: []
|
123
|
+
rubyforge_project:
|
124
|
+
rubygems_version: 2.5.1
|
125
|
+
signing_key:
|
126
|
+
specification_version: 4
|
127
|
+
summary: CSV Print
|
128
|
+
test_files: []
|