flatito 0.1.0 → 0.1.1
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 +4 -4
- data/README.md +2 -1
- data/exe/flatito +9 -6
- data/lib/flatito/config.rb +17 -0
- data/lib/flatito/finder.rb +8 -15
- data/lib/flatito/flatten_yaml.rb +22 -13
- data/lib/flatito/print_items.rb +30 -0
- data/lib/flatito/renderer.rb +15 -29
- data/lib/flatito/utils.rb +9 -0
- data/lib/flatito/version.rb +1 -1
- data/lib/flatito/yaml_with_line_number.rb +2 -4
- data/lib/flatito.rb +13 -2
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aaba984e7f2dd508d7f81eba275c575e3b256e394fbe513ea4620e1ec3631c3b
|
4
|
+
data.tar.gz: 6614248f57ed83e1e96cc633eca53a0ce5bddb7fe2248173ed0fad2daa64472d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ab83eef1a77f864dff343f33c7570357dae4562be62707f375371e5fb48172357d293420eebeee123927f99ac1ebf54014293824768c2cb4401cbbd9612a864
|
7
|
+
data.tar.gz: b3013f55f89da75acc3cbc387f97522dc0ebb8082ef40c0d044f395f901207d84fb767fd1ff57dd545c41e246bb8b745f20d996cddf26586ff5efe2122a0e6b6
|
data/README.md
CHANGED
@@ -22,7 +22,8 @@ If bundler is not being used to manage dependencies, install the gem by executin
|
|
22
22
|
|
23
23
|
```sh
|
24
24
|
Usage: flatito PATH [options]
|
25
|
-
Example: flatito . -k
|
25
|
+
Example: flatito . -k "search string" -e "json,yaml"
|
26
|
+
Example: cat file.yaml | flatito -k "search string"
|
26
27
|
|
27
28
|
-h, --help Prints this help
|
28
29
|
-V, --version Show version
|
data/exe/flatito
CHANGED
@@ -6,14 +6,15 @@ require "flatito"
|
|
6
6
|
require "optparse"
|
7
7
|
|
8
8
|
# If no arguments are given, print help
|
9
|
-
|
9
|
+
stdin = $stdin.read unless $stdin.tty?
|
10
|
+
ARGV << "-h" if ARGV.empty? && !stdin
|
10
11
|
|
11
12
|
options = {}
|
12
13
|
OptionParser.new do |opts|
|
13
14
|
opts.banner = <<~HEREDOC
|
14
15
|
Usage: flatito PATH [options]
|
15
|
-
Example: flatito . -k
|
16
|
-
|
16
|
+
Example: flatito . -k "search string" -e "json,yaml"
|
17
|
+
Example: cat file.yaml | flatito -k "search string"
|
17
18
|
HEREDOC
|
18
19
|
|
19
20
|
opts.on("-h", "--help", "Prints this help") do
|
@@ -43,8 +44,10 @@ OptionParser.new do |opts|
|
|
43
44
|
end
|
44
45
|
end.parse!
|
45
46
|
|
46
|
-
|
47
|
+
Flatito::Config.prepare_with_options(options)
|
48
|
+
|
49
|
+
if stdin
|
50
|
+
Flatito.flat_content(stdin, options)
|
51
|
+
else
|
47
52
|
Flatito.search(ARGV, options)
|
48
|
-
rescue Interrupt
|
49
|
-
warn "\nInterrupted"
|
50
53
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Flatito
|
4
|
+
module Config
|
5
|
+
@stdout = $stdout
|
6
|
+
@stderr = $stderr
|
7
|
+
@stdin = $stdin
|
8
|
+
|
9
|
+
class << self
|
10
|
+
attr_accessor :renderer, :stdout, :stder, :stdin
|
11
|
+
|
12
|
+
def prepare_with_options(options)
|
13
|
+
self.renderer = Renderer.build(options)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/flatito/finder.rb
CHANGED
@@ -8,14 +8,14 @@ module Flatito
|
|
8
8
|
|
9
9
|
DEFAULT_EXTENSIONS = %w[json yml yaml].freeze
|
10
10
|
|
11
|
-
attr_reader :paths, :search, :extensions, :options, :
|
11
|
+
attr_reader :paths, :search, :extensions, :options, :print_items
|
12
12
|
|
13
13
|
def initialize(paths, options = {})
|
14
14
|
@paths = paths
|
15
15
|
@search = options[:search]
|
16
16
|
@extensions = prepare_extensions(options[:extensions] || DEFAULT_EXTENSIONS)
|
17
17
|
@options = options
|
18
|
-
@
|
18
|
+
@print_items = PrintItems.new(search)
|
19
19
|
end
|
20
20
|
|
21
21
|
def call
|
@@ -36,14 +36,13 @@ module Flatito
|
|
36
36
|
|
37
37
|
private
|
38
38
|
|
39
|
-
def
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
return unless items.any?
|
39
|
+
def renderer
|
40
|
+
Config.renderer
|
41
|
+
end
|
44
42
|
|
45
|
-
|
46
|
-
|
43
|
+
def flat_and_filter(pathname)
|
44
|
+
items = FlattenYaml.items_from_path(pathname)
|
45
|
+
print_items.print(items, pathname)
|
47
46
|
end
|
48
47
|
|
49
48
|
def prepare_extensions(extensions)
|
@@ -51,11 +50,5 @@ module Flatito
|
|
51
50
|
ext.start_with?(".") ? ext : ".#{ext}"
|
52
51
|
end
|
53
52
|
end
|
54
|
-
|
55
|
-
def filter_by_search(items)
|
56
|
-
items.select do |item|
|
57
|
-
regex.match?(item.key)
|
58
|
-
end
|
59
|
-
end
|
60
53
|
end
|
61
54
|
end
|
data/lib/flatito/flatten_yaml.rb
CHANGED
@@ -1,9 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "utils"
|
3
4
|
module Flatito
|
4
5
|
class FlattenYaml
|
6
|
+
include Utils
|
7
|
+
|
5
8
|
Item = Struct.new(:key, :value, :line, keyword_init: true)
|
6
|
-
|
9
|
+
class << self
|
10
|
+
def items_from_path(pathname)
|
11
|
+
content = File.read(pathname)
|
12
|
+
new(content, pathname: pathname).items
|
13
|
+
end
|
14
|
+
|
15
|
+
def items_from_content(content)
|
16
|
+
new(content).items
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
attr_reader :content, :pathname
|
21
|
+
|
22
|
+
def initialize(content, pathname: nil)
|
23
|
+
@content = content
|
7
24
|
@pathname = pathname
|
8
25
|
end
|
9
26
|
|
@@ -23,28 +40,20 @@ module Flatito
|
|
23
40
|
end
|
24
41
|
end
|
25
42
|
end
|
26
|
-
rescue StandardError => e
|
27
|
-
warn "Error parsing #{@pathname}, #{e.message}"
|
28
43
|
end
|
29
44
|
|
30
45
|
def with_line_numbers
|
31
46
|
handler = YAMLWithLineNumber::TreeBuilder.new
|
32
47
|
handler.parser = Psych::Parser.new(handler)
|
33
48
|
|
34
|
-
handler.parser.parse(
|
49
|
+
handler.parser.parse(content)
|
35
50
|
YAMLWithLineNumber::VisitorsToRuby.create.accept(handler.root)
|
36
51
|
rescue Psych::SyntaxError
|
37
|
-
warn "Invalid
|
38
|
-
|
52
|
+
warn "Invalid format #{pathname}"
|
39
53
|
[]
|
40
|
-
rescue StandardError
|
41
|
-
warn "Error parsing #{
|
42
|
-
|
54
|
+
rescue StandardError
|
55
|
+
warn "Error parsing #{pathname}"
|
43
56
|
[]
|
44
57
|
end
|
45
|
-
|
46
|
-
def truncate(string, max = 50)
|
47
|
-
string.length > max ? "#{string[0...max]}..." : string
|
48
|
-
end
|
49
58
|
end
|
50
59
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Flatito
|
4
|
+
class PrintItems
|
5
|
+
include RegexFromSearch
|
6
|
+
attr_reader :search
|
7
|
+
|
8
|
+
def initialize(search)
|
9
|
+
@search = search
|
10
|
+
end
|
11
|
+
|
12
|
+
def print(items, pathname = nil)
|
13
|
+
items = filter_by_search(items) if search
|
14
|
+
return unless items.any?
|
15
|
+
|
16
|
+
renderer.print_pathname(pathname) if pathname
|
17
|
+
renderer.print_items(items)
|
18
|
+
end
|
19
|
+
|
20
|
+
def filter_by_search(items)
|
21
|
+
items.select do |item|
|
22
|
+
regex.match?(item.key)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def renderer
|
27
|
+
Config.renderer
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/flatito/renderer.rb
CHANGED
@@ -2,25 +2,23 @@
|
|
2
2
|
|
3
3
|
require "io/console"
|
4
4
|
require_relative "regex_from_search"
|
5
|
+
require_relative "utils"
|
5
6
|
|
6
7
|
module Flatito
|
7
8
|
class Renderer
|
8
|
-
include RegexFromSearch
|
9
|
-
|
10
9
|
def self.build(options)
|
11
|
-
if tty?
|
10
|
+
if Config.stdout.tty?
|
12
11
|
Renderer::TTY.new(options)
|
13
12
|
else
|
14
13
|
Renderer::Plain.new(options)
|
15
14
|
end
|
16
15
|
end
|
17
|
-
|
18
|
-
def self.tty?
|
19
|
-
$stdout.tty?
|
20
|
-
end
|
21
16
|
end
|
22
17
|
|
23
18
|
class Base
|
19
|
+
include Utils
|
20
|
+
include RegexFromSearch
|
21
|
+
|
24
22
|
attr_reader :search, :no_color
|
25
23
|
|
26
24
|
def initialize(options)
|
@@ -33,7 +31,7 @@ module Flatito
|
|
33
31
|
def ending; end
|
34
32
|
|
35
33
|
def print_pathname(pathname)
|
36
|
-
puts colorize(pathname.to_s, :light_blue)
|
34
|
+
stdout.puts colorize(pathname.to_s, :light_blue)
|
37
35
|
end
|
38
36
|
|
39
37
|
def print_items(items)
|
@@ -42,8 +40,8 @@ module Flatito
|
|
42
40
|
items.each do |item|
|
43
41
|
print_item(item, line_number_padding)
|
44
42
|
end
|
45
|
-
puts
|
46
|
-
flush
|
43
|
+
stdout.puts
|
44
|
+
stdout.flush
|
47
45
|
end
|
48
46
|
|
49
47
|
def print_item(item, line_number_padding)
|
@@ -54,19 +52,11 @@ module Flatito
|
|
54
52
|
""
|
55
53
|
end
|
56
54
|
|
57
|
-
puts "#{line_number} #{matched_string(item.key)} #{value}"
|
55
|
+
stdout.puts "#{line_number} #{matched_string(item.key)} #{value}"
|
58
56
|
end
|
59
57
|
|
60
58
|
private
|
61
59
|
|
62
|
-
def flush
|
63
|
-
stdout.flush
|
64
|
-
end
|
65
|
-
|
66
|
-
def regex
|
67
|
-
@regex ||= Regexp.new(search)
|
68
|
-
end
|
69
|
-
|
70
60
|
def matched_string(string)
|
71
61
|
return string if search.nil? || no_color?
|
72
62
|
|
@@ -80,12 +70,8 @@ module Flatito
|
|
80
70
|
ENV["TERM"] == "dumb" || ENV["NO_COLOR"] == "true" || no_color == true
|
81
71
|
end
|
82
72
|
|
83
|
-
def truncate(string, max = 50)
|
84
|
-
string.length > max ? "#{string[0...max]}..." : string
|
85
|
-
end
|
86
|
-
|
87
73
|
def stdout
|
88
|
-
|
74
|
+
Config.stdout
|
89
75
|
end
|
90
76
|
|
91
77
|
def colorize(string, color)
|
@@ -95,7 +81,7 @@ module Flatito
|
|
95
81
|
|
96
82
|
class Renderer::Plain < Base
|
97
83
|
def ending
|
98
|
-
puts
|
84
|
+
stdout.puts
|
99
85
|
end
|
100
86
|
end
|
101
87
|
|
@@ -128,19 +114,19 @@ module Flatito
|
|
128
114
|
def ending
|
129
115
|
clear_line
|
130
116
|
show_cursor
|
131
|
-
puts
|
117
|
+
stdout.puts
|
132
118
|
end
|
133
119
|
|
134
120
|
def hide_cursor
|
135
|
-
print HIDE_CURSOR
|
121
|
+
stdout.print HIDE_CURSOR
|
136
122
|
end
|
137
123
|
|
138
124
|
def show_cursor
|
139
|
-
print SHOW_CURSOR
|
125
|
+
stdout.print SHOW_CURSOR
|
140
126
|
end
|
141
127
|
|
142
128
|
def clear_line
|
143
|
-
print CLEAR_LINE
|
129
|
+
stdout.print CLEAR_LINE
|
144
130
|
end
|
145
131
|
|
146
132
|
private
|
data/lib/flatito/version.rb
CHANGED
@@ -30,8 +30,6 @@ module Flatito
|
|
30
30
|
|
31
31
|
class ClassLoader < Psych::ClassLoader
|
32
32
|
def find(klassname)
|
33
|
-
@cache[klassname] ||= resolve(klassname)
|
34
|
-
rescue ArgumentError
|
35
33
|
Whatever.new(klassname)
|
36
34
|
end
|
37
35
|
end
|
@@ -56,9 +54,9 @@ module Flatito
|
|
56
54
|
end
|
57
55
|
|
58
56
|
class VisitorsToRuby < Psych::Visitors::ToRuby
|
59
|
-
def self.create(symbolize_names: false, freeze: false
|
57
|
+
def self.create(symbolize_names: false, freeze: false)
|
60
58
|
class_loader = ClassLoader.new
|
61
|
-
scanner = Psych::ScalarScanner.new(class_loader
|
59
|
+
scanner = Psych::ScalarScanner.new(class_loader)
|
62
60
|
new(scanner, class_loader, symbolize_names: symbolize_names, freeze: freeze)
|
63
61
|
end
|
64
62
|
|
data/lib/flatito.rb
CHANGED
@@ -9,9 +9,20 @@ require_relative "flatito/finder"
|
|
9
9
|
require_relative "flatito/yaml_with_line_number"
|
10
10
|
require_relative "flatito/renderer"
|
11
11
|
require_relative "flatito/regex_from_search"
|
12
|
+
require_relative "flatito/print_items"
|
13
|
+
require_relative "flatito/config"
|
12
14
|
|
13
15
|
module Flatito
|
14
|
-
|
15
|
-
|
16
|
+
class << self
|
17
|
+
def search(paths, options = {})
|
18
|
+
Finder.new(paths, options).call
|
19
|
+
rescue Interrupt
|
20
|
+
warn "\nInterrupted"
|
21
|
+
end
|
22
|
+
|
23
|
+
def flat_content(content, options = {})
|
24
|
+
items = FlattenYaml.items_from_content(content)
|
25
|
+
PrintItems.new(options[:search]).print(items)
|
26
|
+
end
|
16
27
|
end
|
17
28
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flatito
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- José Galisteo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-03-
|
11
|
+
date: 2024-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -41,11 +41,14 @@ files:
|
|
41
41
|
- docs/screenshot.png
|
42
42
|
- exe/flatito
|
43
43
|
- lib/flatito.rb
|
44
|
+
- lib/flatito/config.rb
|
44
45
|
- lib/flatito/finder.rb
|
45
46
|
- lib/flatito/flatten_yaml.rb
|
47
|
+
- lib/flatito/print_items.rb
|
46
48
|
- lib/flatito/regex_from_search.rb
|
47
49
|
- lib/flatito/renderer.rb
|
48
50
|
- lib/flatito/tree_iterator.rb
|
51
|
+
- lib/flatito/utils.rb
|
49
52
|
- lib/flatito/version.rb
|
50
53
|
- lib/flatito/yaml_with_line_number.rb
|
51
54
|
homepage: https://github.com/ceritium/flatito
|
@@ -70,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
73
|
- !ruby/object:Gem::Version
|
71
74
|
version: '0'
|
72
75
|
requirements: []
|
73
|
-
rubygems_version: 3.5.
|
76
|
+
rubygems_version: 3.5.3
|
74
77
|
signing_key:
|
75
78
|
specification_version: 4
|
76
79
|
summary: Grep for YAML and JSON files
|