honey_format 0.19.0 → 0.23.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -3
- data/CHANGELOG.md +28 -0
- data/README.md +25 -10
- data/honey_format.gemspec +2 -2
- data/lib/honey_format/configuration.rb +1 -28
- data/lib/honey_format/converters/convert_boolean.rb +2 -2
- data/lib/honey_format/converters/convert_date_and_time.rb +2 -2
- data/lib/honey_format/converters/converters.rb +31 -0
- data/lib/honey_format/csv.rb +6 -1
- data/lib/honey_format/matrix/header.rb +40 -14
- data/lib/honey_format/matrix/matrix.rb +8 -1
- data/lib/honey_format/matrix/row.rb +1 -1
- data/lib/honey_format/matrix/rows.rb +14 -1
- data/lib/honey_format/version.rb +1 -1
- metadata +16 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54b1c442221f4921f054ba328b55f066166d27b27bd56aa8499bf195bac65847
|
4
|
+
data.tar.gz: 58977315c3fb95a54a0cbc7ab930a8ade04016865c589f4e6374ce113a080c1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1cbbc61c953422dea9de989ebe429b05325140868c54b2861dbaafac222425706d8af481d86c0a0f3a75bbc19bcabfb5d580d0261c0a3ba928c3a2d45390abf7
|
7
|
+
data.tar.gz: d07789988d8ad6f335fa517bc07954f0f9800c3dce3ab10a9295c6edae81994fd78ca9ed2e44c6ac6b8759593e0807edeb78457bbb54ce4e348db116f953374a
|
data/.travis.yml
CHANGED
@@ -9,11 +9,11 @@ matrix:
|
|
9
9
|
include:
|
10
10
|
- rvm: 2.3.0
|
11
11
|
install:
|
12
|
-
- gem install bundler --no-
|
12
|
+
- gem install bundler --no-document
|
13
13
|
- bundle install
|
14
14
|
- rvm: 2.5.1
|
15
15
|
install:
|
16
|
-
- gem install bundler --no-
|
16
|
+
- gem install bundler --no-document
|
17
17
|
- bundle install
|
18
18
|
- rvm: 2.6.0-preview3
|
19
19
|
install:
|
@@ -21,7 +21,7 @@ matrix:
|
|
21
21
|
- name: TruffleRuby
|
22
22
|
rvm: system
|
23
23
|
install:
|
24
|
-
- export TRUFFLERUBY_VERSION=1.0.0-
|
24
|
+
- export TRUFFLERUBY_VERSION=1.0.0-rc10
|
25
25
|
- curl -L https://github.com/oracle/truffleruby/releases/download/vm-$TRUFFLERUBY_VERSION/truffleruby-$TRUFFLERUBY_VERSION-linux-amd64.tar.gz | tar xz
|
26
26
|
- export PATH="$PWD/truffleruby-$TRUFFLERUBY_VERSION-linux-amd64/bin:$PATH"
|
27
27
|
- gem install bundler -v 1.16.6 --no-ri --no-rdoc
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,33 @@
|
|
1
1
|
# HEAD
|
2
2
|
|
3
|
+
## v0.23.0
|
4
|
+
|
5
|
+
* Add `Rows#columnns` method that returns header columns
|
6
|
+
|
7
|
+
## v0.22.0
|
8
|
+
|
9
|
+
* Add `Matrix#type_map` and ignore non-existing column in the type map. [PR#64](https://github.com/buren/honey_format/pull/64). Thank you [@prem-prakash](https://github.com/prem-prakash).
|
10
|
+
|
11
|
+
## v0.21.1
|
12
|
+
|
13
|
+
* Closes [issue #58](https://github.com/buren/honey_format/issues/58). [PR #62](https://github.com/buren/honey_format/pull/62)
|
14
|
+
|
15
|
+
## v0.21.0
|
16
|
+
|
17
|
+
* Add `Rows#[]` method
|
18
|
+
|
19
|
+
## v0.20.0
|
20
|
+
|
21
|
+
* Support additional header variant, pass hash with `String => Symbol` and/or `String => #call` (callable object). Unmapped keys are converted using the default header converter.
|
22
|
+
```ruby
|
23
|
+
converter = {
|
24
|
+
'First name' => :first_name,
|
25
|
+
'Last name' => -> { :surname }
|
26
|
+
}
|
27
|
+
csv = HoneyFormat::CSV.new(csv_string, header_converter: converter)
|
28
|
+
```
|
29
|
+
* Add `encoding` option to `CSV`
|
30
|
+
|
3
31
|
## v0.19.0
|
4
32
|
|
5
33
|
* Add `method_name` as alias for `header_column` converter
|
data/README.md
CHANGED
@@ -27,8 +27,8 @@ Id,Username,Email
|
|
27
27
|
2,jacob,jacob@example.com
|
28
28
|
CSV
|
29
29
|
csv = HoneyFormat::CSV.new(csv_string, type_map: { id: :integer })
|
30
|
-
csv.columns # => [:id, :username]
|
31
|
-
csv.rows # => [#<Row id=1, username="buren">]
|
30
|
+
csv.columns # => [:id, :username, :email]
|
31
|
+
csv.rows # => [#<Row id=1, username="buren", email="buren@example.com">, #<Row id=2, username="jacob", email="jacob@example.com">]
|
32
32
|
user = csv.rows.first
|
33
33
|
user.id # => 1
|
34
34
|
user.username # => "buren"
|
@@ -91,7 +91,7 @@ __Type converters__
|
|
91
91
|
|
92
92
|
> Type converters are great if you want to convert column values, like numbers and dates.
|
93
93
|
|
94
|
-
There are a
|
94
|
+
There are a bunch of [default type converters](https://github.com/buren/honey_format/blob/master/lib/honey_format/converters/converters.rb)
|
95
95
|
```ruby
|
96
96
|
csv_string = "Id,Username\n1,buren"
|
97
97
|
type_map = { id: :integer }
|
@@ -139,7 +139,7 @@ Default converter names
|
|
139
139
|
HoneyFormat.config.default_converters.keys
|
140
140
|
```
|
141
141
|
|
142
|
-
See [`
|
142
|
+
See [`Converters::DEFAULT`](https://github.com/buren/honey_format/blob/master/lib/honey_format/converters.rb) for a complete list of the default converter names.
|
143
143
|
|
144
144
|
__Row builder__
|
145
145
|
|
@@ -248,21 +248,36 @@ csv.columns # => [:ID, :USERNAME]
|
|
248
248
|
|
249
249
|
Pass your own header converter
|
250
250
|
```ruby
|
251
|
-
|
252
|
-
|
251
|
+
# unmapped keys use the default header converter,
|
252
|
+
# mix simple key => value mapping with key => proc
|
253
|
+
converter = {
|
254
|
+
'First^Name' => :first_name,
|
255
|
+
'Username' => -> { :handle }
|
256
|
+
}
|
253
257
|
|
254
|
-
csv_string = "ID,First^Name\n1,Jacob"
|
258
|
+
csv_string = "ID,Username,First^Name\n1,buren,Jacob"
|
255
259
|
user = HoneyFormat::CSV.new(csv_string, header_converter: converter).rows.first
|
256
260
|
user.first_name # => "Jacob"
|
261
|
+
user.handle # => "buren"
|
257
262
|
user.id # => "1"
|
263
|
+
|
264
|
+
# you can also pass a proc or any callable object
|
265
|
+
converter = Class.new do
|
266
|
+
define_singleton_method(:call) { |value, index| "#{value}#{index}" }
|
267
|
+
end
|
268
|
+
# or
|
269
|
+
converter = ->(value, index) { "#{value}#{index}" }
|
270
|
+
user = HoneyFormat::CSV.new(csv_string, header_converter: converter)
|
258
271
|
```
|
259
272
|
|
260
|
-
Missing header values
|
273
|
+
Missing header values are automatically set and deduplicated
|
261
274
|
```ruby
|
262
|
-
csv_string = "first,,third\nval0,val1,val2"
|
275
|
+
csv_string = "first,,third,third\nval0,val1,val2,val3"
|
263
276
|
csv = HoneyFormat::CSV.new(csv_string)
|
264
277
|
user = csv.rows.first
|
265
278
|
user.column1 # => "val1"
|
279
|
+
user.third # => "val2"
|
280
|
+
user.third1 # => "val3"
|
266
281
|
```
|
267
282
|
|
268
283
|
Duplicated header values
|
@@ -302,7 +317,7 @@ user['first^name'] # => "Jacob"
|
|
302
317
|
|
303
318
|
__Errors__
|
304
319
|
|
305
|
-
> When you need
|
320
|
+
> When you need to be extra safe.
|
306
321
|
|
307
322
|
If you want to there are some errors you can rescue
|
308
323
|
```ruby
|
data/honey_format.gemspec
CHANGED
@@ -23,9 +23,9 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.required_ruby_version = '>= 2.3.0'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'benchmark-ips'
|
26
|
-
spec.add_development_dependency 'bundler', '
|
26
|
+
spec.add_development_dependency 'bundler', '> 1.10', '< 3'
|
27
27
|
spec.add_development_dependency 'byebug'
|
28
|
-
spec.add_development_dependency 'rake', '~>
|
28
|
+
spec.add_development_dependency 'rake', '~> 12.3'
|
29
29
|
spec.add_development_dependency 'rspec'
|
30
30
|
spec.add_development_dependency 'simplecov'
|
31
31
|
end
|
@@ -97,34 +97,7 @@ module HoneyFormat
|
|
97
97
|
# Default converter registry
|
98
98
|
# @return [Hash] hash with default converters
|
99
99
|
def default_converters
|
100
|
-
@default_converters ||=
|
101
|
-
# strict variants
|
102
|
-
decimal!: StrictConvertDecimal,
|
103
|
-
integer!: StrictConvertInteger,
|
104
|
-
date!: StrictConvertDate,
|
105
|
-
datetime!: StrictConvertDatetime,
|
106
|
-
symbol!: StrictConvertSymbol,
|
107
|
-
downcase!: StrictConvertDowncase,
|
108
|
-
upcase!: StrictConvertUpcase,
|
109
|
-
boolean!: StrictConvertBoolean,
|
110
|
-
# safe variants
|
111
|
-
decimal: ConvertDecimal,
|
112
|
-
decimal_or_zero: ConvertDecimalOrZero,
|
113
|
-
integer: ConvertInteger,
|
114
|
-
integer_or_zero: ConvertIntegerOrZero,
|
115
|
-
date: ConvertDate,
|
116
|
-
datetime: ConvertDatetime,
|
117
|
-
symbol: ConvertSymbol,
|
118
|
-
downcase: ConvertDowncase,
|
119
|
-
upcase: ConvertUpcase,
|
120
|
-
boolean: ConvertBoolean,
|
121
|
-
md5: ConvertMD5,
|
122
|
-
hex: ConvertHex,
|
123
|
-
nil: ConvertNil,
|
124
|
-
blank: ConvertBlank,
|
125
|
-
header_column: ConvertHeaderColumn,
|
126
|
-
method_name: ConvertHeaderColumn,
|
127
|
-
}.freeze
|
100
|
+
@default_converters ||= Converters::DEFAULT
|
128
101
|
end
|
129
102
|
end
|
130
103
|
end
|
@@ -4,9 +4,9 @@ require 'set'
|
|
4
4
|
|
5
5
|
module HoneyFormat
|
6
6
|
# String values considered truthy
|
7
|
-
TRUTHY = Set.new(%w[t T 1 y Y true TRUE]).freeze
|
7
|
+
TRUTHY = Set.new(%w[t T 1 y Y true TRUE] + [true]).freeze
|
8
8
|
# String values considered falsy
|
9
|
-
FALSY = Set.new(%w[f F 0 n N false FALSE]).freeze
|
9
|
+
FALSY = Set.new(%w[f F 0 n N false FALSE] + [false]).freeze
|
10
10
|
|
11
11
|
# Tries to convert value boolean to, returns nil if it can't convert
|
12
12
|
ConvertBoolean = proc do |v|
|
@@ -23,8 +23,8 @@ module HoneyFormat
|
|
23
23
|
end
|
24
24
|
|
25
25
|
# Convert to date or raise error
|
26
|
-
StrictConvertDate = proc { |v| Date.parse(v) }
|
26
|
+
StrictConvertDate = proc { |v| v.is_a?(Date) ? v : Date.parse(v) }
|
27
27
|
|
28
28
|
# Convert to datetime or raise error
|
29
|
-
StrictConvertDatetime = proc { |v| Time.parse(v) }
|
29
|
+
StrictConvertDatetime = proc { |v| v.is_a?(Time) ? v : Time.parse(v) }
|
30
30
|
end
|
@@ -9,4 +9,35 @@ require 'honey_format/converters/convert_string'
|
|
9
9
|
module HoneyFormat
|
10
10
|
# Convert to nil
|
11
11
|
ConvertNil = proc {}
|
12
|
+
|
13
|
+
module Converters
|
14
|
+
DEFAULT = {
|
15
|
+
# strict variants
|
16
|
+
decimal!: StrictConvertDecimal,
|
17
|
+
integer!: StrictConvertInteger,
|
18
|
+
date!: StrictConvertDate,
|
19
|
+
datetime!: StrictConvertDatetime,
|
20
|
+
symbol!: StrictConvertSymbol,
|
21
|
+
downcase!: StrictConvertDowncase,
|
22
|
+
upcase!: StrictConvertUpcase,
|
23
|
+
boolean!: StrictConvertBoolean,
|
24
|
+
# safe variants
|
25
|
+
decimal: ConvertDecimal,
|
26
|
+
decimal_or_zero: ConvertDecimalOrZero,
|
27
|
+
integer: ConvertInteger,
|
28
|
+
integer_or_zero: ConvertIntegerOrZero,
|
29
|
+
date: ConvertDate,
|
30
|
+
datetime: ConvertDatetime,
|
31
|
+
symbol: ConvertSymbol,
|
32
|
+
downcase: ConvertDowncase,
|
33
|
+
upcase: ConvertUpcase,
|
34
|
+
boolean: ConvertBoolean,
|
35
|
+
md5: ConvertMD5,
|
36
|
+
hex: ConvertHex,
|
37
|
+
nil: ConvertNil,
|
38
|
+
blank: ConvertBlank,
|
39
|
+
header_column: ConvertHeaderColumn,
|
40
|
+
method_name: ConvertHeaderColumn,
|
41
|
+
}.freeze
|
42
|
+
end
|
12
43
|
end
|
data/lib/honey_format/csv.rb
CHANGED
@@ -19,6 +19,7 @@ module HoneyFormat
|
|
19
19
|
# @param header_deduplicator [#call] deduplicates header columns.
|
20
20
|
# @param row_builder [#call] will be called for each parsed row.
|
21
21
|
# @param type_map [Hash] map of column_name => type conversion to perform.
|
22
|
+
# @param encoding [String] CSV encoding (for example "BOM|UTF-16LE:UTF-8").
|
22
23
|
# @param skip_lines [Regexp, String]
|
23
24
|
# Regexp for determining wheter a line is a comment. See CSV skip_lines option.
|
24
25
|
# @raise [HeaderError] super class of errors raised when there is a CSV header error.
|
@@ -46,6 +47,8 @@ module HoneyFormat
|
|
46
47
|
# @example Skip lines all lines starting with '#'
|
47
48
|
# csv = HoneyFormat::CSV.new("name,id\n# some comment\njacob,1", skip_lines: '#')
|
48
49
|
# csv.rows.length # => 1
|
50
|
+
# @example CSV encoding
|
51
|
+
# csv = HoneyFormat::CSV.new(csv_string, encoding: "BOM|UTF-16LE:UTF-8")
|
49
52
|
# @see Matrix#new
|
50
53
|
def initialize(
|
51
54
|
csv,
|
@@ -56,6 +59,7 @@ module HoneyFormat
|
|
56
59
|
header_converter: HoneyFormat.header_converter,
|
57
60
|
header_deduplicator: HoneyFormat.config.header_deduplicator,
|
58
61
|
row_builder: nil,
|
62
|
+
encoding: nil,
|
59
63
|
type_map: {},
|
60
64
|
skip_lines: HoneyFormat.config.skip_lines
|
61
65
|
)
|
@@ -65,7 +69,8 @@ module HoneyFormat
|
|
65
69
|
row_sep: row_delimiter,
|
66
70
|
quote_char: quote_character,
|
67
71
|
skip_blanks: true,
|
68
|
-
skip_lines: skip_lines
|
72
|
+
skip_lines: skip_lines,
|
73
|
+
encoding: encoding
|
69
74
|
)
|
70
75
|
super(
|
71
76
|
csv,
|
@@ -10,10 +10,11 @@ module HoneyFormat
|
|
10
10
|
# Instantiate a Header
|
11
11
|
# @return [Header] a new instance of Header.
|
12
12
|
# @param [Array<String>] header array of strings.
|
13
|
-
# @param converter [#call, Symbol]
|
13
|
+
# @param converter [#call, Symbol, Hash]
|
14
14
|
# header converter that implements a #call method
|
15
15
|
# that takes one column (string) argument OR symbol for a registered
|
16
|
-
# converter registry
|
16
|
+
# converter registry OR a hash mapped to a symbol or something that responds
|
17
|
+
# to #call.
|
17
18
|
# @param deduplicator [#call, Symbol]
|
18
19
|
# header deduplicator that implements a #call method
|
19
20
|
# that takes columns Array<String> argument OR symbol for a registered
|
@@ -93,7 +94,7 @@ module HoneyFormat
|
|
93
94
|
private
|
94
95
|
|
95
96
|
# Set the header converter
|
96
|
-
# @param [Symbol, #call] symbol to known converter
|
97
|
+
# @param [Hash, Symbol, #call] symbol to known converter, object that responds to #call or Hash
|
97
98
|
# @return [nil]
|
98
99
|
def converter=(object)
|
99
100
|
if object.is_a?(Symbol)
|
@@ -101,6 +102,11 @@ module HoneyFormat
|
|
101
102
|
return
|
102
103
|
end
|
103
104
|
|
105
|
+
if object.is_a?(Hash)
|
106
|
+
@converter = hash_converter(object)
|
107
|
+
return
|
108
|
+
end
|
109
|
+
|
104
110
|
@converter = object
|
105
111
|
end
|
106
112
|
|
@@ -134,21 +140,17 @@ module HoneyFormat
|
|
134
140
|
# @param [Integer] index the CSV header column index
|
135
141
|
# @return [Symbol] the converted column
|
136
142
|
def convert_column(column, index)
|
137
|
-
|
138
|
-
@converter.call(column)
|
139
|
-
else
|
140
|
-
@converter.call(column, index)
|
141
|
-
end
|
142
|
-
value.to_sym
|
143
|
+
call_column_builder(@converter, column, index)&.to_sym
|
143
144
|
end
|
144
145
|
|
145
|
-
# Returns the
|
146
|
-
# @
|
147
|
-
|
146
|
+
# Returns the callable object method arity
|
147
|
+
# @param [#arity, #call] callable thing that responds to #call and maybe #arity
|
148
|
+
# @return [Integer] the method arity
|
149
|
+
def callable_arity(callable)
|
148
150
|
# procs and lambdas respond to #arity
|
149
|
-
return
|
151
|
+
return callable.arity if callable.respond_to?(:arity)
|
150
152
|
|
151
|
-
|
153
|
+
callable.method(:call).arity
|
152
154
|
end
|
153
155
|
|
154
156
|
# Raises an error if header column is missing/empty
|
@@ -164,5 +166,29 @@ module HoneyFormat
|
|
164
166
|
]
|
165
167
|
raise(Errors::MissingHeaderColumnError, parts.join(' '))
|
166
168
|
end
|
169
|
+
|
170
|
+
def hash_converter(hash)
|
171
|
+
lambda { |value, index|
|
172
|
+
# support strings and symbol keys interchangeably
|
173
|
+
column = hash.fetch(value) do
|
174
|
+
key = value.respond_to?(:to_sym) ? value.to_sym : value
|
175
|
+
# if column is unmapped use the default header converter
|
176
|
+
hash.fetch(key) { HoneyFormat.header_converter.call(value, index) }
|
177
|
+
end
|
178
|
+
|
179
|
+
# The hash can contain mixed values, Symbol and procs
|
180
|
+
if column.respond_to?(:call)
|
181
|
+
column = call_column_builder(column, value, index)
|
182
|
+
end
|
183
|
+
|
184
|
+
column&.to_sym
|
185
|
+
}
|
186
|
+
end
|
187
|
+
|
188
|
+
def call_column_builder(callable, value, index)
|
189
|
+
return callable.call if callable_arity(callable).zero?
|
190
|
+
return callable.call(value) if callable_arity(callable) == 1
|
191
|
+
callable.call(value, index)
|
192
|
+
end
|
167
193
|
end
|
168
194
|
end
|
@@ -51,7 +51,8 @@ module HoneyFormat
|
|
51
51
|
converter: header_converter,
|
52
52
|
deduplicator: header_deduplicator
|
53
53
|
)
|
54
|
-
@
|
54
|
+
@type_map = type_map.select { |key, _v| @header.columns.include?(key) }.to_h
|
55
|
+
@rows = Rows.new(matrix, columns, builder: row_builder, type_map: @type_map)
|
55
56
|
end
|
56
57
|
|
57
58
|
# Original matrix header
|
@@ -66,6 +67,12 @@ module HoneyFormat
|
|
66
67
|
@header.to_a
|
67
68
|
end
|
68
69
|
|
70
|
+
# Matrix type map used
|
71
|
+
# @return [Hash<Symbol, Symbol>] the type map used.
|
72
|
+
def type_map
|
73
|
+
@type_map
|
74
|
+
end
|
75
|
+
|
69
76
|
# Return rows
|
70
77
|
# @return [Rows] rows.
|
71
78
|
def rows
|
@@ -4,7 +4,7 @@ module HoneyFormat
|
|
4
4
|
# Default row builder
|
5
5
|
class Row < Struct
|
6
6
|
# Create a row
|
7
|
-
# @return [
|
7
|
+
# @return [Row] returns an instantiated Row
|
8
8
|
# @example
|
9
9
|
# row_klass = Row.new(:id, :username)
|
10
10
|
# row = row_klass.call('1', 'buren')
|
@@ -16,10 +16,17 @@ module HoneyFormat
|
|
16
16
|
# @raise [EmptyRowColumnsError] raised when there are no columns.
|
17
17
|
# @raise [InvalidRowLengthError] raised when row has more columns than header columns.
|
18
18
|
def initialize(rows, columns, builder: nil, type_map: {})
|
19
|
-
|
19
|
+
@columns = columns
|
20
|
+
builder = RowBuilder.new(@columns, builder: builder, type_map: type_map)
|
20
21
|
@rows = prepare_rows(builder, rows)
|
21
22
|
end
|
22
23
|
|
24
|
+
# Row columns
|
25
|
+
# @return [Array<Symbol>] of column identifiers.
|
26
|
+
def columns
|
27
|
+
@columns
|
28
|
+
end
|
29
|
+
|
23
30
|
# Returns true if rows contains no elements.
|
24
31
|
# @return [true, false] true if rows contains no elements.
|
25
32
|
def empty?
|
@@ -40,6 +47,12 @@ module HoneyFormat
|
|
40
47
|
@rows
|
41
48
|
end
|
42
49
|
|
50
|
+
# Return element at given position.
|
51
|
+
# @return [Row] of rows.
|
52
|
+
def [](index)
|
53
|
+
@rows[index]
|
54
|
+
end
|
55
|
+
|
43
56
|
# Return the number of rows
|
44
57
|
# @return [Integer] the number of rows
|
45
58
|
def length
|
data/lib/honey_format/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: honey_format
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.23.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jacob Burenstam
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: benchmark-ips
|
@@ -28,16 +28,22 @@ dependencies:
|
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.10'
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '3'
|
34
37
|
type: :development
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
38
|
-
- - "
|
41
|
+
- - ">"
|
39
42
|
- !ruby/object:Gem::Version
|
40
43
|
version: '1.10'
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '3'
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: byebug
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +64,14 @@ dependencies:
|
|
58
64
|
requirements:
|
59
65
|
- - "~>"
|
60
66
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
67
|
+
version: '12.3'
|
62
68
|
type: :development
|
63
69
|
prerelease: false
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
65
71
|
requirements:
|
66
72
|
- - "~>"
|
67
73
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
74
|
+
version: '12.3'
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
76
|
name: rspec
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -147,7 +153,7 @@ homepage: https://github.com/buren/honey_format
|
|
147
153
|
licenses:
|
148
154
|
- MIT
|
149
155
|
metadata: {}
|
150
|
-
post_install_message:
|
156
|
+
post_install_message:
|
151
157
|
rdoc_options: []
|
152
158
|
require_paths:
|
153
159
|
- lib
|
@@ -162,9 +168,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
168
|
- !ruby/object:Gem::Version
|
163
169
|
version: '0'
|
164
170
|
requirements: []
|
165
|
-
|
166
|
-
|
167
|
-
signing_key:
|
171
|
+
rubygems_version: 3.0.3
|
172
|
+
signing_key:
|
168
173
|
specification_version: 4
|
169
174
|
summary: Makes working with CSVs as smooth as honey.
|
170
175
|
test_files: []
|