osv 0.3.10 → 0.3.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +50 -42
  3. data/Rakefile +3 -2
  4. data/lib/osv/version.rb +1 -1
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aed16dbfb14e6caebceb388104731091a5354394cd174804982dbce8f4b95963
4
- data.tar.gz: 232497c8ec55ab15559f126c4bc90c6bcd0dd4296efadcbf23d07d6a24c7969d
3
+ metadata.gz: 593a3c94b6ec0366399485444f4d5d6c45b04393cad30686e04b43f289b93d88
4
+ data.tar.gz: 9ae3ce1ff2655d65c726680a412336e853f3fa0328756b5dea69186b2c82654b
5
5
  SHA512:
6
- metadata.gz: 36e1bab13ede785e2f41f0a56b37a2ff7448deff182b614c71e15ccd16799abe94f1f7db63034cd1c04195666c85a12fa0284dde75753b16e05e8767e9c87b18
7
- data.tar.gz: '0990fee8e41dd9eb046d6b3733770adb4ef9825165bb0a012b32dac03ddd9d8f2107860d75ef05437aa8d820d42d16c8148642fd3faab326dcab8007731bcf61'
6
+ metadata.gz: a24c9b58b291d934ae6526e88baddebd768ad4ad431bfab8353b84d4e9f284e954aa2dd80b11138c041613702d56927f3fc4819b9fdcda2a22b5a590ba5459fa
7
+ data.tar.gz: 0a85ef04fc18b4ef680d669c4fb06310b0cd3a0eb2c6c3c5a0a9161bc5af8b8851bf7ca3c1cb08f3fc6fa2d96449e112b86d0bc47871cbd10cae5ebd332edfb4
data/README.md CHANGED
@@ -30,38 +30,68 @@ gem install osv
30
30
 
31
31
  ## Usage
32
32
 
33
- ### Basic Usage with Hash Output
34
-
35
- Each row is returned as a hash where the keys are the column headers:
33
+ ### Reading CSV Files
36
34
 
37
35
  ```ruby
38
36
  require 'osv'
39
37
 
40
- # Read from a file
41
- OSV.for_each("path/to/file.csv") do |row|
42
- # row is a Hash like {"name" => "John", "age" => "25"}
43
- puts row["name"]
38
+ # Basic usage - each row as a hash
39
+ OSV.for_each("data.csv") do |row|
40
+ puts row["name"] # => "John"
41
+ puts row["age"] # => "25"
44
42
  end
45
43
 
46
- # Without a block, returns an Enumerator
47
- rows = OSV.for_each("path/to/file.csv")
44
+ # Return an enumerator instead of using a block
45
+ rows = OSV.for_each("data.csv")
48
46
  rows.each { |row| puts row["name"] }
49
- ```
50
47
 
51
- ### Array Output Mode
48
+ # High-performance array mode
49
+ OSV.for_each("data.csv", result_type: :array) do |row|
50
+ puts row[0] # First column
51
+ puts row[1] # Second column
52
+ end
53
+ ```
52
54
 
53
- If you prefer working with arrays instead of hashes, use `for_each_compat`:
55
+ ### Input Sources
54
56
 
55
57
  ```ruby
56
- OSV.for_each("path/to/file.csv", result_type: :array) do |row|
57
- # row is an Array like ["John", "25"]
58
- puts row[0]
59
- end
58
+ # From a file path
59
+ OSV.for_each("data.csv") { |row| puts row["name"] }
60
+
61
+ # From a file path
62
+ OSV.for_each("data.csv.gz") { |row| puts row["name"] }
63
+
64
+ # From an IO object
65
+ File.open("data.csv") { |file| OSV.for_each(file) { |row| puts row["name"] } }
66
+
67
+ # From a string
68
+ data = StringIO.new("name,age\nJohn,25")
69
+ OSV.for_each(data) { |row| puts row["name"] }
60
70
  ```
61
71
 
62
- ### Options
72
+ ### Configuration Options
63
73
 
64
- Both methods support the following options:
74
+ ```ruby
75
+ OSV.for_each("data.csv",
76
+ # Input formatting
77
+ has_headers: true, # First row contains headers (default: true)
78
+ col_sep: ",", # Column separator (default: ",")
79
+ quote_char: '"', # Quote character (default: '"')
80
+
81
+ # Output formatting
82
+ result_type: :hash, # :hash or :array (hash is default)
83
+ nil_string: nil, # String to interpret as nil when parsing (default: nil)
84
+
85
+ # Parsing behavior
86
+ flexible: false, # Allow varying number of fields (default: false)
87
+ flexible_default: nil, # Default value for missing fields. If unset, we ignore missing fields.
88
+ # Implicitly enables flexible mode if set.
89
+ trim: :all, # Whether to trim whitespace. Options are :all, :headers, or :fields (default: nil)
90
+ buffer_size: 1024, # Number of rows to buffer in memory (default: 1024)
91
+ )
92
+ ```
93
+
94
+ #### Available Options
65
95
 
66
96
  - `has_headers`: Boolean indicating if the first row contains headers (default: true)
67
97
  - `col_sep`: String specifying the field separator (default: ",")
@@ -69,35 +99,13 @@ Both methods support the following options:
69
99
  - `nil_string`: String that should be interpreted as nil
70
100
  - by default, empty strings are interpreted as empty strings
71
101
  - if you want to interpret empty strings as nil, set this to an empty string
72
- - `buffer_size`: Integer specifying the read buffer size
102
+ - `buffer_size`: Integer specifying the number of rows to buffer in memory (default: 1024)
73
103
  - `result_type`: String specifying the output format ("hash" or "array" or :hash or :array)
74
104
  - `flexible`: Boolean specifying if the parser should be flexible (default: false)
75
105
  - `flexible_default`: String specifying the default value for missing fields. Implicitly enables flexible mode if set. (default: `nil`)
76
106
  - `trim`: String specifying the trim mode ("all" or "headers" or "fields" or :all or :headers or :fields)
77
107
 
78
- ### Input Sources
79
-
80
- OSV supports reading from:
81
-
82
- - File paths (as strings)
83
- - IO objects
84
- - Important caveat: the IO object must respond to `rb_io_descriptor` with a file descriptor.
85
- - StringIO objects
86
- - Note: when you do this, the string is read (in full) into a Rust string, and we parse it there.
87
-
88
- ```ruby
89
- # From file path
90
- OSV.for_each("path/to/file.csv") { |row| puts row["name"] }
91
-
92
- # From IO object
93
- File.open("path/to/file.csv") do |file|
94
- OSV.for_each(file) { |row| puts row["name"] }
95
- end
96
-
97
- # From StringIO
98
- data = StringIO.new("name,age\nJohn,25")
99
- OSV.for_each(data) { |row| puts row["name"] }
100
- ```
108
+ When `has_headers` is false, hash keys will be generated as `"c0"`, `"c1"`, etc.
101
109
 
102
110
  ## Requirements
103
111
 
data/Rakefile CHANGED
@@ -23,6 +23,7 @@ end
23
23
 
24
24
  task :release do
25
25
  sh "bundle exec rake test"
26
- sh "gem build osv.gemspec"
27
- sh "gem push osv-#{OSV::VERSION}.gem"
26
+ sh "mkdir -p pkg"
27
+ sh "gem build osv.gemspec -o pkg/osv-#{OSV::VERSION}.gem"
28
+ sh "gem push pkg/osv-#{OSV::VERSION}.gem"
28
29
  end
data/lib/osv/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OSV
2
- VERSION = "0.3.10"
2
+ VERSION = "0.3.11"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: osv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.10
4
+ version: 0.3.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Jaremko
@@ -69,7 +69,7 @@ files:
69
69
  - lib/osv/version.rb
70
70
  homepage: https://github.com/njaremko/osv
71
71
  licenses:
72
- - NONE
72
+ - MIT
73
73
  metadata:
74
74
  homepage_uri: https://github.com/njaremko/osv
75
75
  source_code_uri: https://github.com/njaremko/osv