amounts 0.0.7 → 0.1.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 +4 -4
- data/.rubocop.yml +37 -0
- data/CHANGELOG.md +142 -1
- data/Gemfile +4 -0
- data/README.md +218 -4
- data/Rakefile +47 -10
- data/lib/amount/active_record/amount_validator.rb +9 -18
- data/lib/amount/active_record/attribute_definition.rb +3 -1
- data/lib/amount/active_record/locale/en.yml +7 -0
- data/lib/amount/active_record/model.rb +9 -0
- data/lib/amount/active_record/railtie.rb +1 -1
- data/lib/amount/active_record.rb +12 -0
- data/lib/amount/compact.rb +137 -0
- data/lib/amount/{allocation.rb → concerns/allocatable.rb} +1 -1
- data/lib/amount/{arithmetic.rb → concerns/calculable.rb} +9 -9
- data/lib/amount/concerns/coercible.rb +65 -0
- data/lib/amount/concerns/constructible.rb +92 -0
- data/lib/amount/{conversion.rb → concerns/convertible.rb} +3 -3
- data/lib/amount/concerns/formattable.rb +112 -0
- data/lib/amount/concerns/localizable.rb +39 -0
- data/lib/amount/{comparison.rb → concerns/orderable.rb} +10 -10
- data/lib/amount/concerns/parsable.rb +58 -0
- data/lib/amount/concerns/registrable.rb +80 -0
- data/lib/amount/{serialization.rb → concerns/serializable.rb} +4 -4
- data/lib/amount/display.rb +86 -51
- data/lib/amount/locale.rb +102 -0
- data/lib/amount/registry/generated_constructors.rb +10 -5
- data/lib/amount/registry.rb +72 -9
- data/lib/amount/rspec.rb +4 -4
- data/lib/amount/ui_parser.rb +109 -0
- data/lib/amount/version.rb +1 -1
- data/lib/amount.rb +61 -205
- data/test/amount/active_record/amount_validator_test.rb +201 -0
- data/test/amount/active_record/attribute_definition_test.rb +234 -0
- data/test/amount/active_record/migration_methods_test.rb +60 -0
- data/test/amount/active_record/model_test.rb +40 -0
- data/test/amount/active_record/type_test.rb +80 -0
- data/test/amount/active_record_test.rb +12 -0
- data/test/amount/compact_test.rb +371 -0
- data/test/amount/concerns/allocatable_test.rb +166 -0
- data/test/amount/concerns/calculable_test.rb +152 -0
- data/test/amount/concerns/coercible_test.rb +49 -0
- data/test/amount/concerns/constructible_test.rb +113 -0
- data/test/amount/concerns/convertible_test.rb +54 -0
- data/test/amount/concerns/formattable_test.rb +336 -0
- data/test/amount/concerns/localizable_test.rb +59 -0
- data/test/amount/concerns/orderable_test.rb +83 -0
- data/test/amount/concerns/parsable_test.rb +98 -0
- data/test/amount/concerns/registrable_test.rb +67 -0
- data/test/amount/concerns/serializable_test.rb +98 -0
- data/test/amount/display_test.rb +181 -0
- data/test/amount/locale_test.rb +590 -0
- data/test/amount/parser_test.rb +29 -0
- data/test/amount/registry/generated_constructors_test.rb +94 -0
- data/test/amount/registry_test.rb +149 -0
- data/test/amount/ui_parser_test.rb +284 -0
- data/test/amount_test.rb +55 -0
- data/test/dummy/config/application.rb +3 -0
- data/test/generators/amount/active_record/registry_generator_test.rb +116 -0
- data/test/integration/postgresql_test.rb +94 -0
- data/test/support/active_record_test_support.rb +65 -0
- data/test/support/error_helpers.rb +22 -0
- data/test/support/locale_test_setup.rb +36 -0
- data/test/test_helper.rb +1 -0
- metadata +47 -11
- data/test/postgresql_integration_test.rb +0 -71
- data/test/test_active_record.rb +0 -375
- data/test/test_amount.rb +0 -663
- data/test/test_registry_generator.rb +0 -104
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "test_helper"
|
|
4
|
-
require "tmpdir"
|
|
5
|
-
require "fileutils"
|
|
6
|
-
require_relative "../lib/amounts"
|
|
7
|
-
require_relative "../lib/generators/amount/active_record/registry_generator"
|
|
8
|
-
require "rails/generators"
|
|
9
|
-
|
|
10
|
-
class AmountRegistryGeneratorTest < Minitest::Test
|
|
11
|
-
def setup
|
|
12
|
-
@destination_root = Dir.mktmpdir("amounts-generator")
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def teardown
|
|
16
|
-
FileUtils.remove_entry(@destination_root)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def test_generates_fiat_initializer
|
|
20
|
-
invoke_generator("fiat")
|
|
21
|
-
|
|
22
|
-
content = File.read(output_file)
|
|
23
|
-
|
|
24
|
-
assert_includes content, 'rails generate amounts:registry fiat'
|
|
25
|
-
assert_includes content, "# Registry overview:"
|
|
26
|
-
assert_includes content, "# Major Fiat Currencies:"
|
|
27
|
-
assert_includes content, "# USD: United States dollar."
|
|
28
|
-
assert_includes content, "# Fact: Uses 2 decimal places for cents."
|
|
29
|
-
assert_includes content, "# Preset default: Uses \"$\" as the default display symbol in an English-oriented UI."
|
|
30
|
-
assert_includes content, "Amount.register :USD"
|
|
31
|
-
assert_includes content, "Amount.register :JPY"
|
|
32
|
-
refute_includes content, "Amount.register :BTC"
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def test_generates_all_initializer_without_duplicate_symbols
|
|
36
|
-
invoke_generator("all")
|
|
37
|
-
|
|
38
|
-
content = File.read(output_file)
|
|
39
|
-
|
|
40
|
-
assert_equal 1, content.scan(/^\s*Amount\.register :USD,/).size
|
|
41
|
-
assert_equal 1, content.scan(/^\s*Amount\.register :USDC,/).size
|
|
42
|
-
assert_includes content, "Amount.register :GOLD"
|
|
43
|
-
assert_includes content, "Amount.register :BTC"
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def test_generates_crypto_initializer_without_stale_polygon_entry
|
|
47
|
-
invoke_generator("crypto")
|
|
48
|
-
|
|
49
|
-
content = File.read(output_file)
|
|
50
|
-
|
|
51
|
-
assert_includes content, "# BTC: Bitcoin."
|
|
52
|
-
assert_includes content, "# Source: Ethereum denomination docs: https://ethereum.org/en/developers/docs/intro-to-ether/"
|
|
53
|
-
assert_includes content, "Amount.register :USDT"
|
|
54
|
-
refute_includes content, "Amount.register :MATIC"
|
|
55
|
-
refute_includes content, "Amount.register :POL"
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def test_static_preset_files_exist
|
|
59
|
-
assert File.exist?(preset_file("fiat"))
|
|
60
|
-
assert File.exist?(preset_file("metals"))
|
|
61
|
-
assert File.exist?(preset_file("crypto"))
|
|
62
|
-
assert File.exist?(preset_file("all"))
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def test_all_static_preset_file_includes_all_major_sections
|
|
66
|
-
content = File.read(preset_file("all"))
|
|
67
|
-
|
|
68
|
-
assert_includes content, "# Major Fiat Currencies:"
|
|
69
|
-
assert_includes content, "# Precious And Industrial Metals:"
|
|
70
|
-
assert_includes content, "# Large-Cap Crypto Assets:"
|
|
71
|
-
assert_includes content, "Amount.register :USD"
|
|
72
|
-
assert_includes content, "Amount.register :GOLD"
|
|
73
|
-
assert_includes content, "Amount.register :BTC"
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def test_rejects_unknown_preset
|
|
77
|
-
_stdout, stderr = capture_io do
|
|
78
|
-
invoke_generator("unknown")
|
|
79
|
-
end
|
|
80
|
-
assert_includes stderr, "unknown preset"
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
private
|
|
84
|
-
|
|
85
|
-
def invoke_generator(preset)
|
|
86
|
-
Amount::ActiveRecord::RegistryGenerator.start(
|
|
87
|
-
[preset],
|
|
88
|
-
destination_root: @destination_root,
|
|
89
|
-
shell: Thor::Shell::Basic.new
|
|
90
|
-
)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def output_file
|
|
94
|
-
File.join(@destination_root, "config/initializers/amounts.rb")
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def preset_file(name)
|
|
98
|
-
File.join(
|
|
99
|
-
File.dirname(__FILE__),
|
|
100
|
-
"..",
|
|
101
|
-
"lib/generators/amount/active_record/templates/presets/#{name}.fragment"
|
|
102
|
-
)
|
|
103
|
-
end
|
|
104
|
-
end
|