rcore-ext 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +28 -0
- data/README.md +75 -0
- data/lib/rcore_ext.rb +3 -0
- data/lib/rcore_ext/string/format.rb +104 -0
- data/lib/rcore_ext/string/numeric.rb +43 -0
- data/lib/rcore_ext/version.rb +3 -0
- data/rcore-ext.gemspec +25 -0
- data/spec/rcore_ext/string/format_spec.rb +137 -0
- data/spec/rcore_ext/string/numeric_spec.rb +96 -0
- data/spec/spec_helper.rb +0 -0
- metadata +106 -0
data/.gitignore
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
rcore-ext (0.1.0)
|
5
|
+
base32
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
base32 (0.2.0)
|
11
|
+
diff-lcs (1.2.1)
|
12
|
+
rake (10.0.3)
|
13
|
+
rspec (2.13.0)
|
14
|
+
rspec-core (~> 2.13.0)
|
15
|
+
rspec-expectations (~> 2.13.0)
|
16
|
+
rspec-mocks (~> 2.13.0)
|
17
|
+
rspec-core (2.13.1)
|
18
|
+
rspec-expectations (2.13.0)
|
19
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
20
|
+
rspec-mocks (2.13.0)
|
21
|
+
|
22
|
+
PLATFORMS
|
23
|
+
ruby
|
24
|
+
|
25
|
+
DEPENDENCIES
|
26
|
+
rake
|
27
|
+
rcore-ext!
|
28
|
+
rspec
|
data/README.md
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
# Ruby Core Extensions
|
2
|
+
|
3
|
+
The `rcore_ext` gem extends several core classes
|
4
|
+
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
To install `rcore-ext`, run `gem install rcore-ext` or
|
9
|
+
|
10
|
+
add the following to your `Gemfile`:
|
11
|
+
|
12
|
+
gem 'rcore-ext'
|
13
|
+
|
14
|
+
Then bundle install:
|
15
|
+
|
16
|
+
bundle install
|
17
|
+
|
18
|
+
## Usage
|
19
|
+
|
20
|
+
Examples:
|
21
|
+
|
22
|
+
### Numeric methods
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
"1".is_integer? #=> true
|
26
|
+
"1.0".is_integer? #=> false
|
27
|
+
"not_numeric".is_integer? #=> false
|
28
|
+
```
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
"1".is_numeric? #=> true
|
32
|
+
"1.0".is_numeric? #=> true
|
33
|
+
"not_numeric".is_numeric? #=> false
|
34
|
+
```
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
"1".is_float? #=> false
|
38
|
+
"1.0".is_float? #=> true
|
39
|
+
"not_numeric".is_float? #=> false
|
40
|
+
```
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
"1".to_numeric #=> 1
|
44
|
+
"1".to_numeric.class #=> Fixnum
|
45
|
+
"1.0".to_numeric #=> 1.0
|
46
|
+
"1.0".to_numeric.class #=> Float
|
47
|
+
("1" * 10).to_numeric #=> 1111111111
|
48
|
+
("1" * 10).to_numeric.class #=> Bignum
|
49
|
+
"not_numeric".to_numeric #=> nil
|
50
|
+
```
|
51
|
+
|
52
|
+
### Decode/encode methods
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
"hello world!".decode_string(:hex) #=> 68656c6c6f20776f726c6421
|
56
|
+
"hi".decode_string(:bin) #=> 0110100001101001
|
57
|
+
|
58
|
+
"NBSWY3DPEB3W64TMMQQQ====".decode_string(:base32) #=> hello world!
|
59
|
+
"aGVsbG8gd29ybGQh\n".decode_string(:base64) #=> hello world!
|
60
|
+
|
61
|
+
"aGVsbG8gd29ybGQh".decode_string(:base64, strict: true) #=> hello world!
|
62
|
+
```
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
"68656c6c6f20776f726c6421".decode_string(:hex) #=> hello world!
|
66
|
+
"0110100001101001".decode_string(:bin) #=> hi
|
67
|
+
|
68
|
+
"hello world!".decode_string(:base32) #=> NBSWY3DPEB3W64TMMQQQ====
|
69
|
+
"hello world!".decode_string(:base64) #=> aGVsbG8gd29ybGQh\n
|
70
|
+
|
71
|
+
"hello world!".decode_string(:base64, strict: true) #=> aGVsbG8gd29ybGQh
|
72
|
+
```
|
73
|
+
|
74
|
+
|
75
|
+
## Feel free for pull requests!
|
data/lib/rcore_ext.rb
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'base32'
|
3
|
+
|
4
|
+
class String
|
5
|
+
@@common_formats = {bin: 'B*', hex: 'H*'}
|
6
|
+
|
7
|
+
# Decode string with various formats.
|
8
|
+
# Supported formats: :bin, :hex, :base32, :base64
|
9
|
+
#
|
10
|
+
# You can also pass options for Base64 to use
|
11
|
+
# * :strict
|
12
|
+
# * :url_safe
|
13
|
+
#
|
14
|
+
# "hello world!".decode_string(:hex) #=> 68656c6c6f20776f726c6421
|
15
|
+
# "hi".decode_string(:bin) #=> 0110100001101001
|
16
|
+
#
|
17
|
+
# "NBSWY3DPEB3W64TMMQQQ====".decode_string(:base32) #=> hello world!
|
18
|
+
# "aGVsbG8gd29ybGQh\n".decode_string(:base64) #=> hello world!
|
19
|
+
#
|
20
|
+
# "aGVsbG8gd29ybGQh".decode_string(:base64, strict: true) #=> hello world!
|
21
|
+
def decode_string(format, options={})
|
22
|
+
raise ArgumentError, "Format can't be empty" if format.nil?
|
23
|
+
format = format.to_sym
|
24
|
+
@options = options || {}
|
25
|
+
|
26
|
+
case format
|
27
|
+
when :base32
|
28
|
+
base32_decode
|
29
|
+
when :base64
|
30
|
+
base64_decode
|
31
|
+
else
|
32
|
+
raise ArgumentError, "Unsupported format: #{format}" unless @@common_formats.has_key?(format)
|
33
|
+
common_decode(format)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Encode string with various formats.
|
38
|
+
# Supported formats: :bin, :hex, :base32, :base64
|
39
|
+
#
|
40
|
+
# You can also pass options for Base64 to use
|
41
|
+
# * :strict
|
42
|
+
# * :url_safe
|
43
|
+
#
|
44
|
+
# "68656c6c6f20776f726c6421".decode_string(:hex) #=> hello world!
|
45
|
+
# "0110100001101001".decode_string(:bin) #=> hi
|
46
|
+
#
|
47
|
+
# "hello world!".decode_string(:base32) #=> NBSWY3DPEB3W64TMMQQQ====
|
48
|
+
# "hello world!".decode_string(:base64) #=> aGVsbG8gd29ybGQh\n
|
49
|
+
#
|
50
|
+
# "hello world!".decode_string(:base64, strict: true) #=> aGVsbG8gd29ybGQh
|
51
|
+
def encode_string(format, options={})
|
52
|
+
raise ArgumentError, "Format can't be empty" if format.nil?
|
53
|
+
format = format.to_sym
|
54
|
+
@options = options || {}
|
55
|
+
|
56
|
+
case format
|
57
|
+
when :base32
|
58
|
+
base32_encode
|
59
|
+
when :base64
|
60
|
+
base64_encode
|
61
|
+
else
|
62
|
+
raise ArgumentError, "Unsupported format: #{format}" unless @@common_formats.has_key?(format)
|
63
|
+
common_encode(format)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
def common_encode(format)
|
69
|
+
[self].pack(@@common_formats[format])
|
70
|
+
end
|
71
|
+
|
72
|
+
def common_decode(format)
|
73
|
+
self.unpack(@@common_formats[format]).first
|
74
|
+
end
|
75
|
+
|
76
|
+
def base32_encode
|
77
|
+
Base32.encode(self)
|
78
|
+
end
|
79
|
+
|
80
|
+
def base32_decode
|
81
|
+
Base32.decode(self)
|
82
|
+
end
|
83
|
+
|
84
|
+
def base64_encode
|
85
|
+
if @options[:strict]
|
86
|
+
Base64.strict_encode64(self)
|
87
|
+
elsif @options[:url_safe]
|
88
|
+
Base64.urlsafe_encode64(self)
|
89
|
+
else
|
90
|
+
Base64.encode64(self)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def base64_decode
|
95
|
+
if @options[:strict]
|
96
|
+
Base64.strict_decode64(self)
|
97
|
+
elsif @options[:url_safe]
|
98
|
+
Base64.urlsafe_decode64(self)
|
99
|
+
else
|
100
|
+
Base64.decode64(self)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class String
|
2
|
+
# Checks a string on an Integer value
|
3
|
+
#
|
4
|
+
# "1".is_integer? #=> true
|
5
|
+
# "1.0".is_integer? #=> false
|
6
|
+
# "not_numeric".is_integer? #=> false
|
7
|
+
def is_integer?
|
8
|
+
true if Integer(self) rescue false
|
9
|
+
end
|
10
|
+
|
11
|
+
# Checks a string on a Numeric value
|
12
|
+
#
|
13
|
+
# "1".is_numeric? #=> true
|
14
|
+
# "1.0".is_numeric? #=> true
|
15
|
+
# "not_numeric".is_numeric? #=> false
|
16
|
+
def is_numeric?
|
17
|
+
true if Float(self) rescue false
|
18
|
+
end
|
19
|
+
|
20
|
+
# Checks a string on a Float value
|
21
|
+
#
|
22
|
+
# "1".is_float? #=> false
|
23
|
+
# "1.0".is_float? #=> true
|
24
|
+
# "not_numeric".is_float? #=> false
|
25
|
+
def is_float?
|
26
|
+
return is_numeric? unless is_integer?
|
27
|
+
false
|
28
|
+
end
|
29
|
+
|
30
|
+
# Converts a string to a Numeric values (Float, Fixnum or Bignum).
|
31
|
+
#
|
32
|
+
# "1".to_numeric #=> 1
|
33
|
+
# "1".to_numeric.class #=> Fixnum
|
34
|
+
# "1.0".to_numeric #=> 1.0
|
35
|
+
# "1.0".to_numeric.class #=> Float
|
36
|
+
# ("1" * 10).to_numeric #=> 1111111111
|
37
|
+
# ("1" * 10).to_numeric.class #=> Bignum
|
38
|
+
# "not_numeric".to_numeric #=> nil
|
39
|
+
def to_numeric
|
40
|
+
return Integer(self) if is_integer?
|
41
|
+
return Float(self) if is_float?
|
42
|
+
end
|
43
|
+
end
|
data/rcore-ext.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$: << File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
require "rcore_ext/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.authors = ["Bakhtiyor Homidov"]
|
8
|
+
s.email = ["bakhtiyor.h@gmail.com"]
|
9
|
+
s.homepage = "https://github.com/hbakhtiyor/rcore-ext"
|
10
|
+
s.description = %q{Ruby Core Extensions in a gem}
|
11
|
+
s.summary = %q{Ruby Core Extension}
|
12
|
+
|
13
|
+
s.rubyforge_project = "rcore-ext"
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {spec}/*`.split("\n")
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
s.name = "rcore-ext"
|
19
|
+
s.version = RCoreExt::VERSION
|
20
|
+
|
21
|
+
s.add_development_dependency "rspec"
|
22
|
+
s.add_development_dependency "rake"
|
23
|
+
|
24
|
+
s.add_runtime_dependency "base32"
|
25
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rcore_ext/string/format'
|
3
|
+
|
4
|
+
describe "String formats" do
|
5
|
+
let(:plain_text) { "plain text" }
|
6
|
+
let(:url_safe) { "https://github.com/hbakhtiyor/rcore-ext" }
|
7
|
+
|
8
|
+
describe "respond to encode/decode methods" do
|
9
|
+
it "should respond to encode method" do
|
10
|
+
"".should respond_to :encode_string
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should respond to decode method" do
|
14
|
+
"".should respond_to :decode_string
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "raise exceptions" do
|
19
|
+
describe "in encode method" do
|
20
|
+
it "should raise exception with empty format" do
|
21
|
+
expect { "".encode_string }.to raise_error ArgumentError
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should raise exception with unsupported format" do
|
25
|
+
expect { "".encode_string(:unsupported_format) }.to raise_error ArgumentError
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "in decode method" do
|
30
|
+
it "should raise exception with empty format" do
|
31
|
+
expect { "".decode_string }.to raise_error ArgumentError
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should raise exception with unsupported format" do
|
35
|
+
expect { "".decode_string(:unsupported_format) }.to raise_error ArgumentError
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "bin format" do
|
41
|
+
let(:bin_string) { "01110000011011000110000101101001011011100010000001110100011001010111100001110100" }
|
42
|
+
|
43
|
+
describe "decoding functionality" do
|
44
|
+
it "should only contain [01] characters" do
|
45
|
+
plain_text.decode_string(:bin).should =~ /^[01]+$/
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should decode correctly" do
|
49
|
+
plain_text.decode_string(:bin).should == bin_string
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "encoding functionality" do
|
54
|
+
it "should encode correctly" do
|
55
|
+
bin_string.encode_string(:bin).should == plain_text
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "hex format" do
|
61
|
+
let(:hex_string) { "706c61696e2074657874" }
|
62
|
+
|
63
|
+
describe "decoding functionality" do
|
64
|
+
it "should only contain [0-9a-f] characters" do
|
65
|
+
plain_text.decode_string(:hex).should =~ /^[0-9a-f]+$/i
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should decode correctly" do
|
69
|
+
plain_text.decode_string(:hex).should == hex_string
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "encoding functionality" do
|
74
|
+
it "should encode correctly" do
|
75
|
+
hex_string.encode_string(:hex).should == plain_text
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "base32 format" do
|
81
|
+
let(:base32_string) { "OBWGC2LOEB2GK6DU" }
|
82
|
+
|
83
|
+
describe "decoding functionality" do
|
84
|
+
it "should decode correctly" do
|
85
|
+
base32_string.decode_string(:base32).should == plain_text
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "encoding functionality" do
|
90
|
+
it "should only contain [2-7a-z=] characters" do
|
91
|
+
plain_text.encode_string(:base32).should =~ /^[2-7a-z=]+$/i
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should encode correctly" do
|
95
|
+
plain_text.encode_string(:base32).should == base32_string
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "base64 format" do
|
101
|
+
let(:base64_string) { "cGxhaW4gdGV4dA==\n" }
|
102
|
+
let(:base64_strict_string) { "cGxhaW4gdGV4dA==" }
|
103
|
+
let(:base64_urlsafe_string) { "aHR0cHM6Ly9naXRodWIuY29tL2hiYWtodGl5b3IvcmNvcmUtZXh0" }
|
104
|
+
|
105
|
+
describe "decoding functionality" do
|
106
|
+
it "should decode correctly" do
|
107
|
+
base64_string.decode_string(:base64).should == plain_text
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should decode with strict option" do
|
111
|
+
base64_strict_string.decode_string(:base64, strict: true).should == plain_text
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should decode with url_safe option" do
|
115
|
+
base64_urlsafe_string.decode_string(:base64, url_safe: true).should == url_safe
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe "encoding functionality" do
|
120
|
+
it "should only contain [0-9a-z=+/] characters" do
|
121
|
+
plain_text.encode_string(:base64).should =~ /^[0-9a-z=\/\+]+$/i
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should encode correctly" do
|
125
|
+
plain_text.encode_string(:base64).should == base64_string
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should decode with strict option" do
|
129
|
+
plain_text.encode_string(:base64, strict: true).should == base64_strict_string
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should decode with url_safe option" do
|
133
|
+
url_safe.encode_string(:base64, url_safe: true).should == base64_urlsafe_string
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rcore_ext/string/numeric'
|
3
|
+
|
4
|
+
describe "String numeric" do
|
5
|
+
|
6
|
+
let(:fix_num) { {act: "1", exp: 1} }
|
7
|
+
let(:float) { {act: "1.0", exp: 1.0} }
|
8
|
+
let(:not_numeric) { {act: "1not_numeric1", exp: nil} }
|
9
|
+
let(:big_num) { {act: "1" * 10, exp: 1111111111} }
|
10
|
+
|
11
|
+
describe "respond to numeric methods" do
|
12
|
+
it "should respond to is_integer? method" do
|
13
|
+
"".should respond_to :is_integer?
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should respond to is_float? method" do
|
17
|
+
"".should respond_to :is_float?
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should respond to is_numeric? method" do
|
21
|
+
"".should respond_to :is_numeric?
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should respond to to_numeric method" do
|
25
|
+
"".should respond_to :to_numeric
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "is_integer? method functionality" do
|
30
|
+
it "should be an integer value" do
|
31
|
+
fix_num[:act].is_integer?.should be_true
|
32
|
+
end
|
33
|
+
|
34
|
+
it "a big number should be an integer value" do
|
35
|
+
big_num[:act].is_integer?.should be_true
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should not be an integer value" do
|
39
|
+
not_numeric[:act].is_integer?.should be_false
|
40
|
+
end
|
41
|
+
|
42
|
+
it "a float value should not be an integer value" do
|
43
|
+
float[:act].is_integer?.should be_false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "is_numeric? method functionality" do
|
48
|
+
it "should be a numeric value" do
|
49
|
+
fix_num[:act].is_numeric?.should be_true
|
50
|
+
end
|
51
|
+
|
52
|
+
it "a big number should be a numeric value" do
|
53
|
+
big_num[:act].is_numeric?.should be_true
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should not be a numeric value" do
|
57
|
+
not_numeric[:act].is_numeric?.should be_false
|
58
|
+
end
|
59
|
+
|
60
|
+
it "a float value should be a numeric value" do
|
61
|
+
float[:act].is_numeric?.should be_true
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "is_float? method functionality" do
|
66
|
+
it "an integer value should not be a float value" do
|
67
|
+
fix_num[:act].is_float?.should be_false
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should not be a float value" do
|
71
|
+
not_numeric[:act].is_float?.should be_false
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should be a float value" do
|
75
|
+
float[:act].is_float?.should be_true
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "to_numeric method functionality" do
|
80
|
+
it "should be converted to an integer value" do
|
81
|
+
fix_num[:act].to_numeric.should == fix_num[:exp]
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should be converted to a float value" do
|
85
|
+
float[:act].to_numeric.should == float[:exp]
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should be converted to a big number value" do
|
89
|
+
big_num[:act].to_numeric.should == big_num[:exp]
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should not be converted to numeric value" do
|
93
|
+
not_numeric[:act].to_numeric.should == not_numeric[:exp]
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
data/spec/spec_helper.rb
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rcore-ext
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Bakhtiyor Homidov
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-03-13 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: base32
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
description: Ruby Core Extensions in a gem
|
63
|
+
email:
|
64
|
+
- bakhtiyor.h@gmail.com
|
65
|
+
executables: []
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- .gitignore
|
70
|
+
- CHANGELOG.md
|
71
|
+
- Gemfile
|
72
|
+
- Gemfile.lock
|
73
|
+
- README.md
|
74
|
+
- lib/rcore_ext.rb
|
75
|
+
- lib/rcore_ext/string/format.rb
|
76
|
+
- lib/rcore_ext/string/numeric.rb
|
77
|
+
- lib/rcore_ext/version.rb
|
78
|
+
- rcore-ext.gemspec
|
79
|
+
- spec/rcore_ext/string/format_spec.rb
|
80
|
+
- spec/rcore_ext/string/numeric_spec.rb
|
81
|
+
- spec/spec_helper.rb
|
82
|
+
homepage: https://github.com/hbakhtiyor/rcore-ext
|
83
|
+
licenses: []
|
84
|
+
post_install_message:
|
85
|
+
rdoc_options: []
|
86
|
+
require_paths:
|
87
|
+
- lib
|
88
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ! '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
requirements: []
|
101
|
+
rubyforge_project: rcore-ext
|
102
|
+
rubygems_version: 1.8.23
|
103
|
+
signing_key:
|
104
|
+
specification_version: 3
|
105
|
+
summary: Ruby Core Extension
|
106
|
+
test_files: []
|