tailwind_dsl 0.0.2 → 0.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4fcd4358e8ac8016634e1456af973928ee76dba0bbe9828d6d411b2d108627b4
4
- data.tar.gz: ade8ab910b2a9f820b2c2983b7de1e41f166d0b966f9041f8de1bb992f9a7afa
3
+ metadata.gz: 574d3ce7e5298a88097270102327b55a5b89be6193e250cea95b4dafcf0ec2db
4
+ data.tar.gz: e81ab5eea249499d2ee91069b07ea92527ae75a0d08f6932ed93ed8b8e68ee99
5
5
  SHA512:
6
- metadata.gz: 8abb7eef9a28e3a5b527982ac3d25ee02d717120d28f6debfe3f5670fb6f8d1b517153c7d0d1a98949ccf0b303a8260617690d9ba76d67082e8ef78fe1c23491
7
- data.tar.gz: 39f8b746163100d0dd89fc2a8723d30bc339a08d771f4044056b3d10f26edafa53da5969b5bfdb5431f4790023d93d8819fc4b6f2883539510606b83bc7e8c2d
6
+ metadata.gz: ca1aefbfee42b2608c0753768b993d5705fd2590412719c1a87ff54bdeb207b2591f3d0dabb0b86d1306e097f7035b3aa72543400289b166f092b5f16726443a
7
+ data.tar.gz: 4a080c5b6f8e825489d9571ae3e324d8876869ae8900dfa28f19876af478a1cc2fc46254fcc23bf50817fde2d17adc9af8819b89091bee98026fa0c9989ae658
@@ -0,0 +1,400 @@
1
+ KManager.model :tailwind, namespace: %i[domain] do
2
+ # microapp = import(:handlebars_helpers, :microapp)
3
+
4
+ # other settings
5
+ # strokeWidth: 1-n
6
+ # when there is an arrow at beginning
7
+ # startFill=1,0
8
+ # when there is an arrow at end
9
+ # endFill=1,0
10
+
11
+ table :collections do
12
+ fields %i[key description default_themes]
13
+
14
+ row :devdojo, 'DevDojo', %w[blue red green]
15
+ row :merikui, 'Merikui', %w[black white]
16
+ end
17
+
18
+ table :component_groups do
19
+ fields %i[collection key description]
20
+
21
+ row :devdojo, :nav
22
+ row :devdojo, :hero
23
+ row :devdojo, :header
24
+ row :devdojo, :logo
25
+ row :devdojo, :content
26
+ row :devdojo, :footer
27
+ end
28
+
29
+ table :components do
30
+ fields %i[component_group key data_shape name description]
31
+
32
+
33
+ row :devdojo_nav , :nav_01
34
+ row :devdojo_nav , :nav_02
35
+ row :devdojo_nav , :nav_03
36
+ row :devdojo_nav , :nav_04
37
+ row :devdojo_hero , :hero_01
38
+ row :devdojo_hero , :hero_02
39
+ row :devdojo_hero , :hero_03
40
+ row :devdojo_hero , :hero_04
41
+ row :devdojo_content , :fancy_paragraph, :fancy_paragraph
42
+ end
43
+
44
+ # Component - AKA: Template
45
+ SAMPLE_TAILWIND = <<-HTML
46
+ # Fancy Paragraph
47
+ <div class="container mx-auto">
48
+ <div class="flex flex-wrap">
49
+ <div class="w-full md:w-1/2 p-6">
50
+ <div class="{{bg}} rounded-lg shadow-lg p-6">
51
+ <p class="{{fg}}">{{p}}</p>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ </div>
56
+ HTML
57
+
58
+ TAILWIND_DSL = <<-RUBY
59
+ tailwind = TailwindDsl
60
+ .init
61
+ .website(:test_site1,
62
+ name: 'Test Site 1',
63
+ description: 'This is our sample Test Site',
64
+ target_folder: 'test_site1',
65
+ base_collection: :devdojo,
66
+ theme: :teal
67
+
68
+ )
69
+ .page(:home
70
+ name: 'Home Page',
71
+ description: 'This is the Home Page',
72
+ child_pages(:about, :contact, :faq, :privacy, :articles) do
73
+
74
+ nav(:nav_01)
75
+ content(:fancy_paragraph) do
76
+ data
77
+ .p('The quick brown fox jumps over the lazy dog.')
78
+ .color(bg: 'white', fg: 'black')
79
+ end
80
+ end
81
+ .page(:about
82
+ name: 'About Page',
83
+ description: 'This is the About Page') do
84
+
85
+ nav(:nav_01)
86
+ content(:paragraph) do
87
+ data
88
+ .p('This is the about page')
89
+ end
90
+ end
91
+ .page(:contact
92
+ name: 'Contact Page',
93
+ description: 'This is the Contact Page') do
94
+
95
+ nav(:nav_01)
96
+ content(:paragraph) do
97
+ data
98
+ .p('This is the contact page')
99
+ end
100
+ end
101
+ RUBY
102
+
103
+ SAMPLE_DATASHAPE_DSL_DEFINITION = <<-RUBY
104
+ fancy_paragraph_definition = DataDsl
105
+ .init(:fancy_paragraph)
106
+ .requires(:p, default: 'The quick brown fox jumps over the lazy dog.')
107
+ .requires(:color, defaults: { bg: 'white', fg: 'black' })
108
+ RUBY
109
+
110
+ SAMPLE_DATASHAPE_DSL = <<-RUBY
111
+ fancy_paragraph = FancyParagraph
112
+ .init
113
+ .p('The quick brown fox jumps over the lazy dog.')
114
+ .color(bg: 'white', fg: 'black')
115
+ RUBY
116
+
117
+ SAMPLE_DATASHAPE_JSON = <<-JSON
118
+ {
119
+ p: 'The quick brown fox jumps over the lazy dog.',
120
+ bg: 'white',
121
+ fg: 'black'
122
+ }
123
+ JSON
124
+
125
+ # A datashape is a DSL definition for the data that is used to populate the tailwind component data
126
+ table :data_shapes do
127
+ fields %i[key name description]
128
+
129
+ row :fancy_paragraph
130
+ end
131
+
132
+ table :themes do
133
+ fields %i[favourite key bg_color font_color]
134
+
135
+ # fields %i[key fill_color stroke_color font_color gradient]
136
+
137
+ # row :style_01, '#f5f5f5', '#666666', '#333333'
138
+ # row :style_02, '#dae8fc', '#6c8ebf', '#333333'
139
+
140
+ # alternative source: https://www.quackit.com/css/css_color_codes.cfm
141
+ # source: https://www.w3schools.com/colors/colors_hex.asp
142
+ row 0, :navy , '#000080', '#FFFFFF'
143
+ row 0, :dark_blue , '#00008B', '#FFFFFF'
144
+ row 0, :medium_blue , '#0000CD', '#FFFFFF'
145
+ row 0, :blue , '#0000FF', '#FFFFFF'
146
+ row 0, :dark_green , '#006400', '#FFFFFF'
147
+ row 0, :green , '#008000', '#FFFFFF'
148
+ row 1, :teal , '#008080', '#FFFFFF'
149
+ row 0, :dark_cyan , '#008B8B', '#FFFFFF'
150
+ row 1, :deep_sky_blue , '#00BFFF', '#FFFFFF'
151
+ row 1, :dark_turquoise , '#00CED1', '#FFFFFF'
152
+ row 0, :medium_spring_green , '#00FA9A', '#1F2D3D'
153
+ row 0, :lime , '#00FF00', '#FFFFFF'
154
+ row 0, :spring_green , '#00FF7F', '#1F2D3D'
155
+ row 0, :aqua , '#00FFFF', '#1F2D3D'
156
+ row 0, :cyan , '#00FFFF', '#1F2D3D'
157
+ row 0, :midnight_blue , '#191970', '#FFFFFF'
158
+ row 0, :dodger_blue , '#1E90FF', '#FFFFFF'
159
+ row 0, :light_sea_green , '#20B2AA', '#FFFFFF'
160
+ row 0, :forest_green , '#228B22', '#FFFFFF'
161
+ row 0, :sea_green , '#2E8B57', '#FFFFFF'
162
+ row 0, :dark_slate_gray , '#2F4F4F', '#FFFFFF'
163
+ row 0, :dark_slate_grey , '#2F4F4F', '#FFFFFF'
164
+ row 0, :lime_green , '#32CD32', '#FFFFFF'
165
+ row 0, :medium_sea_green , '#3CB371', '#FFFFFF'
166
+ row 0, :turquoise , '#40E0D0', '#1F2D3D'
167
+ row 1, :royal_blue , '#4169E1', '#FFFFFF'
168
+ row 1, :steel_blue , '#4682B4', '#FFFFFF'
169
+ row 0, :dark_slate_blue , '#483D8B', '#FFFFFF'
170
+ row 0, :medium_turquoise , '#48D1CC', '#1F2D3D'
171
+ row 0, :indigo , '#4B0082', '#FFFFFF'
172
+ row 0, :dark_olive_green , '#556B2F', '#FFFFFF'
173
+ row 0, :cadet_blue , '#5F9EA0', '#FFFFFF'
174
+ row 1, :cornflower_blue , '#6495ED', '#FFFFFF'
175
+ row 0, :rebecca_purple , '#663399', '#FFFFFF'
176
+ row 0, :medium_aqua_marine , '#66CDAA', '#1F2D3D'
177
+ row 0, :dim_gray , '#696969', '#FFFFFF'
178
+ row 0, :dim_grey , '#696969', '#FFFFFF'
179
+ row 0, :slate_blue , '#6A5ACD', '#FFFFFF'
180
+ row 0, :olive_drab , '#6B8E23', '#FFFFFF'
181
+ row 0, :slate_gray , '#708090', '#FFFFFF'
182
+ row 0, :slate_grey , '#708090', '#FFFFFF'
183
+ row 0, :light_slate_gray , '#778899', '#FFFFFF'
184
+ row 0, :light_slate_grey , '#778899', '#FFFFFF'
185
+ row 0, :medium_slate_blue , '#7B68EE', '#FFFFFF'
186
+ row 0, :lawn_green , '#7CFC00', '#1F2D3D'
187
+ row 0, :chartreuse , '#7FFF00', '#1F2D3D'
188
+ row 0, :aquamarine , '#7FFFD4', '#1F2D3D'
189
+ row 0, :maroon , '#800000', '#FFFFFF'
190
+ row 0, :purple , '#800080', '#FFFFFF'
191
+ row 0, :olive , '#808000', '#FFFFFF'
192
+ row 0, :gray , '#808080', '#FFFFFF'
193
+ row 0, :grey , '#808080', '#FFFFFF'
194
+ row 0, :sky_blue , '#87CEEB', '#1F2D3D'
195
+ row 0, :light_sky_blue , '#87CEFA', '#1F2D3D'
196
+ row 0, :blue_violet , '#8A2BE2', '#FFFFFF'
197
+ row 0, :dark_red , '#8B0000', '#FFFFFF'
198
+ row 0, :dark_magenta , '#8B008B', '#FFFFFF'
199
+ row 0, :saddle_brown , '#8B4513', '#FFFFFF'
200
+ row 1, :dark_sea_green , '#8FBC8F', '#1F2D3D'
201
+ row 0, :light_green , '#90EE90', '#1F2D3D'
202
+ row 0, :medium_purple , '#9370DB', '#FFFFFF'
203
+ row 0, :dark_violet , '#9400D3', '#FFFFFF'
204
+ row 0, :pale_green , '#98FB98', '#1F2D3D'
205
+ row 0, :dark_orchid , '#9932CC', '#FFFFFF'
206
+ row 0, :yellow_green , '#9ACD32', '#1F2D3D'
207
+ row 0, :sienna , '#A0522D', '#FFFFFF'
208
+ row 0, :brown , '#A52A2A', '#FFFFFF'
209
+ row 0, :dark_gray , '#A9A9A9', '#1F2D3D'
210
+ row 0, :dark_grey , '#A9A9A9', '#1F2D3D'
211
+ row 0, :light_blue , '#ADD8E6', '#1F2D3D'
212
+ row 0, :green_yellow , '#ADFF2F', '#1F2D3D'
213
+ row 0, :pale_turquoise , '#AFEEEE', '#1F2D3D'
214
+ row 1, :light_steel_blue , '#B0C4DE', '#1F2D3D'
215
+ row 0, :powder_blue , '#B0E0E6', '#1F2D3D'
216
+ row 1, :fire_brick , '#B22222', '#FFFFFF'
217
+ row 0, :dark_golden_rod , '#B8860B', '#FFFFFF'
218
+ row 0, :medium_orchid , '#BA55D3', '#FFFFFF'
219
+ row 1, :rosy_brown , '#BC8F8F', '#1F2D3D'
220
+ row 0, :dark_khaki , '#BDB76B', '#1F2D3D'
221
+ row 0, :silver , '#C0C0C0', '#1F2D3D'
222
+ row 0, :medium_violet_red , '#C71585', '#FFFFFF'
223
+ row 1, :indian_red , '#CD5C5C', '#FFFFFF'
224
+ row 0, :peru , '#CD853F', '#FFFFFF'
225
+ row 0, :chocolate , '#D2691E', '#FFFFFF'
226
+ row 1, :tan , '#D2B48C', '#1F2D3D'
227
+ row 0, :light_gray , '#D3D3D3', '#1F2D3D'
228
+ row 0, :light_grey , '#D3D3D3', '#1F2D3D'
229
+ row 0, :thistle , '#D8BFD8', '#1F2D3D'
230
+ row 0, :orchid , '#DA70D6', '#1F2D3D'
231
+ row 0, :golden_rod , '#DAA520', '#1F2D3D'
232
+ row 0, :pale_violet_red , '#DB7093', '#FFFFFF'
233
+ row 0, :crimson , '#DC143C', '#FFFFFF'
234
+ row 0, :gainsboro , '#DCDCDC', '#1F2D3D'
235
+ row 0, :plum , '#DDA0DD', '#1F2D3D'
236
+ row 1, :burly_wood , '#DEB887', '#1F2D3D'
237
+ row 0, :light_cyan , '#E0FFFF', '#1F2D3D'
238
+ row 0, :lavender , '#E6E6FA', '#1F2D3D'
239
+ row 0, :dark_salmon , '#E9967A', '#1F2D3D'
240
+ row 0, :violet , '#EE82EE', '#1F2D3D'
241
+ row 0, :pale_golden_rod , '#EEE8AA', '#1F2D3D'
242
+ row 0, :light_coral , '#F08080', '#1F2D3D'
243
+ row 0, :khaki , '#F0E68C', '#1F2D3D'
244
+ row 0, :alice_blue , '#F0F8FF', '#1F2D3D'
245
+ row 0, :honey_dew , '#F0FFF0', '#1F2D3D'
246
+ row 0, :azure , '#F0FFFF', '#1F2D3D'
247
+ row 0, :sandy_brown , '#F4A460', '#1F2D3D'
248
+ row 1, :wheat , '#F5DEB3', '#1F2D3D'
249
+ row 0, :beige , '#F5F5DC', '#1F2D3D'
250
+ row 0, :white_smoke , '#F5F5F5', '#1F2D3D'
251
+ row 0, :mint_cream , '#F5FFFA', '#1F2D3D'
252
+ row 0, :ghost_white , '#F8F8FF', '#1F2D3D'
253
+ row 0, :salmon , '#FA8072', '#1F2D3D'
254
+ row 0, :antique_white , '#FAEBD7', '#1F2D3D'
255
+ row 1, :linen , '#FAF0E6', '#1F2D3D'
256
+ row 1, :light_golden_rod_yellow , '#FAFAD2', '#1F2D3D'
257
+ row 1, :pale_gray , '#FAFAFA', '#1F2D3D'
258
+ row 0, :pale_grey , '#FAFAFA', '#1F2D3D'
259
+ row 0, :old_lace , '#FDF5E6', '#1F2D3D'
260
+ row 0, :red , '#FF0000', '#FFFFFF'
261
+ row 0, :fuchsia , '#FF00FF', '#FFFFFF'
262
+ row 0, :magenta , '#FF00FF', '#FFFFFF'
263
+ row 0, :deep_pink , '#FF1493', '#FFFFFF'
264
+ row 0, :orange_red , '#FF4500', '#FFFFFF'
265
+ row 0, :tomato , '#FF6347', '#FFFFFF'
266
+ row 0, :hot_pink , '#FF69B4', '#1F2D3D'
267
+ row 0, :coral , '#FF7F50', '#1F2D3D'
268
+ row 0, :dark_orange , '#FF8C00', '#1F2D3D'
269
+ row 0, :light_salmon , '#FFA07A', '#1F2D3D'
270
+ row 0, :orange , '#FFA500', '#1F2D3D'
271
+ row 0, :light_pink , '#FFB6C1', '#1F2D3D'
272
+ row 0, :pink , '#FFC0CB', '#1F2D3D'
273
+ row 0, :gold , '#FFD700', '#1F2D3D'
274
+ row 1, :peach_puff , '#FFDAB9', '#1F2D3D'
275
+ row 0, :navajo_white , '#FFDEAD', '#1F2D3D'
276
+ row 0, :moccasin , '#FFE4B5', '#1F2D3D'
277
+ row 0, :bisque , '#FFE4C4', '#1F2D3D'
278
+ row 0, :misty_rose , '#FFE4E1', '#1F2D3D'
279
+ row 0, :blanched_almond , '#FFEBCD', '#1F2D3D'
280
+ row 0, :papaya_whip , '#FFEFD5', '#1F2D3D'
281
+ row 0, :lavender_blush , '#FFF0F5', '#1F2D3D'
282
+ row 0, :sea_shell , '#FFF5EE', '#1F2D3D'
283
+ row 1, :cornsilk , '#FFF8DC', '#1F2D3D'
284
+ row 0, :lemon_chiffon , '#FFFACD', '#1F2D3D'
285
+ row 0, :floral_white , '#FFFAF0', '#1F2D3D'
286
+ row 1, :snow , '#FFFAFA', '#1F2D3D'
287
+ row 0, :yellow , '#FFFF00', '#1F2D3D'
288
+ row 0, :light_yellow , '#FFFFE0', '#1F2D3D'
289
+ row 1, :ivory , '#FFFFF0', '#1F2D3D'
290
+ end
291
+
292
+ action do
293
+ return
294
+ data = self.raw_data
295
+
296
+ lookup = data['lines'] + data['texts'] + data['elements']
297
+
298
+ content = {
299
+ shape: {
300
+ lookup: lookup.map { |shape| { key: shape['key'], category: shape['category'] } },
301
+ elements: data['elements'],
302
+ lines: data['lines'],
303
+ texts: data['texts']
304
+ },
305
+ connector: {
306
+ compass_points: data['connector_compass_points'],
307
+ waypoints: data['connector_waypoints'],
308
+ arrows: data['connector_arrows'],
309
+ designs: data['connector_designs'],
310
+ },
311
+ theme: {
312
+ elements: data['element_themes'],
313
+ backgrounds: data['background_themes']
314
+ },
315
+ strokes: data['strokes']
316
+ }
317
+
318
+ k_builder
319
+ .cd(:app)
320
+ .add_file('config/configuration.json', content: JSON.pretty_generate(content), on_exist: :write)
321
+
322
+ generate_code
323
+ end
324
+ end
325
+
326
+ def generate_code
327
+ shapes_file = k_builder.target_folders.get_filename(:app, 'config/configuration.json')
328
+ shapes_configuration = JSON.parse(File.read(shapes_file))
329
+ shapes = shapes_configuration['shape']
330
+ lookup = shapes['lookup']
331
+ elements = shapes['elements']
332
+ lines = shapes['lines']
333
+ texts = shapes['texts']
334
+
335
+ # strokes = shapes_configuration['strokes']
336
+
337
+ KDirector::Dsls::BasicDsl
338
+ .init(k_builder,
339
+ on_exist: :write, # %i[skip write compare]
340
+ on_action: :execute # %i[queue execute]
341
+ )
342
+ .blueprint(
343
+ active: true,
344
+ on_exist: :write) do
345
+
346
+ cd(:lib)
347
+
348
+ add('schema/_.rb',
349
+ template_file: 'schema_require.rb',
350
+ elements: elements,
351
+ lines: lines,
352
+ texts: texts)
353
+
354
+ elements.each do |element|
355
+ add("schema/elements/#{element['key']}.rb",
356
+ template_file: 'schema_element.rb',
357
+ element: element)
358
+ end
359
+
360
+ lines.each do |line|
361
+ add("schema/lines/#{line['key']}.rb",
362
+ template_file: 'schema_line.rb',
363
+ line: line)
364
+ end
365
+
366
+ texts.each do |text|
367
+ add("schema/texts/#{text['key']}.rb",
368
+ template_file: 'schema_text.rb',
369
+ text: text)
370
+ end
371
+
372
+ add("drawio_shapes.rb" , template_file: 'drawio_shapes.rb' , shapes: lookup, shape_length: lookup.length)
373
+ add("dom_builder_shapes.rb" , template_file: 'dom_builder_shapes.rb' , shapes: lookup)
374
+
375
+ cd(:spec)
376
+
377
+ # build spec for each shape
378
+ elements.each do |element|
379
+ add("schema/elements/#{element['key']}_spec.rb",
380
+ template_file: 'schema_element_spec.rb',
381
+ element: element)
382
+ end
383
+
384
+ lines.each do |line|
385
+ add("schema/lines/#{line['key']}_spec.rb",
386
+ template_file: 'schema_line_spec.rb',
387
+ line: line)
388
+ end
389
+
390
+ texts.each do |text|
391
+ add("schema/texts/#{text['key']}_spec.rb",
392
+ template_file: 'schema_text_spec.rb',
393
+ text: text)
394
+ end
395
+
396
+ cd(:app)
397
+ run_command('rubocop -a')
398
+
399
+ end
400
+ end
data/.builders/boot.rb CHANGED
@@ -16,6 +16,11 @@ def camel
16
16
  Handlebars::Helpers::StringFormatting::Camel.new
17
17
  end
18
18
 
19
+ def snake
20
+ require 'handlebars/helpers/string_formatting/snake'
21
+ Handlebars::Helpers::StringFormatting::Snake.new
22
+ end
23
+
19
24
  def titleize
20
25
  require 'handlebars/helpers/string_formatting/titleize'
21
26
  Handlebars::Helpers::StringFormatting::Titleize.new
@@ -49,6 +54,9 @@ KConfig.configure(CONFIG_KEY) do |config|
49
54
  config.template_folders.add(:template , File.expand_path('.templates', Dir.pwd))
50
55
 
51
56
  config.target_folders.add(:app , base_folder)
57
+ config.target_folders.add(:lib , :app, 'lib', 'tailwind_dsl')
58
+ config.target_folders.add(:spec , :app, 'spec', 'tailwind_dsl')
59
+ config.target_folders.add(:docs , :app, 'docs')
52
60
  config.target_folders.add(:builder , builder_folder)
53
61
  end
54
62
 
@@ -0,0 +1,97 @@
1
+ KManager.action :domain_model_to_code do
2
+ action do
3
+ director = KDirector::Dsls::RubyGemDsl
4
+ .init(k_builder,
5
+ template_base_folder: 'ruby/components/drawio_diagram',
6
+ on_exist: :skip, # %i[skip write compare]
7
+ on_action: :queue # %i[queue execute]
8
+ )
9
+ .data(
10
+ )
11
+ .blueprint(
12
+ active: true,
13
+ name: :build_domain,
14
+ description: 'Build the domain classes and tests based on the domain model',
15
+ on_exist: :skip) do
16
+
17
+ domain_model_list = domain_model.take(11)
18
+
19
+ domain_model_list.each do |code_block|
20
+ if code_block[:block_type] == 'klass'
21
+ klass = code_block[:items].select { |item| item[:type] == 'class' }.first
22
+ namespaces = snake.parse(klass[:namespace]).to_s.split('::')
23
+ model = {
24
+ name: klass[:name],
25
+ description: klass[:description],
26
+ namespaces: [:tailwind_dsl] + namespaces,
27
+ fields: code_block[:items].select { |item| item[:type] == 'field' }.map { |item| { name: item[:name], type: item[:type] } },
28
+ methods: code_block[:items].select { |item| item[:type] == 'method' }.map { |item| { name: item[:name], type: item[:type] } }
29
+ }
30
+
31
+ cd(:lib)
32
+ add(output_file_name(namespaces, klass[:name]), template_file: 'class.rb', model: model)
33
+ cd(:spec)
34
+ add(output_file_name(namespaces, klass[:name], suffix: '_spec'), template_file: 'class_spec.rb', model: model)
35
+ end
36
+ end
37
+
38
+ require_paths = domain_model_list.map { |code_block|
39
+ klass = code_block[:items].select { |item| item[:type] == 'class' }.first
40
+ namespaces = snake.parse(klass[:namespace]).to_s.split('::')
41
+ full_namespace = [:tailwind_dsl] + namespaces + [snake.parse(klass[:name])]
42
+ full_namespace.join('/')
43
+ }
44
+
45
+ cd(:lib)
46
+ add('../_.rb', template_file: 'requires.rb', require_paths: require_paths)
47
+
48
+ run_command('rubocop -a')
49
+
50
+ # puts JSON.pretty_generate(domain_model)
51
+ # add('.gitignore')
52
+ end
53
+
54
+ director.play_actions
55
+ # director.builder.logit
56
+ end
57
+ end
58
+
59
+ @domain_model = nil
60
+
61
+ def domain_model
62
+ @domain_model ||= begin
63
+ file = k_builder.target_folders.get_filename(:docs, 'domain-model.json')
64
+ hash = JSON.parse(File.read(file), symbolize_names: true)
65
+
66
+ domain_page = hash[:pages].first
67
+ page_node = domain_page[:nodes].first
68
+ root_node = page_node[:nodes].first
69
+ code_blocks = root_node[:nodes].select { |node| node[:key] == 'klass' || node[:key] == 'interface' }
70
+ # puts JSON.pretty_generate(code_blocks)
71
+ # todo: post process to code block items to handle deep namespaces if needed
72
+ code_blocks.map do |code_block|
73
+ {
74
+ block_type: code_block[:key],
75
+ items: code_block[:meta_data][:items]
76
+ }
77
+ end
78
+ end
79
+ end
80
+
81
+ def output_file_name(namespaces, name, suffix: '', extension: 'rb')
82
+ name = snake.parse(name)
83
+
84
+ file_name = "#{name}#{suffix}.#{extension}"
85
+ file_parts = namespaces.reject(&:empty?)
86
+ file_parts << file_name
87
+ file_parts.join('/')
88
+ end
89
+
90
+ KManager.opts.app_name = 'domain_model_to_code'
91
+ KManager.opts.sleep = 2
92
+ KManager.opts.reboot_on_kill = 0
93
+ KManager.opts.reboot_sleep = 4
94
+ KManager.opts.exception_style = :short
95
+ KManager.opts.show.time_taken = true
96
+ KManager.opts.show.finished = true
97
+ KManager.opts.show.finished_message = 'FINISHED :)'