osv 0.3.10 → 0.3.11

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.
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