core_extended 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/config/accents_mapping.yml +15 -0
- data/config/similar_character_mapping.yml +47 -0
- data/core_extended.gemspec +13 -11
- data/lib/core_extended.rb +4 -5
- data/lib/core_extended/array.rb +7 -0
- data/lib/core_extended/config_reader.rb +17 -0
- data/lib/core_extended/file.rb +4 -4
- data/lib/core_extended/hash.rb +49 -0
- data/lib/core_extended/marshal.rb +0 -2
- data/lib/core_extended/paginator.rb +34 -0
- data/lib/core_extended/ruby.rb +23 -0
- data/lib/core_extended/string.rb +39 -13
- data/lib/core_extended/version.rb +1 -1
- data/spec/array_spec.rb +21 -0
- data/spec/file_spec.rb +16 -2
- data/spec/hash_spec.rb +116 -0
- data/spec/minitest_helper.rb +1 -0
- data/spec/paginator_spec.rb +37 -0
- data/spec/ruby_spec.rb +25 -0
- data/spec/string_spec.rb +67 -0
- metadata +56 -4
data/.gitignore
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
---
|
2
|
+
A: ĄΑΔΛ
|
3
|
+
B: ßɃΒ
|
4
|
+
C: ĆĈĊČϚ
|
5
|
+
D: ÐĎĐ
|
6
|
+
E: ĘƐЗŒΣΞ
|
7
|
+
F: ƑϜ
|
8
|
+
G: ĜĞĠĢƓǦ
|
9
|
+
H: ĤĦ
|
10
|
+
I: Įİ
|
11
|
+
J: Ĵ
|
12
|
+
K: ĶĸƘ
|
13
|
+
L: ĹĻĽĿŁ
|
14
|
+
N: ŃŅŇŊИ
|
15
|
+
O: ØƟƠΘΩ
|
16
|
+
P: ÞƤΡ
|
17
|
+
R: ŔŖŘЯƦ
|
18
|
+
S: ŚŜŞŠƧ
|
19
|
+
T: ŢŤŦГΓΤ
|
20
|
+
U: ŲƱ
|
21
|
+
W: Ŵ
|
22
|
+
X: Χ
|
23
|
+
Y: ÝŶЧ
|
24
|
+
Z: ŹŻŽ
|
25
|
+
a: ąæαδλ
|
26
|
+
b: Ƅƀƅβ
|
27
|
+
c: Ɔćĉċčɔϛ
|
28
|
+
d: ðďđ
|
29
|
+
e: Əęɛəзœɘςξ
|
30
|
+
f: ƒϝ
|
31
|
+
g: ĝğġģɠǧ
|
32
|
+
h: ĥħ
|
33
|
+
i: īį
|
34
|
+
j: ĵ
|
35
|
+
k: ķƙ
|
36
|
+
l: ĺļľŀł
|
37
|
+
n: ʼnńņňŋиȠƞ
|
38
|
+
o: øɵơθω
|
39
|
+
p: þƥρ
|
40
|
+
r: ŕŗřяʀ
|
41
|
+
s: śŝşšƨ
|
42
|
+
t: ţťŧгγτ
|
43
|
+
u: ųʊ
|
44
|
+
w: ŵ
|
45
|
+
x: ×χ
|
46
|
+
y: ÿýŷч
|
47
|
+
z: źżž
|
data/core_extended.gemspec
CHANGED
@@ -4,23 +4,25 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'core_extended/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'core_extended'
|
8
8
|
spec.version = CoreExtended::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['Gabriel Naiman']
|
10
|
+
spec.email = ['gabynaiman@gmail.com']
|
11
11
|
spec.description = 'Ruby core extensions'
|
12
12
|
spec.summary = 'Ruby core extensions'
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
13
|
+
spec.homepage = 'https://github.com/gabynaiman/core_extended'
|
14
|
+
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency
|
22
|
-
spec.add_development_dependency
|
23
|
-
spec.add_development_dependency
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
21
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
22
|
+
spec.add_development_dependency 'rake'
|
23
|
+
spec.add_development_dependency 'minitest', '~> 4.7'
|
24
|
+
spec.add_development_dependency 'minitest-great_expectations'
|
25
|
+
spec.add_development_dependency 'turn', '~> 0.9'
|
26
|
+
spec.add_development_dependency 'simplecov'
|
27
|
+
spec.add_development_dependency 'json', '~> 1.7.7'
|
26
28
|
end
|
data/lib/core_extended.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
require 'core_extended/marshal'
|
4
|
-
require 'core_extended/file'
|
5
|
-
require 'core_extended/string'
|
1
|
+
require 'yaml'
|
2
|
+
require 'base64'
|
6
3
|
|
4
|
+
require 'core_extended/config_reader'
|
5
|
+
Dir.glob("#{File.dirname(__FILE__)}/core_extended/*.rb") { |f| require f }
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class ConfigReader
|
2
|
+
|
3
|
+
CONFIG_PATH = File.expand_path(File.join(File.dirname(__FILE__), '../../config'))
|
4
|
+
|
5
|
+
def self.yaml(filename)
|
6
|
+
YAML.load_file File.join(CONFIG_PATH, filename)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.similar_character_mapping
|
10
|
+
@similar_character_mapping ||= yaml('similar_character_mapping.yml').freeze
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.accents_mapping
|
14
|
+
@accents_mapping ||= yaml('accents_mapping.yml').freeze
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
data/lib/core_extended/file.rb
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
class Hash
|
2
|
+
|
3
|
+
Inflector = Struct.new :method, :arguments
|
4
|
+
|
5
|
+
def self.inflectors
|
6
|
+
@inflectors ||= []
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.inflect(method, *args)
|
10
|
+
inflectors << Inflector.new(method, args)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.inflections(key)
|
14
|
+
[key.to_s, key.to_s.to_sym].tap do |list|
|
15
|
+
inflectors.each do |i|
|
16
|
+
k = key.to_s.send i.method, *i.arguments
|
17
|
+
list.concat [k, k.to_sym]
|
18
|
+
end
|
19
|
+
end.uniq
|
20
|
+
end
|
21
|
+
|
22
|
+
def methods(*args)
|
23
|
+
keys.flat_map{ |k| self.class.inflections(k).map(&:to_sym) }.uniq.concat(super)
|
24
|
+
end
|
25
|
+
|
26
|
+
def respond_to?(method, *args)
|
27
|
+
super || methods.include?(method.to_sym)
|
28
|
+
end
|
29
|
+
|
30
|
+
def get(key)
|
31
|
+
indiferent_access = [key, key.to_s, key.to_s.to_sym].uniq
|
32
|
+
|
33
|
+
indiferent_access.each do |k|
|
34
|
+
return self[k] if key?(k)
|
35
|
+
end
|
36
|
+
|
37
|
+
Hash[keys.map{ |k| [k, self.class.inflections(k)] }].each do |k,v|
|
38
|
+
return self[k] if (v & indiferent_access).any?
|
39
|
+
end
|
40
|
+
|
41
|
+
nil
|
42
|
+
end
|
43
|
+
|
44
|
+
def method_missing(method, *args, &block)
|
45
|
+
return get(method) if respond_to?(method.to_sym)
|
46
|
+
super
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Paginator
|
2
|
+
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
attr_reader :page, :size
|
6
|
+
|
7
|
+
def initialize(collection, options={})
|
8
|
+
@collection = collection
|
9
|
+
@page = options[:page] ? options[:page].to_i : 1
|
10
|
+
@size = options[:size] ? options[:size].to_i : 10
|
11
|
+
end
|
12
|
+
|
13
|
+
def each(&block)
|
14
|
+
from = size * (page - 1)
|
15
|
+
(@collection.slice(from, size) || []).each(&block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def total
|
19
|
+
@collection.count
|
20
|
+
end
|
21
|
+
|
22
|
+
def pages
|
23
|
+
(total / size.to_f).ceil
|
24
|
+
end
|
25
|
+
|
26
|
+
def first?
|
27
|
+
page == 1
|
28
|
+
end
|
29
|
+
|
30
|
+
def last?
|
31
|
+
page == pages
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Ruby
|
2
|
+
|
3
|
+
def self.engine
|
4
|
+
RUBY_ENGINE
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.platform
|
8
|
+
RUBY_PLATFORM
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.version
|
12
|
+
RUBY_VERSION
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.mri?
|
16
|
+
engine == 'ruby'
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.jruby?
|
20
|
+
engine == 'jruby'
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/lib/core_extended/string.rb
CHANGED
@@ -1,17 +1,11 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
class String
|
3
2
|
|
4
|
-
ACCENTS_MAPPING =
|
5
|
-
|
6
|
-
{letter: 'E', upcase: 'ÉÈËÊ', downcase: 'éèëê'},
|
7
|
-
{letter: 'I', upcase: 'ÍÌÏÎ', downcase: 'íìïî'},
|
8
|
-
{letter: 'O', upcase: 'ÓÒÖÔ', downcase: 'óòöô'},
|
9
|
-
{letter: 'U', upcase: 'ÚÙÜÛ', downcase: 'úùüû'}
|
10
|
-
]
|
3
|
+
ACCENTS_MAPPING = ConfigReader.accents_mapping
|
4
|
+
SIMILAR_CHARACTER_MAPPING = ConfigReader.similar_character_mapping
|
11
5
|
|
12
6
|
alias_method :upcase_ignoring_accents!, :upcase!
|
13
7
|
def upcase!
|
14
|
-
ACCENTS_MAPPING.each { |map| tr! map[
|
8
|
+
ACCENTS_MAPPING.values.each { |map| tr! map['downcase'], map['upcase'] }
|
15
9
|
upcase_ignoring_accents!
|
16
10
|
end
|
17
11
|
|
@@ -21,7 +15,7 @@ class String
|
|
21
15
|
|
22
16
|
alias_method :downcase_ignoring_accents!, :downcase!
|
23
17
|
def downcase!
|
24
|
-
ACCENTS_MAPPING.each { |map| tr! map[
|
18
|
+
ACCENTS_MAPPING.values.each { |map| tr! map['upcase'], map['downcase'] }
|
25
19
|
downcase_ignoring_accents!
|
26
20
|
end
|
27
21
|
|
@@ -30,9 +24,9 @@ class String
|
|
30
24
|
end
|
31
25
|
|
32
26
|
def unaccented!
|
33
|
-
ACCENTS_MAPPING.each do |map|
|
34
|
-
tr! map[
|
35
|
-
tr! map[
|
27
|
+
ACCENTS_MAPPING.each do |letter,map|
|
28
|
+
tr! map['upcase'], letter
|
29
|
+
tr! map['downcase'], letter.downcase
|
36
30
|
end
|
37
31
|
nil
|
38
32
|
end
|
@@ -41,10 +35,21 @@ class String
|
|
41
35
|
self.dup.tap(&:unaccented!)
|
42
36
|
end
|
43
37
|
|
38
|
+
def letterize!
|
39
|
+
SIMILAR_CHARACTER_MAPPING.each do |letter, similar_chars|
|
40
|
+
tr! similar_chars, letter.to_s
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def letterize
|
45
|
+
self.dup.tap(&:letterize!)
|
46
|
+
end
|
47
|
+
|
44
48
|
def normalized!
|
45
49
|
self.strip!
|
46
50
|
self.gsub! /\s/, '_'
|
47
51
|
self.unaccented!
|
52
|
+
self.letterize!
|
48
53
|
self.downcase!
|
49
54
|
end
|
50
55
|
|
@@ -52,4 +57,25 @@ class String
|
|
52
57
|
self.dup.tap(&:normalized!)
|
53
58
|
end
|
54
59
|
|
60
|
+
unless method_defined? :underscore
|
61
|
+
def underscore
|
62
|
+
self.gsub(/::/, '/').
|
63
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
64
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
65
|
+
tr("-", "_").
|
66
|
+
downcase
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
unless method_defined? :camelize
|
71
|
+
def camelize(upper_case_first_letter=true)
|
72
|
+
return self if self !~ /_/ && self =~ /[A-Z]+.*/
|
73
|
+
if upper_case_first_letter
|
74
|
+
split('_').map{|e| e.capitalize}.join
|
75
|
+
else
|
76
|
+
split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
55
81
|
end
|
data/spec/array_spec.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Array do
|
4
|
+
|
5
|
+
it 'Paginate' do
|
6
|
+
array = (1..20).to_a
|
7
|
+
paginator = array.page(2, 5)
|
8
|
+
|
9
|
+
paginator.page.must_equal 2
|
10
|
+
paginator.size.must_equal 5
|
11
|
+
|
12
|
+
paginator.total.must_equal 20
|
13
|
+
paginator.pages.must_equal 4
|
14
|
+
|
15
|
+
paginator.wont_be :first?
|
16
|
+
paginator.wont_be :last?
|
17
|
+
|
18
|
+
paginator.to_a.must_equal_contents (6..10).to_a
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/spec/file_spec.rb
CHANGED
@@ -1,10 +1,24 @@
|
|
1
|
-
RbConfig::CONFIG['host_os'] = 'mswin'
|
2
1
|
require 'minitest_helper'
|
3
2
|
|
4
3
|
describe File do
|
5
4
|
|
5
|
+
windows_method = OS.method(:windows?)
|
6
|
+
jruby_method = Ruby.method(:jruby?)
|
7
|
+
|
8
|
+
after do
|
9
|
+
OS.define_singleton_method :windows?, &windows_method
|
10
|
+
Ruby.define_singleton_method :jruby?, &jruby_method
|
11
|
+
end
|
12
|
+
|
6
13
|
it 'Fix size for windows and jruby' do
|
7
|
-
|
14
|
+
OS.define_singleton_method(:windows?) { true }
|
15
|
+
Ruby.define_singleton_method(:jruby?) { true }
|
16
|
+
|
17
|
+
File.open("#{File.dirname(__FILE__)}/../LICENSE.txt", 'r') { |f| f.size.must_equal 1071 }
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'Default size for other platforms' do
|
21
|
+
File.open("#{File.dirname(__FILE__)}/../LICENSE.txt", 'r') { |f| f.size.must_equal 1071 }
|
8
22
|
end
|
9
23
|
|
10
24
|
end
|
data/spec/hash_spec.rb
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Hash do
|
4
|
+
|
5
|
+
after do
|
6
|
+
Hash.inflectors.clear
|
7
|
+
end
|
8
|
+
|
9
|
+
describe 'Without inflectors' do
|
10
|
+
|
11
|
+
before do
|
12
|
+
Hash.inflectors.clear
|
13
|
+
end
|
14
|
+
|
15
|
+
hash = {keyName1: 1, 'keyName2' => 2}
|
16
|
+
|
17
|
+
it 'Inflections' do
|
18
|
+
Hash.inflections('keyName').must_equal_contents ['keyName', :keyName]
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'Get with indiferent access' do
|
22
|
+
hash.get(:keyName1).must_equal 1
|
23
|
+
hash.get('keyName1').must_equal 1
|
24
|
+
|
25
|
+
hash.get(:keyName2).must_equal 2
|
26
|
+
hash.get('keyName2').must_equal 2
|
27
|
+
|
28
|
+
hash.get(:keyName3).must_be_nil
|
29
|
+
hash.get('keyName3').must_be_nil
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'Methods for all keys' do
|
33
|
+
hash.methods.must_include :keyName1
|
34
|
+
hash.methods.must_include :keyName2
|
35
|
+
hash.methods.wont_include :keyName3
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'Respond to all keys' do
|
39
|
+
hash.must_be :respond_to?, :keyName1
|
40
|
+
hash.must_be :respond_to?, :keyName2
|
41
|
+
hash.wont_be :respond_to?, :keyName3
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'Key method accessors' do
|
45
|
+
hash.keyName1.must_equal 1
|
46
|
+
hash.keyName2.must_equal 2
|
47
|
+
proc { hash.keyName3 }.must_raise NoMethodError
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
describe 'With inflectors' do
|
53
|
+
|
54
|
+
before do
|
55
|
+
Hash.inflect :underscore
|
56
|
+
end
|
57
|
+
|
58
|
+
hash = {keyName1: 1, 'KeyName2' => 2, key_name3: 3}
|
59
|
+
|
60
|
+
it 'Inflections' do
|
61
|
+
Hash.inflections('keyName').must_equal_contents ['keyName', :keyName, 'key_name', :key_name]
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'Get with indiferent access' do
|
65
|
+
hash.get(:keyName1).must_equal 1
|
66
|
+
hash.get('keyName1').must_equal 1
|
67
|
+
hash.get(:key_name1).must_equal 1
|
68
|
+
hash.get('key_name1').must_equal 1
|
69
|
+
|
70
|
+
hash.get(:KeyName2).must_equal 2
|
71
|
+
hash.get('KeyName2').must_equal 2
|
72
|
+
hash.get(:key_name2).must_equal 2
|
73
|
+
hash.get('key_name2').must_equal 2
|
74
|
+
|
75
|
+
hash.get(:keyName3).must_be_nil
|
76
|
+
hash.get('keyName3').must_be_nil
|
77
|
+
hash.get(:key_name3).must_equal 3
|
78
|
+
hash.get('key_name3').must_equal 3
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'Methods for all keys' do
|
82
|
+
hash.methods.must_include :keyName1
|
83
|
+
hash.methods.must_include :key_name1
|
84
|
+
|
85
|
+
hash.methods.must_include :KeyName2
|
86
|
+
hash.methods.must_include :key_name2
|
87
|
+
|
88
|
+
hash.methods.wont_include :keyName3
|
89
|
+
hash.methods.must_include :key_name3
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'Respond to all keys' do
|
93
|
+
hash.must_be :respond_to?, :keyName1
|
94
|
+
hash.must_be :respond_to?, :key_name1
|
95
|
+
|
96
|
+
hash.must_be :respond_to?, :KeyName2
|
97
|
+
hash.must_be :respond_to?, :key_name2
|
98
|
+
|
99
|
+
hash.wont_be :respond_to?, :keyName3
|
100
|
+
hash.must_be :respond_to?, :key_name3
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'Key method accessors' do
|
104
|
+
hash.keyName1.must_equal 1
|
105
|
+
hash.key_name1.must_equal 1
|
106
|
+
|
107
|
+
hash.KeyName2.must_equal 2
|
108
|
+
hash.key_name2.must_equal 2
|
109
|
+
|
110
|
+
proc { hash.keyName3 }.must_raise NoMethodError
|
111
|
+
hash.key_name3.must_equal 3
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
data/spec/minitest_helper.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Paginator do
|
4
|
+
|
5
|
+
array = (1..50).to_a
|
6
|
+
|
7
|
+
it 'Defaults' do
|
8
|
+
paginator = Paginator.new array
|
9
|
+
|
10
|
+
paginator.page.must_equal 1
|
11
|
+
paginator.size.must_equal 10
|
12
|
+
|
13
|
+
paginator.total.must_equal 50
|
14
|
+
paginator.pages.must_equal 5
|
15
|
+
|
16
|
+
paginator.must_be :first?
|
17
|
+
paginator.wont_be :last?
|
18
|
+
|
19
|
+
paginator.to_a.must_equal_contents (1..10).to_a
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'With arguments' do
|
23
|
+
paginator = Paginator.new array, page: 3, size: 20
|
24
|
+
|
25
|
+
paginator.page.must_equal 3
|
26
|
+
paginator.size.must_equal 20
|
27
|
+
|
28
|
+
paginator.total.must_equal 50
|
29
|
+
paginator.pages.must_equal 3
|
30
|
+
|
31
|
+
paginator.wont_be :first?
|
32
|
+
paginator.must_be :last?
|
33
|
+
|
34
|
+
paginator.to_a.must_equal_contents (41..50).to_a
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
data/spec/ruby_spec.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Ruby do
|
4
|
+
|
5
|
+
it 'Engine' do
|
6
|
+
Ruby.engine.must_equal RUBY_ENGINE
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'Platform' do
|
10
|
+
Ruby.platform.must_equal RUBY_PLATFORM
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'Version' do
|
14
|
+
Ruby.version.must_equal RUBY_VERSION
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'MRI' do
|
18
|
+
Ruby.mri?.must_equal RUBY_ENGINE == 'ruby'
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'JRuby' do
|
22
|
+
Ruby.jruby?.must_equal RUBY_ENGINE == 'jruby'
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
data/spec/string_spec.rb
CHANGED
@@ -71,6 +71,33 @@ describe String do
|
|
71
71
|
|
72
72
|
end
|
73
73
|
|
74
|
+
describe 'Letterize' do
|
75
|
+
|
76
|
+
it 'Transform all similar letters' do
|
77
|
+
ConfigReader.similar_character_mapping.each do |letter, similar_chars|
|
78
|
+
similar_chars.chars.each do |char|
|
79
|
+
char.letterize.must_equal letter
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'Transform keeping case' do
|
85
|
+
'ßΔЯƦą'.letterize.must_equal 'BARRa'
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'Keep itself' do
|
89
|
+
string = 'ßΔЯƦą'
|
90
|
+
string.letterize.must_equal 'BARRa'
|
91
|
+
string.must_equal 'ßΔЯƦą'
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'Change itself' do
|
95
|
+
string = 'ßΔЯƦą'
|
96
|
+
string.letterize!
|
97
|
+
string.must_equal 'BARRa'
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
74
101
|
describe 'Normalized' do
|
75
102
|
|
76
103
|
it 'Downcase' do
|
@@ -103,4 +130,44 @@ describe String do
|
|
103
130
|
|
104
131
|
end
|
105
132
|
|
133
|
+
describe 'Underscore' do
|
134
|
+
|
135
|
+
it 'Camel case' do
|
136
|
+
'CamelCase'.underscore.must_equal 'camel_case'
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'Camel case start with downcase' do
|
140
|
+
'camelCase'.underscore.must_equal 'camel_case'
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'Lower case' do
|
144
|
+
'lowercase'.underscore.must_equal 'lowercase'
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'Upper case' do
|
148
|
+
'UPPERCASE'.underscore.must_equal 'uppercase'
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
describe 'Camelize' do
|
154
|
+
|
155
|
+
it 'Underscore' do
|
156
|
+
'under_score'.camelize.must_equal 'UnderScore'
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'Underscore convert staring with downcase' do
|
160
|
+
'under_score'.camelize(false).must_equal 'underScore'
|
161
|
+
end
|
162
|
+
|
163
|
+
it 'Lower case' do
|
164
|
+
'lowercase'.camelize.must_equal 'Lowercase'
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'Upper case' do
|
168
|
+
'UPPERCASE'.camelize.must_equal 'UPPERCASE'
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|
172
|
+
|
106
173
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: core_extended
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-09-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -59,6 +59,22 @@ dependencies:
|
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '4.7'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: minitest-great_expectations
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
62
78
|
- !ruby/object:Gem::Dependency
|
63
79
|
name: turn
|
64
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,6 +107,22 @@ dependencies:
|
|
91
107
|
- - ! '>='
|
92
108
|
- !ruby/object:Gem::Version
|
93
109
|
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: json
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 1.7.7
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 1.7.7
|
94
126
|
description: Ruby core extensions
|
95
127
|
email:
|
96
128
|
- gabynaiman@gmail.com
|
@@ -105,18 +137,29 @@ files:
|
|
105
137
|
- LICENSE.txt
|
106
138
|
- README.md
|
107
139
|
- Rakefile
|
140
|
+
- config/accents_mapping.yml
|
141
|
+
- config/similar_character_mapping.yml
|
108
142
|
- core_extended.gemspec
|
109
143
|
- lib/core_extended.rb
|
144
|
+
- lib/core_extended/array.rb
|
145
|
+
- lib/core_extended/config_reader.rb
|
110
146
|
- lib/core_extended/file.rb
|
147
|
+
- lib/core_extended/hash.rb
|
111
148
|
- lib/core_extended/marshal.rb
|
112
149
|
- lib/core_extended/os.rb
|
150
|
+
- lib/core_extended/paginator.rb
|
151
|
+
- lib/core_extended/ruby.rb
|
113
152
|
- lib/core_extended/string.rb
|
114
153
|
- lib/core_extended/version.rb
|
154
|
+
- spec/array_spec.rb
|
115
155
|
- spec/coverage_helper.rb
|
116
156
|
- spec/file_spec.rb
|
157
|
+
- spec/hash_spec.rb
|
117
158
|
- spec/marshal_spec.rb
|
118
159
|
- spec/minitest_helper.rb
|
119
160
|
- spec/os_spec.rb
|
161
|
+
- spec/paginator_spec.rb
|
162
|
+
- spec/ruby_spec.rb
|
120
163
|
- spec/string_spec.rb
|
121
164
|
homepage: https://github.com/gabynaiman/core_extended
|
122
165
|
licenses:
|
@@ -131,23 +174,32 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
174
|
- - ! '>='
|
132
175
|
- !ruby/object:Gem::Version
|
133
176
|
version: '0'
|
177
|
+
segments:
|
178
|
+
- 0
|
179
|
+
hash: 2176153387559094585
|
134
180
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
181
|
none: false
|
136
182
|
requirements:
|
137
183
|
- - ! '>='
|
138
184
|
- !ruby/object:Gem::Version
|
139
185
|
version: '0'
|
186
|
+
segments:
|
187
|
+
- 0
|
188
|
+
hash: 2176153387559094585
|
140
189
|
requirements: []
|
141
190
|
rubyforge_project:
|
142
|
-
rubygems_version: 1.8.
|
191
|
+
rubygems_version: 1.8.25
|
143
192
|
signing_key:
|
144
193
|
specification_version: 3
|
145
194
|
summary: Ruby core extensions
|
146
195
|
test_files:
|
196
|
+
- spec/array_spec.rb
|
147
197
|
- spec/coverage_helper.rb
|
148
198
|
- spec/file_spec.rb
|
199
|
+
- spec/hash_spec.rb
|
149
200
|
- spec/marshal_spec.rb
|
150
201
|
- spec/minitest_helper.rb
|
151
202
|
- spec/os_spec.rb
|
203
|
+
- spec/paginator_spec.rb
|
204
|
+
- spec/ruby_spec.rb
|
152
205
|
- spec/string_spec.rb
|
153
|
-
has_rdoc:
|