csv_plus_plus 0.0.5 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/README.md +1 -0
  4. data/lib/csv_plus_plus/cell.rb +24 -8
  5. data/lib/csv_plus_plus/cli.rb +29 -16
  6. data/lib/csv_plus_plus/cli_flag.rb +10 -2
  7. data/lib/csv_plus_plus/code_section.rb +55 -3
  8. data/lib/csv_plus_plus/color.rb +19 -5
  9. data/lib/csv_plus_plus/google_options.rb +6 -2
  10. data/lib/csv_plus_plus/graph.rb +0 -1
  11. data/lib/csv_plus_plus/language/ast_builder.rb +68 -0
  12. data/lib/csv_plus_plus/language/benchmarked_compiler.rb +65 -0
  13. data/lib/csv_plus_plus/language/builtins.rb +46 -0
  14. data/lib/csv_plus_plus/language/cell_value.tab.rb +106 -134
  15. data/lib/csv_plus_plus/language/code_section.tab.rb +163 -192
  16. data/lib/csv_plus_plus/language/compiler.rb +75 -92
  17. data/lib/csv_plus_plus/language/entities/boolean.rb +3 -2
  18. data/lib/csv_plus_plus/language/entities/cell_reference.rb +10 -3
  19. data/lib/csv_plus_plus/language/entities/entity.rb +20 -8
  20. data/lib/csv_plus_plus/language/entities/function.rb +6 -4
  21. data/lib/csv_plus_plus/language/entities/function_call.rb +17 -5
  22. data/lib/csv_plus_plus/language/entities/number.rb +6 -4
  23. data/lib/csv_plus_plus/language/entities/runtime_value.rb +9 -8
  24. data/lib/csv_plus_plus/language/entities/string.rb +6 -4
  25. data/lib/csv_plus_plus/language/references.rb +22 -5
  26. data/lib/csv_plus_plus/language/runtime.rb +80 -22
  27. data/lib/csv_plus_plus/language/scope.rb +34 -39
  28. data/lib/csv_plus_plus/language/syntax_error.rb +10 -5
  29. data/lib/csv_plus_plus/lexer/lexer.rb +27 -13
  30. data/lib/csv_plus_plus/lexer/tokenizer.rb +35 -11
  31. data/lib/csv_plus_plus/modifier.rb +38 -18
  32. data/lib/csv_plus_plus/modifier.tab.rb +2 -2
  33. data/lib/csv_plus_plus/options.rb +20 -2
  34. data/lib/csv_plus_plus/row.rb +15 -4
  35. data/lib/csv_plus_plus/template.rb +26 -6
  36. data/lib/csv_plus_plus/version.rb +1 -1
  37. data/lib/csv_plus_plus/writer/excel.rb +2 -9
  38. data/lib/csv_plus_plus/writer/file_backer_upper.rb +22 -20
  39. data/lib/csv_plus_plus/writer/google_sheet_builder.rb +8 -10
  40. data/lib/csv_plus_plus/writer/google_sheets.rb +4 -10
  41. data/lib/csv_plus_plus/writer/rubyxl_builder.rb +23 -15
  42. data/lib/csv_plus_plus/writer/rubyxl_modifier.rb +15 -8
  43. data/lib/csv_plus_plus.rb +42 -8
  44. metadata +5 -2
data/lib/csv_plus_plus.rb CHANGED
@@ -1,25 +1,59 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'google/apis/drive_v3'
4
+ require 'google/apis/sheets_v4'
5
+ require 'googleauth'
6
+ require 'rubyXL'
7
+ require 'rubyXL/convenience_methods'
8
+ require 'set'
9
+
10
+ require_relative 'csv_plus_plus/cell'
3
11
  require_relative 'csv_plus_plus/cli'
12
+ require_relative 'csv_plus_plus/code_section'
13
+ require_relative 'csv_plus_plus/color'
4
14
  require_relative 'csv_plus_plus/error'
15
+ require_relative 'csv_plus_plus/language/builtins'
5
16
  require_relative 'csv_plus_plus/language/compiler'
17
+ require_relative 'csv_plus_plus/language/runtime'
18
+ require_relative 'csv_plus_plus/language/syntax_error'
19
+ require_relative 'csv_plus_plus/modifier'
20
+ require_relative 'csv_plus_plus/modifier.tab'
6
21
  require_relative 'csv_plus_plus/options'
22
+ require_relative 'csv_plus_plus/row'
23
+ require_relative 'csv_plus_plus/template'
7
24
  require_relative 'csv_plus_plus/writer'
8
25
 
9
- # A language for writing rich CSV data
26
+ # A programming language for writing rich CSV files
10
27
  module CSVPlusPlus
11
28
  # Parse the input into a +Template+ and write it to the desired format
29
+ #
30
+ # @param input [String] The csvpp input to compile
31
+ # @param filename [String, nil] The filename the input was read from. +nil+ if it is read from stdin.
32
+ # @param options [Options] The various options to compile with
12
33
  def self.apply_template_to_sheet!(input, filename, options)
13
34
  warn(options.verbose_summary) if options.verbose
14
35
 
15
- ::CSVPlusPlus::Language::Compiler.with_compiler(input:, filename:, options:) do |c|
16
- template = c.parse_template
36
+ runtime = ::CSVPlusPlus::Language::Runtime.new(input:, filename:)
37
+
38
+ ::CSVPlusPlus::Language::Compiler.with_compiler(options:, runtime:) do |compiler|
39
+ template = compiler.compile_template
40
+
41
+ warn(template.verbose_summary) if options.verbose
42
+
43
+ write_template(template, compiler, options)
44
+ end
45
+ end
17
46
 
18
- output = ::CSVPlusPlus::Writer.writer(options)
19
- c.outputting! do
20
- output.write_backup if options.backup
21
- output.write(template)
22
- end
47
+ # Write the results (and possibly make a backup) of a compiled +template+
48
+ #
49
+ # @param template [Template] The compiled template
50
+ # @param compiler [Compiler] The compiler currently in use
51
+ # @param options [Options] The options we're running with
52
+ def self.write_template(template, compiler, options)
53
+ output = ::CSVPlusPlus::Writer.writer(options)
54
+ compiler.outputting! do
55
+ output.write_backup if options.backup
56
+ output.write(template)
23
57
  end
24
58
  end
25
59
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv_plus_plus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Carroll
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-18 00:00:00.000000000 Z
11
+ date: 2023-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-apis-drive_v3
@@ -133,6 +133,9 @@ files:
133
133
  - lib/csv_plus_plus/google_api_client.rb
134
134
  - lib/csv_plus_plus/google_options.rb
135
135
  - lib/csv_plus_plus/graph.rb
136
+ - lib/csv_plus_plus/language/ast_builder.rb
137
+ - lib/csv_plus_plus/language/benchmarked_compiler.rb
138
+ - lib/csv_plus_plus/language/builtins.rb
136
139
  - lib/csv_plus_plus/language/cell_value.tab.rb
137
140
  - lib/csv_plus_plus/language/code_section.tab.rb
138
141
  - lib/csv_plus_plus/language/compiler.rb