appydave-tools 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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