trusted-number 0.1.1 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c1351fabd68e10d763cb7e26f29d8c0b901a5d385eaf3f121d54b067f08ed0d3
4
- data.tar.gz: 150faa6d1dd76858fd504e9bf80bd77a5012f149c6299ac14123d3a9b922498e
3
+ metadata.gz: de7c65f813fed797bf85b4cf8ea88ff2dda8b46fee5c80d3dc5805fbf3bddf0c
4
+ data.tar.gz: 32db486cbc0acf549e41f72c690b25f47f0d586a0b29eb62ce0756251e7f7c59
5
5
  SHA512:
6
- metadata.gz: c6b6468564c9385e2822a7e5d0b0addeee1a33c6f46f3ab7c8cdc352a7a5ed648d209845d28a30519b14459f88b68c7d893e5a02465c0a8688f0d070b3330bfb
7
- data.tar.gz: '081d404533ee11aec1d55c4b3dd77b3f364cb5ca155aa423587b711db644fcb7b0cdf8585d39e38ff024b5cd4bec093b240aa89b5ca2a557646c2ce4af55e1b7'
6
+ metadata.gz: bda7066152658490ff0293b2da171f1f95e7a81f4061e2c172a0edfd7ae026cf295a707ede6c89ada9c1a4ca28884159cfc7ca45c781ee75dc3e9eb458e26d4c
7
+ data.tar.gz: f9c4be735a77a14073674059e289ce9410301f5cb2f86d61d4789e5901642f41af97018d7cc5b493da0762f975b32a261adc28324bf5ad85ba677a5bbf141efe
@@ -1,15 +1,15 @@
1
1
  class TrustedNumber
2
2
  def +(other)
3
- # 1. Alinear partes decimales (rellenar con 0 a la derecha)
4
- max_post = [@postnumber.length, other.postnumber.length].max
5
- p1 = @postnumber.ljust(max_post, "0")
6
- p2 = other.postnumber.ljust(max_post, "0")
3
+ # Aligne post
4
+ max_post = [@postdot.length, other.postdot.length].max
5
+ p1 = @postdot.ljust(max_post, "0")
6
+ p2 = other.postdot.ljust(max_post, "0")
7
7
 
8
- # 2. Sumar postnumbers
8
+ # Sum postdot
9
9
  res_post, carry = add_strings(p1, p2, @base)
10
10
 
11
- # 3. Sumar prenumbers + acarreo anterior
12
- res_pre, final_carry = add_strings(@prenumber, other.prenumber, @base, carry)
11
+ # Sum predot + carry
12
+ res_pre, final_carry = add_strings(@predot, other.predot, @base, carry)
13
13
  res_pre = DIGITS[final_carry] + res_pre if final_carry > 0
14
14
 
15
15
  build_result(res_pre, res_post)
@@ -1,8 +1,8 @@
1
1
  class TrustedNumber
2
2
  def ==(other)
3
3
  cond = (@base == other.base)
4
- cond &&= (@prenumber = other.prenumber)
5
- cond &&= (@postnumber = other.postnumber)
4
+ cond &&= (@predot = other.predot)
5
+ cond &&= (@posdot = other.postdot)
6
6
 
7
7
  cond
8
8
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class TrustedNumber
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -8,24 +8,28 @@ require_relative "trusted-number/mul"
8
8
 
9
9
  class TrustedNumber
10
10
  attr_reader :base
11
- attr_reader :prenumber, :postnumber
11
+ attr_reader :predot, :postdot
12
12
 
13
13
  DIGITS = "0123456789abcdefghijklmnopqrstuvwxyz"
14
+ ZERO = "0"
15
+ DOT = "."
14
16
 
15
17
  def initialize(number, base: 10)
16
18
  @number = number
17
19
  @base = base
18
20
 
19
21
  num_str = @number.to_s.downcase.delete(" ")
20
- pre, post = num_str.split(".")
21
- @prenumber = pre || "0"
22
- @postnumber = post || ""
22
+ pre, post = num_str.split(DOT)
23
+ @predot = pre || ZERO
24
+ @postdot = post || ZERO
23
25
 
24
26
  validate_format!
25
27
  end
26
28
 
27
29
  def value
28
- @postnumber.empty? ? @prenumber : "#{@prenumber}.#{@postnumber}"
30
+ return @predot if @postdot == ZERO
31
+
32
+ "#{@predot}#{DOT}#{@postdot}"
29
33
  end
30
34
 
31
35
  def to_s
@@ -36,6 +40,8 @@ class TrustedNumber
36
40
 
37
41
  def build_result(pre, post)
38
42
  pre_clean = pre.gsub(/^0+(?=\d)/, "")
43
+ pre_clean = ZERO if pre_clean.empty?
44
+
39
45
  post_clean = post.gsub(/0+$/, "")
40
46
  str = post_clean.empty? ? pre_clean : "#{pre_clean}.#{post_clean}"
41
47
  TrustedNumber.new(str, base: @base)
@@ -44,7 +50,7 @@ class TrustedNumber
44
50
  def validate_format!
45
51
  allowed = DIGITS[0...@base]
46
52
  pattern = /\A[#{allowed}]*\z/
47
- unless @prenumber.match?(pattern) && @postnumber.match?(pattern)
53
+ unless @predot.match?(pattern) && @postdot.match?(pattern)
48
54
  raise ArgumentError, "Caracteres inválidos para base #{@base}"
49
55
  end
50
56
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trusted-number
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Vargas