fli_video 0.0.2 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.builders/generators/back/scripts/01-get-technical-design-and-feature-list.rb +32 -0
  3. data/.builders/generators/back/scripts/02-get-feature-list-and-components.rb +42 -0
  4. data/.builders/generators/back/scripts/03-get-structure.rb +104 -0
  5. data/.builders/generators/back/scripts/generated/application-structure.json +231 -0
  6. data/.builders/generators/back/scripts/generated/features-and-components.md +988 -0
  7. data/.builders/generators/back/scripts/generated/technical-design-and-features.md +424 -0
  8. data/.builders/klues/add_episode.klue +25 -0
  9. data/.builders/klues/change_chapter_name.klue +32 -0
  10. data/.builders/klues/create_chapter_video.klue +34 -0
  11. data/.builders/klues/create_project.klue +37 -0
  12. data/.builders/klues/empty_trash.klue +24 -0
  13. data/.builders/klues/episode_path.klue +77 -0
  14. data/.builders/klues/global_config.klue +31 -0
  15. data/.builders/klues/move_ecamm_file.klue +21 -0
  16. data/.builders/klues/move_to_trash.klue +35 -0
  17. data/.builders/klues/open_in_finder.klue +25 -0
  18. data/.builders/klues/project_config.klue +123 -0
  19. data/.builders/klues/project_meta_data_store.klue +28 -0
  20. data/.builders/klues/project_path.klue +77 -0
  21. data/.builders/klues/recording_file_watcher.klue +28 -0
  22. data/.builders/klues/recording_filename.klue +112 -0
  23. data/.builders/klues/restore_from_trash.klue +29 -0
  24. data/.builders/klues/switch_focus.klue +24 -0
  25. data/.builders/klues/text_to_speech.klue +29 -0
  26. data/.builders/klues/transcript_data_store.klue +28 -0
  27. data/.rubocop.yml +2 -0
  28. data/CHANGELOG.md +26 -0
  29. data/README.md +13 -20
  30. data/bin/fli_video +6 -0
  31. data/docs/feature-list.md +76 -0
  32. data/docs/generated/application-structure.json +53 -0
  33. data/docs/generated/features-and-components.md +993 -0
  34. data/docs/generated/technical-design-and-features.md +437 -0
  35. data/docs/technical-specifications.md +360 -0
  36. data/fli.rb +138 -0
  37. data/lib/fli_video/cli.rb +30 -0
  38. data/lib/fli_video/version.rb +1 -1
  39. data/package-lock.json +2 -2
  40. data/package.json +1 -1
  41. data/scripts/01-get-technical-design-and-feature-list.md +5 -0
  42. data/scripts/01-get-technical-design-and-feature-list.rb +39 -0
  43. data/scripts/02-get-feature-list-and-components.md +26 -0
  44. data/scripts/02-get-feature-list-and-components.rb +56 -0
  45. data/scripts/03-get-code-structure.md +33 -0
  46. data/scripts/03-get-code-structure.rb +73 -0
  47. metadata +41 -3
  48. data/README-features.md +0 -36
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0bfc30a6f56a497cc47ce80f0e2c09090b83abedf8586aedac879208512577a4
4
- data.tar.gz: 011af4a5c4fda0c15209e0b9fc2b799b91d05dde3ebd5450b70c0e364b724e0d
3
+ metadata.gz: 2c7a6c05e77e2419355d0face10ceb668c380fd811cb6f8a950f4e33e5f14ad0
4
+ data.tar.gz: be44ae3f44ce9370d6643b59d2429b47ce64a54fc2fc735a6e6e1f1286cd4a58
5
5
  SHA512:
6
- metadata.gz: 9cba026b1099cdbf9c8b1be009c22570f5160a608b098e1dd7539332d347dd47034cf25d942c951fcfe8d126ec1a26034ccbb3ac57d3bac089bdd2e6a02d95d2
7
- data.tar.gz: 6b82f13326684e05659ccfc244e5c4a49a8af7f75b695cca1378cf33891f378c94870d0fe4faedbe6f38a1d9debcf1cf535d7e84413cd87447b81e794d686227
6
+ metadata.gz: 126713356dcb007247fd0425492555d06b5ea7e5c2e95b1c4363fb3d713b91219f50b6ea2e4515f4bf3b29756dd6d82961e1f91448816bcff7a759b208265063
7
+ data.tar.gz: 92d109890b7c57b84b297bdf8cd8d08a62ebb924ea3f0dbccf3d1c1eb7c9310260d2e2b2a06f3fd0b1e63bb8b6aea50498f33cde304fba9d4db46138b0762e80
@@ -0,0 +1,32 @@
1
+ # Prompt:
2
+ # Write a Ruby script to read docs/technical-specifictions.md and docs/feature-list.md,
3
+ # merge their content into docs/generated/technical-design-and-features.md
4
+ # and copy it to the clipboard.
5
+
6
+ require 'json'
7
+
8
+ def read_file(file_name)
9
+ puts "Reading file #{file_name}"
10
+ File.read(file_name)
11
+ rescue => e
12
+ puts "Error reading file #{file_name}: #{e.message}"
13
+ ''
14
+ end
15
+
16
+ def write_file(file_name, technical_design, feature_list)
17
+ File.open(file_name, 'w') do |file|
18
+ file.write(technical_design)
19
+ file.write(feature_list)
20
+ end
21
+ rescue => e
22
+ puts "Error writing to file #{file_name}: #{e.message}"
23
+ end
24
+
25
+ # Main execution
26
+ technical_design = read_file('docs/technical-specifications.md')
27
+ feature_list = read_file('docs/feature-list.md')
28
+ output_file = 'docs/generated/technical-design-and-features.md'
29
+
30
+ write_file(output_file, technical_design, feature_list)
31
+
32
+ IO.popen('pbcopy', 'w') { |io| io.puts File.read(output_file) }
@@ -0,0 +1,42 @@
1
+ # Prompt:
2
+ # Write a Ruby script to read docs/feature-list.md and merge it with content from .builders/klues/*.klue files
3
+ # into docs/generated/features-and-components.md, then copy the result to the clipboard.
4
+
5
+ require 'json'
6
+
7
+ def read_file(file_name)
8
+ puts "Reading file #{file_name}"
9
+ File.read(file_name)
10
+ rescue => e
11
+ puts "Error reading file #{file_name}: #{e.message}"
12
+ ''
13
+ end
14
+
15
+ def read_klue_files(path)
16
+ klue_content = ''
17
+ Dir.glob(File.join(path, '*.klue')).each do |file|
18
+ klue_content += "Klue Component: `#{File.basename(file)}`\n"
19
+ klue_content += "\n```ruby\n"
20
+ klue_content += read_file(file)
21
+ klue_content += "```\n\n"
22
+ end
23
+ klue_content
24
+ end
25
+
26
+ def write_features_and_components_to_file(file_name, features_content, klue_content)
27
+ File.open(file_name, 'w') do |file|
28
+ file.write(features_content)
29
+ file.write("\n\n## Klue Components\n\n")
30
+ file.write(klue_content)
31
+ end
32
+ rescue => e
33
+ puts "Error writing to file #{file_name}: #{e.message}"
34
+ end
35
+
36
+ # Main execution
37
+ features_content = read_file('docs/feature-list.md')
38
+ klue_content = read_klue_files('.builders/klues')
39
+
40
+ write_features_and_components_to_file('docs/generated/features-and-components.md', features_content, klue_content)
41
+
42
+ IO.popen('pbcopy', 'w') { |io| io.puts File.read('docs/generated/features-and-components.md') }
@@ -0,0 +1,104 @@
1
+ # Prompt:
2
+ Create a Ruby script to scan a project's directory, ignoring specific folders and files. For the remaining files,
3
+ especially *.rb, generate a JSON file with their structure and content. and write to docs/generated/application-structure.json
4
+ Store a copy of the data in the clipboard
5
+
6
+ Sample Structure
7
+ ```json
8
+ [
9
+ {
10
+ "name": "bin",
11
+ "type": "directory",
12
+ "children": [
13
+ {
14
+ "name": "fli.rb",
15
+ "type": "file",
16
+ "content": "require 'fli_video'\n\nFliVideo::CLI.start(ARGV)\n"
17
+ }
18
+ ]
19
+ }
20
+ ]
21
+ ```
22
+
23
+ require 'json'
24
+
25
+ def include_file_content?(file_name, include_content_for)
26
+ include_content_for.any? do |criteria|
27
+ if criteria[:pattern]
28
+ File.fnmatch(criteria[:pattern], file_name)
29
+ elsif criteria[:file]
30
+ criteria[:file] == file_name
31
+ end
32
+ end
33
+ end
34
+
35
+ def list_dir(path, ignore_folders, ignore_files, include_content_for)
36
+ entries = Dir.entries(path) - %w[. ..] - ignore_folders - ignore_files
37
+ entries.map do |entry|
38
+ full_path = File.join(path, entry)
39
+ if File.directory?(full_path)
40
+ { name: entry, type: 'directory', children: list_dir(full_path, ignore_folders, ignore_files, include_content_for) }
41
+ else
42
+ file_info = { name: entry, type: 'file' }
43
+ file_info[:content] = File.read(full_path) if include_file_content?(entry, include_content_for)
44
+ file_info
45
+ end
46
+ end
47
+ rescue => e
48
+ puts "Error reading directory #{path}: #{e.message}"
49
+ []
50
+ end
51
+
52
+ def write_structure_to_file(file_name, structure)
53
+ File.open(file_name, 'w') do |file|
54
+ file.write(JSON.pretty_generate(structure))
55
+ end
56
+ rescue => e
57
+ puts "Error writing to file #{file_name}: #{e.message}"
58
+ end
59
+
60
+ def build_gpt_content(structure, path = '')
61
+ gpt_content = ''
62
+ structure.each do |item|
63
+ full_path = path.empty? ? item[:name] : File.join(path, item[:name])
64
+
65
+ if item[:type] == 'file'
66
+ gpt_content += "File: #{full_path}\n" # Line 1: Path/File name
67
+ gpt_content += "#{item[:content]}\n" if item.key?(:content) # Line 2: Content (if exists)
68
+ gpt_content += "\n" # Line 3: Blank line
69
+ elsif item[:type] == 'directory'
70
+ gpt_content += build_gpt_content(item[:children], full_path) # Recursively handle directories
71
+ end
72
+ end
73
+ gpt_content
74
+ end
75
+
76
+ # Usage example:
77
+ ignore_folders = ['tmp', 'log', '.git', '.githooks', '.github', 'bin', 'sig', 'node_modules', '.builders', 'docs', 'scripts']
78
+ ignore_files = [
79
+ 'fli.rb',
80
+ 'application-structure.json',
81
+ '.releaserc.json',
82
+ 'CODE_OF_CONDUCT.md',
83
+ 'Guardfile',
84
+ '.rspec',
85
+ 'CHANGELOG.md',
86
+ '.tool-versions',
87
+ 'Rakefile',
88
+ 'Gemfile.lock',
89
+ '.gitignore',
90
+ 'package-lock.json',
91
+ 'package.json',
92
+ '.rubocop.yml',
93
+ 'LICENSE.txt',
94
+ 'fli_video.gemspec',
95
+ '01-get-structure.rb'
96
+ ]
97
+ include_content_for = [
98
+ { pattern: '*.rb' },
99
+ ]
100
+
101
+ structure = list_dir('.', ignore_folders, ignore_files, include_content_for)
102
+ write_structure_to_file('docs/generated/application-structure.json', structure)
103
+ gpt_content = build_gpt_content(structure)
104
+ copy_to_clipboard(gpt_content)
@@ -0,0 +1,231 @@
1
+ [
2
+ {
3
+ "name": ".rspec_status",
4
+ "type": "file"
5
+ },
6
+ {
7
+ "name": "spec",
8
+ "type": "directory",
9
+ "children": [
10
+ {
11
+ "name": "spec_helper.rb",
12
+ "type": "file",
13
+ "content": "# frozen_string_literal: true\n\nrequire 'pry'\nrequire 'bundler/setup'\nrequire 'simplecov'\n\nSimpleCov.start\n\nrequire 'fli_video'\n\nRSpec.configure do |config|\n # Enable flags like --only-failures and --next-failure\n config.example_status_persistence_file_path = '.rspec_status'\n config.filter_run_when_matching :focus\n\n # Disable RSpec exposing methods globally on `Module` and `main`\n config.disable_monkey_patching!\n\n config.expect_with :rspec do |c|\n c.syntax = :expect\n end\nend\n"
14
+ },
15
+ {
16
+ "name": "fli_video_spec.rb",
17
+ "type": "file",
18
+ "content": "# frozen_string_literal: true\n\nRSpec.describe FliVideo do\n it 'has a version number' do\n expect(FliVideo::VERSION).not_to be_nil\n end\nend\n"
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ "name": "README.md",
24
+ "type": "file"
25
+ },
26
+ {
27
+ "name": "lib",
28
+ "type": "directory",
29
+ "children": [
30
+ {
31
+ "name": "fli_video",
32
+ "type": "directory",
33
+ "children": [
34
+ {
35
+ "name": "cli.rb",
36
+ "type": "file",
37
+ "content": "# frozen_string_literal: true\n\nrequire_relative '../fli_video'\n\nmodule FliVideo\n # FliVideo::CLI is the command line interface for the FliVideo gem.\n class CLI\n def self.start(args)\n new(args).execute\n end\n\n def initialize(args)\n @args = args\n end\n\n def execute\n if @args.empty?\n puts 'FliVideo CLI - No command provided'\n return\n end\n\n case @args.first\n when 'version'\n puts \"FliVideo version #{FliVideo::VERSION}\"\n else\n puts \"Unknown command: #{@args.first}\"\n end\n end\n end\nend\n"
38
+ },
39
+ {
40
+ "name": "version.rb",
41
+ "type": "file",
42
+ "content": "# frozen_string_literal: true\n\nmodule FliVideo\n VERSION = '0.1.0'\nend\n"
43
+ }
44
+ ]
45
+ },
46
+ {
47
+ "name": "fli_video.rb",
48
+ "type": "file",
49
+ "content": "# frozen_string_literal: true\n\nrequire_relative 'fli_video/version'\n\nmodule FliVideo\n class Error < StandardError; end\n # Your code goes here...\nend\n"
50
+ }
51
+ ]
52
+ },
53
+ {
54
+ "name": "Gemfile",
55
+ "type": "file"
56
+ },
57
+ {
58
+ "name": "coverage",
59
+ "type": "directory",
60
+ "children": [
61
+ {
62
+ "name": "index.html",
63
+ "type": "file"
64
+ },
65
+ {
66
+ "name": ".last_run.json",
67
+ "type": "file"
68
+ },
69
+ {
70
+ "name": ".resultset.json",
71
+ "type": "file"
72
+ },
73
+ {
74
+ "name": "assets",
75
+ "type": "directory",
76
+ "children": [
77
+ {
78
+ "name": "0.12.3",
79
+ "type": "directory",
80
+ "children": [
81
+ {
82
+ "name": "images",
83
+ "type": "directory",
84
+ "children": [
85
+ {
86
+ "name": "ui-icons_cd0a0a_256x240.png",
87
+ "type": "file"
88
+ },
89
+ {
90
+ "name": "ui-icons_888888_256x240.png",
91
+ "type": "file"
92
+ },
93
+ {
94
+ "name": "ui-bg_glass_75_dadada_1x400.png",
95
+ "type": "file"
96
+ },
97
+ {
98
+ "name": "ui-icons_2e83ff_256x240.png",
99
+ "type": "file"
100
+ },
101
+ {
102
+ "name": "ui-bg_flat_75_ffffff_40x100.png",
103
+ "type": "file"
104
+ },
105
+ {
106
+ "name": "ui-bg_glass_75_e6e6e6_1x400.png",
107
+ "type": "file"
108
+ },
109
+ {
110
+ "name": "ui-bg_glass_65_ffffff_1x400.png",
111
+ "type": "file"
112
+ },
113
+ {
114
+ "name": "ui-bg_glass_95_fef1ec_1x400.png",
115
+ "type": "file"
116
+ },
117
+ {
118
+ "name": "ui-icons_222222_256x240.png",
119
+ "type": "file"
120
+ },
121
+ {
122
+ "name": "ui-bg_highlight-soft_75_cccccc_1x100.png",
123
+ "type": "file"
124
+ },
125
+ {
126
+ "name": "ui-bg_glass_55_fbf9ee_1x400.png",
127
+ "type": "file"
128
+ },
129
+ {
130
+ "name": "ui-icons_454545_256x240.png",
131
+ "type": "file"
132
+ },
133
+ {
134
+ "name": "ui-bg_flat_0_aaaaaa_40x100.png",
135
+ "type": "file"
136
+ }
137
+ ]
138
+ },
139
+ {
140
+ "name": "application.css",
141
+ "type": "file"
142
+ },
143
+ {
144
+ "name": "loading.gif",
145
+ "type": "file"
146
+ },
147
+ {
148
+ "name": "colorbox",
149
+ "type": "directory",
150
+ "children": [
151
+ {
152
+ "name": "border.png",
153
+ "type": "file"
154
+ },
155
+ {
156
+ "name": "loading.gif",
157
+ "type": "file"
158
+ },
159
+ {
160
+ "name": "controls.png",
161
+ "type": "file"
162
+ },
163
+ {
164
+ "name": "loading_background.png",
165
+ "type": "file"
166
+ }
167
+ ]
168
+ },
169
+ {
170
+ "name": "favicon_red.png",
171
+ "type": "file"
172
+ },
173
+ {
174
+ "name": "favicon_green.png",
175
+ "type": "file"
176
+ },
177
+ {
178
+ "name": "favicon_yellow.png",
179
+ "type": "file"
180
+ },
181
+ {
182
+ "name": "DataTables-1.10.20",
183
+ "type": "directory",
184
+ "children": [
185
+ {
186
+ "name": "images",
187
+ "type": "directory",
188
+ "children": [
189
+ {
190
+ "name": "sort_asc_disabled.png",
191
+ "type": "file"
192
+ },
193
+ {
194
+ "name": "sort_both.png",
195
+ "type": "file"
196
+ },
197
+ {
198
+ "name": "sort_desc_disabled.png",
199
+ "type": "file"
200
+ },
201
+ {
202
+ "name": "sort_desc.png",
203
+ "type": "file"
204
+ },
205
+ {
206
+ "name": "sort_asc.png",
207
+ "type": "file"
208
+ }
209
+ ]
210
+ }
211
+ ]
212
+ },
213
+ {
214
+ "name": "magnify.png",
215
+ "type": "file"
216
+ },
217
+ {
218
+ "name": "application.js",
219
+ "type": "file"
220
+ }
221
+ ]
222
+ }
223
+ ]
224
+ },
225
+ {
226
+ "name": ".resultset.json.lock",
227
+ "type": "file"
228
+ }
229
+ ]
230
+ }
231
+ ]