hash_brown 0.0.1 → 0.0.2

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.
data/README.md ADDED
@@ -0,0 +1,37 @@
1
+ # hash_brown
2
+
3
+ Access your Hash elements with a method call!
4
+
5
+ If you're using strings or symbols as keys, save yourself a character by using hash_brown.
6
+
7
+ ## Installation
8
+
9
+ $ gem install hash_brown
10
+
11
+ If you're using Bundler, add this line to your `Gemfile`:
12
+
13
+ gem 'hash_brown'
14
+
15
+ ## Usage
16
+ hash = { :key_sym => 'sym_val', 'key_str' => 'str_val' }
17
+ # => {:key_sym=>"sym_val", "key_str"=>"str_val"}
18
+
19
+ hash.key_sym # => "sym_val"
20
+ hash.key_str # => "str_val"
21
+ hash.key_str = 'new_val' # => "new_val"
22
+ hash.new_key = 'next_val' # => "next_val"
23
+ hash
24
+ # => {:key_sym=>"sym_val", "key_str"=>"new_val", :new_key=>"next_val"}
25
+
26
+
27
+ # WARNING! Modifies the behavior of Hash.
28
+
29
+ This is not a very useful gem. You probably don't want to use it.
30
+
31
+ Namespacing? Modules? Nope, just hijacking Hash's `method_missing`.
32
+
33
+ Behavior that I didn't intend is very likely. Please open an issue if you find some.
34
+
35
+ ## Why?
36
+
37
+ My first gem. This is mostly an exercise in gem creation. High on education, low on utility.
data/lib/hash_brown.rb CHANGED
@@ -2,8 +2,14 @@ require 'hash_brown/version'
2
2
 
3
3
  class Hash
4
4
  def method_missing meth, *args, &block
5
- return self[meth] if self.has_key? meth
6
- return self[meth.to_s] if self.has_key? meth.to_s
7
- super
5
+ if meth[-1] == '='
6
+ key = meth[0..-2]
7
+ return self[key] = args[0] if key? key
8
+ return self[key.to_sym] = args[0]
9
+ else
10
+ return self[meth] if key? meth
11
+ return self[meth.to_s] if key? meth.to_s
12
+ super
13
+ end
8
14
  end
9
15
  end
@@ -1,3 +1,3 @@
1
1
  module HashBrown
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -59,14 +59,65 @@ describe HashBrown do
59
59
 
60
60
  context 'writer' do
61
61
 
62
- xit 'assigns a symbol' do
62
+ it 'assigns a symbol' do
63
63
  hash.key_sym = 'new_val'
64
+
64
65
  hash.key_sym.should == 'new_val'
65
66
  end
66
67
 
67
- xit 'assigns a string' do
68
+ it 'assigns a string' do
68
69
  hash.key_str = 'new_val'
70
+
69
71
  hash.key_str.should == 'new_val'
72
+ hash.key_str.should == hash['key_str']
73
+ end
74
+
75
+ context 'given comparable symbol and string keys' do
76
+ before { hash[key_value] = 'old_val' }
77
+
78
+ context 'no key exists' do
79
+ let(:key_value) { 'old_key' }
80
+
81
+ it 'assigns to symbol' do
82
+ hash.new_key = 'new_val'
83
+
84
+ hash.new_key.should == 'new_val'
85
+ hash.new_key.should == hash[:new_key]
86
+ end
87
+ end
88
+
89
+ context 'only symbol key exists' do
90
+ let(:key_value) { :key_sym }
91
+
92
+ it 'assigns to symbol' do
93
+ hash.key_sym = 'new_val'
94
+
95
+ hash.key_sym.should == 'new_val'
96
+ hash.key_sym.should == hash[key_value]
97
+ end
98
+ end
99
+
100
+ context 'only string key exists' do
101
+ let(:key_value) { 'key_str' }
102
+
103
+ it 'assigns to string' do
104
+ hash.key_str = 'new_val'
105
+
106
+ hash.key_str.should == 'new_val'
107
+ hash.key_str.should == hash[key_value]
108
+ end
109
+ end
110
+
111
+ context 'both symbol and string keys exist' do
112
+ let(:key_value) { :key_sym }
113
+
114
+ it 'assigns to symbol' do
115
+ hash.key_sym = 'new_val'
116
+
117
+ hash.key_sym.should == 'new_val'
118
+ hash.key_sym.should == hash[key_value]
119
+ end
120
+ end
70
121
  end
71
122
  end
72
123
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_brown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-30 00:00:00.000000000 -06:00
12
+ date: 2012-01-05 00:00:00.000000000 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
17
- requirement: &2168495840 !ruby/object:Gem::Requirement
17
+ requirement: &2153250780 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,7 +22,7 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *2168495840
25
+ version_requirements: *2153250780
26
26
  description: ! "Now you don't need to fuss with brackets when using Hashes.\n Abuses
27
27
  method_missing responsibly."
28
28
  email:
@@ -33,6 +33,7 @@ extra_rdoc_files: []
33
33
  files:
34
34
  - .gitignore
35
35
  - Gemfile
36
+ - README.md
36
37
  - Rakefile
37
38
  - hash_brown.gemspec
38
39
  - lib/hash_brown.rb