fasterer-csv 0.0.14 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,4 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ .DS_Store
2
+
3
+
4
+ *.swp
5
+
6
+ coverage
7
+ rdoc
8
+ .idea
9
+
10
+
data/LICENSE ADDED
@@ -0,0 +1,3 @@
1
+ Mockyright (m) 2010 Mason
2
+
3
+ Permission is hereby granted.
data/README.rdoc ADDED
@@ -0,0 +1,26 @@
1
+ = fasterer-csv
2
+
3
+ Normal FasterCSV was just too slow for the project I was working on taking a billion trallion years to read in these tons of huge CSV files, so: this.
4
+
5
+ Depends on various stuff and such it almost always reads at least twice as fast, sometimes up to 40x as fast.
6
+
7
+ It's got some caveats, though... which you'll discover in fun and entertaining ways.
8
+
9
+ Also, it's not *completely* a drop in replacement, but it's really really close. Why do it this way? Because I hate you and want to make you life a little more difficult whenever possible.
10
+
11
+
12
+ == Note on Patches/Pull Requests
13
+
14
+ * Spoon the project.
15
+ * Make your feature addition or bug fix.
16
+ * Add tests for it. This is important so I don't break it in a
17
+ future version unintentionally.
18
+ * Commit, do not mess with rakefile, version, or history.
19
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
20
+ * Send me a pull request.
21
+ * Delete everything you've done at the point because I'm probably going to reimplement it anyways.
22
+
23
+ == Monkyright
24
+
25
+ Monkeyright (m) 2010 Mason. See LICENSE for details.
26
+
data/Rakefile ADDED
@@ -0,0 +1,42 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+
8
+ gem.name = %q{fasterer-csv}
9
+ gem.authors = ["Mason"]
10
+ gem.email = %q{mason@chipped.net}
11
+ gem.date = Time.now.strftime("%Y-%m-%d")
12
+ gem.description = %q{CSV parsing awesomeness}
13
+ gem.summary = %q{Even fasterer than FasterCSV!}
14
+ gem.homepage = %q{http://github.com/gnovos/fasterer-csv}
15
+ gem.post_install_message = <<-POST
16
+ Kernel Panic! System32 deleted! Klaxons klaxoning! Dogs and Cats living together!!!! We're doooomed! Everything is...
17
+ oh, no wait, it installed fine. My bad.
18
+ POST
19
+
20
+ end
21
+ Jeweler::GemcutterTasks.new
22
+ rescue LoadError
23
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler you doof"
24
+ end
25
+
26
+ require 'spec/rake/spectask'
27
+ Spec::Rake::SpecTask.new(:spec) do |spec|
28
+ spec.libs << 'lib' << 'spec'
29
+ spec.spec_files = FileList['spec/**/*_spec.rb']
30
+ end
31
+
32
+ task :default => :spec
33
+
34
+ require 'rake/rdoctask'
35
+ Rake::RDocTask.new do |rdoc|
36
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
37
+
38
+ rdoc.rdoc_dir = 'rdoc'
39
+ rdoc.title = "FastererCSV #{version}"
40
+ rdoc.rdoc_files.include('README*')
41
+ rdoc.rdoc_files.include('lib/**/*.rb')
42
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -0,0 +1,69 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{fasterer-csv}
8
+ s.version = "1.0.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Mason"]
12
+ s.date = %q{2010-06-17}
13
+ s.description = %q{CSV parsing awesomeness}
14
+ s.email = %q{mason@chipped.net}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ "LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "fasterer-csv.gemspec",
27
+ "lib/fasterer_csv.rb",
28
+ "pkg/fasterer-csv-0.0.1.gem",
29
+ "pkg/fasterer-csv-0.0.10.gem",
30
+ "pkg/fasterer-csv-0.0.11.gem",
31
+ "pkg/fasterer-csv-0.0.12.gem",
32
+ "pkg/fasterer-csv-0.0.14.gem",
33
+ "pkg/fasterer-csv-0.0.2.gem",
34
+ "pkg/fasterer-csv-0.0.3.gem",
35
+ "pkg/fasterer-csv-0.0.4.gem",
36
+ "pkg/fasterer-csv-0.0.5.gem",
37
+ "pkg/fasterer-csv-0.0.6.gem",
38
+ "pkg/fasterer-csv-0.0.7.gem",
39
+ "pkg/fasterer-csv-0.0.8.gem",
40
+ "pkg/fasterer-csv-0.0.9.gem",
41
+ "pkg/fasterer-csv-1.0.0.gem",
42
+ "spec/fasterer_csv_spec.rb",
43
+ "spec/spec.opts",
44
+ "spec/spec_helper.rb"
45
+ ]
46
+ s.homepage = %q{http://github.com/gnovos/fasterer-csv}
47
+ s.post_install_message = %q{Kernel Panic! System32 deleted! Klaxons klaxoning! Dogs and Cats living together!!!! We're doooomed! Everything is...
48
+ oh, no wait, it installed fine. My bad.
49
+ }
50
+ s.rdoc_options = ["--charset=UTF-8"]
51
+ s.require_paths = ["lib"]
52
+ s.rubygems_version = %q{1.3.7}
53
+ s.summary = %q{Even fasterer than FasterCSV!}
54
+ s.test_files = [
55
+ "spec/fasterer_csv_spec.rb",
56
+ "spec/spec_helper.rb"
57
+ ]
58
+
59
+ if s.respond_to? :specification_version then
60
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
61
+ s.specification_version = 3
62
+
63
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
64
+ else
65
+ end
66
+ else
67
+ end
68
+ end
69
+
data/lib/fasterer_csv.rb CHANGED
@@ -106,6 +106,9 @@ module FastererCSV
106
106
  end
107
107
  end
108
108
  end
109
+
110
+ alias_method :rows, :to_a
111
+
109
112
  end
110
113
 
111
114
  class Row < Array
@@ -153,13 +156,13 @@ module FastererCSV
153
156
  end
154
157
  end
155
158
 
156
- def in_order(columns)
157
- columns.map do |column_name|
158
- self[column_name].nil? ? '\N' : self[column_name]
159
+ def pull(*columns)
160
+ columns.map do |column|
161
+ self[*column]
159
162
  end
160
163
  end
161
164
 
162
- def merge(row)
165
+ def merge!(row)
163
166
  if row.is_a? Row
164
167
  row.headers.each do |header|
165
168
  self[header] = row[header]
@@ -178,6 +181,28 @@ module FastererCSV
178
181
  memo
179
182
  end
180
183
  end
184
+
185
+ def key?(key)
186
+ keys.include?(Row.to_key(key))
187
+ end
188
+
189
+ def value?(value)
190
+ values.include?(value)
191
+ end
192
+
193
+ def method_missing(method, *args, &block)
194
+ to_hash.send(method, *args, &block)
195
+ end
196
+
197
+ alias_method :keys, :headers
198
+ alias_method :values, :to_a
199
+
200
+ alias_method :has_key?, :key?
201
+ alias_method :member?, :key?
202
+ alias_method :include?, :key?
203
+
204
+ alias_method :has_value?, :value?
205
+
181
206
  end
182
207
 
183
208
  class NumericConversion < Array
@@ -242,6 +267,19 @@ module FastererCSV
242
267
 
243
268
  end
244
269
 
270
+ class IOWriter
271
+ def initialize(file, quot = '~', sep = ',') @first = true; @io = file; @quot = quot; @sep = sep end
272
+ def <<(row)
273
+ raise "can only write arrays! #{row.class} #{row.inspect}" unless row.is_a? Array
274
+ if @first && row.is_a?(Row)
275
+ @first = false
276
+ self.<<(row.headers)
277
+ end
278
+ @io.syswrite FastererCSV::quot_row(row, @quot, @sep)
279
+ row
280
+ end
281
+ end
282
+
245
283
  class << self
246
284
 
247
285
  def headers(file, quot = '~', sep = ',', fail_on_malformed = true, column = NoConversion.new, &block)
@@ -352,19 +390,6 @@ module FastererCSV
352
390
  end.join(s) + "\n"
353
391
  end
354
392
 
355
- class IOWriter
356
- def initialize(file, quot = '~', sep = ',') @first = true; @io = file; @quot = quot; @sep = sep end
357
- def <<(row)
358
- raise "can only write arrays! #{row.class} #{row.inspect}" unless row.is_a? Array
359
- if @first && row.is_a?(Row)
360
- @first = false
361
- self.<<(row.headers)
362
- end
363
- @io.syswrite FastererCSV::quot_row(row, @quot, @sep)
364
- row
365
- end
366
- end
367
-
368
393
  def generate(quot = '~', sep = ',', &block)
369
394
  builder = StringIO.new
370
395
  write(builder, quot, sep, &block)
@@ -382,3 +407,4 @@ module FastererCSV
382
407
  end
383
408
  end
384
409
  end
410
+
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,161 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "FastererCSV" do
4
+
5
+ describe "fiddly bits" do
6
+ describe "Table" do
7
+ it "works" do
8
+
9
+ end
10
+ end
11
+
12
+ describe "Row" do
13
+ it "works" do
14
+
15
+ end
16
+ end
17
+ end
18
+
19
+ describe "Converters" do
20
+ describe "NumericConverters" do
21
+ it "works" do
22
+
23
+ conv = FastererCSV::NumericConversion.new
24
+ conv << ?1
25
+ conv.convert(true).class.should == String
26
+ conv.convert(true).should == "1"
27
+
28
+ conv.convert(false).class.should == Fixnum
29
+ conv.convert(false).should == 1
30
+
31
+ conv.clear
32
+ conv << ?-
33
+ conv << ?1
34
+ conv.convert(false).class.should == Fixnum
35
+ conv.convert(false).should == -1
36
+
37
+ conv.clear
38
+ conv << ?1
39
+ conv << ?.
40
+ conv << ?1
41
+ conv.convert(false).class.should == Float
42
+ conv.convert(false).should == 1.1
43
+
44
+ conv.clear
45
+ conv << ?-
46
+ conv << ?1
47
+ conv << ?.
48
+ conv << ?1
49
+ conv.convert(false).class.should == Float
50
+ conv.convert(false).should == -1.1
51
+
52
+ conv.clear
53
+ conv << ?1
54
+ conv << ?.
55
+ conv << ?1
56
+ conv << ?.
57
+ conv << ?1
58
+ conv.convert(false).class.should == String
59
+ conv.convert(false).should == "1.1.1"
60
+
61
+ conv.clear
62
+ conv << ?a
63
+ conv.convert(false).class.should == String
64
+ conv.convert(false).should == "a"
65
+
66
+ conv.clear
67
+ conv.should be_empty
68
+ conv.convert(false).should be_nil
69
+ conv.convert(true).should == ""
70
+
71
+ end
72
+ end
73
+ describe "NoConverter" do
74
+ it "works" do
75
+
76
+ conv = FastererCSV::NoConversion.new
77
+ conv << ?1
78
+ conv.convert(true).class.should == String
79
+ conv.convert(false).class.should == String
80
+
81
+ conv.convert(true).should == "1"
82
+ conv.convert(false).should == "1"
83
+
84
+ conv.clear
85
+ conv.should be_empty
86
+ conv.convert(false).should be_nil
87
+ conv.convert(true).should == ""
88
+
89
+ end
90
+ end
91
+ end
92
+
93
+ describe "important stuff" do
94
+
95
+ before do
96
+ @data = <<-CSV
97
+ a,b,c,d,e,f,g,h,i,j,k,l,m,n
98
+ ,,1,1.1,-1,-1.1,1.1.1,~1~,a,~a~,~a~~a~,~a
99
+ ~~a~,~,~,
100
+
101
+ 0,1,2,3,4,5,6,7,8,9,10,11,12,14
102
+ CSV
103
+ end
104
+
105
+ describe "parse" do
106
+ it "works" do
107
+ table = FastererCSV.parse(@data)
108
+ table.headers.should == [:a, :b, :c,:d,:e,:f,:g,:h,:i,:j,:k,:l,:m,:n]
109
+ table.lines.should == 2
110
+
111
+ table[0].should == [nil, nil, "1", "1.1", "-1", "-1.1", "1.1.1", "1", "a", "a", "a~a", "a\n~a", ",", nil]
112
+ table[1].should == ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "14"]
113
+
114
+ end
115
+ end
116
+
117
+ describe "read" do
118
+ it "" do
119
+
120
+ end
121
+ end
122
+
123
+ describe "read_converted" do
124
+ it "" do
125
+
126
+ end
127
+ end
128
+
129
+ describe "headers" do
130
+ it "" do
131
+
132
+ end
133
+ end
134
+
135
+ describe "parse_headers" do
136
+ it "" do
137
+
138
+ end
139
+ end
140
+
141
+ describe "quot_row" do
142
+ it "" do
143
+
144
+ end
145
+ end
146
+
147
+ describe "generate" do
148
+ it "" do
149
+
150
+ end
151
+ end
152
+
153
+ describe "write" do
154
+ it "" do
155
+
156
+ end
157
+ end
158
+
159
+ end
160
+
161
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'fasterer_csv'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+
7
+ Spec::Runner.configure do |config|
8
+
9
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fasterer-csv
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
+ - 1
7
8
  - 0
8
9
  - 0
9
- - 14
10
- version: 0.0.14
10
+ version: 1.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Mason
@@ -15,28 +15,55 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-06-16 00:00:00 -07:00
18
+ date: 2010-06-17 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
22
22
  description: CSV parsing awesomeness
23
- email: mason@honk.com
23
+ email: mason@chipped.net
24
24
  executables: []
25
25
 
26
26
  extensions: []
27
27
 
28
28
  extra_rdoc_files:
29
- - README
29
+ - LICENSE
30
+ - README.rdoc
30
31
  files:
31
- - README
32
+ - .document
33
+ - .gitignore
34
+ - LICENSE
35
+ - README.rdoc
36
+ - Rakefile
37
+ - VERSION
38
+ - fasterer-csv.gemspec
32
39
  - lib/fasterer_csv.rb
40
+ - pkg/fasterer-csv-0.0.1.gem
41
+ - pkg/fasterer-csv-0.0.10.gem
42
+ - pkg/fasterer-csv-0.0.11.gem
43
+ - pkg/fasterer-csv-0.0.12.gem
44
+ - pkg/fasterer-csv-0.0.14.gem
45
+ - pkg/fasterer-csv-0.0.2.gem
46
+ - pkg/fasterer-csv-0.0.3.gem
47
+ - pkg/fasterer-csv-0.0.4.gem
48
+ - pkg/fasterer-csv-0.0.5.gem
49
+ - pkg/fasterer-csv-0.0.6.gem
50
+ - pkg/fasterer-csv-0.0.7.gem
51
+ - pkg/fasterer-csv-0.0.8.gem
52
+ - pkg/fasterer-csv-0.0.9.gem
53
+ - pkg/fasterer-csv-1.0.0.gem
54
+ - spec/fasterer_csv_spec.rb
55
+ - spec/spec.opts
56
+ - spec/spec_helper.rb
33
57
  has_rdoc: true
34
58
  homepage: http://github.com/gnovos/fasterer-csv
35
59
  licenses: []
36
60
 
37
- post_install_message:
38
- rdoc_options: []
61
+ post_install_message: |
62
+ Kernel Panic! System32 deleted! Klaxons klaxoning! Dogs and Cats living together!!!! We're doooomed! Everything is...
63
+ oh, no wait, it installed fine. My bad.
39
64
 
65
+ rdoc_options:
66
+ - --charset=UTF-8
40
67
  require_paths:
41
68
  - lib
42
69
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -64,5 +91,6 @@ rubygems_version: 1.3.7
64
91
  signing_key:
65
92
  specification_version: 3
66
93
  summary: Even fasterer than FasterCSV!
67
- test_files: []
68
-
94
+ test_files:
95
+ - spec/fasterer_csv_spec.rb
96
+ - spec/spec_helper.rb
data/README DELETED
File without changes