difftastic 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f0a07e5dd20bb2cd12ad616d4939db9db3398c77eae8c859c17a8ecc269b07a0
4
- data.tar.gz: ed659c1c84fd0acb0f5798046d26ebb14ca07d16892b769414d76eeef0ac782a
3
+ metadata.gz: 31125243809498f1920e30f4c8f2dc681e6862a2c06f4c7c9314eb717f30bdfb
4
+ data.tar.gz: ae9612238b4267ada429d79611ec0dcbfe694b319d601dac4a402e9212b0c372
5
5
  SHA512:
6
- metadata.gz: fc61ad28fe6a5981cf5a5fd15007655a8e1fddf85b937d1fbeb203197581530c42a0bd67f2bd173be9f3a455c5e2ebd31deffdab99a380d1dc5e62fd4868674c
7
- data.tar.gz: 311f6717f04bc4edcbc2310bb77be7eb9b25cfda213cd7dc328fc6d44838642dde76653ecea6c9363eca1181bc6ce2989ed5a971b427748f96d8481fe300d0d4
6
+ metadata.gz: feef6a85bb995f6678115c0edfafc41a73b19c2927466790eb75151010c526968d1881a9e84bfe02793516028d8325eb41747219de1ac1af1363c7057533fa2a
7
+ data.tar.gz: a53103ffbcc0fcbf5e074c13a91b6da0c965d8a50b48304f65a42137dd3334612f90f5b3e42ea0668b37b895af4bcfdc316dcaaf78c8f8f4f6461db85a995791
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Difftastic
4
- VERSION = "0.1.2"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/difftastic.rb CHANGED
@@ -71,57 +71,73 @@ module Difftastic
71
71
  exe_file
72
72
  end
73
73
 
74
- def self.pretty(object, buffer: +"", indent: 0)
74
+ def self.pretty(object, indent: 0, indent_width: 2, max_width: 80, indentation_bytes: "\t")
75
75
  case object
76
76
  when Hash
77
- buffer << "{\n"
77
+ buffer = +"{\n"
78
78
  indent += 1
79
79
  object.each do |key, value|
80
80
  buffer << (" " * indent)
81
- pretty(key, buffer:, indent:)
81
+ buffer << pretty(key, indent:)
82
82
  buffer << " => "
83
- pretty(value, buffer:, indent:)
83
+ buffer << pretty(value, indent:)
84
84
  buffer << ",\n"
85
85
  end
86
86
  indent -= 1
87
87
  buffer << (" " * indent)
88
88
  buffer << "}"
89
89
  when Array
90
- buffer << "[\n"
91
- indent += 1
92
- object.each do |value|
93
- buffer << (" " * indent)
94
- pretty(value, buffer:, indent:)
95
- buffer << ",\n"
90
+ new_lines = false
91
+ length = 0
92
+ items = object.map do |item|
93
+ pretty_item = pretty(item, indent: indent + 1)
94
+ new_lines = true if pretty_item.include?("\n")
95
+ length += pretty_item.bytesize
96
+ pretty_item
97
+ end
98
+
99
+ if new_lines || length > max_width - (indent * indent_width)
100
+ "[\n#{indentation_bytes * (indent + 1)}#{items.join(",\n#{indentation_bytes * (indent + 1)}")},\n#{indentation_bytes * indent}]"
101
+ else
102
+ "[#{items.join(', ')}]"
96
103
  end
97
- indent -= 1
98
- buffer << (" " * indent)
99
- buffer << "]"
100
104
  when Set
101
- buffer << "Set[\n"
102
- indent += 1
103
- object.to_a.sort!.each do |value|
104
- buffer << (" " * indent)
105
- pretty(value, buffer:, indent:)
106
- buffer << ",\n"
105
+ new_lines = false
106
+ length = 0
107
+ items = object.to_a.sort!.map do |item|
108
+ pretty_item = pretty(item, indent: indent + 1)
109
+ new_lines = true if pretty_item.include?("\n")
110
+ length += pretty_item.bytesize
111
+ pretty_item
107
112
  end
108
- indent -= 1
109
- buffer << (" " * indent)
110
- buffer << "]"
113
+
114
+ if new_lines || length > max_width - (indent * indent_width)
115
+ "Set[\n#{indentation_bytes * (indent + 1)}#{items.join(",\n#{indentation_bytes * (indent + 1)}")},\n#{indentation_bytes * indent}]"
116
+ else
117
+ "Set[#{items.join(', ')}]"
118
+ end
119
+ when Module
120
+ object.name
111
121
  when Symbol, String, Integer, Float, Regexp, Range, Rational, Complex, true, false, nil
112
- buffer << object.inspect
122
+ object.inspect
113
123
  else
114
- buffer << "#{object.class.name}(\n"
115
- indent += 1
116
- object.instance_variables.each do |name|
124
+ buffer = +""
125
+ instance_variables = object.instance_variables
126
+ if instance_variables.length > 0
127
+ buffer << "#{object.class.name}(\n"
128
+ indent += 1
129
+ object.instance_variables.each do |name|
130
+ buffer << (" " * indent)
131
+ buffer << ":#{name} => "
132
+ buffer << pretty(object.instance_variable_get(name), indent:)
133
+ buffer << ",\n"
134
+ end
135
+ indent -= 1
117
136
  buffer << (" " * indent)
118
- buffer << ":#{name} => "
119
- pretty(object.instance_variable_get(name), buffer:, indent:)
120
- buffer << ",\n"
137
+ buffer << ")"
138
+ else
139
+ buffer << "#{object.class.name}()"
121
140
  end
122
- indent -= 1
123
- buffer << (" " * indent)
124
- buffer << ")"
125
141
  end
126
142
  end
127
143
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: difftastic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Drapper
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-01-22 00:00:00.000000000 Z
10
+ date: 2025-01-23 00:00:00.000000000 Z
11
11
  dependencies: []
12
12
  email:
13
13
  - joel@drapper.me