Class: LcpRuby::Dsl::DslLoader
- Inherits:
-
Object
- Object
- LcpRuby::Dsl::DslLoader
show all
- Defined in:
- lib/lcp_ruby/dsl/dsl_loader.rb
Defined Under Namespace
Classes: EvalContext, JobEvalContext, ModelEvalContext, PresenterEvalContext, TypeEvalContext, ViewGroupEvalContext, WorkflowEvalContext
Class Method Summary
collapse
Class Method Details
.load_file(file_path) ⇒ Object
104
105
106
107
108
109
110
|
# File 'lib/lcp_ruby/dsl/dsl_loader.rb', line 104
def self.load_file(file_path)
context = EvalContext.new
context.instance_eval(File.read(file_path), file_path)
context.definitions
rescue SyntaxError => e
raise MetadataError, "Ruby DSL syntax error in #{file_path}: #{e.message}"
end
|
.load_jobs(dir) ⇒ Object
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
|
# File 'lib/lcp_ruby/dsl/dsl_loader.rb', line 204
def self.load_jobs(dir)
definitions = {}
return definitions unless dir.exist?
Dir[dir.join("*.rb")].sort.each do |file_path|
context = JobEvalContext.new
context.instance_eval(File.read(file_path), file_path)
rel_path = PathUtils.relative_path(file_path)
context.job_definitions.each do |job_def|
if definitions.key?(job_def.name)
raise MetadataError,
"Duplicate job '#{job_def.name}' in DSL files — conflict at #{file_path}"
end
job_def.source_path = rel_path
job_def.source_type = "ruby"
definitions[job_def.name] = job_def
end
rescue SyntaxError => e
raise MetadataError, "Ruby DSL syntax error in #{file_path}: #{e.message}"
end
definitions
end
|
.load_model_hashes(dir) ⇒ Object
Returns raw model hashes for the inheritance resolver. Format: { name => { hash:, source_path:, source_type: } }
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/lcp_ruby/dsl/dsl_loader.rb', line 27
def self.load_model_hashes(dir)
entries = {}
return entries unless dir.exist?
Dir[dir.join("*.rb")].sort.each do |file_path|
context = ModelEvalContext.new
context.instance_eval(File.read(file_path), file_path)
rel_path = PathUtils.relative_path(file_path)
context.entries.each do |entry|
name = entry[:name]
if entries.key?(name)
raise MetadataError,
"Duplicate model '#{name}' in DSL files — conflict at #{file_path}"
end
hash = entry[:builder].to_hash
hash["inherits"] = entry[:inherits] if entry[:inherits]
entries[name] = { hash: hash, source_path: rel_path, source_type: "ruby" }
end
rescue SyntaxError => e
raise MetadataError, "Ruby DSL syntax error in #{file_path}: #{e.message}"
end
entries
end
|
.load_models(dir) ⇒ Object
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/lcp_ruby/dsl/dsl_loader.rb', line 55
def self.load_models(dir)
definitions = {}
entries = load_model_hashes(dir)
entries.each do |name, entry|
definition = Metadata::ModelDefinition.from_hash(entry[:hash])
definition.source_path = entry[:source_path]
definition.source_type = entry[:source_type]
definitions[name] = definition
end
definitions
end
|
.load_presenters(dir) ⇒ Object
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/lcp_ruby/dsl/dsl_loader.rb', line 67
def self.load_presenters(dir)
definitions = {}
return definitions unless dir.exist?
entries = []
Dir[dir.join("*.rb")].sort.each do |file_path|
context = PresenterEvalContext.new
context.instance_eval(File.read(file_path), file_path)
context.entries.each do |entry|
entry[:source_path] = file_path
entries << entry
end
rescue SyntaxError => e
raise MetadataError, "Ruby DSL syntax error in #{file_path}: #{e.message}"
end
seen = {}
entries.each do |entry|
name = entry[:name]
if seen.key?(name)
raise MetadataError,
"Duplicate presenter '#{name}' in DSL files — conflict at #{entry[:source_path]}"
end
seen[name] = entry
end
resolved = resolve_presenter_inheritance(entries, seen)
resolved.each do |definition|
definitions[definition.name] = definition
end
definitions
end
|
.load_types(dir) ⇒ Object
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/lcp_ruby/dsl/dsl_loader.rb', line 4
def self.load_types(dir)
definitions = {}
return definitions unless dir.exist?
Dir[dir.join("*.rb")].sort.each do |file_path|
context = TypeEvalContext.new
context.instance_eval(File.read(file_path), file_path)
context.type_definitions.each do |type_def|
if definitions.key?(type_def.name)
raise MetadataError,
"Duplicate type '#{type_def.name}' in DSL files — conflict at #{file_path}"
end
definitions[type_def.name] = type_def
end
rescue SyntaxError => e
raise MetadataError, "Ruby DSL syntax error in #{file_path}: #{e.message}"
end
definitions
end
|
.load_view_groups(dir) ⇒ Object
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
|
# File 'lib/lcp_ruby/dsl/dsl_loader.rb', line 228
def self.load_view_groups(dir)
definitions = {}
return definitions unless dir.exist?
Dir[dir.join("*.rb")].sort.each do |file_path|
context = ViewGroupEvalContext.new
context.instance_eval(File.read(file_path), file_path)
rel_path = PathUtils.relative_path(file_path)
context.view_group_definitions.each do |vg_def|
if definitions.key?(vg_def.name)
raise MetadataError,
"Duplicate view group '#{vg_def.name}' in DSL files — conflict at #{file_path}"
end
vg_def.source_path = rel_path
vg_def.source_type = "ruby"
definitions[vg_def.name] = vg_def
end
rescue SyntaxError => e
raise MetadataError, "Ruby DSL syntax error in #{file_path}: #{e.message}"
end
definitions
end
|
.load_workflows(dir) ⇒ Object
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
|
# File 'lib/lcp_ruby/dsl/dsl_loader.rb', line 180
def self.load_workflows(dir)
definitions = {}
return definitions unless dir.exist?
Dir[dir.join("*.rb")].sort.each do |file_path|
context = WorkflowEvalContext.new
context.instance_eval(File.read(file_path), file_path)
rel_path = PathUtils.relative_path(file_path)
context.workflow_definitions.each do |wf_def|
if definitions.key?(wf_def.name)
raise MetadataError,
"Duplicate workflow '#{wf_def.name}' in DSL files — conflict at #{file_path}"
end
wf_def.source_path = rel_path
wf_def.source_type = "ruby"
definitions[wf_def.name] = wf_def
end
rescue SyntaxError => e
raise MetadataError, "Ruby DSL syntax error in #{file_path}: #{e.message}"
end
definitions
end
|