gob 0.1.1
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/blank.rb +11 -0
- data/lib/gob.rb +14 -0
- data/lib/gob/enhanced_hash.rb +134 -0
- data/lib/gob/version.rb +4 -0
- metadata +145 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 19fa570db8a6df9f2849f50293625514cd4c1ea9
|
4
|
+
data.tar.gz: 7e7d9576a83331512956d92ab53b6d05f242d5c2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2f4f8cd28df925d593862b15851174550650ead0b019e65222af2b84c1573ecc187e0597d5d63c9df7524ddef2df4849eab02dfa7b9bc6f235bd1a58bc8f3600
|
7
|
+
data.tar.gz: af9d1423b005513c49fd8283f538347581260ad8cdca916a0b89e670a98eca02fb073bf95c689ea4beb0c1e233cad1c6e3f308f91d4c633a4bd0842743a369a7
|
data/lib/blank.rb
ADDED
data/lib/gob.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'gob/version'
|
2
|
+
require 'gob/enhanced_hash'
|
3
|
+
require 'blank'
|
4
|
+
|
5
|
+
module Gob
|
6
|
+
# Allow us to return an instance of the Options class as the
|
7
|
+
# module itself.
|
8
|
+
def new(init_options = {})
|
9
|
+
EnhancedHash.new(init_options)
|
10
|
+
end
|
11
|
+
|
12
|
+
module_function :new
|
13
|
+
end
|
14
|
+
|
@@ -0,0 +1,134 @@
|
|
1
|
+
class EnhancedHash
|
2
|
+
attr_accessor :hash
|
3
|
+
|
4
|
+
def initialize(init_options = {})
|
5
|
+
@hash = {}
|
6
|
+
init_options.each_pair { |k, v| set(k, v) }
|
7
|
+
self
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_a
|
11
|
+
@hash.values
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_h
|
15
|
+
@hash
|
16
|
+
end
|
17
|
+
|
18
|
+
def method_missing(*args)
|
19
|
+
key = args[0].to_sym
|
20
|
+
case key[-1]
|
21
|
+
when '?'
|
22
|
+
key = key[0..-2].to_sym
|
23
|
+
true?(key)
|
24
|
+
when '='
|
25
|
+
key = key[0..-2].to_sym
|
26
|
+
set(key, args[1])
|
27
|
+
else
|
28
|
+
fetch(key)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def set(*args)
|
33
|
+
first_arg = args[0]
|
34
|
+
case first_arg
|
35
|
+
when String, Symbol
|
36
|
+
key = first_arg.to_sym
|
37
|
+
value = args.at(1).nil? ? true : args[1] # no value, default to true
|
38
|
+
@hash[key] = value
|
39
|
+
when Hash
|
40
|
+
first_arg.each_pair { |k, v| set(k, v) }
|
41
|
+
else
|
42
|
+
fail ArgumentError.new('Argument to set must be string, symbol or hash (given: %s)' % first_arg.to_s)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def fetch(key)
|
47
|
+
@hash.fetch(key.to_sym, nil)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Checks to see that all passed symbols exist
|
51
|
+
def has?(*args)
|
52
|
+
check_args(args) do |arg|
|
53
|
+
@hash.key?(arg.to_sym)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def has_any?(*args)
|
58
|
+
check_any_args(args) do |arg|
|
59
|
+
@hash.key?(arg.to_sym)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Checks to see that all passed symbols exist and are truthy
|
64
|
+
def true?(*args)
|
65
|
+
check_args(args) do |arg|
|
66
|
+
!@hash[arg.to_sym].blank?
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Checks to see that any of the passed symbols exists and is truthy
|
71
|
+
def true_any?(*args)
|
72
|
+
check_any_args(args) do |arg|
|
73
|
+
!@hash[arg.to_sym].blank?
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Checks to see that all passed symbols exist and are falsey
|
78
|
+
def false?(*args)
|
79
|
+
check_args(args) do |arg|
|
80
|
+
@hash[arg.to_sym].blank?
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Checks to see that any of the passed symbols exists and is falsey
|
85
|
+
def false_any?(*args)
|
86
|
+
check_any_args(args) do |arg|
|
87
|
+
@hash[arg.to_sym].blank?
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def debug?
|
92
|
+
@hash[:loglevel].upcase == 'DEBUG'
|
93
|
+
end
|
94
|
+
|
95
|
+
def delete_field(key)
|
96
|
+
key = key.to_sym
|
97
|
+
@hash.delete(key) if has?(key)
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
# Check each of the args that are passed in using the block defined in the
|
103
|
+
# original method. If we're looking to match ALL values, then we assume true
|
104
|
+
# until proven false; if we're looking for ANY values, we assume false until
|
105
|
+
# proven true (and can then stop looking at further arguments).
|
106
|
+
def do_arg_check(args, all = true)
|
107
|
+
bool = all
|
108
|
+
args.each do |arg|
|
109
|
+
case arg
|
110
|
+
when Symbol, String
|
111
|
+
if all
|
112
|
+
bool = yield(arg)
|
113
|
+
else
|
114
|
+
if yield(arg)
|
115
|
+
bool = true
|
116
|
+
break
|
117
|
+
end
|
118
|
+
end
|
119
|
+
else
|
120
|
+
fail ArgumentError.new('Argument to set must be string or symbol (given: %s)' % arg.to_s)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
bool
|
124
|
+
end
|
125
|
+
|
126
|
+
def check_args(args, &block)
|
127
|
+
do_arg_check(args, true, &block)
|
128
|
+
end
|
129
|
+
|
130
|
+
def check_any_args(args, &block)
|
131
|
+
do_arg_check(args, false, &block)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
data/lib/gob/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gob
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Allison Holt
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-04-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.11'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.11'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: guard
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.14'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.14'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard-minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mocha
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.1'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: minitest
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '5.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '5.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: minitest-reporters
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.1'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.1'
|
111
|
+
description:
|
112
|
+
email:
|
113
|
+
- hey@alli.fyi
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- lib/blank.rb
|
119
|
+
- lib/gob.rb
|
120
|
+
- lib/gob/enhanced_hash.rb
|
121
|
+
- lib/gob/version.rb
|
122
|
+
homepage: https://github.com/allizon/gob
|
123
|
+
licenses: []
|
124
|
+
metadata: {}
|
125
|
+
post_install_message:
|
126
|
+
rdoc_options: []
|
127
|
+
require_paths:
|
128
|
+
- lib
|
129
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
requirements: []
|
140
|
+
rubyforge_project:
|
141
|
+
rubygems_version: 2.6.14.1
|
142
|
+
signing_key:
|
143
|
+
specification_version: 4
|
144
|
+
summary: Create "generic objects" with lots of magical syntactical sugar!
|
145
|
+
test_files: []
|