honey_format 0.16.0 → 0.17.0
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 +4 -4
- data/.hound.yml +3 -0
- data/.rubocop.yml +7 -0
- data/.ruby-style-guide.yml +264 -0
- data/CHANGELOG.md +15 -0
- data/Gemfile +2 -0
- data/README.md +63 -15
- data/Rakefile +2 -0
- data/bin/benchmark +2 -0
- data/bin/console +1 -0
- data/exe/honey_format +1 -0
- data/honey_format.gemspec +5 -4
- data/lib/honey_format/cli/benchmark_cli.rb +15 -13
- data/lib/honey_format/cli/cli.rb +17 -12
- data/lib/honey_format/cli/result_writer.rb +2 -0
- data/lib/honey_format/configuration.rb +114 -11
- data/lib/honey_format/converters/convert_boolean.rb +24 -0
- data/lib/honey_format/converters/convert_date_and_time.rb +30 -0
- data/lib/honey_format/converters/convert_number.rb +33 -0
- data/lib/honey_format/converters/convert_string.rb +42 -0
- data/lib/honey_format/converters/converters.rb +12 -0
- data/lib/honey_format/converters/header_column_converter.rb +57 -0
- data/lib/honey_format/csv.rb +22 -14
- data/lib/honey_format/errors.rb +8 -2
- data/lib/honey_format/helpers/helpers.rb +41 -0
- data/lib/honey_format/{header.rb → matrix/header.rb} +48 -12
- data/lib/honey_format/matrix/matrix.rb +104 -0
- data/lib/honey_format/{row.rb → matrix/row.rb} +6 -3
- data/lib/honey_format/{row_builder.rb → matrix/row_builder.rb} +5 -4
- data/lib/honey_format/{rows.rb → matrix/rows.rb} +7 -4
- data/lib/honey_format/matrix.rb +6 -89
- data/lib/honey_format/registry.rb +99 -0
- data/lib/honey_format/version.rb +4 -2
- data/lib/honey_format.rb +14 -6
- metadata +34 -24
- data/lib/honey_format/header_column_converter.rb +0 -40
- data/lib/honey_format/value_converter.rb +0 -117
@@ -1,117 +0,0 @@
|
|
1
|
-
require 'date'
|
2
|
-
require 'time'
|
3
|
-
require 'set'
|
4
|
-
require 'digest'
|
5
|
-
|
6
|
-
require 'honey_format/header_column_converter'
|
7
|
-
|
8
|
-
module HoneyFormat
|
9
|
-
# Converts values
|
10
|
-
class ValueConverter
|
11
|
-
# String values considered truthy
|
12
|
-
TRUTHY = Set.new(%w[t T 1 y Y true TRUE]).freeze
|
13
|
-
# String values considered falsy
|
14
|
-
FALSY = Set.new(%w[f F 0 n N false FALSE]).freeze
|
15
|
-
|
16
|
-
# Tries to convert value boolean to, returns nil if it can't convert
|
17
|
-
CONVERT_BOOLEAN = lambda { |v|
|
18
|
-
value = v&.downcase
|
19
|
-
if TRUTHY.include?(value)
|
20
|
-
true
|
21
|
-
elsif FALSY.include?(value)
|
22
|
-
false
|
23
|
-
else
|
24
|
-
nil
|
25
|
-
end
|
26
|
-
}
|
27
|
-
|
28
|
-
# Default value converters
|
29
|
-
DEFAULT_CONVERTERS = {
|
30
|
-
# strict variants
|
31
|
-
decimal!: proc { |v| Float(v) },
|
32
|
-
integer!: proc { |v| Integer(v) },
|
33
|
-
date!: proc { |v| Date.parse(v) },
|
34
|
-
datetime!: proc { |v| Time.parse(v) },
|
35
|
-
symbol!: proc { |v| v&.to_sym || raise(ArgumentError, "can't convert nil to symbol") },
|
36
|
-
downcase!: proc { |v| v&.downcase || raise(ArgumentError, "can't convert nil to downcased string") },
|
37
|
-
upcase!: proc { |v| v&.upcase || raise(ArgumentError, "can't convert nil to upcased string") },
|
38
|
-
boolean!: proc { |v|
|
39
|
-
value = CONVERT_BOOLEAN.call(v)
|
40
|
-
raise(ArgumentError, "can't convert #{v} to boolean") if value.nil?
|
41
|
-
value
|
42
|
-
},
|
43
|
-
# safe variants
|
44
|
-
decimal: proc { |v| Float(v) rescue nil },
|
45
|
-
decimal_or_zero: proc { |v| Float(v) rescue 0.0 },
|
46
|
-
integer: proc { |v| Integer(v) rescue nil },
|
47
|
-
integer_or_zero: proc { |v| Integer(v) rescue 0 },
|
48
|
-
date: proc { |v| Date.parse(v) rescue nil },
|
49
|
-
datetime: proc { |v| Time.parse(v) rescue nil },
|
50
|
-
symbol: proc { |v| v&.to_sym },
|
51
|
-
downcase: proc { |v| v&.downcase },
|
52
|
-
upcase: proc { |v| v&.upcase },
|
53
|
-
boolean: proc { |v| CONVERT_BOOLEAN.call(v) },
|
54
|
-
md5: proc { |v| Digest::MD5.hexdigest(v) if v },
|
55
|
-
nil: proc {},
|
56
|
-
header_column: HeaderColumnConverter,
|
57
|
-
}.freeze
|
58
|
-
|
59
|
-
# Instantiate a value converter
|
60
|
-
def initialize
|
61
|
-
@converters = DEFAULT_CONVERTERS.dup
|
62
|
-
end
|
63
|
-
|
64
|
-
# Returns list of registered types
|
65
|
-
# @return [Array<Symbol>] list of registered types
|
66
|
-
def types
|
67
|
-
@converters.keys
|
68
|
-
end
|
69
|
-
|
70
|
-
# Register a value converter
|
71
|
-
# @param [Symbol, String] type the name of the type
|
72
|
-
# @param [#call] converter that responds to #call
|
73
|
-
# @return [ValueConverter] returns self
|
74
|
-
# @raise [ValueTypeExistsError] if type is already registered
|
75
|
-
def register(type, converter)
|
76
|
-
self[type] = converter
|
77
|
-
self
|
78
|
-
end
|
79
|
-
|
80
|
-
# Convert value
|
81
|
-
# @param [Symbol, String] type the name of the type
|
82
|
-
# @param [Object] value to be converted
|
83
|
-
def call(value, type)
|
84
|
-
self[type].call(value)
|
85
|
-
end
|
86
|
-
|
87
|
-
# Register a value converter
|
88
|
-
# @param [Symbol, String] type the name of the type
|
89
|
-
# @param [#call] converter that responds to #call
|
90
|
-
# @return [Object] returns the converter
|
91
|
-
# @raise [ValueTypeExistsError] if type is already registered
|
92
|
-
def []=(type, converter)
|
93
|
-
type = type.to_sym
|
94
|
-
|
95
|
-
if type?(type)
|
96
|
-
raise(Errors::ValueTypeExistsError, "type '#{type}' already exists")
|
97
|
-
end
|
98
|
-
|
99
|
-
@converters[type] = converter
|
100
|
-
end
|
101
|
-
|
102
|
-
# @param [Symbol, String] type the name of the type
|
103
|
-
# @return [Object] returns the converter
|
104
|
-
# @raise [UnknownValueTypeError] if type does not exist
|
105
|
-
def [](type)
|
106
|
-
@converters.fetch(type.to_sym) do
|
107
|
-
raise(Errors::UnknownValueTypeError, "unknown type '#{type}'")
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
# @param [Symbol, String] type the name of the type
|
112
|
-
# @return [true, false] true if type exists, false otherwise
|
113
|
-
def type?(type)
|
114
|
-
@converters.key?(type.to_sym)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|