logica_compiler 0.1.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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +138 -0
  4. data/Rakefile +76 -0
  5. data/exe/logica_compiler +7 -0
  6. data/lib/logica_compiler/active_record/runner.rb +89 -0
  7. data/lib/logica_compiler/cli.rb +76 -0
  8. data/lib/logica_compiler/commands/base.rb +45 -0
  9. data/lib/logica_compiler/commands/clean.rb +25 -0
  10. data/lib/logica_compiler/commands/compile.rb +57 -0
  11. data/lib/logica_compiler/commands/install.rb +21 -0
  12. data/lib/logica_compiler/commands/logica.rb +61 -0
  13. data/lib/logica_compiler/commands/version.rb +14 -0
  14. data/lib/logica_compiler/commands/watch.rb +23 -0
  15. data/lib/logica_compiler/compiler.rb +304 -0
  16. data/lib/logica_compiler/config.rb +99 -0
  17. data/lib/logica_compiler/deps/clock.rb +10 -0
  18. data/lib/logica_compiler/deps/env.rb +35 -0
  19. data/lib/logica_compiler/deps/shell.rb +31 -0
  20. data/lib/logica_compiler/deps/sleeper.rb +11 -0
  21. data/lib/logica_compiler/errors.rb +22 -0
  22. data/lib/logica_compiler/installer.rb +204 -0
  23. data/lib/logica_compiler/manifest.rb +31 -0
  24. data/lib/logica_compiler/railtie.rb +11 -0
  25. data/lib/logica_compiler/registry.rb +97 -0
  26. data/lib/logica_compiler/sql_dialect/postgres.rb +13 -0
  27. data/lib/logica_compiler/sql_dialect/sqlite.rb +13 -0
  28. data/lib/logica_compiler/sql_safety.rb +176 -0
  29. data/lib/logica_compiler/tasks/logica_compiler.rake +20 -0
  30. data/lib/logica_compiler/templates/bin_logica.erb +6 -0
  31. data/lib/logica_compiler/templates/config.yml.erb +7 -0
  32. data/lib/logica_compiler/templates/gitignore_block.erb +3 -0
  33. data/lib/logica_compiler/templates/hello_world.l.erb +9 -0
  34. data/lib/logica_compiler/templates/initializer.rb.erb +28 -0
  35. data/lib/logica_compiler/templates/requirements.txt.erb +1 -0
  36. data/lib/logica_compiler/util.rb +51 -0
  37. data/lib/logica_compiler/version.rb +5 -0
  38. data/lib/logica_compiler/watcher.rb +83 -0
  39. data/lib/logica_compiler.rb +13 -0
  40. data/sig/logica_compiler.rbs +4 -0
  41. metadata +177 -0
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "deps/sleeper"
4
+
5
+ module LogicaCompiler
6
+ class Watcher
7
+ DEFAULT_CONFIG_PATH = "logica/config.yml"
8
+ PROGRAMS_DIR = "logica/programs"
9
+
10
+ def self.start!(config_path: DEFAULT_CONFIG_PATH, **kwargs)
11
+ new(config_path:, **kwargs).start!
12
+ end
13
+
14
+ def initialize(
15
+ config_path: DEFAULT_CONFIG_PATH,
16
+ config_loader: Config.method(:load!),
17
+ compiler_factory: ->(config) { Compiler.new(config:) },
18
+ listener_factory: nil,
19
+ logger: nil,
20
+ sleeper: Deps::Sleeper.new,
21
+ production_check: nil
22
+ )
23
+ @config_path = config_path
24
+ @config_loader = config_loader
25
+ @compiler_factory = compiler_factory
26
+ @listener_factory = listener_factory
27
+ @logger = logger
28
+ @sleeper = sleeper
29
+ @production_check = production_check || method(:production?)
30
+ end
31
+
32
+ def start!
33
+ raise WatcherError, "logica watch is for development only" if @production_check.call
34
+
35
+ config = @config_loader.call(@config_path)
36
+ compiler = @compiler_factory.call(config)
37
+
38
+ root = config.root.join(PROGRAMS_DIR).to_s
39
+ listener = build_listener(root, compiler)
40
+
41
+ info "[logica] watching #{root}..."
42
+ listener.start
43
+ @sleeper.sleep
44
+ end
45
+
46
+ private
47
+
48
+ def build_listener(root, compiler)
49
+ factory = @listener_factory || default_listener_factory
50
+ factory.call(root, only: /\.l\z/, wait_for_delay: 1.0) do |_modified = nil, _added = nil, _removed = nil|
51
+ info "[logica] change detected, compiling..."
52
+ compiler.compile_all!
53
+ info "[logica] compile done"
54
+ rescue StandardError => e
55
+ warn "[logica] compile failed: #{e.class}: #{e.message}"
56
+ end
57
+ end
58
+
59
+ def default_listener_factory
60
+ require "listen"
61
+ Listen.method(:to)
62
+ end
63
+
64
+ def production?
65
+ defined?(Rails) && Rails.respond_to?(:env) && Rails.env.production?
66
+ end
67
+
68
+ def info(message)
69
+ logger&.info(message) || puts(message)
70
+ end
71
+
72
+ def warn(message)
73
+ logger&.warn(message) || Kernel.warn(message)
74
+ end
75
+
76
+ def logger
77
+ return @logger if @logger
78
+ return Rails.logger if defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger
79
+
80
+ nil
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "logica_compiler/version"
4
+ require_relative "logica_compiler/errors"
5
+
6
+ require_relative "logica_compiler/config"
7
+ require_relative "logica_compiler/sql_safety"
8
+ require_relative "logica_compiler/manifest"
9
+ require_relative "logica_compiler/compiler"
10
+ require_relative "logica_compiler/registry"
11
+
12
+ require_relative "logica_compiler/railtie" if defined?(Rails)
13
+ require_relative "logica_compiler/active_record/runner" if defined?(ActiveRecord)
@@ -0,0 +1,4 @@
1
+ module LogicaCompiler
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata ADDED
@@ -0,0 +1,177 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logica_compiler
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - jasl
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: listen
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '3.8'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '4.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '3.8'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '4.0'
32
+ - !ruby/object:Gem::Dependency
33
+ name: thor
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '1.3'
39
+ - - "<"
40
+ - !ruby/object:Gem::Version
41
+ version: '2.0'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '1.3'
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '2.0'
52
+ - !ruby/object:Gem::Dependency
53
+ name: activerecord
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '8.1'
59
+ - - "<"
60
+ - !ruby/object:Gem::Version
61
+ version: '9.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '8.1'
69
+ - - "<"
70
+ - !ruby/object:Gem::Version
71
+ version: '9.0'
72
+ - !ruby/object:Gem::Dependency
73
+ name: minitest
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - "~>"
77
+ - !ruby/object:Gem::Version
78
+ version: '5.16'
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: '5.16'
86
+ - !ruby/object:Gem::Dependency
87
+ name: sqlite3
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '1.6'
93
+ - - "<"
94
+ - !ruby/object:Gem::Version
95
+ version: '3.0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '1.6'
103
+ - - "<"
104
+ - !ruby/object:Gem::Version
105
+ version: '3.0'
106
+ description: A small compiler wrapper around Logica (Python) that precompiles .l programs
107
+ into digested SQL files + manifest, with optional ActiveRecord runner.
108
+ email:
109
+ - jasl9187@hotmail.com
110
+ executables:
111
+ - logica_compiler
112
+ extensions: []
113
+ extra_rdoc_files: []
114
+ files:
115
+ - LICENSE.txt
116
+ - README.md
117
+ - Rakefile
118
+ - exe/logica_compiler
119
+ - lib/logica_compiler.rb
120
+ - lib/logica_compiler/active_record/runner.rb
121
+ - lib/logica_compiler/cli.rb
122
+ - lib/logica_compiler/commands/base.rb
123
+ - lib/logica_compiler/commands/clean.rb
124
+ - lib/logica_compiler/commands/compile.rb
125
+ - lib/logica_compiler/commands/install.rb
126
+ - lib/logica_compiler/commands/logica.rb
127
+ - lib/logica_compiler/commands/version.rb
128
+ - lib/logica_compiler/commands/watch.rb
129
+ - lib/logica_compiler/compiler.rb
130
+ - lib/logica_compiler/config.rb
131
+ - lib/logica_compiler/deps/clock.rb
132
+ - lib/logica_compiler/deps/env.rb
133
+ - lib/logica_compiler/deps/shell.rb
134
+ - lib/logica_compiler/deps/sleeper.rb
135
+ - lib/logica_compiler/errors.rb
136
+ - lib/logica_compiler/installer.rb
137
+ - lib/logica_compiler/manifest.rb
138
+ - lib/logica_compiler/railtie.rb
139
+ - lib/logica_compiler/registry.rb
140
+ - lib/logica_compiler/sql_dialect/postgres.rb
141
+ - lib/logica_compiler/sql_dialect/sqlite.rb
142
+ - lib/logica_compiler/sql_safety.rb
143
+ - lib/logica_compiler/tasks/logica_compiler.rake
144
+ - lib/logica_compiler/templates/bin_logica.erb
145
+ - lib/logica_compiler/templates/config.yml.erb
146
+ - lib/logica_compiler/templates/gitignore_block.erb
147
+ - lib/logica_compiler/templates/hello_world.l.erb
148
+ - lib/logica_compiler/templates/initializer.rb.erb
149
+ - lib/logica_compiler/templates/requirements.txt.erb
150
+ - lib/logica_compiler/util.rb
151
+ - lib/logica_compiler/version.rb
152
+ - lib/logica_compiler/watcher.rb
153
+ - sig/logica_compiler.rbs
154
+ homepage: https://github.com/jasl/vibe_tavern
155
+ licenses:
156
+ - MIT
157
+ metadata:
158
+ homepage_uri: https://github.com/jasl/vibe_tavern
159
+ source_code_uri: https://github.com/jasl/vibe_tavern/tree/main/vendor/logica_compiler
160
+ rdoc_options: []
161
+ require_paths:
162
+ - lib
163
+ required_ruby_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: 3.2.0
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ requirements: []
174
+ rubygems_version: 4.0.1
175
+ specification_version: 4
176
+ summary: Compile Logica programs to digested SQL + manifest.
177
+ test_files: []