railsfinder 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 39f95e09d8eaa69e4cb0530b12c63ec10f3436870e9c96a815b1b9024b01f448
4
+ data.tar.gz: 5807718b056593ac8796c3f9bd1ca83b1502e36bdb9ee69c378f1d763345d3d2
5
+ SHA512:
6
+ metadata.gz: d7a46a78dededb0e07fd9e48a72e34353cc852a6fd5a8c10cd8817f642f6796dc2bf2187fff287c28e27ad454e95941f46cce6ae9bb83af447f560ec7bb34b90
7
+ data.tar.gz: 7cc9f0ec53ce4737db1a5990eb7cd1fbc9a8e1e6b5e901e56b8b20e045fef3b392d6e0e6bd452e43c41611c735a43e45139385c497bac85f961b440f5c787f8d
data/bin/console ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "railsfinder"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ require "irb"
11
+ IRB.start(__FILE__)
data/bin/railsfinder ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/railsfinder/interface'
4
+
5
+ RailsFinder::Interface.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,120 @@
1
+ require "tty-reader"
2
+ require "tty-screen"
3
+ require "tty-cursor"
4
+ require "tty-box"
5
+
6
+ module RailsFinder
7
+ class Interface
8
+ SCHEMA_FILE_PATH = "db/schema.rb"
9
+
10
+ def self.start
11
+ reader = TTY::Reader.new
12
+ cursor = TTY::Cursor
13
+ screen_size = TTY::Screen.size
14
+ selected_index = 0
15
+ data = load_schema_data
16
+ table_names = data.keys
17
+ filtered_table_names = table_names.dup
18
+ input = ""
19
+
20
+ render_layout(cursor, screen_size, filtered_table_names, selected_index, data, input)
21
+
22
+ begin
23
+ loop do
24
+ key = reader.read_keypress
25
+ case key
26
+ when "\e[A" # Up arrow
27
+ selected_index = (selected_index - 1) % filtered_table_names.length unless filtered_table_names.empty?
28
+ when "\e[B" # Down arrow
29
+ selected_index = (selected_index + 1) % filtered_table_names.length unless filtered_table_names.empty?
30
+ when "\r" # Enter
31
+ # Detail action
32
+ when "\e" # Escape key
33
+ break # Exit the loop, which will end the program
34
+ when "\u007F", "\b" # Backspace
35
+ input.chop!
36
+ else
37
+ input << key if key =~ /\A[\w\s]+\z/
38
+ end
39
+
40
+ filtered_table_names = table_names.select { |name| name.downcase.include?(input.downcase) }
41
+ selected_index = 0 if filtered_table_names.empty?
42
+
43
+ render_layout(cursor, screen_size, filtered_table_names, selected_index, data, input)
44
+ end
45
+ rescue TTY::Reader::InputInterrupt
46
+ system "clear"
47
+ puts "\nBye"
48
+ exit
49
+ ensure
50
+ system "clear"
51
+ puts "\nExiting RailsFinder..."
52
+ end
53
+ end
54
+
55
+ def self.render_layout(cursor, screen_size, filtered_table_names, selected_index, data, input)
56
+ system "clear"
57
+ left_panel_width = screen_size[1] / 2
58
+ right_panel_width = screen_size[1] - left_panel_width
59
+ top_height = 3
60
+
61
+ puts cursor.move_to(0, 0)
62
+ print TTY::Box.frame(
63
+ top: 0,
64
+ left: 0,
65
+ width: left_panel_width,
66
+ height: top_height,
67
+ title: { top_left: " Search " },
68
+ border: :light,
69
+ ) { input }
70
+
71
+ print TTY::Box.frame(
72
+ top: top_height,
73
+ left: 0,
74
+ width: left_panel_width,
75
+ height: screen_size[0] - top_height,
76
+ title: { top_left: " Select Table: #{selected_index + 1}/#{filtered_table_names.length} " },
77
+ border: :light,
78
+ ) { filtered_table_names.map.with_index { |name, index| index == selected_index ? "=> #{name}" : " #{name}" }.join("\n") }
79
+
80
+ print TTY::Box.frame(
81
+ top: 0,
82
+ left: left_panel_width,
83
+ width: right_panel_width,
84
+ height: screen_size[0],
85
+ title: { top_left: " Details " },
86
+ border: :light,
87
+ ) { data[filtered_table_names[selected_index]] || "" }
88
+ end
89
+
90
+ def self.load_schema_data
91
+ schema_path = find_schema_file
92
+ return {} unless schema_path && File.exist?(schema_path)
93
+
94
+ schema_content = File.read(schema_path)
95
+ parse_schema(schema_content)
96
+ end
97
+
98
+ def self.find_schema_file
99
+ # Attempts to locate the db/schema.rb file in the current directory
100
+ current_dir = Dir.pwd
101
+ schema_file = File.join(current_dir, SCHEMA_FILE_PATH)
102
+
103
+ File.exist?(schema_file) ? schema_file : nil
104
+ end
105
+
106
+ def self.parse_schema(schema_content)
107
+ tables = {}
108
+
109
+ # Adjust the scan to use capture parentheses correctly
110
+ schema_content.scan(/create_table "(.+?)"(.+?)end/m).each do |capture|
111
+ table_name = capture[0]
112
+ table_content = capture[1].strip
113
+ # Adds "\nend" to ensure 'end' is on a new line.
114
+ tables[table_name] = "create_table \"#{table_name}\"#{table_content}\nend"
115
+ end
116
+
117
+ tables
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Railsfinder
4
+ VERSION = "0.1.0"
5
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "railsfinder/version"
4
+
5
+ module Railsfinder
6
+ class Error < StandardError; end
7
+ # Your code goes here...
8
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: railsfinder
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - jpstudioweb
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-04-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tty-box
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.7'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: tty-cursor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.7'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.7'
41
+ - !ruby/object:Gem::Dependency
42
+ name: tty-reader
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.9'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.9'
55
+ - !ruby/object:Gem::Dependency
56
+ name: tty-screen
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.8'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.8'
69
+ description: This gem enables users to search and view details of tables defined in
70
+ the schema.rb file of a Rails application.
71
+ email:
72
+ - jpaulo6ba@gmail.com
73
+ executables:
74
+ - console
75
+ - railsfinder
76
+ - setup
77
+ extensions: []
78
+ extra_rdoc_files: []
79
+ files:
80
+ - bin/console
81
+ - bin/railsfinder
82
+ - bin/setup
83
+ - lib/railsfinder.rb
84
+ - lib/railsfinder/interface.rb
85
+ - lib/railsfinder/version.rb
86
+ homepage: http://example.com/mygem
87
+ licenses:
88
+ - MIT
89
+ metadata:
90
+ source_code_uri: https://github.com/jpstudioweb/railsfinder
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: 3.0.0
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirements: []
106
+ rubygems_version: 3.5.9
107
+ signing_key:
108
+ specification_version: 4
109
+ summary: Search by table name in Rails db/schema.rb file and display its contents.
110
+ test_files: []