crypto-unit 0.3.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2de75699f62f03becfbc70ccee8a49f134a5c0a1
4
+ data.tar.gz: 0450a1a6a2d3ffad8feec23b219122e74ed1eee1
5
+ SHA512:
6
+ metadata.gz: bfcd8106763223c3135301730eeb04d0eafa28bee87c91fd18eba21ff96df3d2054c2d5d197c63a6c31b6a144b62121bfec5807e41f58668cedf2c41a2c176dd
7
+ data.tar.gz: a88588c40850735ba067c2c26198e02323b93bc0f9e0c93bc2589ea15e80ad5ae01fcb09a11e35e53a5d56320afec4f43af981eb886095c1b6dd51fcbe9d94f2
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source "http://rubygems.org"
2
+
3
+ group :development do
4
+ gem "bundler", "~> 1.0"
5
+ gem "jeweler", "~> 2.1.2"
6
+ gem "rspec"
7
+ end
@@ -0,0 +1,75 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.5.0)
5
+ public_suffix (~> 2.0, >= 2.0.2)
6
+ builder (3.2.2)
7
+ descendants_tracker (0.0.4)
8
+ thread_safe (~> 0.3, >= 0.3.1)
9
+ diff-lcs (1.2.5)
10
+ faraday (0.9.2)
11
+ multipart-post (>= 1.2, < 3)
12
+ git (1.3.0)
13
+ github_api (0.11.3)
14
+ addressable (~> 2.3)
15
+ descendants_tracker (~> 0.0.1)
16
+ faraday (~> 0.8, < 0.10)
17
+ hashie (>= 1.2)
18
+ multi_json (>= 1.7.5, < 2.0)
19
+ nokogiri (~> 1.6.0)
20
+ oauth2
21
+ hashie (3.4.6)
22
+ highline (1.7.8)
23
+ jeweler (2.1.2)
24
+ builder
25
+ bundler (>= 1.0)
26
+ git (>= 1.2.5)
27
+ github_api (~> 0.11.0)
28
+ highline (>= 1.6.15)
29
+ nokogiri (>= 1.5.10)
30
+ rake
31
+ rdoc
32
+ semver
33
+ jwt (1.5.6)
34
+ mini_portile2 (2.1.0)
35
+ multi_json (1.12.1)
36
+ multi_xml (0.5.5)
37
+ multipart-post (2.0.0)
38
+ nokogiri (1.6.8.1)
39
+ mini_portile2 (~> 2.1.0)
40
+ oauth2 (1.2.0)
41
+ faraday (>= 0.8, < 0.10)
42
+ jwt (~> 1.0)
43
+ multi_json (~> 1.3)
44
+ multi_xml (~> 0.5)
45
+ rack (>= 1.2, < 3)
46
+ public_suffix (2.0.3)
47
+ rack (2.0.1)
48
+ rake (11.3.0)
49
+ rdoc (5.0.0)
50
+ rspec (3.5.0)
51
+ rspec-core (~> 3.5.0)
52
+ rspec-expectations (~> 3.5.0)
53
+ rspec-mocks (~> 3.5.0)
54
+ rspec-core (3.5.4)
55
+ rspec-support (~> 3.5.0)
56
+ rspec-expectations (3.5.0)
57
+ diff-lcs (>= 1.2.0, < 2.0)
58
+ rspec-support (~> 3.5.0)
59
+ rspec-mocks (3.5.0)
60
+ diff-lcs (>= 1.2.0, < 2.0)
61
+ rspec-support (~> 3.5.0)
62
+ rspec-support (3.5.0)
63
+ semver (1.0.1)
64
+ thread_safe (0.3.5)
65
+
66
+ PLATFORMS
67
+ ruby
68
+
69
+ DEPENDENCIES
70
+ bundler (~> 1.0)
71
+ jeweler (~> 2.1.2)
72
+ rspec
73
+
74
+ BUNDLED WITH
75
+ 1.12.4
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2014 Roman Snitko
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,69 @@
1
+ Crypto Unit
2
+ ================
3
+ This tiny gem allows you to make easy conversions from one Bitcoin or Litecoin denomination into another.
4
+ It provides a class, which objects would essentially represent an amount of litecoins measured
5
+ in the smallest possible denomination, which is Satoshi for BTC and Litoshi for LTC. You can then call methods on these objects
6
+ to convert it various other denominations.
7
+
8
+ ### Installation
9
+
10
+ gem install crypto-unit
11
+
12
+ ### Usage
13
+
14
+ Here's how it might look:
15
+
16
+ s = Satoshi.new(1) # By default, it accepts amounts in BTC denomination
17
+ s.to_i # => 100000000 (in Satoshis)
18
+ s.to_milli # => 1000.0
19
+ s.to_standart # => 1.0
20
+
21
+ When creating a Satoshi / Litoshi object, you can also specify which unit is being used to pass the amount,
22
+ for example:
23
+
24
+ s = Litoshi.new(1, from_unit: :milli)
25
+
26
+ s.to_i # => 100000
27
+ s.to_milli # => 1.0
28
+ s.to_standart # => 0.001
29
+
30
+ There's also a special method which is called `#to_unit`, it always converts to the denomination
31
+ specified in the `:to_unit` option in the constructor. It becomes really handy when you want to
32
+ specify your preferred denomination used througout the program in just one place
33
+ (to be able to change it later):
34
+
35
+ DENOMINATION = :milli
36
+ s = Litoshi.new(1, from_unit: DENOMINATION, to_unit: DENOMINATION)
37
+ s.to_unit # => 1.0 (in mLTC)
38
+
39
+ This can be shortened to just the `:unit` option:
40
+
41
+ s = Litoshi.new(1, unit: DENOMINATION)
42
+
43
+ But, of course, if you want your "from" denomination and "to" denomination to be different, then
44
+ you'd have to pass them both manually:
45
+
46
+ s = Satoshi.new(1, from_unit: :milli, to_unit: :standart)
47
+ s.to_unit # => 0.001
48
+
49
+
50
+
51
+ ###Comparing units
52
+
53
+ CryptoUnit objects come with methods and coercions for comparing itself with both other CyptoUnit objects and also numeric values:
54
+
55
+ s1 = Litoshi.new(1)
56
+ s2 = Litoshi.new(2)
57
+
58
+ s1 > s2 # => false
59
+ s1 < s2 # => true
60
+ s1 == s2 # => false
61
+
62
+ s1 > 1 # => true
63
+ 1 > s2 # => false
64
+
65
+
66
+ ### Unit tests
67
+
68
+
69
+ Run `rspec spec`. Pull requests with more unit tests are welcome.
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
+ gem.name = "crypto-unit"
18
+ gem.homepage = "http://github.com/mgpnd/crypto-unit"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Converts various BTC and LTC denominations}
21
+ gem.description = %Q{Converts various BTC and LTC denominations}
22
+ gem.email = "roman.snitko@gmail.com"
23
+ gem.authors = ["Roman Snitko"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.3.0
@@ -0,0 +1,60 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: crypto-unit 0.3.0 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "crypto-unit".freeze
9
+ s.version = "0.3.0"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["Roman Snitko".freeze]
14
+ s.date = "2017-07-18"
15
+ s.description = "Converts various BTC and LTC denominations".freeze
16
+ s.email = "roman.snitko@gmail.com".freeze
17
+ s.extra_rdoc_files = [
18
+ "LICENSE.txt",
19
+ "README.md"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ ".rspec",
24
+ "Gemfile",
25
+ "Gemfile.lock",
26
+ "LICENSE.txt",
27
+ "README.md",
28
+ "Rakefile",
29
+ "VERSION",
30
+ "crypto-unit.gemspec",
31
+ "lib/crypto-unit.rb",
32
+ "lib/crypto_unit_base.rb",
33
+ "lib/litoshi.rb",
34
+ "lib/satoshi.rb",
35
+ "spec/crypto_unit_base_spec.rb"
36
+ ]
37
+ s.homepage = "http://github.com/mgpnd/crypto-unit".freeze
38
+ s.licenses = ["MIT".freeze]
39
+ s.rubygems_version = "2.6.12".freeze
40
+ s.summary = "Converts various BTC and LTC denominations".freeze
41
+
42
+ if s.respond_to? :specification_version then
43
+ s.specification_version = 4
44
+
45
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
+ s.add_development_dependency(%q<bundler>.freeze, ["~> 1.0"])
47
+ s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.1.2"])
48
+ s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
49
+ else
50
+ s.add_dependency(%q<bundler>.freeze, ["~> 1.0"])
51
+ s.add_dependency(%q<jeweler>.freeze, ["~> 2.1.2"])
52
+ s.add_dependency(%q<rspec>.freeze, [">= 0"])
53
+ end
54
+ else
55
+ s.add_dependency(%q<bundler>.freeze, ["~> 1.0"])
56
+ s.add_dependency(%q<jeweler>.freeze, ["~> 2.1.2"])
57
+ s.add_dependency(%q<rspec>.freeze, [">= 0"])
58
+ end
59
+ end
60
+
@@ -0,0 +1,7 @@
1
+ # This is just a file of the same name as gem so that it is
2
+ # auto required when the gem is loaded and we load existing crypto units.
3
+
4
+ require 'bigdecimal'
5
+ require_relative './crypto_unit_base'
6
+ require_relative './satoshi'
7
+ require_relative './litoshi'
@@ -0,0 +1,164 @@
1
+ class CryptoUnit
2
+ # Says how many digits after the decimal point
3
+ # a denomination has.
4
+ UNIT_DENOMINATIONS = {
5
+ standart: 8,
6
+ milli: 5,
7
+ primary: 0,
8
+ }
9
+
10
+ MAX_VALUE = 0
11
+ NAME = ''
12
+
13
+ class TooManyDigitsAfterDecimalPoint < Exception;end
14
+ class TooLarge < Exception;end
15
+
16
+ attr_reader :value, :from_unit, :to_unit
17
+
18
+ def initialize(n=nil, from_unit: 'standart', to_unit: 'standart', unit: nil)
19
+ n = 0 if n.nil?
20
+ if unit
21
+ @from_unit = @to_unit = unit.downcase.to_sym
22
+ else
23
+ @from_unit = from_unit.downcase.to_sym
24
+ @to_unit = to_unit.downcase.to_sym
25
+ end
26
+ @value = convert_to_primary(n) if n
27
+ end
28
+
29
+ def to_standart(as: :number)
30
+ to_denomination(UNIT_DENOMINATIONS[:standart], as: as)
31
+ end
32
+
33
+ def to_milli(as: :number)
34
+ to_denomination(UNIT_DENOMINATIONS[:milli], as: as)
35
+ end
36
+
37
+ def to_unit(as: :number)
38
+ to_denomination(UNIT_DENOMINATIONS[@to_unit], as: as)
39
+ end
40
+
41
+ def to_i
42
+ return 0 if @value.nil?
43
+ @value
44
+ end
45
+ alias :primary_value :to_i
46
+
47
+ def to_s
48
+ to_unit.to_s
49
+ end
50
+
51
+ def value=(n)
52
+ n = 0 if n.nil?
53
+ @value = convert_to_primary(n)
54
+ end
55
+
56
+ def primary_value=(v)
57
+ @value = v
58
+ end
59
+
60
+ def >(i)
61
+ self.to_i > i
62
+ end
63
+
64
+ def <(i)
65
+ self.to_i < i
66
+ end
67
+
68
+ def >=(i)
69
+ self.to_i >= i
70
+ end
71
+
72
+ def <=(i)
73
+ self.to_i <= i
74
+ end
75
+
76
+ def ==(i)
77
+ self.to_i == i
78
+ end
79
+
80
+ def +(i)
81
+ if i.kind_of?(CryptoUnit)
82
+ self.class.new(self.to_i + i, from_unit: :primary)
83
+ else
84
+ self.to_i + i
85
+ end
86
+ end
87
+
88
+ def -(i)
89
+ if i.kind_of?(CryptoUnit)
90
+ self.class.new(self.to_i - i, from_unit: :primary)
91
+ else
92
+ self.to_i - i
93
+ end
94
+ end
95
+
96
+ # IMPORTANT: multiplication is done on primary units, not standart.
97
+ # 0.01*0.02 will be a larger value.
98
+ def *(i)
99
+ if i.kind_of?(CryptoUnit)
100
+ self.class.new(self.to_i * i, from_unit: :primary)
101
+ else
102
+ self.to_i * i
103
+ end
104
+ end
105
+
106
+ def coerce(other)
107
+ if other.kind_of?(Integer)
108
+ [other, self.to_i]
109
+ else
110
+ raise TypeError, message: "CryptoUnit cannot be coerced into anything but Integer"
111
+ end
112
+ end
113
+
114
+ protected
115
+
116
+ def to_denomination(digits_after_delimiter, as: :number)
117
+ sign = @value < 0 ? -1 : 1
118
+ val = @value.abs
119
+ return val if digits_after_delimiter <= 0
120
+ leading_zeros = "0"*(18-val.to_s.length)
121
+ result = leading_zeros + val.to_s
122
+ result.reverse!
123
+ result = result.slice(0..digits_after_delimiter-1) + '.' + result.slice(digits_after_delimiter..17)
124
+ result.reverse!
125
+ result = result.sub(/\A0*/, '').sub(/0*\Z/, '') # remove zeros on both sides
126
+ if as == :number
127
+ result.to_f*sign
128
+ else
129
+ if result == '.'
130
+ result = '0.0'
131
+ elsif result =~ /\A\./
132
+ result = "0#{result}"
133
+ end
134
+ sign == -1 ? "-#{result}" : result
135
+ end
136
+ end
137
+
138
+ def convert_to_primary(n)
139
+ n = BigDecimal.new(n.to_s)
140
+
141
+ decimal_part_length = n.to_s("F").split(".")[1]
142
+ decimal_part_length = if decimal_part_length
143
+ decimal_part_length.sub(/0*\Z/, "").length
144
+ else
145
+ 0
146
+ end
147
+
148
+ if decimal_part_length > UNIT_DENOMINATIONS[@from_unit]
149
+ raise TooManyDigitsAfterDecimalPoint,
150
+ "Too many digits (#{decimal_part_length}) after decimal point used for #{@from_unit} value, while #{UNIT_DENOMINATIONS[@from_unit]} allowed"
151
+ end
152
+
153
+ n = ("%.#{UNIT_DENOMINATIONS[@from_unit]}f" % n) # otherwise we might see a scientific notation
154
+ n = n.split('.')
155
+ n[1] ||= '' # in the case where there's no decimal part
156
+ n[1] += "0"*(UNIT_DENOMINATIONS[@from_unit]-n[1].length) if n[1]
157
+
158
+ if(n.join.to_i > self.class::MAX_VALUE)
159
+ raise TooLarge, "Max value for #{self.class::NAME} is #{self.class::MAX_VALUE}"
160
+ end
161
+
162
+ n.join.to_i
163
+ end
164
+ end
@@ -0,0 +1,4 @@
1
+ class LitoshiUnit < CryptoUnit
2
+ NAME = "Litoshi"
3
+ MAX_VALUE = 84_000_000_00000000
4
+ end
@@ -0,0 +1,4 @@
1
+ class SatoshiUnit < CryptoUnit
2
+ NAME = "Satoshi"
3
+ MAX_VALUE = 21_000_000_00000000
4
+ end
@@ -0,0 +1,96 @@
1
+ require_relative '../lib/crypto-unit'
2
+ require_relative '../lib/satoshi'
3
+ require_relative '../lib/litoshi'
4
+
5
+ describe CryptoUnit do
6
+
7
+ it "creates a Bignum representing value in primary units" do
8
+ expect(Satoshi.new(1.00).to_i).to eq(100000000)
9
+ end
10
+
11
+ it "takes care of the sign before the value" do
12
+ expect(Satoshi.new(-1.00).to_i).to eq(-100000000)
13
+ end
14
+
15
+ it "converts primary unit back to some more common denomination" do
16
+ expect(Satoshi.new(1.00).to_standart).to eq(1)
17
+ expect(Satoshi.new(1.08763).to_standart).to eq(1.08763)
18
+ expect(Satoshi.new(1.08763).to_milli).to eq(1087.63)
19
+ expect(Satoshi.new(-1.08763).to_milli).to eq(-1087.63)
20
+ expect(Satoshi.new(0.00000001).to_i).to eq(1)
21
+ expect(Satoshi.new(0.00000001).to_milli).to eq(0.00001)
22
+ end
23
+
24
+ it "converts from various source denominations" do
25
+ expect(Satoshi.new(1, unit: 'milli').to_standart).to eq(0.001)
26
+ expect(Satoshi.new(1, unit: 'milli').to_unit).to eq(1)
27
+ expect(Satoshi.new(10000000, unit: 'milli').to_unit).to eq(10000000)
28
+ satoshi = Satoshi.new(10000000, unit: 'milli')
29
+ satoshi.primary_value = 1
30
+ expect(satoshi.to_unit).to eq(0.00001)
31
+ expect(Satoshi.new(100, unit: 'milli').to_i).to eq(10000000)
32
+ end
33
+
34
+ it "treats nil in value as 0" do
35
+ expect(Satoshi.new < 1).to be_truthy
36
+ expect(Satoshi.new > 1).to be_falsy
37
+ expect(Satoshi.new == 0).to be_truthy
38
+ end
39
+
40
+ it "converts negative values correctly" do
41
+ expect(Satoshi.new(-1.00, unit: :milli).to_standart).to eq(-0.001)
42
+ end
43
+
44
+ it "converts zero values correctly" do
45
+ expect(Satoshi.new(0, unit: :milli).to_unit).to eq(0)
46
+ end
47
+
48
+ it "converts nil values correctly" do
49
+ s = Satoshi.new(nil, unit: :milli)
50
+ expect(s.value).to eq(0)
51
+ s.value = nil
52
+ expect(s.to_unit).to eq(0)
53
+ end
54
+
55
+ it "displays one primary unit in human form, not math form" do
56
+ one_satoshi = Satoshi.new(1, from_unit: :primary, to_unit: :standart)
57
+ expect(one_satoshi.to_unit(as: :string)).not_to eq('1.0e-08')
58
+ expect(one_satoshi.to_unit(as: :string)).to eq('0.00000001')
59
+ end
60
+
61
+ it "displays zero units in human form, not math form" do
62
+ zero_satoshi = Satoshi.new(0, from_unit: :primary, to_unit: :standart)
63
+ expect(zero_satoshi.to_unit(as: :string)).to eq('0.0')
64
+ end
65
+
66
+ it "raises exception if decimal part contains more digits than allowed by from_value" do
67
+ expect( -> { Satoshi.new(0.001000888888888888888, from_unit: :standart).to_unit }).to raise_exception(CryptoUnit::TooManyDigitsAfterDecimalPoint)
68
+ expect( -> { Satoshi.new("0.001000999999999999999", from_unit: :standart).to_unit }).to raise_exception(CryptoUnit::TooManyDigitsAfterDecimalPoint)
69
+ expect( -> { Satoshi.new(0.001000999, from_unit: :standart).to_unit }).to raise_exception(CryptoUnit::TooManyDigitsAfterDecimalPoint)
70
+ expect( -> { Satoshi.new(0.00100099, from_unit: :standart).to_unit }).not_to raise_exception
71
+ expect( -> { Satoshi.new(0.123456789, from_unit: :standart) }).to raise_exception(CryptoUnit::TooManyDigitsAfterDecimalPoint)
72
+ expect( -> { Satoshi.new(0.12345678, from_unit: :standart).to_unit }).not_to raise_exception
73
+ expect( -> { Satoshi.new(nil, from_unit: :standart).to_unit }).not_to raise_exception
74
+ end
75
+
76
+ it "Satoshi dissallows to create values more than 21mil BTC" do
77
+ expect( -> { Satoshi.new(21_000_001) }).to raise_exception(CryptoUnit::TooLarge)
78
+ expect( -> { Satoshi.new(21_000_000) }).not_to raise_exception
79
+ end
80
+
81
+ it "Litoshi disallows to create values more than 84mil LTC" do
82
+ expect( -> { Litoshi.new(84_000_001) }).to raise_exception(CryptoUnit::TooLarge)
83
+ expect( -> { Litoshi.new(84_000_000) }).not_to raise_exception
84
+ end
85
+
86
+ it "returns CryptoUnit for +,- and * methods if both operands are CryptoUnit" do
87
+ s1 = Satoshi.new(0.001, from_unit: :standart)
88
+ s2 = Satoshi.new(0.002, from_unit: :standart)
89
+ expect(s1+s2).to be_kind_of(Satoshi)
90
+ expect((s1+s2).to_unit).to eq(0.003)
91
+ expect(s2-s1).to be_kind_of(Satoshi)
92
+ expect((s2-s1).to_unit).to eq(0.001)
93
+ expect(s2*s1).to be_kind_of(Satoshi)
94
+ expect((s2*s1).to_unit).to eq(200)
95
+ end
96
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: crypto-unit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Roman Snitko
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-07-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: jeweler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.1.2
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.1.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Converts various BTC and LTC denominations
56
+ email: roman.snitko@gmail.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files:
60
+ - LICENSE.txt
61
+ - README.md
62
+ files:
63
+ - ".document"
64
+ - ".rspec"
65
+ - Gemfile
66
+ - Gemfile.lock
67
+ - LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - VERSION
71
+ - crypto-unit.gemspec
72
+ - lib/crypto-unit.rb
73
+ - lib/crypto_unit_base.rb
74
+ - lib/litoshi.rb
75
+ - lib/satoshi.rb
76
+ - spec/crypto_unit_base_spec.rb
77
+ homepage: http://github.com/mgpnd/crypto-unit
78
+ licenses:
79
+ - MIT
80
+ metadata: {}
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubyforge_project:
97
+ rubygems_version: 2.6.12
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: Converts various BTC and LTC denominations
101
+ test_files: []