gob 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,11 @@
1
+ # Blatantly stealing the following utility methods from the Rails API.
2
+ class Object
3
+ def blank?
4
+ respond_to?(:empty?) ? !!empty? : !self
5
+ end
6
+
7
+ def present?
8
+ !blank?
9
+ end
10
+ end
11
+
@@ -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
+
@@ -0,0 +1,4 @@
1
+ module Gob
2
+ VERSION = '0.1.1'.freeze
3
+ end
4
+
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: []