xprint 0.5.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 +7 -0
- data/lib/version.rb +3 -0
- data/lib/xprint.rb +146 -0
- metadata +46 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a2cc60a347d36661e3bb0fcc6d1ae58ab46f236eeefd8ba40fc869a1cd20439a
|
4
|
+
data.tar.gz: c0c48517b86a17e3a4219bc9734cd7cf19548883c05b4ba15f3fee783d2ed5d9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9f46bcb7bc0b0536bb83803b623c625dc91c17151ea4bf47173bf50d5def8f1c45408fef73c117742757f4b7f9db6724b0c8255fe1db7f269c2003b022ebe4be
|
7
|
+
data.tar.gz: 611aceb397a9dcc19788be147711cc253e7b348d39c7dd15880c3476718d9d9c0254f11c47e690ed077aede60a2bc20a5148b52ba61ca62045204672fb670578
|
data/lib/version.rb
ADDED
data/lib/xprint.rb
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
module XPrint
|
2
|
+
@data_classes = [
|
3
|
+
String, Integer, Float, TrueClass, FalseClass, NilClass,
|
4
|
+
Symbol
|
5
|
+
]
|
6
|
+
@hash_name_classes = @data_classes + [Proc]
|
7
|
+
@tab = "\t"
|
8
|
+
@show_indexes = true
|
9
|
+
|
10
|
+
def self.set(**kwargs)
|
11
|
+
@tab = kwargs[:tab] unless kwargs[:tab].nil?
|
12
|
+
@show_indexes = kwargs[:show_indexes] unless kwargs[:show_indexes].nil?
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.tab()
|
16
|
+
@tab
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.show_indexes()
|
20
|
+
@show_indexes
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.xp(*args)
|
24
|
+
args.each do |arg|
|
25
|
+
puts self.xpand(arg, tab: @tab)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.xpand(x, indent: '', tab: "\t")
|
30
|
+
|
31
|
+
_indent = "#{tab}#{indent}"
|
32
|
+
|
33
|
+
# X is a "primitive" kind of data that has no subitems, so
|
34
|
+
# we can just print it.
|
35
|
+
if @data_classes.include? x.class
|
36
|
+
return x.inspect
|
37
|
+
# X is a Proc, print more compact version of standard Proc.inspect
|
38
|
+
# text.
|
39
|
+
elsif x.class == Proc
|
40
|
+
source, line = x.source_location
|
41
|
+
source = source.gsub('\\', '/').split('/')[-2..-1].join('/')
|
42
|
+
|
43
|
+
return "<Proc @ #{source} [Line #{line}]>"
|
44
|
+
# X is an Array, print list of all items.
|
45
|
+
elsif x.class == Array
|
46
|
+
result = "[\n"
|
47
|
+
|
48
|
+
x.each_with_index do |item, index|
|
49
|
+
data = xpand(item, indent: _indent, tab: tab)
|
50
|
+
|
51
|
+
result += "#{_indent}"
|
52
|
+
result += "[#{index}] " if @show_indexes
|
53
|
+
result += "#{data}"
|
54
|
+
|
55
|
+
unless index + 1 == x.length
|
56
|
+
result += ", \n"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
result += "\n#{indent}]"
|
61
|
+
return result
|
62
|
+
# X is a Hash, print all keys and values.
|
63
|
+
elsif x.class == Hash
|
64
|
+
result = "{\n"
|
65
|
+
|
66
|
+
longest_key = (
|
67
|
+
x.keys.filter do |k, v|
|
68
|
+
@hash_name_classes.include? k.class
|
69
|
+
end.
|
70
|
+
map do |k, v|
|
71
|
+
k.to_s.length
|
72
|
+
end.
|
73
|
+
max()
|
74
|
+
)
|
75
|
+
|
76
|
+
longest_key = 0 if longest_key.nil?
|
77
|
+
|
78
|
+
x.each_with_index do |(key, value), index|
|
79
|
+
data_key = "#{xpand(key, indent: _indent, tab: tab)}"
|
80
|
+
|
81
|
+
data_key = (
|
82
|
+
if @hash_name_classes.include? key.class
|
83
|
+
data_key.ljust(longest_key + 1)
|
84
|
+
else
|
85
|
+
data_key.ljust(data_key.length + longest_key)
|
86
|
+
end
|
87
|
+
)
|
88
|
+
|
89
|
+
data_value = xpand(value, indent: _indent, tab: tab)
|
90
|
+
|
91
|
+
result += "#{_indent}#{data_key} => #{data_value}"
|
92
|
+
|
93
|
+
unless index + 1 == x.length
|
94
|
+
result += ", \n"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
result += "\n#{indent}}"
|
99
|
+
|
100
|
+
return result
|
101
|
+
# X is a Structure; essentially a special case of X being an object.
|
102
|
+
elsif x.is_a? Struct
|
103
|
+
result = "Struct #{x.class}(\n"
|
104
|
+
longest_item = x.members.map { |m| m.to_s.length }.max()
|
105
|
+
|
106
|
+
x.each_pair do |name, value|
|
107
|
+
attr_name = name.to_s.ljust(longest_item)
|
108
|
+
attr_data = xpand(value, indent: _indent, tab: tab)
|
109
|
+
|
110
|
+
result += "#{_indent}#{attr_name} = #{attr_data}\n"
|
111
|
+
end
|
112
|
+
|
113
|
+
result += "#{indent})"
|
114
|
+
|
115
|
+
return result
|
116
|
+
# X is any arbitrary object; print all instance variables.
|
117
|
+
else
|
118
|
+
result = "#{x.class}(\n"
|
119
|
+
ivars = x.instance_variables
|
120
|
+
longest_var = ivars.map { |v| v.to_s.length }.max()
|
121
|
+
|
122
|
+
ivars.each_with_index do |var, index|
|
123
|
+
attr_name = var.to_s.ljust(longest_var)
|
124
|
+
attr_data = xpand(
|
125
|
+
x.instance_variable_get(var),
|
126
|
+
indent: _indent,
|
127
|
+
tab: tab
|
128
|
+
)
|
129
|
+
|
130
|
+
result += "#{_indent}#{attr_name} = #{attr_data}\n"
|
131
|
+
end
|
132
|
+
|
133
|
+
result += "#{indent})"
|
134
|
+
|
135
|
+
return result
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def xp(*args)
|
141
|
+
XPrint::xp(*args)
|
142
|
+
end
|
143
|
+
|
144
|
+
def xpand(item, tab: "\t")
|
145
|
+
XPrint::xpand(item, tab: tab)
|
146
|
+
end
|
metadata
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xprint
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- JCabr
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-07-20 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Gem that allows for pretty printing data over multiple lines and with
|
14
|
+
indentation, and works with objects as well as basic data types.
|
15
|
+
email:
|
16
|
+
- jcabr.dev@gmail.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- lib/version.rb
|
22
|
+
- lib/xprint.rb
|
23
|
+
homepage: https://github.com/JCabr/xprint.rb
|
24
|
+
licenses:
|
25
|
+
- MIT
|
26
|
+
metadata: {}
|
27
|
+
post_install_message:
|
28
|
+
rdoc_options: []
|
29
|
+
require_paths:
|
30
|
+
- lib
|
31
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
requirements: []
|
42
|
+
rubygems_version: 3.1.2
|
43
|
+
signing_key:
|
44
|
+
specification_version: 4
|
45
|
+
summary: Gem for pretty printing any kind of object.
|
46
|
+
test_files: []
|