theusual 0.0.3 → 0.0.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d06bb83b87d5c6ad41d336bde87d395c5df640a8
4
- data.tar.gz: c32022f2e85c46f58ac6e787567094dfe6d1c252
3
+ metadata.gz: 5626e015b912c430bbf29ef349b9c0278486e6d3
4
+ data.tar.gz: a8fd13ede49258fb7e14220a45112029d2d512fb
5
5
  SHA512:
6
- metadata.gz: 2c7cc0bb584f34b2afe291d9e49e1c58c5ed995368259db92061ec197b8e9cdbff47079ab384b92ee57c1a8fc69d000f85b7514bb91e9d9a5a8df7bc76f7e4bf
7
- data.tar.gz: ae1c5c2545795590cfd5f34cd821247de74baa3908d8b9639a3d51e22da5c3f372bf7ae2c4cbf2020836e127a1a0b6b5c1baba4814ac455dc13a68b48cd22f5b
6
+ metadata.gz: f5ec204b80a4eca317936e64ba6f0da7e9a16e643896c3bf046bb73ba0f4bf824249c46bf3d54a41ad56af0f19efae3e0d818bbf5085050dfd80575a4ba49740
7
+ data.tar.gz: f4b09eac9098a009b50ce9672a413db5752ea5bdca8e84b58222fc52f7f49f5be243c8ce8d4b61b22a4a42fb9a9b026839e3febb28e1fa4fa12aceaa95d9380b
data/lib/theusual/hash.rb CHANGED
@@ -14,6 +14,30 @@ class Hash
14
14
  end # class << self
15
15
 
16
16
 
17
+ # expand update() to accept multiple arguments
18
+ # eg. {}.update({a: 1}, {b: 2})
19
+ def update(*hashes)
20
+ clone.update! *hashes
21
+ end
22
+
23
+ def update!(*hashes)
24
+ hashes.each do |h|
25
+ h.each {|k,v| self[k] = v}
26
+ end
27
+ self
28
+ end
29
+
30
+
31
+ def except(*keys)
32
+ clone.except! *keys
33
+ end
34
+
35
+ def except!(*keys)
36
+ keys.each { |key| delete(key) }
37
+ self
38
+ end
39
+
40
+
17
41
  def select_keys(*keys)
18
42
  if keys.length == 1 and keys.first.class < Enumerable
19
43
  keys = keys.first
@@ -62,7 +86,6 @@ class Hash
62
86
  Hash[map do |k, v|
63
87
  [ block.arity == 1 ? block.call(k) : block.call(k, v), v ]
64
88
  end]
65
-
66
89
  end
67
90
 
68
91
  def kmap!(&block)
@@ -73,13 +96,13 @@ class Hash
73
96
  # map values, but preserve associated keys
74
97
  # ie. http://apidock.com/rails/v4.2.7/Hash/transform_values
75
98
  def vmap(&block)
76
- Hash[map do |k, v|
77
- [ k, block.arity == 1 ? block.call(v) : block.call(k, v) ]
78
- end]
99
+ clone.vmap! &block
79
100
  end
80
101
 
81
102
  def vmap!(&block)
82
- replace vmap &block
103
+ each do |k, v|
104
+ self[k] = block.arity == 1 ? block.call(v) : block.call(k, v)
105
+ end
83
106
  end
84
107
 
85
108
 
@@ -0,0 +1,29 @@
1
+
2
+ class String
3
+
4
+ def is_f?
5
+ self == self.to_f.to_s rescue false
6
+ end
7
+
8
+
9
+ def is_i?
10
+ self == self.to_i.to_s and !self.include? '.' rescue false
11
+ end
12
+
13
+
14
+ def numeric?
15
+ is_f?
16
+ end
17
+
18
+
19
+ def to_bool
20
+ if self.downcase == 'false'
21
+ false
22
+ elsif self.downcase == 'true'
23
+ true
24
+ else
25
+ raise ArgumentError.new "expected 'true' or 'false', got: #{self}"
26
+ end
27
+ end
28
+
29
+ end
data/lib/theusual.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module TheUsual
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
 
4
4
  MODULES = [
5
5
  'array',
@@ -7,6 +7,7 @@ module TheUsual
7
7
  'ipaddr',
8
8
  'mongoid',
9
9
  'net/ssh',
10
+ 'string',
10
11
  'time',
11
12
  ]
12
13
 
@@ -25,10 +26,19 @@ module TheUsual
25
26
 
26
27
  raise ArgumentError 'did you mean load(:all) ?' if modules.empty?
27
28
 
28
- modules = MODULES if [:all, 'all', '*'].include? modules.first
29
-
30
- modules.flatten.map(&:to_s).map do |_module|
31
- raise ArgumentError unless MODULES.include? _module
29
+ modules.map! &:to_s
30
+ to_load = if [:all, 'all', '*'].include? modules.first
31
+ MODULES
32
+ else
33
+ modules
34
+ end
35
+
36
+ to_load.flatten.map(&:to_s).map do |_module|
37
+ unless MODULES.include? _module
38
+ raise ArgumentError.new(
39
+ "can not load utils for module: #{_module}"
40
+ )
41
+ end
32
42
 
33
43
  begin
34
44
  # load standard lib
@@ -40,7 +50,13 @@ module TheUsual
40
50
 
41
51
  _module
42
52
  rescue LoadError
43
- # base gem not installed...skip monkey patch
53
+ # underlying gem not installed
54
+ # for :all, just skip monkey patch
55
+ if modules.include? _module
56
+ raise ArgumentError.new(
57
+ "missing library gem: gem install #{_module}"
58
+ )
59
+ end
44
60
  end
45
61
  end.compact
46
62
  end
data/test/test_hash.rb CHANGED
@@ -34,6 +34,67 @@ class HashTest < Minitest::Test
34
34
  end
35
35
 
36
36
 
37
+ def test_update
38
+ data = {
39
+ a: 1,
40
+ b: 2,
41
+ c: 3,
42
+ }
43
+
44
+ assert_equal(
45
+ {a: 1, b: 2, c: 3, d: 4},
46
+ data.update({d: 4})
47
+ )
48
+
49
+ assert_equal(
50
+ {a: 1, b: 2, c: 3, d: 4, e: 5},
51
+ data.update({d: 4, e: 5})
52
+ )
53
+
54
+ assert_equal(
55
+ {a: 1, b: 2, c: 3, d: 4, e: 5},
56
+ data.update({d: 4}, {e: 5})
57
+ )
58
+
59
+ assert_equal(
60
+ {a: 1, b: 2, c: 3, d: 4, e: 5},
61
+ data.update!({d: 4}, {e: 5})
62
+ )
63
+ assert_equal(
64
+ {a: 1, b: 2, c: 3, d: 4, e: 5},
65
+ data
66
+ )
67
+ end
68
+
69
+
70
+ def test_except
71
+ data = {
72
+ a: 1,
73
+ b: 2,
74
+ c: 3,
75
+ }
76
+
77
+ assert_equal(
78
+ {a: 1, b: 2},
79
+ data.except(:c)
80
+ )
81
+
82
+ assert_equal(
83
+ {a: 1},
84
+ data.except(:b, :c)
85
+ )
86
+
87
+ assert_equal(
88
+ {a: 1},
89
+ data.except!(:b, :c)
90
+ )
91
+ assert_equal(
92
+ {a: 1},
93
+ data
94
+ )
95
+ end
96
+
97
+
37
98
  def test_select_keys
38
99
  data = {
39
100
  c: 2,
@@ -0,0 +1,91 @@
1
+ require 'minitest/autorun'
2
+ require 'theusual'
3
+ TheUsual::load :string
4
+
5
+
6
+ class HashTest < Minitest::Test
7
+
8
+ def test_is_i
9
+ assert_equal(
10
+ true,
11
+ '1'.is_i?
12
+ )
13
+
14
+ assert_equal(
15
+ true,
16
+ '10'.is_i?
17
+ )
18
+
19
+ assert_equal(
20
+ false,
21
+ '1.0'.is_i?
22
+ )
23
+
24
+ assert_equal(
25
+ true,
26
+ '0'.is_i?
27
+ )
28
+
29
+ assert_equal(
30
+ false,
31
+ 'abc'.is_i?
32
+ )
33
+
34
+ assert_equal(
35
+ false,
36
+ '123abc'.is_i?
37
+ )
38
+ end
39
+
40
+
41
+ def test_is_f
42
+ assert_equal(
43
+ false,
44
+ '1'.is_f?
45
+ )
46
+
47
+ assert_equal(
48
+ false,
49
+ '10'.is_f?
50
+ )
51
+
52
+ assert_equal(
53
+ true,
54
+ '1.0'.is_f?
55
+ )
56
+
57
+ assert_equal(
58
+ false,
59
+ '0'.is_f?
60
+ )
61
+
62
+ assert_equal(
63
+ false,
64
+ 'abc'.is_f?
65
+ )
66
+
67
+ assert_equal(
68
+ false,
69
+ '123.4 abc'.is_f?
70
+ )
71
+ end
72
+
73
+
74
+ def test_to_bool
75
+ assert_equal(
76
+ true,
77
+ 'true'.to_bool
78
+ )
79
+
80
+ assert_equal(
81
+ true,
82
+ 'True'.to_bool
83
+ )
84
+
85
+ assert_equal(
86
+ false,
87
+ 'false'.to_bool
88
+ )
89
+ end
90
+
91
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: theusual
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Pepper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-22 00:00:00.000000000 Z
11
+ date: 2017-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -36,10 +36,12 @@ files:
36
36
  - lib/theusual/ipaddr.rb
37
37
  - lib/theusual/mongoid.rb
38
38
  - lib/theusual/ssh.rb
39
+ - lib/theusual/string.rb
39
40
  - lib/theusual/time.rb
40
41
  - test/test_array.rb
41
42
  - test/test_hash.rb
42
43
  - test/test_ip_addr.rb
44
+ - test/test_string.rb
43
45
  - test/test_time.rb
44
46
  homepage: https://github.com/d1hotpep/theusualrb
45
47
  licenses:
@@ -69,4 +71,5 @@ test_files:
69
71
  - test/test_array.rb
70
72
  - test/test_hash.rb
71
73
  - test/test_ip_addr.rb
74
+ - test/test_string.rb
72
75
  - test/test_time.rb