csv_plus_plus 0.1.1 → 0.1.3

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 (93) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +18 -63
  3. data/{CHANGELOG.md → docs/CHANGELOG.md} +17 -0
  4. data/lib/csv_plus_plus/benchmarked_compiler.rb +112 -0
  5. data/lib/csv_plus_plus/cell.rb +46 -24
  6. data/lib/csv_plus_plus/cli.rb +44 -17
  7. data/lib/csv_plus_plus/cli_flag.rb +1 -2
  8. data/lib/csv_plus_plus/color.rb +42 -11
  9. data/lib/csv_plus_plus/compiler.rb +178 -0
  10. data/lib/csv_plus_plus/entities/ast_builder.rb +50 -0
  11. data/lib/csv_plus_plus/entities/boolean.rb +40 -0
  12. data/lib/csv_plus_plus/entities/builtins.rb +58 -0
  13. data/lib/csv_plus_plus/entities/cell_reference.rb +231 -0
  14. data/lib/csv_plus_plus/entities/date.rb +63 -0
  15. data/lib/csv_plus_plus/entities/entity.rb +50 -0
  16. data/lib/csv_plus_plus/entities/entity_with_arguments.rb +57 -0
  17. data/lib/csv_plus_plus/entities/function.rb +45 -0
  18. data/lib/csv_plus_plus/entities/function_call.rb +50 -0
  19. data/lib/csv_plus_plus/entities/number.rb +48 -0
  20. data/lib/csv_plus_plus/entities/runtime_value.rb +43 -0
  21. data/lib/csv_plus_plus/entities/string.rb +42 -0
  22. data/lib/csv_plus_plus/entities/variable.rb +37 -0
  23. data/lib/csv_plus_plus/entities.rb +40 -0
  24. data/lib/csv_plus_plus/error/error.rb +20 -0
  25. data/lib/csv_plus_plus/error/formula_syntax_error.rb +37 -0
  26. data/lib/csv_plus_plus/error/modifier_syntax_error.rb +75 -0
  27. data/lib/csv_plus_plus/error/modifier_validation_error.rb +69 -0
  28. data/lib/csv_plus_plus/error/syntax_error.rb +71 -0
  29. data/lib/csv_plus_plus/error/writer_error.rb +17 -0
  30. data/lib/csv_plus_plus/error.rb +10 -2
  31. data/lib/csv_plus_plus/google_api_client.rb +11 -2
  32. data/lib/csv_plus_plus/google_options.rb +23 -18
  33. data/lib/csv_plus_plus/lexer/lexer.rb +17 -6
  34. data/lib/csv_plus_plus/lexer/tokenizer.rb +6 -1
  35. data/lib/csv_plus_plus/lexer.rb +24 -0
  36. data/lib/csv_plus_plus/modifier/conditional_formatting.rb +18 -0
  37. data/lib/csv_plus_plus/modifier/data_validation.rb +138 -0
  38. data/lib/csv_plus_plus/modifier/expand.rb +61 -0
  39. data/lib/csv_plus_plus/modifier/google_sheet_modifier.rb +133 -0
  40. data/lib/csv_plus_plus/modifier/modifier.rb +222 -0
  41. data/lib/csv_plus_plus/modifier/modifier_validator.rb +243 -0
  42. data/lib/csv_plus_plus/modifier/rubyxl_modifier.rb +84 -0
  43. data/lib/csv_plus_plus/modifier.rb +82 -150
  44. data/lib/csv_plus_plus/options.rb +64 -19
  45. data/lib/csv_plus_plus/{language → parser}/cell_value.tab.rb +25 -25
  46. data/lib/csv_plus_plus/{language → parser}/code_section.tab.rb +86 -95
  47. data/lib/csv_plus_plus/parser/modifier.tab.rb +478 -0
  48. data/lib/csv_plus_plus/row.rb +53 -15
  49. data/lib/csv_plus_plus/runtime/can_define_references.rb +87 -0
  50. data/lib/csv_plus_plus/runtime/can_resolve_references.rb +209 -0
  51. data/lib/csv_plus_plus/runtime/graph.rb +68 -0
  52. data/lib/csv_plus_plus/runtime/position_tracker.rb +231 -0
  53. data/lib/csv_plus_plus/runtime/references.rb +110 -0
  54. data/lib/csv_plus_plus/runtime/runtime.rb +126 -0
  55. data/lib/csv_plus_plus/runtime.rb +42 -0
  56. data/lib/csv_plus_plus/source_code.rb +66 -0
  57. data/lib/csv_plus_plus/template.rb +63 -36
  58. data/lib/csv_plus_plus/version.rb +2 -1
  59. data/lib/csv_plus_plus/writer/base_writer.rb +30 -5
  60. data/lib/csv_plus_plus/writer/csv.rb +11 -9
  61. data/lib/csv_plus_plus/writer/excel.rb +9 -2
  62. data/lib/csv_plus_plus/writer/file_backer_upper.rb +7 -4
  63. data/lib/csv_plus_plus/writer/google_sheet_builder.rb +88 -45
  64. data/lib/csv_plus_plus/writer/google_sheets.rb +79 -29
  65. data/lib/csv_plus_plus/writer/open_document.rb +6 -1
  66. data/lib/csv_plus_plus/writer/rubyxl_builder.rb +103 -33
  67. data/lib/csv_plus_plus/writer.rb +39 -9
  68. data/lib/csv_plus_plus.rb +41 -15
  69. metadata +44 -30
  70. data/lib/csv_plus_plus/code_section.rb +0 -101
  71. data/lib/csv_plus_plus/expand.rb +0 -18
  72. data/lib/csv_plus_plus/graph.rb +0 -62
  73. data/lib/csv_plus_plus/language/ast_builder.rb +0 -68
  74. data/lib/csv_plus_plus/language/benchmarked_compiler.rb +0 -65
  75. data/lib/csv_plus_plus/language/builtins.rb +0 -46
  76. data/lib/csv_plus_plus/language/compiler.rb +0 -152
  77. data/lib/csv_plus_plus/language/entities/boolean.rb +0 -33
  78. data/lib/csv_plus_plus/language/entities/cell_reference.rb +0 -33
  79. data/lib/csv_plus_plus/language/entities/entity.rb +0 -86
  80. data/lib/csv_plus_plus/language/entities/function.rb +0 -35
  81. data/lib/csv_plus_plus/language/entities/function_call.rb +0 -37
  82. data/lib/csv_plus_plus/language/entities/number.rb +0 -36
  83. data/lib/csv_plus_plus/language/entities/runtime_value.rb +0 -28
  84. data/lib/csv_plus_plus/language/entities/string.rb +0 -31
  85. data/lib/csv_plus_plus/language/entities/variable.rb +0 -25
  86. data/lib/csv_plus_plus/language/entities.rb +0 -28
  87. data/lib/csv_plus_plus/language/references.rb +0 -70
  88. data/lib/csv_plus_plus/language/runtime.rb +0 -205
  89. data/lib/csv_plus_plus/language/scope.rb +0 -192
  90. data/lib/csv_plus_plus/language/syntax_error.rb +0 -66
  91. data/lib/csv_plus_plus/modifier.tab.rb +0 -907
  92. data/lib/csv_plus_plus/writer/google_sheet_modifier.rb +0 -56
  93. data/lib/csv_plus_plus/writer/rubyxl_modifier.rb +0 -59
@@ -1,171 +1,103 @@
1
+ # typed: strict
1
2
  # frozen_string_literal: true
2
3
 
3
- module CSVPlusPlus
4
- # A container representing the operations that can be applied to a cell or row
5
- #
6
- # @attr borders [Array<String>] The borders that will be set
7
- # @attr expand [Expand] Whether this row expands into multiple rows
8
- # @attr fontfamily [String] The font family
9
- # @attr fontsize [Number] The font size
10
- # @attr halign ['left', 'center', 'right'] Horizontal alignment
11
- # @attr note [String] A note/comment on the cell
12
- # @attr numberformat [String] A number format to apply to the value in the cell
13
- # @attr row_level [Boolean] Is this a row modifier? If so it's values will apply to all cells in the row
14
- # (unless overridden by the cell modifier)
15
- # @attr validation [Object]
16
- # @attr valign ['top', 'center', 'bottom'] Vertical alignment
17
- #
18
- # @attr_writer borderstyle ['dashed', 'dotted', 'double', 'solid', 'solid_medium', 'solid_thick']
19
- # The style of border on the cell
20
- #
21
- # @attr_reader bordercolor [String]
22
- # @attr_reader borders [Array<String>]
23
- # @attr_reader color [Color] The background color of the cell
24
- # @attr_reader fontcolor [Color] The font color of the cell
25
- # @attr_reader formats [Array<String>] Bold/italics/underline/strikethrough formatting
26
- class Modifier
27
- attr_reader :bordercolor, :borders, :color, :fontcolor, :formats
28
- attr_writer :borderstyle
29
- attr_accessor :expand, :fontfamily, :fontsize, :halign, :valign, :note, :numberformat, :row_level, :validation
30
-
31
- # @param row_level [Boolean] Whether or not this modifier applies to the entire row
32
- def initialize(row_level: false)
33
- @row_level = row_level
34
- @freeze = false
35
- @borders = ::Set.new
36
- @formats = ::Set.new
37
- end
38
-
39
- # Set the color
40
- #
41
- # @param hex_value [String]
42
- #
43
- # @return [Color]
44
- def color=(hex_value)
45
- @color = ::CSVPlusPlus::Color.new(hex_value)
46
- end
4
+ require_relative './modifier/conditional_formatting'
5
+ require_relative './modifier/data_validation'
6
+ require_relative './modifier/expand'
7
+ require_relative './modifier/modifier'
47
8
 
48
- # Assign a border
49
- #
50
- # @param side ['top', 'left', 'bottom', 'right', 'all']
51
- def border=(side)
52
- @borders << side
53
- end
54
-
55
- # Does this have a border along +side+?
56
- #
57
- # @param side ['top', 'left', 'bottom', 'right', 'all']
58
- #
59
- # @return [Boolean]
60
- def border_along?(side)
61
- @borders.include?('all') || @borders.include?(side)
62
- end
63
-
64
- # Does this have a border along all sides?
65
- #
66
- # @return [Boolean]
67
- def border_all?
68
- @borders.include?('all') \
69
- || (border_along?('top') && border_along?('bottom') && border_along?('left') && border_along?('right'))
70
- end
71
-
72
- # Set the bordercolor
73
- #
74
- # @param hex_value [String] formatted as '#000000', '#000' or '000000'
75
- def bordercolor=(hex_value)
76
- @bordercolor = ::CSVPlusPlus::Color.new(hex_value)
77
- end
78
-
79
- # Are there any borders set?
80
- #
81
- # @return [Boolean]
82
- def any_border?
83
- !@borders.empty?
84
- end
85
-
86
- # Set the fontcolor
87
- #
88
- # @param hex_value [String] formatted as '#000000', '#000' or '000000'
89
- def fontcolor=(hex_value)
90
- @fontcolor = ::CSVPlusPlus::Color.new(hex_value)
91
- end
92
-
93
- # Set a text format (bolid, italic, underline or strikethrough)
94
- #
95
- # @param value ['bold', 'italic', 'underline', 'strikethrough']
96
- def format=(value)
97
- @formats << value
98
- end
99
-
100
- # Is the given format set?
101
- #
102
- # @param type ['bold', 'italic', 'underline', 'strikethrough']
103
- #
104
- # @return [Boolean]
105
- def formatted?(type)
106
- @formats.include?(type)
9
+ module CSVPlusPlus
10
+ # All modifier-specific logic is hidden in this module and callers should just call +#new+ on this module.
11
+ module Modifier
12
+ extend ::T::Sig
13
+
14
+ # The sides that a border can be on
15
+ class BorderSide < ::T::Enum
16
+ enums do
17
+ All = new
18
+ Top = new
19
+ Bottom = new
20
+ Left = new
21
+ Right = new
22
+ end
107
23
  end
108
24
 
109
- # Freeze the row from edits
110
- #
111
- # @return [true]
112
- def freeze!
113
- @frozen = true
25
+ # The various border styles
26
+ class BorderStyle < ::T::Enum
27
+ enums do
28
+ Dashed = new
29
+ Dotted = new
30
+ Double = new
31
+ Solid = new
32
+ SolidMedium = new
33
+ SolidThick = new
34
+ end
114
35
  end
115
36
 
116
- # Is the row frozen?
117
- #
118
- # @return [Boolean]
119
- def frozen?
120
- @frozen
37
+ # The possible values for a horizontal alignment
38
+ class HorizontalAlign < ::T::Enum
39
+ enums do
40
+ Left = new
41
+ Right = new
42
+ Center = new
43
+ end
121
44
  end
122
45
 
123
- # Mark this modifer as row-level
124
- #
125
- # @return [true]
126
- def row_level!
127
- @row_level = true
46
+ # The allowed number formats
47
+ class NumberFormat < ::T::Enum
48
+ enums do
49
+ Currency = new
50
+ Date = new
51
+ DateTime = new
52
+ Number = new
53
+ Percent = new
54
+ Text = new
55
+ Time = new
56
+ Scientific = new
57
+ end
128
58
  end
129
59
 
130
- # Is this a row-level modifier?
131
- #
132
- # @return [Boolean]
133
- def row_level?
134
- @row_level
60
+ # The types of formats that can be applied to text.
61
+ class TextFormat < ::T::Enum
62
+ enums do
63
+ Bold = new
64
+ Italic = new
65
+ Strikethrough = new
66
+ Underline = new
67
+ end
135
68
  end
136
69
 
137
- # Is this a cell-level modifier?
138
- #
139
- # @return [Boolean]
140
- def cell_level?
141
- !@row_level
70
+ # The possible values for a horizontal alignment
71
+ class VerticalAlign < ::T::Enum
72
+ enums do
73
+ Top = new
74
+ Bottom = new
75
+ Center = new
76
+ end
142
77
  end
143
78
 
144
- # Style of border
79
+ sig { params(options: ::CSVPlusPlus::Options, row_level: ::T::Boolean).returns(::CSVPlusPlus::Modifier::Modifier) }
80
+ # Return a +Modifier+ with the proper validation and helper functions attached for the given output
145
81
  #
146
- # @return [String]
147
- def borderstyle
148
- @borderstyle || 'solid'
149
- end
150
-
151
- # @return [String]
152
- def to_s
153
- # TODO... I dunno, not sure how to manage this
154
- "Modifier(row_level: #{@row_level} halign: #{@halign} valign: #{@valign} format: #{@formats} " \
155
- "font_size: #{@font_size})"
156
- end
157
-
158
- # Create a new modifier instance, with all values defaulted from +other+
82
+ # @param options [boolean] is this a row level modifier? (otherwise cell-level)
83
+ # @param row_level [boolean] is this a row level modifier? (otherwise cell-level)
159
84
  #
160
- # @param other [Modifier]
161
- def take_defaults_from!(other)
162
- other.instance_variables.each do |property|
163
- # don't propagate row-specific values
164
- next if property == :@row_level
165
-
166
- value = other.instance_variable_get(property)
167
- instance_variable_set(property, value.clone)
85
+ # @return [ValidatedModifier]
86
+ def self.new(options, row_level: false)
87
+ output_format = options.output_format
88
+ case output_format
89
+ when ::CSVPlusPlus::Options::OutputFormat::CSV, ::CSVPlusPlus::Options::OutputFormat::OpenDocument
90
+ ::CSVPlusPlus::Modifier::Modifier.new(row_level:)
91
+ when ::CSVPlusPlus::Options::OutputFormat::Excel
92
+ ::CSVPlusPlus::Modifier::RubyXLModifier.new(row_level:)
93
+ when ::CSVPlusPlus::Options::OutputFormat::GoogleSheets
94
+ ::CSVPlusPlus::Modifier::GoogleSheetModifier.new(row_level:)
95
+ else ::T.absurd(output_format)
168
96
  end
169
97
  end
170
98
  end
171
99
  end
100
+
101
+ require_relative './modifier/google_sheet_modifier'
102
+ require_relative './modifier/modifier_validator'
103
+ require_relative './modifier/rubyxl_modifier'
@@ -1,8 +1,6 @@
1
+ # typed: strict
1
2
  # frozen_string_literal: true
2
3
 
3
- require_relative './cli_flag'
4
- require_relative './google_options'
5
-
6
4
  module CSVPlusPlus
7
5
  # The options a user can supply (via CLI flags)
8
6
  #
@@ -15,28 +13,80 @@ module CSVPlusPlus
15
13
  # @attr verbose [boolean] Include extra verbose output?
16
14
  # @attr_reader google [GoogleOptions] Options that are specific to the Google Sheets writer
17
15
  class Options
18
- attr_accessor :backup, :create_if_not_exists, :key_values, :offset, :output_filename, :sheet_name, :verbose
16
+ extend ::T::Sig
17
+
18
+ # The supported output formats. We use this to dispatch flow in several places
19
+ class OutputFormat < ::T::Enum
20
+ enums do
21
+ CSV = new
22
+ Excel = new
23
+ GoogleSheets = new
24
+ OpenDocument = new
25
+ end
26
+ end
27
+
28
+ sig { returns(::T::Boolean) }
29
+ attr_accessor :backup
30
+
31
+ sig { returns(::T::Boolean) }
32
+ attr_accessor :create_if_not_exists
33
+
34
+ sig { returns(::T::Hash[::Symbol, ::String]) }
35
+ attr_accessor :key_values
36
+
37
+ sig { returns(::T::Array[::Integer]) }
38
+ attr_accessor :offset
39
+
40
+ sig { returns(::T.nilable(::String)) }
41
+ attr_accessor :output_filename
42
+
43
+ sig { returns(::T.nilable(::String)) }
44
+ attr_accessor :sheet_name
45
+
46
+ sig { returns(::T::Boolean) }
47
+ attr_accessor :verbose
48
+
49
+ sig { returns(::T.nilable(::CSVPlusPlus::GoogleOptions)) }
19
50
  attr_reader :google
20
51
 
21
- # initialize
52
+ sig { void }
53
+ # Initialize a default +Options+ object
22
54
  def initialize
23
- @offset = [0, 0]
24
- @create_if_not_exists = false
25
- @key_values = {}
26
- @verbose = false
27
- @backup = false
55
+ @offset = ::T.let([0, 0], ::T::Array[::Integer])
56
+ @create_if_not_exists = ::T.let(false, ::T::Boolean)
57
+ @key_values = ::T.let({}, ::T::Hash[::Symbol, ::String])
58
+ @verbose = ::T.let(false, ::T::Boolean)
59
+ @backup = ::T.let(false, ::T::Boolean)
60
+ @google = ::T.let(nil, ::T.nilable(::CSVPlusPlus::GoogleOptions))
28
61
  end
29
62
 
63
+ sig { params(sheet_id: ::String).returns(::CSVPlusPlus::GoogleOptions) }
30
64
  # Set the Google Sheet ID
31
65
  #
32
- # @param sheet_id [String] The identifier used by Google's API to reference the sheet. You can find it in the URL
66
+ # @param sheet_id [::String] The identifier used by Google's API to reference the sheet. You can find it in the URL
33
67
  # for the sheet
34
68
  #
35
- # @return [String]
69
+ # @return [::String]
36
70
  def google_sheet_id=(sheet_id)
37
71
  @google = ::CSVPlusPlus::GoogleOptions.new(sheet_id)
38
72
  end
39
73
 
74
+ sig { returns(::CSVPlusPlus::Options::OutputFormat) }
75
+ # Given the options, figure out which type of +OutputFormat+ we'll be writing to
76
+ #
77
+ # @return [Options::OutputFormat]
78
+ def output_format
79
+ return ::CSVPlusPlus::Options::OutputFormat::GoogleSheets if @google
80
+
81
+ case @output_filename
82
+ when /\.csv$/ then ::CSVPlusPlus::Options::OutputFormat::CSV
83
+ when /\.ods$/ then ::CSVPlusPlus::Options::OutputFormat::OpenDocument
84
+ when /\.xl(sx|sm|tx|tm)$/ then ::CSVPlusPlus::Options::OutputFormat::Excel
85
+ else raise(::CSVPlusPlus::Error::Error, "Unsupported file extension: #{@output_filename}")
86
+ end
87
+ end
88
+
89
+ sig { returns(::T.nilable(::String)) }
40
90
  # Returns an error string or nil if there are no validation problems
41
91
  #
42
92
  # @return [String, nil]
@@ -46,6 +96,7 @@ module CSVPlusPlus
46
96
  'You must supply either a Google Sheet ID or an output file'
47
97
  end
48
98
 
99
+ sig { returns(::String) }
49
100
  # Return a string with a verbose description of what we're doing with the options
50
101
  #
51
102
  # @return [String]
@@ -55,7 +106,6 @@ module CSVPlusPlus
55
106
 
56
107
  # csv++ Command Options
57
108
 
58
- > Input filename | #{@filename}
59
109
  > Sheet name | #{@sheet_name}
60
110
  > Create sheet if it does not exist? | #{@create_if_not_exists}
61
111
  > Spreadsheet row-offset | #{@offset[0]}
@@ -73,14 +123,9 @@ module CSVPlusPlus
73
123
  SUMMARY
74
124
  end
75
125
 
76
- # @return [String]
77
- def to_s
78
- "Options(create_if_not_exists: #{@create_if_not_exists}, google: #{@google}, key_values: #{@key_values}, " \
79
- "offset: #{@offset}, sheet_name: #{@sheet_name}, verbose: #{@verbose})"
80
- end
81
-
82
126
  private
83
127
 
128
+ sig { returns(::String) }
84
129
  def summary_divider
85
130
  '========================================================================='
86
131
  end
@@ -7,14 +7,14 @@
7
7
  require 'racc/parser.rb'
8
8
 
9
9
  require_relative '../lexer'
10
- require_relative '../language/ast_builder'
10
+ require_relative '../entities/ast_builder'
11
11
 
12
12
  module CSVPlusPlus
13
- module Language
14
- class CellValueParser < Racc::Parser
13
+ module Parser
14
+ class CellValue < Racc::Parser
15
15
 
16
- module_eval(<<'...end cell_value.y/module_eval...', 'cell_value.y', 48)
17
- include ::CSVPlusPlus::Language::ASTBuilder
16
+ module_eval(<<'...end cell_value.y/module_eval...', 'cell_value.y', 49)
17
+ include ::CSVPlusPlus::Entities::ASTBuilder
18
18
  include ::CSVPlusPlus::Lexer
19
19
 
20
20
  protected
@@ -201,7 +201,7 @@ Racc_debug_parser = false
201
201
 
202
202
  # reduce 0 omitted
203
203
 
204
- module_eval(<<'.,.,', 'cell_value.y', 20)
204
+ module_eval(<<'.,.,', 'cell_value.y', 21)
205
205
  def _reduce_1(val, _values, result)
206
206
  @ast = val[1]
207
207
  result
@@ -212,86 +212,86 @@ module_eval(<<'.,.,', 'cell_value.y', 20)
212
212
 
213
213
  # reduce 3 omitted
214
214
 
215
- module_eval(<<'.,.,', 'cell_value.y', 24)
215
+ module_eval(<<'.,.,', 'cell_value.y', 25)
216
216
  def _reduce_4(val, _values, result)
217
217
  result = val[1]
218
218
  result
219
219
  end
220
220
  .,.,
221
221
 
222
- module_eval(<<'.,.,', 'cell_value.y', 25)
222
+ module_eval(<<'.,.,', 'cell_value.y', 26)
223
223
  def _reduce_5(val, _values, result)
224
- result = variable(val[1])
224
+ result = variable(val[1].to_sym)
225
225
  result
226
226
  end
227
227
  .,.,
228
228
 
229
- module_eval(<<'.,.,', 'cell_value.y', 26)
229
+ module_eval(<<'.,.,', 'cell_value.y', 27)
230
230
  def _reduce_6(val, _values, result)
231
231
  result = string(val[0])
232
232
  result
233
233
  end
234
234
  .,.,
235
235
 
236
- module_eval(<<'.,.,', 'cell_value.y', 27)
236
+ module_eval(<<'.,.,', 'cell_value.y', 28)
237
237
  def _reduce_7(val, _values, result)
238
238
  result = number(val[0])
239
239
  result
240
240
  end
241
241
  .,.,
242
242
 
243
- module_eval(<<'.,.,', 'cell_value.y', 28)
243
+ module_eval(<<'.,.,', 'cell_value.y', 29)
244
244
  def _reduce_8(val, _values, result)
245
245
  result = boolean(true)
246
246
  result
247
247
  end
248
248
  .,.,
249
249
 
250
- module_eval(<<'.,.,', 'cell_value.y', 29)
250
+ module_eval(<<'.,.,', 'cell_value.y', 30)
251
251
  def _reduce_9(val, _values, result)
252
252
  result = boolean(false)
253
253
  result
254
254
  end
255
255
  .,.,
256
256
 
257
- module_eval(<<'.,.,', 'cell_value.y', 30)
257
+ module_eval(<<'.,.,', 'cell_value.y', 31)
258
258
  def _reduce_10(val, _values, result)
259
- result = cell_reference(val[0])
259
+ result = cell_reference(ref: val[0])
260
260
  result
261
261
  end
262
262
  .,.,
263
263
 
264
- module_eval(<<'.,.,', 'cell_value.y', 32)
264
+ module_eval(<<'.,.,', 'cell_value.y', 33)
265
265
  def _reduce_11(val, _values, result)
266
- result = function_call(val[0], val[2])
266
+ result = function_call(val[0].to_sym, val[2])
267
267
  result
268
268
  end
269
269
  .,.,
270
270
 
271
- module_eval(<<'.,.,', 'cell_value.y', 33)
271
+ module_eval(<<'.,.,', 'cell_value.y', 34)
272
272
  def _reduce_12(val, _values, result)
273
- result = function_call(val[0], [])
273
+ result = function_call(val[0].to_sym, [])
274
274
  result
275
275
  end
276
276
  .,.,
277
277
 
278
- module_eval(<<'.,.,', 'cell_value.y', 35)
278
+ module_eval(<<'.,.,', 'cell_value.y', 36)
279
279
  def _reduce_13(val, _values, result)
280
280
  result = val[0] << val[2]
281
281
  result
282
282
  end
283
283
  .,.,
284
284
 
285
- module_eval(<<'.,.,', 'cell_value.y', 36)
285
+ module_eval(<<'.,.,', 'cell_value.y', 37)
286
286
  def _reduce_14(val, _values, result)
287
287
  result = [val[0]]
288
288
  result
289
289
  end
290
290
  .,.,
291
291
 
292
- module_eval(<<'.,.,', 'cell_value.y', 38)
292
+ module_eval(<<'.,.,', 'cell_value.y', 39)
293
293
  def _reduce_15(val, _values, result)
294
- result = function_call(val[1], [val[0], val[2]], infix: true)
294
+ result = function_call(val[1].to_sym, [val[0], val[2]], infix: true)
295
295
  result
296
296
  end
297
297
  .,.,
@@ -300,6 +300,6 @@ def _reduce_none(val, _values, result)
300
300
  val[0]
301
301
  end
302
302
 
303
- end # class CellValueParser
304
- end # module Language
303
+ end # class CellValue
304
+ end # module Parser
305
305
  end # module CSVPlusPlus