code-ruby 1.8.16 → 1.9.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 103fdb30c9cb28f7a771add31e5b21d71e2f397476b117b3ae90ab99d7ed902d
4
- data.tar.gz: 6a3ab9cbff25405b6179ee7bd7e0b316cd4930e906abb13eef575b5bc3b4dc59
3
+ metadata.gz: 6fa3d1843b2e8b0c48e77e0ebee8f777b600e3a394a6037abc4efac105fc675b
4
+ data.tar.gz: bf34f84603acd5949f0b66cc77ec0a05da8785fb27f98a82dcb9688f31dcd3d0
5
5
  SHA512:
6
- metadata.gz: ce5a8cabe4a1adaad31e04d101d1a883731c71b60b0b3279186a74b9571b041f10792ed16767245352ac5cc7905402d2eec4f5ba6ed952ae8e7000f333d9976f
7
- data.tar.gz: a80c30b44e0ff16742a0c9620a43ed51e2ee8083dfeb09809b4ac5a2458816654f708855049e75c21310f5b779bb78c013033d34bc8c417dd2e4f4db8db9c306
6
+ metadata.gz: 322e53da06d327556582256fd4337873ab5f1cdeb406abcc03812d7c9f2180edfb266d6114d77e49249055d3a8ff55ce89b30326432c5bc19aa53dbe13609641
7
+ data.tar.gz: 89eb23ea7ede87aa9dbb46f8ba758a570cc1ac7a259981c663bc093c860bb78f76c4085c0e25c366604895fda5a039f3c166edbf7a61138b167170f342916f1c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- code-ruby (1.8.16)
4
+ code-ruby (1.9.1)
5
5
  activesupport
6
6
  base64
7
7
  bigdecimal
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.16
1
+ 1.9.1
data/lib/code/format.rb CHANGED
@@ -116,7 +116,7 @@ class Code
116
116
  def format_base_10(base_10, indent:)
117
117
  return "0" unless base_10.is_a?(Hash)
118
118
 
119
- whole = base_10[:whole] || "0"
119
+ whole = format_grouped_whole(base_10[:whole] || "0")
120
120
  exponent = base_10[:exponent]
121
121
  return whole unless exponent
122
122
 
@@ -126,13 +126,29 @@ class Code
126
126
  def format_decimal(decimal, indent:)
127
127
  return "0.0" unless decimal.is_a?(Hash)
128
128
 
129
- raw = decimal[:decimal] || "0.0"
129
+ raw = format_grouped_decimal(decimal[:decimal] || "0.0")
130
130
  exponent = decimal[:exponent]
131
131
  return raw unless exponent
132
132
 
133
133
  "#{raw}e#{format_nested_statement(exponent, indent: indent)}"
134
134
  end
135
135
 
136
+ def format_grouped_whole(whole)
137
+ value = whole.to_s
138
+ return value unless value.match?(/\A\d+\z/)
139
+ return value if value.start_with?("0") && value.length > 1
140
+
141
+ value.reverse.scan(/.{1,3}/).join("_").reverse
142
+ end
143
+
144
+ def format_grouped_decimal(raw)
145
+ value = raw.to_s
146
+ whole, fraction = value.split(".", 2)
147
+ return value unless whole && fraction
148
+
149
+ "#{format_grouped_whole(whole)}.#{fraction.scan(/.{1,3}/).join("_")}"
150
+ end
151
+
136
152
  def format_string(parts, indent:)
137
153
  return '""' if parts == "" || parts.nil?
138
154
  symbol = symbolizable_string(parts)
@@ -10,6 +10,9 @@ RSpec.describe Code::Format do
10
10
  ["{}", "{}"],
11
11
  ["[]", "[]"],
12
12
  ['""', '""'],
13
+ ["100000", "100_000"],
14
+ ["1000000", "1_000_000"],
15
+ ["1.0000000001", "1.000_000_000_1"],
13
16
  ["{a:1}", "{ a: 1 }"],
14
17
  ["[1,2,3]", "[1, 2, 3]"],
15
18
  [
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.16
4
+ version: 1.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié