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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c203889b4310594acefe53d47df83e002a6b824cb29dacaeb94e79b54f31da3
4
- data.tar.gz: 5904e14763b77cb30a64c6aab0df1bbe50dca9137c5d78b95e3b0a1a1cea1df4
3
+ metadata.gz: 31693c85f869ecb9cb626e388f1a9f2aebfb5c6622c54894eb3b8f59f3995965
4
+ data.tar.gz: 857b98da54c538bab4f8204f04d320541ee810c14fe6de3d8431c4e6b6936efa
5
5
  SHA512:
6
- metadata.gz: 7afe62703ff5c4cce8f5298821df980f00c0625e9b389f393e41349a016e9c463f04cbed97c15d71826d57dde9b9b1874ec9ec8b61f1ccbb120ac748cae71e30
7
- data.tar.gz: 1933129c10fb231930cc6ada1525dba92b2b361729965b82712b0fa7bcf4b401bb0cc8e1039e8d2e1ad4cd1551a9d2c8f0e81940c09d055d66f3e26811f99ce5
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 :dry_run
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
- @dry_run = args[:dry_run] || false
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 dry_run
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
- # .gsub(/(\n\s*\n)+/, "\n")
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
- delete_target_root_path if reset_root_path
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 delete_target_root_path
54
- FileUtils.rm_rf(Dir.glob("#{target_root_path}/*"))
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
- :name,
14
- :source_path,
15
- :target_path,
16
- keyword_init: true
17
- )
18
-
19
- Group = Struct.new(
20
- :key,
21
- :type,
22
- :sub_keys,
23
- :folder,
24
- keyword_init: true
25
- )
26
- FilePath = Struct.new(
27
- :source_file,
28
- :target_html_file,
29
- :target_clean_html_file,
30
- :target_tailwind_config_file,
31
- :target_settings_file,
32
- :target_data_file,
33
- :target_astro_file, keyword_init: true
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TailwindDsl
4
- VERSION = '0.0.16'
4
+ VERSION = '0.0.18'
5
5
  end
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "tailwind_dsl",
3
- "version": "0.0.16",
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.16",
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tailwind_dsl",
3
- "version": "0.0.16",
3
+ "version": "0.0.18",
4
4
  "description": "Tailwind DSL will build tailwind websites useing Domain Specific Language conventions",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
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.16
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-19 00:00:00.000000000 Z
11
+ date: 2022-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cmdlet