monies 1.1.0 → 1.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: 736b4a239f90fc0979d0b7a0ad4ab2b55986a6d9b371420ab250d8c6c3cb6e5c
4
- data.tar.gz: 9a4127b66e6321c91baf2f39200584fab7fbedb3d653278de6beb6c995664065
3
+ metadata.gz: 411e7bb7e471b8d8df69c510b07c810984dce43c7a753a1431c0f40c849cb1c8
4
+ data.tar.gz: 8b84016a100c83249bf9845c1592b1a20b405c1bdeb297b887abe8163b98d411
5
5
  SHA512:
6
- metadata.gz: 37bcf8de107b4d63468a8b717ccc2bf3b901128a89f4b2a394d8ce24b33b3d12317fb2a66978163ec7625af29edd6748435d7a2016aa4ea701281a5efb3a9170
7
- data.tar.gz: c66aa18d837262bfd5e0072dc566fa0bd2a044a14ead9a46a11cbbb6338a5a38c3f7a659d545d2cc9cf75417eaea0eeaf6ef30850b19f6f851801d7d86f8d4c9
6
+ metadata.gz: 7d6080e16f4d8c3fb149149635573d0e2615f4c104aa742623ba1d36e127b19572a59197d2cfc45f06de56f9f85b72db220e737b1448ea1da33a48f4109349fd
7
+ data.tar.gz: a251134b700e1659e6d0ff07162288ef44e3f69bb9fd8605bc407bf5e319d438b1cab818a0cd5144d3759f136cf856f1b73dfef4cf30474af0ef13e44ba0bed4
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2024 TIMCRAFT
1
+ Copyright (c) 2024-2025 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
@@ -487,7 +488,7 @@ class Monies
487
488
  end
488
489
  end
489
490
 
490
- def Monies(object, currency = Monies.currency)
491
+ def Monies(object, currency = Monies.currency, exception: true)
491
492
  case object
492
493
  when Monies
493
494
  object
@@ -496,7 +497,11 @@ def Monies(object, currency = Monies.currency)
496
497
  when Rational
497
498
  Monies.new(object.numerator, 0, currency) / object.denominator
498
499
  when String
499
- Monies::Digits.load(object, currency)
500
+ if Monies::Digits.match?(object)
501
+ Monies::Digits.load(object, currency)
502
+ elsif exception
503
+ raise ArgumentError, "invalid value for Monies(): #{object.inspect}"
504
+ end
500
505
  else
501
506
  if defined?(BigDecimal) && object.is_a?(BigDecimal)
502
507
  sign, significant_digits, base, exponent = object.split
@@ -510,10 +515,11 @@ def Monies(object, currency = Monies.currency)
510
515
  end
511
516
 
512
517
  scale = object.scale
518
+ scale = length - exponent if length < scale
513
519
 
514
520
  return Monies.new(value, scale, currency)
515
521
  end
516
522
 
517
- raise TypeError, "can't convert #{object.inspect} into #{Monies}"
523
+ raise TypeError, "can't convert #{object.inspect} into #{Monies}" if exception
518
524
  end
519
525
  end
data/monies.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'monies'
3
- s.version = '1.1.0'
3
+ s.version = '1.2.0'
4
4
  s.license = 'LGPL-3.0'
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = ['Tim Craft']
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.description = 'Ruby gem for representing monetary values'
10
10
  s.summary = 'See description'
11
11
  s.files = Dir.glob('lib/**/*.rb') + %w[LICENSE.txt README.md monies.gemspec]
12
- s.required_ruby_version = '>= 3.1.0'
12
+ s.required_ruby_version = '>= 3.2.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: 1.2.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:
@@ -36,7 +35,6 @@ metadata:
36
35
  source_code_uri: https://github.com/readysteady/monies
37
36
  bug_tracker_uri: https://github.com/readysteady/monies/issues
38
37
  changelog_uri: https://github.com/readysteady/monies/blob/main/CHANGES.md
39
- post_install_message:
40
38
  rdoc_options: []
41
39
  require_paths:
42
40
  - lib
@@ -44,15 +42,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
44
42
  requirements:
45
43
  - - ">="
46
44
  - !ruby/object:Gem::Version
47
- version: 3.1.0
45
+ version: 3.2.0
48
46
  required_rubygems_version: !ruby/object:Gem::Requirement
49
47
  requirements:
50
48
  - - ">="
51
49
  - !ruby/object:Gem::Version
52
50
  version: '0'
53
51
  requirements: []
54
- rubygems_version: 3.5.11
55
- signing_key:
52
+ rubygems_version: 3.6.7
56
53
  specification_version: 4
57
54
  summary: See description
58
55
  test_files: []