hash_plus 1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b9267cb1a1e240b821d6ae0dd0bebd992cd0b33a
4
+ data.tar.gz: c7dcdd02b364543613e93f48dad90f2463f3a1cc
5
+ SHA512:
6
+ metadata.gz: ba42169256a8a06cc34d695f6c40768223b68f26f96f82d990912839bb41a9d63f62cedacbebf213e747f1466fe787063f8f65c6f0e00c172f05b9cf6c1cceff
7
+ data.tar.gz: 0a6bb6ac0776161ee41eefbce80e932964bf66aca74a9c6e547510b9a930820a291d67af150003e0c7220055917c2b544f58eb794455b7895fe71bfd627994b3
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
data/README.md ADDED
@@ -0,0 +1,23 @@
1
+ hash_plus
2
+ =========
3
+
4
+ Extensions to the Ruby Hash class
5
+
6
+ ```ruby
7
+
8
+ my_vehicle = {
9
+ :make => 'Subaru',
10
+ :model => 'Forester',
11
+ :year => 2525,
12
+ }
13
+
14
+ my_vehicle.requires_fields(:make, :model) # No errors
15
+
16
+ my_vehicle.requires_fields(:mileage) # Raises Argument error
17
+
18
+ my_vehicle[:mileage] = nil
19
+ my_vehicle.requires_fields(:mileage) # Raises Argument error
20
+
21
+ my_vehicle[:mileage] = 40_000
22
+ my_vehicle.requires_fields(:mileage) # No errors
23
+ ```
data/hash_plus.gemspec ADDED
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "hash_plus"
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.name = "hash_plus"
7
+ gem.version = '1.0'
8
+ gem.authors = ["Glenn Nagel"]
9
+ gem.email = ["glenn@mercury-wireless.com"]
10
+ gem.homepage = "https://github.com/gnagel/hash_plus"
11
+ gem.summary = %q{Handy extensions to the Ruby Hash class}
12
+ gem.description = %q{Extensions to the Hash class for checking form input}
13
+ gem.license = 'MIT'
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib", "tasks"]
19
+ end
data/lib/hash_plus.rb ADDED
@@ -0,0 +1,18 @@
1
+ class Hash
2
+ # Short hand methods
3
+ def requires(*cols); requires_fields(cols); end
4
+ def missing(*cols); missing_fields(cols); end
5
+
6
+ # Raise an ArgumentError if there are missing columns
7
+ def requires_fields(*cols)
8
+ missing = missing_fields(cols)
9
+ unless missing.empty?
10
+ raise ArgumentError, "Missing value for keys=#{missing.join(',')} in opts=#{self.inspect}"
11
+ end
12
+ end
13
+
14
+ # Return the missing columns
15
+ def missing_fields(*cols)
16
+ cols.select { |required_key| self[required_key].nil? }
17
+ end
18
+ end
@@ -0,0 +1,27 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+ require 'rspec-expectations'
4
+
5
+
6
+ $:.push File.expand_path("../lib", File.dirname(__FILE__))
7
+ require 'hash_plus'
8
+
9
+ describe Hash do
10
+ context "empty hash" do
11
+ subject(:hash) { Hash.new }
12
+ it { hash.missing_fields(:a).first.should === :a }
13
+ it { hash.missing_fields(:a, :b, :c).should =~ [:a, :b, :c] }
14
+
15
+ it { expect { hash.requires_fields(:a) }.to raise_error ArgumentError, "Missing value for keys=a in opts={}" }
16
+ end
17
+
18
+ context "hash containing values" do
19
+ subject(:hash) { {:a => 'b', :c => 'd'} }
20
+ it { hash.missing_fields(:a).should be_empty }
21
+ it { hash.missing_fields(:a, :c).should be_empty }
22
+ it { hash.missing_fields(:a, :b, :c).should =~ [:b] }
23
+
24
+ it { expect { hash.requires_fields(:b) }.to raise_error ArgumentError, "Missing value for keys=b in opts=#{hash.inspect}" }
25
+ end
26
+
27
+ end
metadata ADDED
@@ -0,0 +1,51 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hash_plus
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ platform: ruby
6
+ authors:
7
+ - Glenn Nagel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-20 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Extensions to the Hash class for checking form input
14
+ email:
15
+ - glenn@mercury-wireless.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - .gitignore
21
+ - README.md
22
+ - hash_plus.gemspec
23
+ - lib/hash_plus.rb
24
+ - spec/hash_plus_spec.rb
25
+ homepage: https://github.com/gnagel/hash_plus
26
+ licenses:
27
+ - MIT
28
+ metadata: {}
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ - tasks
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ requirements: []
45
+ rubyforge_project:
46
+ rubygems_version: 2.0.3
47
+ signing_key:
48
+ specification_version: 4
49
+ summary: Handy extensions to the Ruby Hash class
50
+ test_files:
51
+ - spec/hash_plus_spec.rb