xprint 0.5.3 → 0.6.0

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