monies 1.1.0 → 2.0.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: 736b4a239f90fc0979d0b7a0ad4ab2b55986a6d9b371420ab250d8c6c3cb6e5c
4
- data.tar.gz: 9a4127b66e6321c91baf2f39200584fab7fbedb3d653278de6beb6c995664065
3
+ metadata.gz: 96e0bb12354bfdca7f9e660e8c93c9c67ee586f515fc0c9e48d237f341c1a1d5
4
+ data.tar.gz: f4991d3a35cd0ba1d2221be7ed548d57de0d54c4d4ad9161b31a37ef1774d0cf
5
5
  SHA512:
6
- metadata.gz: 37bcf8de107b4d63468a8b717ccc2bf3b901128a89f4b2a394d8ce24b33b3d12317fb2a66978163ec7625af29edd6748435d7a2016aa4ea701281a5efb3a9170
7
- data.tar.gz: c66aa18d837262bfd5e0072dc566fa0bd2a044a14ead9a46a11cbbb6338a5a38c3f7a659d545d2cc9cf75417eaea0eeaf6ef30850b19f6f851801d7d86f8d4c9
6
+ metadata.gz: 936d75d5e2793feeae9726ff2f263edc74c3ac1591ceced1857eb7fb9df7d005e0dc4c48cbd673bd4eb8d41125804b0ac0ec89c1dc2f2b656ce188b0defaeaa4
7
+ data.tar.gz: d27261c02ce98aeda4c424bda110ca426a7b59098db5c558255f0d49164bc2cb2bdb76ef66e76c95fdd36351fc81d61be33e3f7bee9b9df02788b8410367b45c
data/CHANGES.md ADDED
@@ -0,0 +1,33 @@
1
+ # 2.0.0
2
+
3
+ * Added Monies#to_f method
4
+
5
+ * Added Monies#to_json method
6
+
7
+ * Changed required\_ruby\_version to >= 3.3.0
8
+
9
+ # 1.2.0
10
+
11
+ * Added exception argument to Monies method
12
+
13
+ * Changed Monies method to raise ArgumentError for invalid strings
14
+
15
+ * Changed required\_ruby\_version to >= 3.2.0
16
+
17
+ * Improved compatibility with jruby
18
+
19
+ # 1.1.0
20
+
21
+ * Added Monies#allocate method
22
+
23
+ * Added Monies#fix method
24
+
25
+ * Added Monies#frac method
26
+
27
+ # 1.0.1
28
+
29
+ * Fixed division for negative values
30
+
31
+ # 1.0.0
32
+
33
+ * First version!
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2024 TIMCRAFT
1
+ Copyright (c) 2024-2026 TIMCRAFT
2
2
 
3
3
  This is an Open Source project licensed under the terms of the LGPLv3 license.
4
4
  Please see <http://www.gnu.org/licenses/lgpl-3.0.html> for license text.
data/lib/monies/digits.rb CHANGED
@@ -60,4 +60,10 @@ module Monies::Digits
60
60
 
61
61
  Monies.new(value, scale, currency)
62
62
  end
63
+
64
+ REGEXP = /\A\-?\d+(\.\d+)?\z/
65
+
66
+ def self.match?(string)
67
+ REGEXP.match?(string)
68
+ end
63
69
  end
data/lib/monies.rb CHANGED
@@ -116,6 +116,7 @@ class Monies
116
116
  end
117
117
 
118
118
  scale = other.scale
119
+ scale = length - exponent if length < scale
119
120
 
120
121
  return reduce(@value * value, @scale + scale)
121
122
  end
@@ -384,10 +385,18 @@ class Monies
384
385
  BigDecimal(Monies::Digits.dump(self))
385
386
  end
386
387
 
388
+ def to_f
389
+ @value.to_f / BASE ** @scale
390
+ end
391
+
387
392
  def to_i
388
393
  @value / BASE ** @scale
389
394
  end
390
395
 
396
+ def to_json(state = nil, *)
397
+ JSON::State.from_state(state).generate(self.class.dump(self))
398
+ end
399
+
391
400
  def to_r
392
401
  Rational(@value, BASE ** @scale)
393
402
  end
@@ -487,7 +496,7 @@ class Monies
487
496
  end
488
497
  end
489
498
 
490
- def Monies(object, currency = Monies.currency)
499
+ def Monies(object, currency = Monies.currency, exception: true)
491
500
  case object
492
501
  when Monies
493
502
  object
@@ -496,7 +505,11 @@ def Monies(object, currency = Monies.currency)
496
505
  when Rational
497
506
  Monies.new(object.numerator, 0, currency) / object.denominator
498
507
  when String
499
- Monies::Digits.load(object, currency)
508
+ if Monies::Digits.match?(object)
509
+ Monies::Digits.load(object, currency)
510
+ elsif exception
511
+ raise ArgumentError, "invalid value for Monies(): #{object.inspect}"
512
+ end
500
513
  else
501
514
  if defined?(BigDecimal) && object.is_a?(BigDecimal)
502
515
  sign, significant_digits, base, exponent = object.split
@@ -510,10 +523,11 @@ def Monies(object, currency = Monies.currency)
510
523
  end
511
524
 
512
525
  scale = object.scale
526
+ scale = length - exponent if length < scale
513
527
 
514
528
  return Monies.new(value, scale, currency)
515
529
  end
516
530
 
517
- raise TypeError, "can't convert #{object.inspect} into #{Monies}"
531
+ raise TypeError, "can't convert #{object.inspect} into #{Monies}" if exception
518
532
  end
519
533
  end
data/monies.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'monies'
3
- s.version = '1.1.0'
3
+ s.version = '2.0.0'
4
4
  s.license = 'LGPL-3.0'
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = ['Tim Craft']
7
7
  s.email = ['email@timcraft.com']
8
8
  s.homepage = 'https://github.com/readysteady/monies'
9
9
  s.description = 'Ruby gem for representing monetary values'
10
- s.summary = 'See description'
11
- s.files = Dir.glob('lib/**/*.rb') + %w[LICENSE.txt README.md monies.gemspec]
12
- s.required_ruby_version = '>= 3.1.0'
10
+ s.summary = 'Ruby gem for representing monetary values'
11
+ s.files = Dir.glob('lib/**/*.rb') + %w[CHANGES.md LICENSE.txt README.md monies.gemspec]
12
+ s.required_ruby_version = '>= 3.3.0'
13
13
  s.require_path = 'lib'
14
14
  s.metadata = {
15
15
  'homepage' => 'https://github.com/readysteady/monies',
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: monies
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Craft
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-10-22 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies: []
13
12
  description: Ruby gem for representing monetary values
14
13
  email:
@@ -17,6 +16,7 @@ executables: []
17
16
  extensions: []
18
17
  extra_rdoc_files: []
19
18
  files:
19
+ - CHANGES.md
20
20
  - LICENSE.txt
21
21
  - README.md
22
22
  - lib/monies.rb
@@ -36,7 +36,6 @@ metadata:
36
36
  source_code_uri: https://github.com/readysteady/monies
37
37
  bug_tracker_uri: https://github.com/readysteady/monies/issues
38
38
  changelog_uri: https://github.com/readysteady/monies/blob/main/CHANGES.md
39
- post_install_message:
40
39
  rdoc_options: []
41
40
  require_paths:
42
41
  - lib
@@ -44,15 +43,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - ">="
46
45
  - !ruby/object:Gem::Version
47
- version: 3.1.0
46
+ version: 3.3.0
48
47
  required_rubygems_version: !ruby/object:Gem::Requirement
49
48
  requirements:
50
49
  - - ">="
51
50
  - !ruby/object:Gem::Version
52
51
  version: '0'
53
52
  requirements: []
54
- rubygems_version: 3.5.11
55
- signing_key:
53
+ rubygems_version: 4.0.6
56
54
  specification_version: 4
57
- summary: See description
55
+ summary: Ruby gem for representing monetary values
58
56
  test_files: []