core_extended 0.0.5 → 0.0.6
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.
- 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:
|