adequate_crypto_address 0.1.11 → 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.
@@ -2,6 +2,8 @@
2
2
 
3
3
  require 'adequate_crypto_address/utils/bech32'
4
4
  require 'adequate_crypto_address/utils/bch'
5
+ require 'adequate_crypto_address/utils/xlm'
6
+ require 'adequate_crypto_address/utils/monero_base58'
5
7
 
6
8
  require 'adequate_crypto_address/altcoin'
7
9
  require 'adequate_crypto_address/bch'
@@ -13,6 +15,10 @@ require 'adequate_crypto_address/zec'
13
15
  require 'adequate_crypto_address/ltc'
14
16
  require 'adequate_crypto_address/ton'
15
17
  require 'adequate_crypto_address/xmr'
18
+ require 'adequate_crypto_address/doge'
19
+ require 'adequate_crypto_address/sol'
20
+ require 'adequate_crypto_address/xlm'
21
+ require 'adequate_crypto_address/ada'
16
22
 
17
23
  module AdequateCryptoAddress
18
24
  class UnknownCurrency < StandardError; end
@@ -23,12 +29,29 @@ module AdequateCryptoAddress
23
29
  end
24
30
 
25
31
  def address(address, currency)
26
- AdequateCryptoAddress.const_get(currency.capitalize).new(address)
27
- rescue NameError
28
- raise UnknownCurrency, "Wrong currency #{currency}"
32
+ klass = currency_class(currency)
33
+ raise UnknownCurrency, "Wrong currency #{currency}" unless klass
34
+
35
+ klass.new(address)
29
36
  end
30
37
 
38
+ # Public contract: returns the detected address type as a Symbol when the
39
+ # address is valid for the currency, or nil when it is not.
31
40
  def address_type(address, currency)
32
- AdequateCryptoAddress.const_get(currency.capitalize).new(address).address_type
41
+ address(address, currency).address_type
42
+ end
43
+
44
+ # Resolve a currency name (string or symbol, any case) to its validator class.
45
+ # Only classes defined directly on this module that implement the validator
46
+ # interface are eligible, so malformed input can never be mistaken for a
47
+ # currency and NoMethodError is never swallowed as UnknownCurrency.
48
+ def currency_class(currency)
49
+ const_name = currency.to_s.capitalize
50
+ return nil unless const_defined?(const_name, false)
51
+
52
+ klass = const_get(const_name)
53
+ return nil unless klass.is_a?(Class) && klass.method_defined?(:valid?)
54
+
55
+ klass
33
56
  end
34
57
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adequate_crypto_address
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - vtm
@@ -37,73 +37,41 @@ dependencies:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
39
  version: '1.3'
40
- - !ruby/object:Gem::Dependency
41
- name: rake
42
- requirement: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '13.2'
47
- type: :development
48
- prerelease: false
49
- version_requirements: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '13.2'
54
- - !ruby/object:Gem::Dependency
55
- name: rspec
56
- requirement: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '3.13'
61
- type: :development
62
- prerelease: false
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '3.13'
68
40
  description: Provides Ruby helpers to validate cryptocurrency addresses across common
69
41
  chains.
70
42
  executables: []
71
43
  extensions: []
72
44
  extra_rdoc_files: []
73
45
  files:
74
- - ".coveralls.yml"
75
- - ".gitignore"
76
- - ".rspec"
77
- - ".rubocop.yml"
78
- - ".travis.yml"
79
- - Gemfile
46
+ - CHANGELOG.md
80
47
  - LICENSE.txt
81
- - Makefile
82
48
  - README.md
83
- - Rakefile
84
- - adequate_crypto_address.gemspec
85
49
  - bin/console
86
50
  - lib/adequate_crypto_address.rb
51
+ - lib/adequate_crypto_address/ada.rb
87
52
  - lib/adequate_crypto_address/altcoin.rb
88
53
  - lib/adequate_crypto_address/bch.rb
89
54
  - lib/adequate_crypto_address/btc.rb
90
55
  - lib/adequate_crypto_address/dash.rb
56
+ - lib/adequate_crypto_address/doge.rb
91
57
  - lib/adequate_crypto_address/eth.rb
92
58
  - lib/adequate_crypto_address/ltc.rb
59
+ - lib/adequate_crypto_address/sol.rb
93
60
  - lib/adequate_crypto_address/ton.rb
94
61
  - lib/adequate_crypto_address/utils/bch.rb
95
62
  - lib/adequate_crypto_address/utils/bech32.rb
63
+ - lib/adequate_crypto_address/utils/monero_base58.rb
64
+ - lib/adequate_crypto_address/utils/xlm.rb
96
65
  - lib/adequate_crypto_address/version.rb
66
+ - lib/adequate_crypto_address/xlm.rb
97
67
  - lib/adequate_crypto_address/xmr.rb
98
68
  - lib/adequate_crypto_address/xrp.rb
99
69
  - lib/adequate_crypto_address/zec.rb
100
- - spec/adequate_crypto_address/bch_spec.rb
101
- - spec/adequate_crypto_address_spec.rb
102
- - spec/spec_helper.rb
103
70
  homepage: https://github.com/vtm9/adequate_crypto_address
104
71
  licenses:
105
72
  - MIT
106
- metadata: {}
73
+ metadata:
74
+ rubygems_mfa_required: 'true'
107
75
  rdoc_options: []
108
76
  require_paths:
109
77
  - lib
@@ -118,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
86
  - !ruby/object:Gem::Version
119
87
  version: '0'
120
88
  requirements: []
121
- rubygems_version: 3.6.9
89
+ rubygems_version: 4.0.16
122
90
  specification_version: 4
123
91
  summary: Ruby helpers for validating cryptocurrency addresses.
124
92
  test_files: []
data/.coveralls.yml DELETED
@@ -1,2 +0,0 @@
1
- repo_token: ATgUXu3s0jZaYdzAdUr8P8ytuMMbR9ueh
2
-
data/.gitignore DELETED
@@ -1,16 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
-
10
- Gemfile.lock
11
-
12
- # rspec failure tracking
13
- .rspec_status
14
-
15
- # Spec artifacts
16
- /coverage
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format documentation
2
- --color
3
- --require spec_helper
data/.rubocop.yml DELETED
@@ -1,36 +0,0 @@
1
- require: rubocop-rspec
2
-
3
- AllCops:
4
- DisplayCopNames: true
5
-
6
- Naming/AccessorMethodName:
7
- Description: Check the naming of accessor methods for get_/set_.
8
- Enabled: false
9
-
10
- Style/DocumentationMethod:
11
- RequireForNonPublicMethods: false
12
-
13
- Documentation:
14
- Enabled: false
15
-
16
- Style/ClassAndModuleChildren:
17
- Enabled: false
18
-
19
- Style/NegatedIf:
20
- Enabled: false
21
-
22
- Metrics/LineLength:
23
- Max: 120
24
-
25
- Metrics/MethodLength:
26
- Max: 30
27
-
28
- Style/SymbolArray:
29
- Enabled: true
30
- EnforcedStyle: brackets
31
-
32
- Style/StringLiterals:
33
- EnforcedStyle: single_quotes
34
- SupportedStyles:
35
- - single_quotes
36
-
data/.travis.yml DELETED
@@ -1,13 +0,0 @@
1
- ---
2
- language: ruby
3
- sudo: false
4
- cache: bundler
5
- rvm:
6
- - 2.5.1
7
- before_install: gem install bundler -v 1.16.3
8
- script: bundle exec rspec spec
9
- notifications:
10
- email:
11
- - vtmilyakov@yandex.ru
12
- after_success:
13
- - CI=true TRAVIS=true coveralls --verbose
data/Gemfile DELETED
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
-
7
- gem 'coveralls', '>= 0.8.23', require: false
8
- gem 'pry', require: false
9
-
10
- gem 'rubocop-rspec'
11
- # Specify your gem's dependencies in adequate_crypto_address.gemspec
12
- gemspec
data/Makefile DELETED
@@ -1,6 +0,0 @@
1
-
2
- build:
3
- gem build adequate_crypto_address.gemspec
4
-
5
- push:
6
- gem push adequate_crypto_address-0.1.11.gem
data/Rakefile DELETED
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/gem_tasks'
4
- require 'rspec/core/rake_task'
5
-
6
- RSpec::Core::RakeTask.new(:spec)
7
-
8
- task default: :spec
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- lib = File.expand_path('lib', __dir__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'adequate_crypto_address/version'
6
-
7
- Gem::Specification.new do |spec|
8
- spec.name = 'adequate_crypto_address'
9
- spec.version = AdequateCryptoAddress::VERSION
10
- spec.authors = ['vtm']
11
-
12
- spec.summary = 'Ruby helpers for validating cryptocurrency addresses.'
13
- spec.description = 'Provides Ruby helpers to validate cryptocurrency addresses across common chains.'
14
- spec.homepage = 'https://github.com/vtm9/adequate_crypto_address'
15
-
16
- spec.license = 'MIT'
17
- spec.required_ruby_version = '>= 3.0'
18
- spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
19
- spec.require_paths = ['lib']
20
-
21
- spec.add_dependency 'base58', '~> 0.2'
22
- spec.add_dependency 'keccak', '~> 1.3'
23
- spec.add_development_dependency 'rake', '~> 13.2'
24
- spec.add_development_dependency 'rspec', '~> 3.13'
25
- end
@@ -1,77 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe(AdequateCryptoAddress::Bch) do
4
- let(:legacy_p2sh) { '3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC' }
5
- let(:legacy_p2pkh) { '155fzsEBHy9Ri2bMQ8uuuR3tv1YzcDywd4' }
6
- let(:cashaddr_p2sh) { 'bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq' }
7
- let(:cashaddr_p2pkh) { 'bitcoincash:qqkv9wr69ry2p9l53lxp635va4h86wv435995w8p2h' }
8
- let(:cashaddr_p2pkh_testnet) { 'bchtest:qpqtmmfpw79thzq5z7s0spcd87uhn6d34uqqem83hf' }
9
- let(:legacy_p2pkh_testnet) { 'mmRH4e9WW4ekZUP5HvBScfUyaSUjfQRyvD' }
10
- let(:cashaddr_p2sh_testnet) { 'bchtest:pp8f7ww2g6y07ypp9r4yendrgyznysc9kqxh6acwu3' }
11
- let(:legacy_p2sh_testnet) { '2MzQwSSnBHWHqSAqtTVQ6v47XtaisrJa1Vc' }
12
- let(:mixed_case_cashadddr) { 'bitcoincash:qqkv9wr69ry2p9l53lxP635va4h86wv435995w8p2H' }
13
-
14
- describe '#legacy_address' do
15
- it 'converts legacy testnet p2pkh' do
16
- expect(described_class.new(legacy_p2pkh_testnet).legacy_address).to eq(legacy_p2pkh_testnet)
17
- expect(described_class.new(cashaddr_p2pkh_testnet).legacy_address).to eq(legacy_p2pkh_testnet)
18
- end
19
-
20
- it 'converts legacy testnet p2sh' do
21
- expect(described_class.new(legacy_p2sh_testnet).legacy_address).to eq(legacy_p2sh_testnet)
22
- expect(described_class.new(cashaddr_p2sh_testnet).legacy_address).to eq(legacy_p2sh_testnet)
23
- end
24
-
25
- it 'converts to legacy p2sh' do
26
- expect(described_class.new(legacy_p2sh).legacy_address).to eq(legacy_p2sh)
27
- expect(described_class.new(cashaddr_p2sh).legacy_address).to eq(legacy_p2sh)
28
- end
29
-
30
- it 'converts to legacy p2pkh' do
31
- expect(described_class.new(legacy_p2pkh).legacy_address).to eq(legacy_p2pkh)
32
- expect(described_class.new(cashaddr_p2pkh).legacy_address).to eq(legacy_p2pkh)
33
- end
34
-
35
- context 'uppercase cashaddr address' do
36
- it 'converts to legacy p2sh' do
37
- expect(described_class.new(cashaddr_p2sh.upcase).legacy_address).to eq(legacy_p2sh)
38
- end
39
-
40
- it 'converts to legacy p2pkh' do
41
- expect(described_class.new(cashaddr_p2pkh.upcase).legacy_address).to eq(legacy_p2pkh)
42
- end
43
- end
44
- end
45
-
46
- context '#cash_address' do
47
- it 'converts cash testnet p2pkh' do
48
- expect(described_class.new(legacy_p2pkh_testnet).cash_address).to eq(cashaddr_p2pkh_testnet)
49
- expect(described_class.new(cashaddr_p2pkh_testnet).cash_address).to eq(cashaddr_p2pkh_testnet)
50
- end
51
-
52
- it 'converts cash testnet p2sh' do
53
- expect(described_class.new(legacy_p2sh_testnet).cash_address).to eq(cashaddr_p2sh_testnet)
54
- expect(described_class.new(cashaddr_p2sh_testnet).cash_address).to eq(cashaddr_p2sh_testnet)
55
- end
56
-
57
- it 'converts to cash p2sh' do
58
- expect(described_class.new(legacy_p2sh).cash_address).to eq(cashaddr_p2sh)
59
- expect(described_class.new(cashaddr_p2sh).cash_address).to eq(cashaddr_p2sh)
60
- end
61
-
62
- it 'converts to cash p2pkh' do
63
- expect(described_class.new(legacy_p2pkh).cash_address).to eq(cashaddr_p2pkh)
64
- expect(described_class.new(cashaddr_p2pkh).cash_address).to eq(cashaddr_p2pkh)
65
- end
66
-
67
- context 'uppercase cashaddr address' do
68
- it 'converts to cash p2sh' do
69
- expect(described_class.new(cashaddr_p2sh.upcase).cash_address).to eq(cashaddr_p2sh)
70
- end
71
-
72
- it 'converts to cash p2pkh' do
73
- expect(described_class.new(cashaddr_p2pkh.upcase).cash_address).to eq(cashaddr_p2pkh)
74
- end
75
- end
76
- end
77
- end
@@ -1,235 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe(AdequateCryptoAddress) do
4
- describe '.valid?' do
5
- context 'Bitcoin' do
6
- it 'validates hash160 addresses' do
7
- expect(described_class).to be_valid('12KYrjTdVGjFMtaxERSk3gphreJ5US8aUP', 'bitcoin')
8
- expect(described_class).to be_valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'BTC')
9
- expect(described_class).to be_valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'Bitcoin')
10
- expect(described_class).to be_valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'btc')
11
- expect(described_class).to be_valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'btc', :hash160)
12
-
13
- # testnet
14
- expect(described_class).to be_valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'bitcoin', 'hash160test')
15
- expect(described_class).to be_valid('mv4rnyY3Su5gjcDNzbMLKBQkBicCtHUtFB', :btc)
16
- end
17
-
18
- it 'validates p2sh addresses' do
19
- expect(described_class).to be_valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'BTC')
20
- expect(described_class).to be_valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'bitcoin', 'p2sh')
21
-
22
- # testnet
23
- expect(described_class).to be_valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'btc')
24
- expect(described_class).to be_valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'bitcoin', 'p2shtest')
25
- end
26
-
27
- it 'validates segwit addresses' do
28
- expect(described_class).to be_valid('BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4', 'BTC')
29
- expect(described_class).to be_valid('bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', 'bitcoin')
30
- expect(described_class).to be_valid('bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', 'bitcoin', :segwit_v0_keyhash)
31
- expect(described_class).to be_valid('bc1qc7slrfxkknqcq2jevvvkdgvrt8080852dfjewde450xdlk4ugp7szw5tk9', 'BTC')
32
- expect(described_class).to be_valid('bc1qc7slrfxkknqcq2jevvvkdgvrt8080852dfjewde450xdlk4ugp7szw5tk9', 'bitcoin', :segwit_v0_scripthash)
33
- end
34
-
35
- it 'validates taproot addresses' do
36
- expect(described_class).to be_valid('bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr', 'bitcoin')
37
- expect(described_class).to be_valid('bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr', 'BTC', :taproot)
38
- end
39
-
40
- it 'validates wrong addresses' do
41
- expect(described_class).not_to be_valid('asdf', :bitcoin)
42
- expect(described_class).not_to be_valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'bitcoin', :segwit_v0_keyhash)
43
- expect(described_class).not_to be_valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'bitcoin', 'asdf')
44
- expect(described_class).not_to be_valid('tc1qw508d6qejxtdg4y5r3zarvary0c5xw7kg3g4ty', :bitcoin)
45
- expect(described_class).not_to be_valid('bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t5', 'bitcoin')
46
- expect(described_class).not_to be_valid('BC13W508D6QEJXTDG4Y5R3ZARVARY0C5XW7KN40WF2', 'bitcoin')
47
- expect(described_class).not_to be_valid('bc1rw5uspcuh', 'bitcoin')
48
- expect(described_class).not_to be_valid('bc10w508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7kw5rljs90', 'bitcoin')
49
- expect(described_class).not_to be_valid('BC1QR508D6QEJXTDG4Y5R3ZARVARYV98GJ9P', 'bitcoin')
50
- expect(described_class).not_to be_valid('tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sL5k7', 'BTC')
51
- expect(described_class).not_to be_valid('bc1zw508d6qejxtdg4y5r3zarvaryvqyzf3du', 'bitcoin')
52
- expect(described_class).not_to be_valid('tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3pjxtptv', 'Bitcoin')
53
- expect(described_class).not_to be_valid('bc1gmk9yu', 'bitcoin')
54
- expect(described_class).not_to be_valid('bc1p5d7rjq7g6rdk2yhzks9smlqfpuecypus6uf4e9qrsssrwc09', 'bitcoin') # invalid checksum
55
- expect(described_class).not_to be_valid('bc1p5d7rjq7g6rdk2yhzks9smlqfpuecypus6uf4e9qrsssrwc0', 'bitcoin') # too short
56
- end
57
- end
58
-
59
- context 'Bitcoincash' do
60
- it 'validates legacy addresses' do
61
- expect(described_class).to be_valid('3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC', :bch, :p2sh)
62
- expect(described_class).to be_valid('155fzsEBHy9Ri2bMQ8uuuR3tv1YzcDywd4', 'bitcoincash', :p2pkh)
63
- expect(described_class).to be_valid('2MzQwSSnBHWHqSAqtTVQ6v47XtaisrJa1Vc', 'BCH', :p2shtest)
64
- expect(described_class).to be_valid('mmRH4e9WW4ekZUP5HvBScfUyaSUjfQRyvD', :BCH, :p2pkhtest)
65
- end
66
-
67
- it 'validates cash addresses' do
68
- expect(described_class).to be_valid('bitcoincash:qqkv9wr69ry2p9l53lxp635va4h86wv435995w8p2h', :bch, :p2pkh)
69
- expect(described_class).to be_valid('bitcoincash:pqdg9uq52wzhf228hweext9j2jdjgdpj9qt7xxfngd', :bitcoincash, :p2sh)
70
- expect(described_class).to be_valid('bchtest:qpqtmmfpw79thzq5z7s0spcd87uhn6d34uqqem83hf', :Bitcoincash, :p2pkhtest)
71
- expect(described_class).to be_valid('bchtest:pp8f7ww2g6y07ypp9r4yendrgyznysc9kqxh6acwu3', :BCH, :p2shtest)
72
- expect(described_class).to be_valid('bitcoincash:qrtj3rd8524cndt2eew3s6wljqggmne00sgh4kfypk', :bitcoincash)
73
- end
74
-
75
- it 'validates cash addresses without prefix addresses' do
76
- expect(described_class).to be_valid('qrtj3rd8524cndt2eew3s6wljqggmne00sgh4kfypk', :bitcoincash)
77
- expect(described_class).to be_valid('pqdg9uq52wzhf228hweext9j2jdjgdpj9qt7xxfngd', :bitcoincash, :p2sh)
78
- end
79
-
80
- it 'validates wrong addresses' do
81
- expect(described_class).not_to be_valid('bitcoincash:qqkv9wr69ry2p9l53lxP635va4h86wv435995w8p2H', :bch)
82
- expect(described_class).not_to be_valid('wrong', :bch)
83
- expect(described_class).not_to be_valid('bitcoincash:wrong', :bch)
84
- expect(described_class).not_to be_valid('bitcoincash:123', :bch)
85
-
86
- expect(described_class).not_to be_valid('bitcoincash:qqkv9wr69ry2p9l53lxp635va4h86wv435995w8p2h', :bch, :p2pkhtest)
87
- expect(described_class).not_to be_valid('bitcoincash:pqdg9uq52wzhf228hweext9j2jdjgdpj9qt7xxfngd', :bitcoincash, :p2pkhtest)
88
- expect(described_class).not_to be_valid('bchtest:qpqtmmfpw79thzq5z7s0spcd87uhn6d34uqqem83hf', :Bitcoincash, :p2sh)
89
- expect(described_class).not_to be_valid('bchtest:pp8f7ww2g6y07ypp9r4yendrgyznysc9kqxh6acwu3', :BCH, :p2sh)
90
- end
91
- end
92
-
93
- context 'Ethereum' do
94
- it 'validates addresses' do
95
- expect(described_class).to be_valid('0xE37c0D48d68da5c5b14E5c1a9f1CFE802776D9FF', 'ethereum')
96
- expect(described_class).to be_valid('0xa00354276d2fC74ee91e37D085d35748613f4748', :ethereum)
97
- expect(described_class).to be_valid('0xAff4d6793F584a473348EbA058deb8caad77a288', :ETH)
98
- expect(described_class).to be_valid('0xc6d9d2cd449a754c494264e1809c50e34d64562b', 'ETH')
99
- expect(described_class).to be_valid('0x52908400098527886E0F7030069857D2E4169EE7', 'ETH')
100
- expect(described_class).to be_valid('0x8617E340B3D01FA5F11F306F4090FD50E238070D', 'ETH')
101
- expect(described_class).to be_valid('0xde709f2102306220921060314715629080e2fb77', 'ETH')
102
- end
103
-
104
- it 'validates without prefixes addresses' do
105
- expect(described_class).to be_valid('27b1fdb04752bbc536007a920d24acb045561c26', 'ETH')
106
- expect(described_class).to be_valid('5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed', 'ETH')
107
- expect(described_class).to be_valid('fB6916095ca1df60bB79Ce92cE3Ea74c37c5d359', 'ETH')
108
- expect(described_class).to be_valid('dbF03B407c01E7cD3CBea99509d93f8DDDC8C6FB', 'ETH')
109
- expect(described_class).to be_valid('D1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb', 'ETH')
110
- end
111
-
112
- it 'validates wrong addresses' do
113
- expect(described_class).not_to be_valid('wrong', :ETH)
114
- expect(described_class).not_to be_valid('0xD1110A0cf47c7B9Be7A2E6BA89F429762e7b9aDb', 'ETH')
115
- expect(described_class).not_to be_valid('a10354276d2fC74ee91e37D085d35748613f4748', :ethereum)
116
- end
117
- end
118
-
119
- context 'Ripple' do
120
- it 'validates addresses' do
121
- expect(described_class).to be_valid('rPMLwSwyyULN2acf5JKB1nj8F8Eu8pVMV8', :ripple)
122
- expect(described_class).to be_valid('rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn', :ripple)
123
- expect(described_class).to be_valid('rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn', 'RIPPLE')
124
- expect(described_class).to be_valid('r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV', 'XRP')
125
- expect(described_class).to be_valid('rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh', :XRP)
126
- expect(described_class).to be_valid('rDTXLQ7ZKZVKz33zJbHjgVShjsBnqMBhmN', 'XRP')
127
- end
128
-
129
- it 'validates wrong addresses' do
130
- expect(described_class).not_to be_valid('wrong', :xrp)
131
- expect(described_class).not_to be_valid('r3kmLJN5D28dHuH8vZNUZpMC43pEHpaoc1', :xrp)
132
- expect(described_class).not_to be_valid('r1kmLJN5D28dHuH8vZNUZpMC43pEHpaocV', 'ripple')
133
- end
134
- end
135
-
136
- context 'Dash' do
137
- it 'validates addresses' do
138
- expect(described_class).to be_valid('Xx4dYKgz3Zcv6kheaqog3fynaKWjbahb6b', :dash)
139
- expect(described_class).to be_valid('XcY4WJ6Z2Q8w7vcYER1JypC8s2oa3SQ1b1', 'DASH')
140
- expect(described_class).to be_valid('XqMkVUZnqe3w4xvgdZRtZoe7gMitDudGs4', 'DASH', :prod)
141
- expect(described_class).to be_valid('yPv7h2i8v3dJjfSH4L3x91JSJszjdbsJJA', :DASH, 'test')
142
- end
143
-
144
- it 'validates wrong addresses' do
145
- expect(described_class).not_to be_valid('wrong', :dash)
146
- expect(described_class).not_to be_valid('yPv7h2i8v3dJ1fSH4L3x91JSJszjdbsJJA', :dash)
147
- expect(described_class).not_to be_valid('XqMkVUZnqe3w4xvgdZRtZoe7gMitDudGs4', 'dash', :test)
148
- expect(described_class).not_to be_valid('yPv7h2i8v3dJjfSH4L3x91JSJszjdbsJJA', :DASH, :prod)
149
- end
150
- end
151
-
152
- context 'Zcash' do
153
- it 'validates addresses' do
154
- expect(described_class).to be_valid('t1U9yhDa5XEjgfnTgZoKddeSiEN1aoLkQxq', :zec)
155
- expect(described_class).to be_valid('t3Vz22vK5z2LcKEdg16Yv4FFneEL1zg9ojd', 'zcash', :prod)
156
- expect(described_class).to be_valid('t2UNzUUx8mWBCRYPRezvA363EYXyEpHokyi', 'ZEC', :test)
157
- end
158
-
159
- it 'validates wrong addresses' do
160
- expect(described_class).not_to be_valid('wrong', :zec)
161
- expect(described_class).not_to be_valid('t1Y9yhDa5XEjgfnTgZoKddeSiEN1aoLkQxq', :zcash)
162
- expect(described_class).not_to be_valid('t3Yz22vK5z2LcKEdg16Yv4FFneEL1zg9ojd', :ZEC)
163
- expect(described_class).not_to be_valid('t2YNzUUx8mWBCRYPRezvA363EYXyEpHokyi', :zcash, :test)
164
- end
165
- end
166
-
167
- context 'Litecoin' do
168
- it 'validates addresses' do
169
- expect(described_class).to be_valid('LVg2kJoFNg45Nbpy53h7Fe1wKyeXVRhMH9', :ltc)
170
- expect(described_class).to be_valid('LVg2kJoFNg45Nbpy53h7Fe1wKyeXVRhMH9', 'ltc', :prod)
171
- expect(described_class).to be_valid('LTpYZG19YmfvY2bBDYtCKpunVRw7nVgRHW', 'LTC')
172
- expect(described_class).to be_valid('Lb6wDP2kHGyWC7vrZuZAgV7V4ECyDdH7a6', 'Litecoin')
173
- expect(described_class).to be_valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'Litecoin', :test)
174
-
175
- expect(described_class).to be_valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'LTC')
176
- expect(described_class).to be_valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'LTC', :test)
177
- expect(described_class).to be_valid('QW2SvwjaJU8LD6GSmtm1PHnBG2xPuxwZFy', 'LTC', :test)
178
- expect(described_class).to be_valid('QjpzxpbLp5pCGsCczMbfh1uhC3P89QZavY', 'LTC', :test)
179
- expect(described_class).to be_valid('tltc1pxdvk48nchp45mcg8pcht5ss8ladtxnl7mkr96lrw93q79g407ufqmelwuu', 'LTC', :test)
180
- expect(described_class).to be_valid('tltc1pxdvk48nchp45mcg8pcht5ss8ladtxnl7mkr96lrw93q79g407ufqmelwuu', 'LTC')
181
- end
182
-
183
- it 'validates wrong addresses' do
184
- expect(described_class).not_to be_valid('wrong', :zec)
185
- expect(described_class).not_to be_valid('t1Y9yhDa5XEjgfnTgZoKddeSiEN1aoLkQxq', :zcash)
186
- expect(described_class).not_to be_valid('t3Yz22vK5z2LcKEdg16Yv4FFneEL1zg9ojd', :ZEC)
187
- expect(described_class).not_to be_valid('t2YNzUUx8mWBCRYPRezvA363EYXyEpHokyi', :zcash, :test)
188
- expect(described_class).not_to be_valid('tltc1pxdvk48nchp45mcg8pcht5ss8ladtxnl7mkr96lrw93q79g407ufqmelwuu', 'LTC', :prod)
189
- expect(described_class).not_to be_valid('tltc1Pxdvk48nchp45mcg8pcht5ss8ladtxnl7mkr96lrw93q79g407ufqmelwuu', 'LTC')
190
- end
191
- end
192
-
193
- context 'Toncoin' do
194
- it 'validates addresses' do
195
- expect(described_class).to be_valid('UQCScs4HjjwnlIFKIq_juiuLLLnjJKTjQyfcADjYNvdYwn-l', :TON)
196
- end
197
-
198
- it 'validates wrong addresses' do
199
- expect(described_class).not_to be_valid('wrongFKIq_juiuLLLnjJKTjQyfcAD', :TON)
200
- end
201
- end
202
-
203
- context 'Monero' do
204
- it 'validates addresses' do
205
- expect(described_class).to be_valid('4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQVmzCh57', :XMR)
206
- expect(described_class).to be_valid('4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQVmzCh57', :monero)
207
- expect(described_class).to be_valid('4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQVmzCh57', :Xmr)
208
- expect(described_class).to be_valid('4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQVmzCh57', :xmr)
209
- expect(described_class).to be_valid('4TZ76dT4mbsizsTtJzy7kYBo9f8xduc8wTsWb86pCmx5Cmh43CDxNS1FRcMrE3CNQ2ZT17vzCudc5TbNYBzizwqZFah5K1Js7VpL88qPSi', :monero)
210
- expect(described_class).to be_valid('4TZ76dT4mbsizsTtJzy7kYBo9f8xduc8wTsWb86pCmx5Cmh43CDxNS1FRcMrE3CNQ2ZT17vzCudc5TbNYBzizwqZFah5K1Js7VpL88qPSi', :Xmr)
211
- expect(described_class).to be_valid('4TZ76dT4mbsizsTtJzy7kYBo9f8xduc8wTsWb86pCmx5Cmh43CDxNS1FRcMrE3CNQ2ZT17vzCudc5TbNYBzizwqZFah5K1Js7VpL88qPSi', :Xmr)
212
- expect(described_class).to be_valid('4TZ76dT4mbsizsTtJzy7kYBo9f8xduc8wTsWb86pCmx5Cmh43CDxNS1FRcMrE3CNQ2ZT17vzCudc5TbNYBzizwqZFah5K1Js7VpL88qPSi', :xmr)
213
- expect(described_class).to be_valid('8BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQVmzCh57', :xmr)
214
- expect(described_class).to be_valid('8TZ76dT4mbsizsTtJzy7kYBo9f8xduc8wTsWb86pCmx5Cmh43CDxNS1FRcMrE3CNQ2ZT17vzCudc5TbNYBzizwqZFah5K1Js7VpL88qPSi', :monero)
215
- end
216
-
217
- it 'validates wrong addresses' do
218
- expect(described_class).not_to be_valid('NOT_VALID_4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjp', :monero)
219
- expect(described_class).not_to be_valid('NOT_VALID_4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjp', :Xmr)
220
- expect(described_class).not_to be_valid('NOT_VALID_4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjp', :XMR)
221
- expect(described_class).not_to be_valid('NOT_VALID_4BKnGLZNZ5pjpXCZedGfVQjpXCZedGfVQjp', :xmr)
222
- end
223
- end
224
- end
225
-
226
- describe '.address' do
227
- it 'returns insance' do
228
- expect(described_class.address('D1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb', 'eth')).to be_kind_of(AdequateCryptoAddress::Eth)
229
- end
230
-
231
- it 'raises UnknownCurrency with unknown currency' do
232
- expect { described_class.address('addr', 'asdf') }.to raise_error(AdequateCryptoAddress::UnknownCurrency, /asdf/)
233
- end
234
- end
235
- end
data/spec/spec_helper.rb DELETED
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'coveralls'
4
- Coveralls.wear!
5
-
6
- $LOAD_PATH.unshift File.dirname(__FILE__)
7
- require 'rspec'
8
- require 'adequate_crypto_address'
9
-
10
- RSpec.configure do |config|
11
- # Enable flags like --only-failures and --next-failure
12
- config.example_status_persistence_file_path = '.rspec_status'
13
-
14
- config.order = :random
15
- config.filter_run :focus
16
- config.run_all_when_everything_filtered = true
17
- end