xprint 0.5.3 → 0.6.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/version.rb +1 -1
  3. data/lib/xprint.rb +53 -15
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12a4f14b974b337adf700aefab2e12d0d49464715c07d9fcf4968043a4e1dc94
4
- data.tar.gz: d7c45cd128a2b48d930ce4b0f3c0991351e858d2bcc9fa1aa08ad0d3c62ad9d1
3
+ metadata.gz: 2f22ce4523589e6cbeb06e54a7a1977a75ec1756ab30f089732bcc8c3b45dff1
4
+ data.tar.gz: fb2846b5666efd1edcc52724f9abfbb1800d519c2a38677e7307fc819e935555
5
5
  SHA512:
6
- metadata.gz: 846e1a5db4a0754d459eb0fa0a5036def3ff3e501046fd67617db49b8ec44837c0120e49b6ecd7c3ed07696359db302a81a0b3cecb5e4a7663922ca3229bde84
7
- data.tar.gz: fef4e604bc0cd065117a9d08862b6ba2196f9dd20ee6393a0f956263fcbea81f4f27d658aefa184fa79bde9d6b1643defb2099b60692c88b0a27ea7afc617239
6
+ metadata.gz: 9b92e59c74c96172d0f8a30922588d0cfae72eb7eff4ad7c3ca0eaa97c6884b93a06866d70559fac46ce76818dfeb978e94f044b1a4ceccaffea7c9ecbb20304
7
+ data.tar.gz: 38a4585448847ffebc5c873dafa351f16a4ef082f2d41c121161b7d6e405f4b660d648197600f332549da5d835e346c5684a21f5365ac046c5e4c223b983cfbb
@@ -1,3 +1,3 @@
1
1
  module XPrint
2
- VERSION = '0.5.3'
2
+ VERSION = '0.6.0'
3
3
  end
@@ -7,14 +7,23 @@ module XPrint
7
7
  @tab = "\t"
8
8
  @show_indexes = true
9
9
  @full_proc_path = false
10
+ @braces = true
10
11
 
11
12
  def self.set(**kwargs)
12
- @tab = kwargs[:tab] unless kwargs[:tab].nil?
13
- @show_indexes = kwargs[:show_indexes] unless kwargs[:show_indexes].nil?
14
-
15
- unless @full_proc_path.nil?
16
- @full_proc_path = kwargs[:full_proc_path]
13
+ set_vars = {
14
+ tab: ->(data) { @tab = data },
15
+ show_indexes: ->(data) { @show_indexes = data },
16
+ full_proc_path: ->(data) { @full_proc_path = data },
17
+ braces: ->(data) { @braces = data }
18
+ }
19
+
20
+ kwargs.each do |keyword, arg|
21
+ if set_vars.key? keyword
22
+ set_vars[keyword].(arg)
23
+ end
17
24
  end
25
+
26
+ return
18
27
  end
19
28
 
20
29
  def self.tab()
@@ -27,8 +36,33 @@ module XPrint
27
36
 
28
37
  def self.xp(*args)
29
38
  args.each do |arg|
30
- puts self.xpand(arg, tab: @tab)
39
+ xpanded_text = self.xpand(arg, tab: @tab)
40
+
41
+ unless @braces
42
+ xpanded_text = self.shift_indentation_down(xpanded_text).lstrip()
43
+ end
44
+
45
+ puts xpanded_text
46
+ end
47
+ end
48
+
49
+
50
+ private_class_method def self.shift_indentation_down(text)
51
+ # Only shift if no
52
+ return text if text.match?(/^\S/)
53
+ result = ''
54
+
55
+ text.each_line do |line|
56
+ result += (
57
+ if line.start_with? @tab
58
+ line[@tab.length..-1]
59
+ else
60
+ line
61
+ end
62
+ )
31
63
  end
64
+
65
+ return result
32
66
  end
33
67
 
34
68
  def self.xpand(x, indent: '', tab: "\t")
@@ -52,8 +86,10 @@ module XPrint
52
86
 
53
87
  return "<#{type} @ #{source} [Line #{line}]>"
54
88
  # X is an Array, print list of all items.
89
+ elsif x.class == Class
90
+ return "<Class #{x}>"
55
91
  elsif x.class == Array
56
- result = "[\n"
92
+ result = "#{@braces ? '[' : ''}\n"
57
93
 
58
94
  x.each_with_index do |item, index|
59
95
  data = xpand(item, indent: _indent, tab: tab)
@@ -63,15 +99,15 @@ module XPrint
63
99
  result += "#{data}"
64
100
 
65
101
  unless index + 1 == x.length
66
- result += ", \n"
102
+ result += "#{@braces ? ', ' : ''} \n"
67
103
  end
68
104
  end
69
105
 
70
- result += "\n#{indent}]"
106
+ result += "\n#{indent}]" if @braces
71
107
  return result
72
108
  # X is a Hash, print all keys and values.
73
109
  elsif x.class == Hash
74
- result = "{\n"
110
+ result = "#{@braces ? '{' : ''}\n"
75
111
 
76
112
  longest_key = (
77
113
  x.keys.filter do |k, v|
@@ -105,12 +141,12 @@ module XPrint
105
141
  end
106
142
  end
107
143
 
108
- result += "\n#{indent}}"
144
+ result += "\n#{indent}}" if @braces
109
145
 
110
146
  return result
111
147
  # X is a Structure; essentially a special case of X being an object.
112
148
  elsif x.is_a? Struct
113
- result = "Struct #{x.class}(\n"
149
+ result = "Struct #{x.class}#{@braces ? '(' : ''}\n"
114
150
  longest_item = x.members.map { |m| m.to_s.length }.max()
115
151
 
116
152
  x.each_pair do |name, value|
@@ -120,13 +156,15 @@ module XPrint
120
156
  result += "#{_indent}#{attr_name} = #{attr_data}\n"
121
157
  end
122
158
 
123
- result += "#{indent})"
159
+ result += "#{indent})" if @braces
124
160
 
125
161
  return result
126
162
  # X is any arbitrary object; print all instance variables.
127
163
  else
128
- result = "#{x.class}(\n"
164
+ classname = x.class == Module ? "Module #{x}" : x.class
165
+ result = "#{classname}#{@braces ? '(' : ''}"
129
166
  ivars = x.instance_variables
167
+ result += "\n" if ivars.length > 0
130
168
  longest_var = ivars.map { |v| v.to_s.length }.max()
131
169
 
132
170
  ivars.each_with_index do |var, index|
@@ -140,7 +178,7 @@ module XPrint
140
178
  result += "#{_indent}#{attr_name} = #{attr_data}\n"
141
179
  end
142
180
 
143
- result += "#{indent})"
181
+ result += "#{ivars.length > 0 ? indent: ''})" if @braces
144
182
 
145
183
  return result
146
184
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xprint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - JCabr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-20 00:00:00.000000000 Z
11
+ date: 2020-07-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Gem that allows for pretty printing data over multiple lines and with
14
14
  indentation, and works with objects as well as basic data types.