tailwind_dsl 0.0.16 → 0.0.18
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 +4 -4
- data/CHANGELOG.md +14 -0
- data/lib/tailwind_dsl/etl/component_models/extractor.rb +36 -5
- data/lib/tailwind_dsl/etl/component_structures/generator.rb +19 -4
- data/lib/tailwind_dsl/etl/component_structures/raw_component_query.rb +44 -23
- data/lib/tailwind_dsl/version.rb +1 -1
- data/package-lock.json +2 -2
- data/package.json +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 31693c85f869ecb9cb626e388f1a9f2aebfb5c6622c54894eb3b8f59f3995965
|
4
|
+
data.tar.gz: 857b98da54c538bab4f8204f04d320541ee810c14fe6de3d8431c4e6b6936efa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e202d10d63622982c89251ac5042bd8ac7400c7bcf634802752d01676519ed80a34ec0b610803ca90b3ae6060bfaccdc84e40bb74cd8675a71d268fb9cf457dc
|
7
|
+
data.tar.gz: ca1a51d6a3a36018684501b23a01542e5d80807901b8d5e3303fdab963d5f6a284175032435624f9ac6a7ad08a2cccf4dbf4501778f0e8868be2f6dbed69c26a
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
## [0.0.17](https://github.com/klueless-io/tailwind_dsl/compare/v0.0.16...v0.0.17) (2022-10-19)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* refactor component record shape ([8d9bd9a](https://github.com/klueless-io/tailwind_dsl/commit/8d9bd9ab7ab8a47db30f1916f289dba24040c988))
|
7
|
+
|
8
|
+
## [0.0.16](https://github.com/klueless-io/tailwind_dsl/compare/v0.0.15...v0.0.16) (2022-10-19)
|
9
|
+
|
10
|
+
|
11
|
+
### Bug Fixes
|
12
|
+
|
13
|
+
* refactor component record shape ([fada95e](https://github.com/klueless-io/tailwind_dsl/commit/fada95e8990b991d7fa554d6250f85b7a440e0e9))
|
14
|
+
|
1
15
|
## [0.0.15](https://github.com/klueless-io/tailwind_dsl/compare/v0.0.14...v0.0.15) (2022-10-18)
|
2
16
|
|
3
17
|
|
@@ -3,6 +3,16 @@
|
|
3
3
|
module TailwindDsl
|
4
4
|
module Etl
|
5
5
|
module ComponentModels
|
6
|
+
class Gpt3Extractor
|
7
|
+
def extract_data(component)
|
8
|
+
puts "extract data for #{component} using GPT3"
|
9
|
+
end
|
10
|
+
|
11
|
+
def extract_model(component)
|
12
|
+
puts "extract model for #{component} using GPT3"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
6
16
|
# Extract component models by reading the cleansed component HTML and then using GPT3 to infer both the data/model structure.
|
7
17
|
class Extractor
|
8
18
|
attr_reader :components
|
@@ -11,7 +21,7 @@ module TailwindDsl
|
|
11
21
|
attr_reader :batch_left
|
12
22
|
attr_reader :use_prompt
|
13
23
|
attr_reader :filter_design_system
|
14
|
-
attr_reader :
|
24
|
+
attr_reader :extract_handler
|
15
25
|
|
16
26
|
def initialize(components, target_root_path, **args)
|
17
27
|
@components = components
|
@@ -20,7 +30,7 @@ module TailwindDsl
|
|
20
30
|
@batch_left = batch_size
|
21
31
|
@use_prompt = args[:use_prompt] || false
|
22
32
|
@filter_design_system = args[:filter_design_system] || nil
|
23
|
-
@
|
33
|
+
@extract_handler = (args[:extract_handler] || Gpt3Extractor).new
|
24
34
|
end
|
25
35
|
|
26
36
|
# Goal: Extract the next (batch_size) component models using GPT3 and save them to target_root_path
|
@@ -28,14 +38,21 @@ module TailwindDsl
|
|
28
38
|
# Create a model file at: design_system.name -> group-hierarchy -> component-name.model.rb
|
29
39
|
|
30
40
|
# Process: Collect all components and optionally filter them by design system name.
|
41
|
+
# Also filter by other keys (to be determined)
|
42
|
+
# Only process files that have not been processed before.
|
31
43
|
# Look for the next component to be processed, if it does not exist in the target folder then process it.
|
32
44
|
# decrement the batch_left counter and continue until batch_left is 0.
|
33
45
|
# if :use_prompt is true then display the input/output files and ask if you wish to process the component or skip.
|
34
46
|
# process the component by calling the GPT3 API and save the results to the target folder.
|
35
47
|
|
48
|
+
# rubocop:disable Metrics/AbcSize
|
36
49
|
def extract
|
50
|
+
guards
|
51
|
+
|
37
52
|
filter_components.each do |component|
|
38
53
|
puts "Processing: #{component.design_system.name} -> #{component.group.key} -> #{component.name} -> remaining#: #{batch_left}"
|
54
|
+
|
55
|
+
component.debug
|
39
56
|
# component_model_path = File.join(target_root_path, component.design_system.name, component.group_hierarchy, "#{component.name}.model.rb")
|
40
57
|
# next if File.exist?(component_model_path)
|
41
58
|
|
@@ -47,15 +64,29 @@ module TailwindDsl
|
|
47
64
|
# end
|
48
65
|
|
49
66
|
# puts "Processing: #{component_model_path}"
|
50
|
-
@batch_left -= 1
|
51
|
-
break if batch_left.zero?
|
52
67
|
|
53
|
-
next if
|
68
|
+
# next if extract_handler
|
54
69
|
|
55
70
|
# model = Gpt3::ComponentModel.new(component.cleansed_html_path)
|
56
71
|
# model.save(component_model_path)
|
72
|
+
|
73
|
+
extract_handler.extract_data(component)
|
74
|
+
extract_handler.extract_model(component)
|
75
|
+
|
76
|
+
@batch_left -= 1
|
77
|
+
break if batch_left.zero?
|
57
78
|
end
|
58
79
|
end
|
80
|
+
# rubocop:enable Metrics/AbcSize
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
def guards
|
85
|
+
raise "Batch size must be greater than 0, got: #{batch_size}" if batch_size <= 0
|
86
|
+
raise 'Extract handler is required' unless extract_handler
|
87
|
+
raise 'Extract handler must implement extract_data method' unless extract_handler.respond_to?(:extract_data)
|
88
|
+
raise 'Extract handler must implement extract_model method' unless extract_handler.respond_to?(:extract_model)
|
89
|
+
end
|
59
90
|
|
60
91
|
def filter_components
|
61
92
|
return components unless filter_design_system
|
@@ -18,7 +18,8 @@ module TailwindDsl
|
|
18
18
|
BLANK_LINE_REGEX = /(\n\s*\n)+/.freeze
|
19
19
|
TAILWIND_CONFIG_REGEX = /```(?<tailwind>\n[\s\S]+?)```/.freeze
|
20
20
|
|
21
|
-
|
21
|
+
TRANSIENT_FILE_EXTENSIONS = %w[.clean.html .html .settings.json .tailwind.config.js].freeze
|
22
|
+
|
22
23
|
attr_reader :uikit
|
23
24
|
attr_reader :components
|
24
25
|
# Location for raw components
|
@@ -37,7 +38,7 @@ module TailwindDsl
|
|
37
38
|
def generate
|
38
39
|
assert_target_root_path_exists
|
39
40
|
|
40
|
-
|
41
|
+
clear_root_path if reset_root_path
|
41
42
|
|
42
43
|
@components = query_components
|
43
44
|
|
@@ -50,8 +51,22 @@ module TailwindDsl
|
|
50
51
|
raise 'Target path does not exist' unless Dir.exist?(target_root_path)
|
51
52
|
end
|
52
53
|
|
53
|
-
def
|
54
|
-
|
54
|
+
def clear_root_path
|
55
|
+
Dir.glob("#{target_root_path}/**/*")
|
56
|
+
.select { |path| transient_file?(path) }
|
57
|
+
.each { |path| File.delete(path) }
|
58
|
+
|
59
|
+
Dir.glob("#{target_root_path}/**/")
|
60
|
+
.reverse_each { |d| Dir.rmdir d if Dir.entries(d).size == 2 }
|
61
|
+
end
|
62
|
+
|
63
|
+
def transient_file?(path)
|
64
|
+
return false if File.directory?(path)
|
65
|
+
|
66
|
+
ext = File.basename(path).split('.', 2)[1]
|
67
|
+
ext = ext.nil? ? '' : ".#{ext}"
|
68
|
+
|
69
|
+
TRANSIENT_FILE_EXTENSIONS.include?(ext)
|
55
70
|
end
|
56
71
|
|
57
72
|
def query_components
|
@@ -7,31 +7,42 @@ module TailwindDsl
|
|
7
7
|
#
|
8
8
|
# This is a two pass process:
|
9
9
|
# 1. Query the raw component folder for all files that match the pattern and build up a graph with required information
|
10
|
+
|
11
|
+
# puts '%-20s %s' % ['name', name]
|
12
|
+
# puts '%-20s %s' % ['source_path', source_path]
|
13
|
+
# puts '%-20s %s' % ['target_path', target_path]
|
10
14
|
# 2. Flatten the graph into a list of rows
|
11
15
|
class RawComponentQuery
|
12
|
-
DesignSystem = Struct.new(
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
:
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
16
|
+
DesignSystem = Struct.new(:name, :source_path, :target_path, keyword_init: true) do
|
17
|
+
def debug
|
18
|
+
puts format('%-30<key>s : %<value>s', key: 'Design system', value: name)
|
19
|
+
puts format('%-30<key>s : %<value>s', key: 'Source path', value: source_path)
|
20
|
+
puts format('%-30<key>s : %<value>s', key: 'Target path', value: target_path)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
Group = Struct.new(:key, :type, :sub_keys, :folder, keyword_init: true) do
|
25
|
+
def debug
|
26
|
+
puts format('%-30<key>s : %<value>s', key: 'Group key', value: key)
|
27
|
+
puts format('%-30<key>s : %<value>s', key: 'Group type', value: type)
|
28
|
+
puts format('%-30<key>s : %<value>s', key: 'Group sub keys', value: sub_keys)
|
29
|
+
puts format('%-30<key>s : %<value>s', key: 'Group folder', value: folder)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
FilePath = Struct.new(:source_file, :target_html_file, :target_clean_html_file, :target_tailwind_config_file, :target_settings_file, :target_data_file, :target_astro_file,
|
33
|
+
keyword_init: true) do
|
34
|
+
# rubocop:disable Metrics/AbcSize
|
35
|
+
def debug
|
36
|
+
puts format('%-30<key>s : %<value>s', key: 'Source file', value: source_file)
|
37
|
+
puts format('%-30<key>s : %<value>s', key: 'Target html file', value: target_html_file)
|
38
|
+
puts format('%-30<key>s : %<value>s', key: 'Target clean html file', value: target_clean_html_file)
|
39
|
+
puts format('%-30<key>s : %<value>s', key: 'Target tailwind config file', value: target_tailwind_config_file)
|
40
|
+
puts format('%-30<key>s : %<value>s', key: 'Target settings file', value: target_settings_file)
|
41
|
+
puts format('%-30<key>s : %<value>s', key: 'Target data file', value: target_data_file)
|
42
|
+
puts format('%-30<key>s : %<value>s', key: 'Target astro file', value: target_astro_file)
|
43
|
+
end
|
44
|
+
# rubocop:enable Metrics/AbcSize
|
45
|
+
end
|
35
46
|
|
36
47
|
class Component
|
37
48
|
attr_reader :name
|
@@ -62,6 +73,16 @@ module TailwindDsl
|
|
62
73
|
relative: relative.to_h
|
63
74
|
}
|
64
75
|
end
|
76
|
+
|
77
|
+
def debug
|
78
|
+
puts format('%-30<key>s : %<value>s', key: 'Component', value: name)
|
79
|
+
design_system.debug
|
80
|
+
group.debug
|
81
|
+
puts ':: Absolute paths'
|
82
|
+
absolute.debug
|
83
|
+
puts '::Relative paths'
|
84
|
+
relative.debug
|
85
|
+
end
|
65
86
|
end
|
66
87
|
|
67
88
|
attr_reader :uikit
|
data/lib/tailwind_dsl/version.rb
CHANGED
data/package-lock.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "tailwind_dsl",
|
3
|
-
"version": "0.0.
|
3
|
+
"version": "0.0.18",
|
4
4
|
"lockfileVersion": 2,
|
5
5
|
"requires": true,
|
6
6
|
"packages": {
|
7
7
|
"": {
|
8
8
|
"name": "tailwind_dsl",
|
9
|
-
"version": "0.0.
|
9
|
+
"version": "0.0.18",
|
10
10
|
"devDependencies": {
|
11
11
|
"@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
|
12
12
|
"@semantic-release/changelog": "^6.0.1",
|
data/package.json
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tailwind_dsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Cruwys
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-10-
|
11
|
+
date: 2022-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cmdlet
|