parquet 0.6.0 → 0.6.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ea1f639c9ac61eb47b4449999aacb95770a5b863dcf00358b616bdd57dcdf348
4
- data.tar.gz: dc9480d6c4959e8f6ad4cc6775583f3ebf59ef5393eaeef801f84e25ca32fa3d
3
+ metadata.gz: dd9295880f123b0ed979fb970d789bf63461007e8c087641b47391baa02bef29
4
+ data.tar.gz: e5ccd26a48e7b800412049e9d44e7f8c6fb5c12dbe25c74980467c822fb114c6
5
5
  SHA512:
6
- metadata.gz: b1c17ae80a816a643ef47afc44172b6738baa9c28d671938f9c5781a466285199332d29ee96b4362c446f41c1ad7737255bab78c63a62626d6d982202da0b867
7
- data.tar.gz: a91604cc16cc3f8eeb127da29d70e4ed9fca72a1c52613f4d7587db15809342710e9dc9d0c513c29ba6f112ace47d466b99a159629d5bb84969c587392f2468e
6
+ metadata.gz: f275d82733cd6b1658ed7b6212618830e2a12e6831bcfcc26beeae79691ddc972b22b0b0660f10db9b0bb7a03e2af29da15de28d037d5896891fbd678b3ecca9
7
+ data.tar.gz: 8fbfd33a92350c84409c0e879745fbc5a07d60f0a2862a2993a4780eb5c110be7b3918bfdfe6721e60e44635792108a1a3eeed460a189076bd03056a27764e50
@@ -1,6 +1,6 @@
1
1
  use magnus::scan_args::{get_kwargs, scan_args};
2
- use magnus::value::ReprValue;
3
2
  use magnus::{Error as MagnusError, Ruby, Value};
3
+ use parquet_ruby_adapter::utils::parse_string_or_symbol;
4
4
  use parquet_ruby_adapter::{
5
5
  logger::RubyLogger, types::ParserResultType, utils::parse_parquet_write_args,
6
6
  };
@@ -34,11 +34,14 @@ pub fn each_row(rb_self: Value, args: &[Value]) -> Result<Value, MagnusError> {
34
34
  )?;
35
35
 
36
36
  let result_type: ParserResultType = if let Some(rt_value) = kwargs.optional.0.flatten() {
37
- rt_value
38
- .to_r_string()?
39
- .to_string()?
37
+ parse_string_or_symbol(&ruby, rt_value)?
38
+ .ok_or_else(|| {
39
+ MagnusError::new(magnus::exception::arg_error(), "result_type cannot be nil")
40
+ })?
40
41
  .parse()
41
- .map_err(|e| MagnusError::new(ruby.exception_arg_error(), e))?
42
+ .map_err(|_| {
43
+ MagnusError::new(magnus::exception::arg_error(), "Invalid result_type value")
44
+ })?
42
45
  } else {
43
46
  ParserResultType::Hash
44
47
  };
@@ -89,11 +92,14 @@ pub fn each_column(rb_self: Value, args: &[Value]) -> Result<Value, MagnusError>
89
92
  )?;
90
93
 
91
94
  let result_type: ParserResultType = if let Some(rt_value) = kwargs.optional.0.flatten() {
92
- rt_value
93
- .to_r_string()?
94
- .to_string()?
95
+ parse_string_or_symbol(&ruby, rt_value)?
96
+ .ok_or_else(|| {
97
+ MagnusError::new(magnus::exception::arg_error(), "result_type cannot be nil")
98
+ })?
95
99
  .parse()
96
- .map_err(|e| MagnusError::new(ruby.exception_arg_error(), e))?
100
+ .map_err(|_| {
101
+ MagnusError::new(magnus::exception::arg_error(), "Invalid result_type value")
102
+ })?
97
103
  } else {
98
104
  ParserResultType::Hash
99
105
  };
@@ -101,7 +107,7 @@ pub fn each_column(rb_self: Value, args: &[Value]) -> Result<Value, MagnusError>
101
107
  let batch_size = if let Some(bs) = kwargs.optional.2.flatten() {
102
108
  if bs == 0 {
103
109
  return Err(MagnusError::new(
104
- ruby.exception_arg_error(),
110
+ magnus::exception::arg_error(),
105
111
  "batch_size must be greater than 0",
106
112
  ));
107
113
  }
@@ -2,6 +2,8 @@ use magnus::value::ReprValue;
2
2
  use magnus::{Error as MagnusError, RArray, RHash, Ruby, Symbol, TryConvert, Value};
3
3
  use parquet_core::{ParquetError, PrimitiveType, Result, Schema, SchemaNode};
4
4
 
5
+ use crate::utils::parse_string_or_symbol;
6
+
5
7
  /// Ruby schema builder that converts Ruby hash/array representations to Parquet schemas
6
8
  pub struct RubySchemaBuilder;
7
9
 
@@ -595,7 +597,7 @@ fn schema_node_to_ruby(node: &SchemaNode, _ruby: &Ruby) -> Result<Value> {
595
597
  /// Convert old schema format to new format
596
598
  /// Old: [{ "column_name" => "type" }, ...]
597
599
  /// New: [{ name: "column_name", type: :type }, ...]
598
- pub fn convert_legacy_schema(_ruby: &Ruby, schema: RArray) -> Result<RArray> {
600
+ pub fn convert_legacy_schema(ruby: &Ruby, schema: RArray) -> Result<RArray> {
599
601
  let new_schema = RArray::new();
600
602
 
601
603
  for item in schema.into_iter() {
@@ -609,7 +611,12 @@ pub fn convert_legacy_schema(_ruby: &Ruby, schema: RArray) -> Result<RArray> {
609
611
  |key: Value,
610
612
  value: Value|
611
613
  -> std::result::Result<magnus::r_hash::ForEach, MagnusError> {
612
- let key_str: String = TryConvert::try_convert(key)?;
614
+ let key_str: String = parse_string_or_symbol(ruby, key)?.ok_or_else(|| {
615
+ MagnusError::new(
616
+ magnus::exception::arg_error(),
617
+ "Nil keys not allowed in schema",
618
+ )
619
+ })?;
613
620
  let type_str: String = TryConvert::try_convert(value)?;
614
621
 
615
622
  new_field.aset(Symbol::new("name"), key_str)?;
@@ -122,6 +122,21 @@ pub fn parse_parquet_write_args(
122
122
  })
123
123
  }
124
124
 
125
+ /// Convert a Ruby Value to a String, handling both String and Symbol types
126
+ pub fn parse_string_or_symbol(ruby: &Ruby, value: Value) -> Result<Option<String>, MagnusError> {
127
+ if value.is_nil() {
128
+ Ok(None)
129
+ } else if value.is_kind_of(ruby.class_string()) || value.is_kind_of(ruby.class_symbol()) {
130
+ let stringed = value.to_r_string()?.to_string()?;
131
+ Ok(Some(stringed))
132
+ } else {
133
+ Err(MagnusError::new(
134
+ magnus::exception::type_error(),
135
+ "Value must be a String or Symbol",
136
+ ))
137
+ }
138
+ }
139
+
125
140
  /// Handle block or enumerator creation
126
141
  pub fn handle_block_or_enum<F, T>(
127
142
  block_given: bool,
@@ -1,3 +1,3 @@
1
1
  module Parquet
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parquet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Jaremko