appydave-tools 0.0.2 → 0.1.0

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: 18296034720a33b54311ab69be92bbb66c5848ba5d6026e3de97031ae5199d67
4
- data.tar.gz: c27a782a75a63ec2b45c91c41c6694c8a74cf058a1e339826f7f64da1e470143
3
+ metadata.gz: 6ee42ce5c9044d5a983fc3498d31ec92ccff797f79085f81ca041c83e5372f48
4
+ data.tar.gz: '014092b8684629253bcc8241e618272ccec12bc664d158c954a736da72534637'
5
5
  SHA512:
6
- metadata.gz: '08773eac07fd57c0dc9c03f32e8b14975a373ec14a4430de9ff43df3f7e68e4a7bf986f5bd454db961b59cd321b6a7601a8926e57078f405ce3b40311491677f'
7
- data.tar.gz: 2ea48f9c856641b7fa69ee03c4c44017e421f946e57fd96d178507da7207be7df824e2436bf99bed7f24e176aa35811f8a7f7445a67b704aa7bb841a2029c91c
6
+ metadata.gz: ab3343f90930a9c5a6dfcc38abaf6ed909ae2b4470ed676c423d6d790a3f6e1fd38c9d131a3e540788becc8b915a730ebe44cef871ebb5f00001024b9da06d12
7
+ data.tar.gz: 47cd64a4281c46cd07c63c785862e98cb04911f8805788667b3860c7d50f9f415cf8fb626c3b59318e0c3b9e729d30ed66de6e71349f340716d7a4dd1e3e7632
data/.rubocop.yml CHANGED
@@ -39,6 +39,9 @@ Metrics/BlockLength:
39
39
  - shared_examples_for
40
40
  - transaction
41
41
 
42
+ RSpec/ExampleLength:
43
+ Max: 25
44
+
42
45
  Metrics/MethodLength:
43
46
  Max: 25
44
47
 
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## [0.0.2](https://github.com/klueless-io/appydave-tools/compare/v0.0.1...v0.0.2) (2024-05-07)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * update semantic dependency ([e76705e](https://github.com/klueless-io/appydave-tools/commit/e76705eb925f0be271884acc5af5119e3fa57325))
7
+ * update semantic dependency ([45623c4](https://github.com/klueless-io/appydave-tools/commit/45623c4575689ef1e813eb89bc9c55f3bf4d374f))
8
+ * update semantic dependency ([2ebb9bc](https://github.com/klueless-io/appydave-tools/commit/2ebb9bcb582b67b6bf4d8ccb6db9eff0e3b095e5))
9
+
1
10
  ## [Unreleased]
2
11
 
3
12
  ## [0.1.0] - 2024-05-07
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # Usage:
5
+ # ./bin/gpt_context.rb -d -i 'lib/openai_101/tools/**/*.rb'
6
+ # ./bin/gpt_context.rb -d -i 'lib/openai_101/tools/**/*' -e 'node_modules/**/*' -e 'package-lock.json' -e 'lib/openai_101/tools/prompts/*.txt'
7
+ #
8
+ # Get GPT Context Gatherer code
9
+ # ./bin/gpt_context.rb -i 'bin/**/*gather*.rb' -i 'lib/openai_101/tools/**/*gather*.rb'
10
+ require 'optparse'
11
+ require 'clipboard'
12
+ require_relative '../lib/appydave/tools/gpt_context/file_collector'
13
+
14
+ options = {
15
+ include_patterns: [],
16
+ exclude_patterns: [],
17
+ format: nil,
18
+ debug: false
19
+ }
20
+
21
+ OptionParser.new do |opts|
22
+ opts.banner = 'Usage: gather_content.rb [options]'
23
+
24
+ opts.on('-i', '--include PATTERN', 'Pattern or file to include (can be used multiple times)') do |pattern|
25
+ options[:include_patterns] << pattern
26
+ end
27
+
28
+ opts.on('-e', '--exclude PATTERN', 'Pattern or file to exclude (can be used multiple times)') do |pattern|
29
+ options[:exclude_patterns] << pattern
30
+ end
31
+
32
+ opts.on('-f', '--format FORMAT', 'Output format: default or tree') do |format|
33
+ options[:format] = format
34
+ end
35
+
36
+ opts.on('-d', '--debug', 'Enable debug mode') do
37
+ options[:debug] = true
38
+ end
39
+
40
+ opts.on_tail('-h', '--help', 'Show this message') do
41
+ puts opts
42
+ puts "\nExamples:"
43
+ puts " #{File.basename($PROGRAM_NAME)} -i 'lib/**/*.rb' -e 'lib/excluded/**/*.rb' -d"
44
+ puts " #{File.basename($PROGRAM_NAME)} --include 'src/**/*.js' --exclude 'src/vendor/**/*.js'"
45
+
46
+ puts ''
47
+ puts ' # Get GPT Context Gatherer code that is found in any folder (bin, lib & spec)'
48
+ puts " #{File.basename($PROGRAM_NAME)} -i '**/*gather*.rb'"
49
+ exit
50
+ end
51
+ end.parse!
52
+
53
+ if options[:include_patterns].empty? && options[:exclude_patterns].empty? && options[:format].nil?
54
+ script_name = File.basename($PROGRAM_NAME, File.extname($PROGRAM_NAME))
55
+
56
+ puts 'No options provided to GPT Context. Please specify patterns to include or exclude.'
57
+ puts "For help, run: #{script_name} --help"
58
+ exit
59
+ end
60
+
61
+ pp options if options[:debug]
62
+
63
+ gatherer = Appydave::Tools::GptContext::FileCollector.new(
64
+ include_patterns: options[:include_patterns],
65
+ exclude_patterns: options[:exclude_patterns],
66
+ format: options[:format]
67
+ )
68
+
69
+ content = gatherer.build
70
+
71
+ if options[:debug]
72
+ puts '-' * 80
73
+ puts content
74
+ puts '-' * 80
75
+ end
76
+
77
+ Clipboard.copy(content)
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Appydave
4
+ module Tools
5
+ # Build GPT context from various sources
6
+ module GptContext
7
+ # Gathers file names and content based on include and exclude patterns
8
+ class FileCollector
9
+ attr_reader :include_patterns, :exclude_patterns, :format
10
+
11
+ def initialize(include_patterns: [], exclude_patterns: [], format: nil)
12
+ @include_patterns = include_patterns
13
+ @exclude_patterns = exclude_patterns
14
+ @format = format
15
+ end
16
+
17
+ def build
18
+ case format
19
+ when 'tree'
20
+ build_tree
21
+ else
22
+ build_content
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def build_content
29
+ concatenated_content = []
30
+
31
+ include_patterns.each do |pattern|
32
+ Dir.glob(pattern).each do |file_path|
33
+ next if excluded?(file_path) || File.directory?(file_path)
34
+
35
+ content = "# file: #{file_path}\n\n#{File.read(file_path)}"
36
+ concatenated_content << content
37
+ end
38
+ end
39
+
40
+ concatenated_content.join("\n\n")
41
+ end
42
+
43
+ def build_tree
44
+ tree_view = {}
45
+
46
+ include_patterns.each do |pattern|
47
+ Dir.glob(pattern).each do |file_path|
48
+ next if excluded?(file_path)
49
+
50
+ path_parts = file_path.split('/')
51
+ insert_into_tree(tree_view, path_parts)
52
+ end
53
+ end
54
+
55
+ build_tree_pretty(tree_view).rstrip
56
+ end
57
+
58
+ def insert_into_tree(tree, path_parts)
59
+ node = tree
60
+ path_parts.each do |part|
61
+ node[part] ||= {}
62
+ node = node[part]
63
+ end
64
+ end
65
+
66
+ def build_tree_pretty(node, prefix: '', is_last: true, output: ''.dup)
67
+ node.each_with_index do |(part, child), index|
68
+ connector = is_last && index == node.size - 1 ? '└' : '├'
69
+ output << "#{prefix}#{connector}─ #{part}\n"
70
+ next_prefix = is_last && index == node.size - 1 ? ' ' : '│ '
71
+ build_tree_pretty(child, prefix: "#{prefix}#{next_prefix}", is_last: child.empty? || index == node.size - 1, output: output)
72
+ end
73
+ output
74
+ end
75
+
76
+ def excluded?(file_path)
77
+ exclude_patterns.any? { |pattern| File.fnmatch(pattern, file_path) }
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Appydave
4
4
  module Tools
5
- VERSION = '0.0.2'
5
+ VERSION = '0.1.0'
6
6
  end
7
7
  end
@@ -2,6 +2,8 @@
2
2
 
3
3
  require 'appydave/tools/version'
4
4
 
5
+ require 'appydave/tools/gpt_context/file_collector'
6
+
5
7
  module Appydave
6
8
  module Tools
7
9
  # raise Appydave::Tools::Error, 'Sample message'
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "appydave-tools",
3
- "version": "0.0.2",
3
+ "version": "0.1.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "appydave-tools",
9
- "version": "0.0.2",
9
+ "version": "0.1.0",
10
10
  "devDependencies": {
11
11
  "@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
12
12
  "@semantic-release/changelog": "^6.0.3",
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appydave-tools",
3
- "version": "0.0.2",
3
+ "version": "0.1.0",
4
4
  "description": "AppyDave YouTube Automation Tools",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appydave-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-05-07 00:00:00.000000000 Z
11
+ date: 2024-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: k_log
14
+ name: clipboard
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '1'
27
27
  description: " AppyDave YouTube Automation Tools\n"
28
28
  email:
29
29
  - david@ideasmen.com.au
@@ -45,8 +45,10 @@ files:
45
45
  - README.md
46
46
  - Rakefile
47
47
  - bin/console
48
+ - bin/gpt_context.rb
48
49
  - bin/setup
49
50
  - lib/appydave/tools.rb
51
+ - lib/appydave/tools/gpt_context/file_collector.rb
50
52
  - lib/appydave/tools/version.rb
51
53
  - package-lock.json
52
54
  - package.json