monkey-hash 1.4.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.
- checksums.yaml +7 -0
- data/lib/amqproto.rb +5 -0
- data/lib/array.rb +25 -0
- data/lib/hash.rb +62 -0
- data/lib/monkey-hash.rb +9 -0
- data/lib/nil.rb +6 -0
- data/lib/numeric.rb +4 -0
- data/lib/object.rb +17 -0
- data/lib/proc.rb +5 -0
- data/lib/string.rb +71 -0
- data/lib/thread.rb +7 -0
- metadata +94 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3744b8367a8403e91db82ac34fde2bd37d1e2db0eff1ef31a85e12273000be3f
|
4
|
+
data.tar.gz: 570f07b507623129d1ac05ded669c7943419c9d2fcc3936134cae2d57243020f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8eaec6b817e5d66f0fd0161acca6c1fa1367269db20255f80c6d340f5f9d9698191f0b853e143fd0d5acb4d9750f97cf9c5be7a9d0ab3c041df4df6aace3e99c
|
7
|
+
data.tar.gz: '0842fbca99d64c0197b3a5776f56b92cb521e592815261524597cd84d292ad96d3c7fdfa3a5d6adbbb7eabbd6387c76719c55738df0aeb165b4b01b55c20d2ac'
|
data/lib/amqproto.rb
ADDED
data/lib/array.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
class Array
|
2
|
+
alias :super_include? :include?
|
3
|
+
alias :present? :any?
|
4
|
+
|
5
|
+
def include?(*list)
|
6
|
+
list.count == 1 ? super_include?(list.first) : ( self & list ).count == list.count
|
7
|
+
end
|
8
|
+
|
9
|
+
def include_one?( *list )
|
10
|
+
(self & list).count > 0
|
11
|
+
end
|
12
|
+
|
13
|
+
def symbolize_hashes
|
14
|
+
z = []
|
15
|
+
self.each do |i|
|
16
|
+
z << case i
|
17
|
+
when Array then i.symbolize_hashes
|
18
|
+
when Hash then i.keys_to_symbols
|
19
|
+
else
|
20
|
+
Marshal.load(Marshal.dump(i))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
return z
|
24
|
+
end
|
25
|
+
end
|
data/lib/hash.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Hash
|
3
|
+
|
4
|
+
def add_keysym_from(h)
|
5
|
+
h.each{|k,v| self[ k.to_sym ] = v }
|
6
|
+
self
|
7
|
+
end
|
8
|
+
def present?; ! self.empty?; end
|
9
|
+
|
10
|
+
def method_missing( m, *args )
|
11
|
+
case m[-1]
|
12
|
+
when '?'
|
13
|
+
n = m[0..-2].to_sym
|
14
|
+
self.key?(n) || self.key?(n.to_s)
|
15
|
+
when '='
|
16
|
+
self[ m[0..-2].to_sym ] = args.first
|
17
|
+
else
|
18
|
+
self[m] || self[m.to_s]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def keys_to_symbols
|
23
|
+
z = {}
|
24
|
+
self.each do |k,v|
|
25
|
+
z[ k.is_a?(String) ? k.to_sym : k ] =
|
26
|
+
if v.class == Hash
|
27
|
+
v.keys_to_symbols
|
28
|
+
elsif v.respond_to?(:to_hash)
|
29
|
+
v.to_hash.keys_to_symbols
|
30
|
+
elsif v.respond_to?(:collect)
|
31
|
+
v.collect{|i| i.respond_to?(:keys_to_symbols) ? i.keys_to_symbols : i }
|
32
|
+
else
|
33
|
+
v.dup
|
34
|
+
end
|
35
|
+
end
|
36
|
+
z
|
37
|
+
end
|
38
|
+
|
39
|
+
def deep_merge(src)
|
40
|
+
dst = dup
|
41
|
+
dst.merge(src){|k, o1, o2|
|
42
|
+
if o1.is_a?(o2.class) && o1.respond_to?(:deep_merge)
|
43
|
+
o1.deep_merge(o2)
|
44
|
+
else # classes mismatch or simple type
|
45
|
+
o2.dup
|
46
|
+
end
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
def keys?(*list)
|
51
|
+
keys.include?(*list)
|
52
|
+
end
|
53
|
+
|
54
|
+
def any_key?(*list)
|
55
|
+
(( self.keys & list ).count > 0 ) && !! ( self.keys & list )
|
56
|
+
end
|
57
|
+
|
58
|
+
def filter_keys( *kk )
|
59
|
+
filter{ |k, v| kk.include?(k) }
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
data/lib/monkey-hash.rb
ADDED
data/lib/nil.rb
ADDED
data/lib/numeric.rb
ADDED
data/lib/object.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
class Object
|
2
|
+
def present?
|
3
|
+
! nil?
|
4
|
+
end
|
5
|
+
def to_a
|
6
|
+
[ self ]
|
7
|
+
end
|
8
|
+
|
9
|
+
# stolen from activesupport core extensions
|
10
|
+
def try( method_name = nil, *args, &b )
|
11
|
+
if method_name.nil? && block_given?
|
12
|
+
b.arity == 0 ? instance_eval( &b ) : yield( self )
|
13
|
+
elsif respond_to?( method_name )
|
14
|
+
public_send( method_name, *args, &b )
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/proc.rb
ADDED
data/lib/string.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'json'
|
3
|
+
require 'msgpack'
|
4
|
+
require 'zlib'
|
5
|
+
require 'nori'
|
6
|
+
require_relative 'hash'
|
7
|
+
|
8
|
+
class String
|
9
|
+
def like_number?
|
10
|
+
x = self.gsub( /^([+-]?)\./, "#{ $1 }0." )
|
11
|
+
!! ( x =~ /^[-+]?(\d+)(\.\d+(e[-+]?\d+)?)?$/ )
|
12
|
+
end
|
13
|
+
def present?; ! empty?; end
|
14
|
+
def blank?; nil? || empty? end
|
15
|
+
def from_json
|
16
|
+
t = JSON.parse( self ) rescue {}
|
17
|
+
safe_parse_hash( t )
|
18
|
+
end
|
19
|
+
def from_yaml
|
20
|
+
t = YAML.load( self ) rescue {}
|
21
|
+
safe_parse_hash( t )
|
22
|
+
end
|
23
|
+
def from_msgpack
|
24
|
+
t = MessagePack.unpack( self ) rescue {}
|
25
|
+
safe_parse_hash( t )
|
26
|
+
end
|
27
|
+
def from_zlib
|
28
|
+
Zlib::Inflate.inflate self
|
29
|
+
end
|
30
|
+
def from_xml
|
31
|
+
# Защита от кулхацкеров
|
32
|
+
if self =~ /<!DOCTYPE[^>]+>|xsi:schemaLocation\s*=|<xs:schema|xmlns:xs=/
|
33
|
+
raise RuntimeError.new('Invalid XML data provided')
|
34
|
+
end
|
35
|
+
# На всякий случай удаляем заголовок, могут быть глюки у Nori
|
36
|
+
Nori.new(
|
37
|
+
:convert_tags_to => lambda { |tag| tag.snakecase.to_sym }
|
38
|
+
).parse self.gsub(/^<\?xml[^>]+>\n*/i,'')
|
39
|
+
end
|
40
|
+
def to_a
|
41
|
+
[self]
|
42
|
+
end
|
43
|
+
|
44
|
+
def snakecase
|
45
|
+
self.gsub( /[[:upper:]]+/) {|m| "_#{ m.downcase }" }.gsub(/\A_/,'')
|
46
|
+
end
|
47
|
+
|
48
|
+
def camelcase
|
49
|
+
self.gsub( /(\A|_)[[:lower:]]+/ ) {|m| m.gsub(/^_/,'').capitalize }
|
50
|
+
end
|
51
|
+
|
52
|
+
# Stupid encoding without any parsing as described in Twitter OAuth doc
|
53
|
+
# https://developer.twitter.com/en/docs/basics/authentication/oauth-1-0a/percent-encoding-parameters
|
54
|
+
# http://tools.ietf.org/html/rfc3986#section-2.1
|
55
|
+
def percent_encode
|
56
|
+
@@percent_encode_table ||= [ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45,0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B,0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65,0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B,0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71,0x72, 0x73, 0x74, 0x75, 0x76, 0x77,0x78, 0x79, 0x7A, 0x2D, 0x2E, 0x5F, 0x7E ].freeze
|
57
|
+
self.each_byte.collect{|i| @@percent_encode_table.include?(i) ? ("%c" % i) : ("%%%02X" % i) }.join()
|
58
|
+
end
|
59
|
+
|
60
|
+
def safe_parse_hash( t )
|
61
|
+
case t
|
62
|
+
when Array
|
63
|
+
t.collect{|item| item.is_a?( Hash ) ? item.keys_to_symbols : item }
|
64
|
+
when Hash
|
65
|
+
t.keys_to_symbols
|
66
|
+
else
|
67
|
+
t
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
data/lib/thread.rb
ADDED
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: monkey-hash
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.4.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- deemytch
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-07-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: msgpack
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nori
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: nokogiri
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description:
|
56
|
+
email: aspamkiller@yandex.ru
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- lib/amqproto.rb
|
62
|
+
- lib/array.rb
|
63
|
+
- lib/hash.rb
|
64
|
+
- lib/monkey-hash.rb
|
65
|
+
- lib/nil.rb
|
66
|
+
- lib/numeric.rb
|
67
|
+
- lib/object.rb
|
68
|
+
- lib/proc.rb
|
69
|
+
- lib/string.rb
|
70
|
+
- lib/thread.rb
|
71
|
+
homepage: https://github.com/deemytch/monkey-hash
|
72
|
+
licenses:
|
73
|
+
- GPL-2.0
|
74
|
+
metadata: {}
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
requirements: []
|
90
|
+
rubygems_version: 3.1.3
|
91
|
+
signing_key:
|
92
|
+
specification_version: 4
|
93
|
+
summary: Simple additions for standard classes.
|
94
|
+
test_files: []
|