hash_control 0.1.2 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6c58ba9b45b5b93680cc8d22d8dd859b355bafd3
4
- data.tar.gz: c98ed21ba6469980f703b23f2eefeccdd6f2f8f0
3
+ metadata.gz: 91db8077b43e392011ad2d957a0b1994fc504170
4
+ data.tar.gz: a05d93cb0a18727dd4ab9645dfad99d2aeb100bf
5
5
  SHA512:
6
- metadata.gz: c0bf551ed0f381f37b44fc87d922ca5aec7bd16f7d8839388e58c557528f69110ea962125e991608fd35a0d9abb4ca149426a755c9cee5b13df6c7f9c8188504
7
- data.tar.gz: e72d077a10b5161b67637ad9602df132cb753283db5b5bf6d006f172783f538ac8f6c2b56f24c06496cd2f437bd7fd6b175ec21f7e01e98e372cc17d137c69f8
6
+ metadata.gz: ef8617b5b1ddd826b5560cbf7f579234dbd712097986c9cd0ad58ed845a17d6cbf63ee38abcfcc85d5eda3064ef54795d6255af8ccfe4480534aa3901b09c718
7
+ data.tar.gz: 9fe6d8c6302fbe60a1e8d2a500d479ff2a71579ae5406eaa665d159727d583465daf412f3cc94ec39d0e57ba38b5a3726352b997e88b327a1a8db3a7b96e9f81
data/.travis.yml CHANGED
@@ -3,5 +3,10 @@ script: rspec
3
3
  rvm:
4
4
  - 1.9.3
5
5
  - 2.0.0
6
- - 2.1.0
6
+ - 2.1.6
7
+ - 2.2.2
7
8
  - ruby-head
9
+ matrix:
10
+ allow_failures:
11
+ - rvm: ruby-head
12
+ fast_finish: true
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
- # HashControl
1
+ HashControl
2
+ ===========
2
3
 
3
4
  [![Build Status](https://travis-ci.org/szhu/hashcontrol.svg?branch=master)](https://travis-ci.org/szhu/hashcontrol)
4
5
  [![Code Climate](https://codeclimate.com/github/szhu/hashcontrol/badges/gpa.svg)](https://codeclimate.com/github/szhu/hashcontrol)
@@ -89,3 +90,10 @@ end
89
90
  CustomValidator.new(get_request).validate_get_request
90
91
  CustomValidator.new(post_request).validate_post_request
91
92
  ```
93
+
94
+ ## Credit
95
+
96
+ **HashControl** was originally designed and written by [@szhu] at [@IFTTT].
97
+
98
+ [@szhu]: https://github.com/szhu
99
+ [@IFTTT]: https://github.com/IFTTT
data/hash_control.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
8
8
  END
9
9
 
10
10
  gem.version = ::HashControl::VERSION
11
- gem.date = '2014-08-22'
11
+ gem.date = '2015-06-26'
12
12
 
13
13
  gem.homepage = 'https://github.com/szhu/hashcontrol'
14
14
  gem.authors = ['Sean Zhu']
@@ -17,7 +17,7 @@ module HashControl
17
17
  end
18
18
 
19
19
  def slice(*keys)
20
- @symbolized_hash.select { |key, _| keys.include? key.to_sym }
20
+ symbolized_hash.select { |key, _| keys.include? key.to_sym }
21
21
  end
22
22
 
23
23
  def [](name)
@@ -58,7 +58,7 @@ module HashControl
58
58
 
59
59
  def key_accessor(name)
60
60
  name = name.to_sym
61
- return if self.respond_to?(name)
61
+ return if self.method_defined?(name)
62
62
  class_eval do
63
63
  define_method(name) { @hash[name] }
64
64
  end
@@ -78,7 +78,7 @@ module HashControl
78
78
  module ClassMethods
79
79
  def key_accessor(name)
80
80
  name = name.to_sym
81
- return if self.respond_to?(name)
81
+ return if self.method_defined?(name)
82
82
  class_eval do
83
83
  define_method(name) { @hash[name] }
84
84
  define_method("#{name}=") { |x| @hash[name] = x }
@@ -1,3 +1,3 @@
1
1
  module HashControl
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -13,6 +13,26 @@ describe HashControl::Model do
13
13
  require_key :id
14
14
  permit_all_keys
15
15
  end
16
+
17
+ # This class is used to test for the bug from 0.1.2. #require_key and
18
+ # #permit_key are supposed to make a reader method iff the key does not
19
+ # conflict with an instance method, not a class method.
20
+ #
21
+ # Below, :name and :superclass are class-only methods (reader method
22
+ # should be made), while :symbolized_hash and :slice are instance-only
23
+ # methods (reader method should not be made).
24
+ class MethodConflictTest
25
+ include ::HashControl::Model
26
+ require_key :name, :symbolized_hash
27
+ permit_key :superclass, :slice
28
+ end
29
+
30
+ @method_conflict_test = MethodConflictTest.new(
31
+ name: 'value of :name',
32
+ symbolized_hash: 'value of :symbolized_hash',
33
+ superclass: 'value of :superclass',
34
+ slice: 'value of :slice'
35
+ )
16
36
  end
17
37
 
18
38
  describe "making an instance should error if it" do
@@ -47,7 +67,17 @@ describe HashControl::Model do
47
67
  expect(@comment.image).to eq(nil)
48
68
  end
49
69
  it "not other keys" do
50
- expect{@comment.nonexistent}.to raise_error(NoMethodError)
70
+ expect { @comment.nonexistent }.to raise_error(NoMethodError)
71
+ end
72
+ it "even keys that conflict with class methods" do
73
+ expect(@method_conflict_test.name).to eq('value of :name')
74
+ expect(@method_conflict_test.superclass).to eq('value of :superclass')
75
+ end
76
+ it "not keys that conflict with instance methods" do
77
+ # If these methods were unintentionally overwritten (as they were in
78
+ # 0.1.2), then they would return Strings.
79
+ expect(@method_conflict_test.symbolized_hash).to be_a Hash
80
+ expect(@method_conflict_test.slice).to be_a Hash
51
81
  end
52
82
  end
53
83
 
@@ -62,6 +92,9 @@ describe HashControl::Model do
62
92
  end
63
93
  end
64
94
 
95
+ it "#slice should work" do
96
+ expect(@comment.slice(:author, :body).keys.to_set).to eq([:author, :body].to_set)
97
+ end
65
98
  end
66
99
 
67
100
  describe "that permits all keys" do
@@ -74,12 +107,12 @@ describe HashControl::Model do
74
107
  expect(@something.id).to eq(1)
75
108
  end
76
109
  it "not implicitly-permitted keys" do
77
- expect{@something.body}.to raise_error(NoMethodError)
78
- expect{@something.nonexistent}.to raise_error(NoMethodError)
110
+ expect { @something.body }.to raise_error(NoMethodError)
111
+ expect { @something.nonexistent }.to raise_error(NoMethodError)
79
112
  end
80
113
  it "not other keys" do
81
- expect{@something.body}.to raise_error(NoMethodError)
82
- expect{@something.nonexistent}.to raise_error(NoMethodError)
114
+ expect { @something.body }.to raise_error(NoMethodError)
115
+ expect { @something.nonexistent }.to raise_error(NoMethodError)
83
116
  end
84
117
  end
85
118
 
@@ -91,6 +124,10 @@ describe HashControl::Model do
91
124
  expect(@something[:nonexistent]).to eq(nil)
92
125
  end
93
126
  end
127
+
128
+ it "#slice should work" do
129
+ expect(@something.slice(:body).keys.to_set).to eq([:body].to_set)
130
+ end
94
131
  end
95
132
  end
96
133
  end
@@ -28,28 +28,28 @@ describe HashControl::Validator do
28
28
  describe "when used as its own class," do
29
29
  # `require` ensures certain keys are present
30
30
  it "require should work properly" do
31
- expect{ validate(@post_request).require(:post) }.not_to raise_error
32
- expect{ validate(@post_request).require(:body) }.not_to raise_error
33
- expect{ validate(@post_request).require(:post, :body) }.not_to raise_error
34
- expect{ validate(@post_request).require(:nonexistent) }.to raise_error(ArgumentError)
31
+ expect { validate(@post_request).require(:post) }.not_to raise_error
32
+ expect { validate(@post_request).require(:body) }.not_to raise_error
33
+ expect { validate(@post_request).require(:post, :body) }.not_to raise_error
34
+ expect { validate(@post_request).require(:nonexistent) }.to raise_error(ArgumentError)
35
35
  end
36
36
 
37
37
  # `require_n_of` ensures at least n of certain keys are present
38
38
  it "require_n_of should work properly" do
39
- expect{ validate(@post_request).require_n_of(2, :post, :body) }.not_to raise_error
39
+ expect { validate(@post_request).require_n_of(2, :post, :body) }.not_to raise_error
40
40
  end
41
41
 
42
42
  # `permit` marks keys as allowed but doesn't do any verification
43
43
  it "permit should work properly" do
44
- expect{ validate(@post_request).permit(:body) }.not_to raise_error
45
- expect{ validate(@post_request).permit(:nonexistent) }.not_to raise_error
44
+ expect { validate(@post_request).permit(:body) }.not_to raise_error
45
+ expect { validate(@post_request).permit(:nonexistent) }.not_to raise_error
46
46
  end
47
47
 
48
48
  # `only` ensures no other keys are present
49
49
  it "only should work properly" do
50
- expect{ validate(@post_request).only }.to raise_error(ArgumentError)
51
- expect{ validate(@post_request).require(:post).only }.to raise_error(ArgumentError)
52
- expect{ validate(@post_request).require(:post).permit(:body).only }.not_to raise_error
50
+ expect { validate(@post_request).only }.to raise_error(ArgumentError)
51
+ expect { validate(@post_request).require(:post).only }.to raise_error(ArgumentError)
52
+ expect { validate(@post_request).require(:post).permit(:body).only }.not_to raise_error
53
53
  end
54
54
  end
55
55
 
@@ -71,13 +71,13 @@ describe HashControl::Validator do
71
71
  end
72
72
 
73
73
  it "should work properly for allowed hashes" do
74
- expect{ CustomValidator.new(@get_request).validate_get_request }.not_to raise_error
75
- expect{ CustomValidator.new(@post_request).validate_post_request }.not_to raise_error
76
- expect{ CustomValidator.new(@not_allowed_but_currently_ok).validate_post_request }.not_to raise_error
74
+ expect { CustomValidator.new(@get_request).validate_get_request }.not_to raise_error
75
+ expect { CustomValidator.new(@post_request).validate_post_request }.not_to raise_error
76
+ expect { CustomValidator.new(@not_allowed_but_currently_ok).validate_post_request }.not_to raise_error
77
77
  end
78
78
 
79
79
  it "should work properly for invalid hashes" do
80
- expect{ CustomValidator.new(@empty).validate_get_request }.to raise_error(ArgumentError)
80
+ expect { CustomValidator.new(@empty).validate_get_request }.to raise_error(ArgumentError)
81
81
  end
82
82
  end
83
83
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_control
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Zhu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-22 00:00:00.000000000 Z
11
+ date: 2015-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,8 +24,8 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.0'
27
- description: |2
28
- Provides some conveniences for validating and manipulating hash-like data.
27
+ description: " Provides some conveniences for validating and manipulating hash-like
28
+ data.\n"
29
29
  email: interestinglythere@gmail.com
30
30
  executables: []
31
31
  extensions: []