hashie 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -4,3 +4,4 @@ coverage
4
4
  rdoc
5
5
  pkg
6
6
  *.gem
7
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ # A sample Gemfile
2
+ source :gemcutter
3
+
4
+ group :development do
5
+ gem 'rake'
6
+ gem 'json'
7
+ end
8
+
9
+ group :test do
10
+ gem 'rspec'
11
+ end
@@ -0,0 +1,25 @@
1
+ ---
2
+ dependencies:
3
+ rake:
4
+ group:
5
+ - :development
6
+ version: ">= 0"
7
+ rspec:
8
+ group:
9
+ - :test
10
+ version: ">= 0"
11
+ json:
12
+ group:
13
+ - :development
14
+ version: ">= 0"
15
+ specs:
16
+ - rake:
17
+ version: 0.8.7
18
+ - json:
19
+ version: 1.4.3
20
+ - rspec:
21
+ version: 1.3.0
22
+ hash: d9c314ac1790a9ac25dfdaf7574b86d62b88f1d5
23
+ sources:
24
+ - Rubygems:
25
+ uri: http://gemcutter.org
data/Rakefile CHANGED
@@ -30,8 +30,6 @@ Spec::Rake::SpecTask.new(:rcov) do |spec|
30
30
  spec.rcov = true
31
31
  end
32
32
 
33
- task :spec => :check_dependencies
34
-
35
33
  task :default => :spec
36
34
 
37
35
  require 'rake/rdoctask'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{hashie}
8
- s.version = "0.2.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Bleigh"]
12
- s.date = %q{2010-03-05}
12
+ s.date = %q{2010-06-22}
13
13
  s.description = %q{Hashie is a small collection of tools that make hashes more powerful. Currently includes Mash (Mocking Hash) and Dash (Discrete Hash).}
14
14
  s.email = %q{michael@intridea.com}
15
15
  s.extra_rdoc_files = [
@@ -19,6 +19,8 @@ Gem::Specification.new do |s|
19
19
  s.files = [
20
20
  ".document",
21
21
  ".gitignore",
22
+ "Gemfile",
23
+ "Gemfile.lock",
22
24
  "LICENSE",
23
25
  "README.rdoc",
24
26
  "Rakefile",
@@ -4,5 +4,19 @@ module Hashie
4
4
  # not be available in all libraries.
5
5
  class Hash < Hash
6
6
  include Hashie::HashExtensions
7
+
8
+ # Converts a mash back to a hash (with stringified keys)
9
+ def to_hash
10
+ out = {}
11
+ keys.each do |k|
12
+ out[k] = Hashie::Hash === self[k] ? self[k].to_hash : self[k]
13
+ end
14
+ out
15
+ end
16
+
17
+ # The C geneartor for the json gem doesn't like mashies
18
+ def to_json(*args)
19
+ to_hash.to_json(*args)
20
+ end
7
21
  end
8
- end
22
+ end
@@ -111,12 +111,8 @@ module Hashie
111
111
  alias_method :update, :deep_update
112
112
  alias_method :merge!, :update
113
113
 
114
- # Converts a mash back to a hash (with stringified keys)
115
- def to_hash
116
- Hash.new(default).merge(self)
117
- end
118
114
 
119
- def method_missing(method_name, *args)
115
+ def method_missing(method_name, *args, &blk)
120
116
  return self[method_name] if key?(method_name)
121
117
  match = method_name.to_s.match(/(.*?)([?=!]?)$/)
122
118
  case match[2]
@@ -127,7 +123,7 @@ module Hashie
127
123
  when "!"
128
124
  initializing_reader(match[1])
129
125
  else
130
- default(method_name)
126
+ default(method_name, *args, &blk)
131
127
  end
132
128
  end
133
129
 
@@ -4,62 +4,62 @@ describe Hashie::Mash do
4
4
  before(:each) do
5
5
  @mash = Hashie::Mash.new
6
6
  end
7
-
7
+
8
8
  it "should inherit from hash" do
9
9
  @mash.is_a?(Hash).should be_true
10
10
  end
11
-
11
+
12
12
  it "should be able to set hash values through method= calls" do
13
13
  @mash.test = "abc"
14
14
  @mash["test"].should == "abc"
15
15
  end
16
-
16
+
17
17
  it "should be able to retrieve set values through method calls" do
18
18
  @mash["test"] = "abc"
19
19
  @mash.test.should == "abc"
20
20
  end
21
-
21
+
22
22
  it "should test for already set values when passed a ? method" do
23
23
  @mash.test?.should be_false
24
24
  @mash.test = "abc"
25
25
  @mash.test?.should be_true
26
26
  end
27
-
27
+
28
28
  it "should make all [] and []= into strings for consistency" do
29
29
  @mash["abc"] = 123
30
30
  @mash.key?('abc').should be_true
31
31
  @mash["abc"].should == 123
32
32
  end
33
-
33
+
34
34
  it "should have a to_s that is identical to its inspect" do
35
35
  @mash.abc = 123
36
36
  @mash.to_s.should == @mash.inspect
37
37
  end
38
-
38
+
39
39
  it "should return nil instead of raising an error for attribute-esque method calls" do
40
40
  @mash.abc.should be_nil
41
41
  end
42
-
42
+
43
43
  it "should return a Hashie::Mash when passed a bang method to a non-existenct key" do
44
44
  @mash.abc!.is_a?(Hashie::Mash).should be_true
45
45
  end
46
-
46
+
47
47
  it "should return the existing value when passed a bang method for an existing key" do
48
48
  @mash.name = "Bob"
49
49
  @mash.name!.should == "Bob"
50
50
  end
51
-
51
+
52
52
  it "#initializing_reader should return a Hashie::Mash when passed a non-existent key" do
53
53
  @mash.initializing_reader(:abc).is_a?(Hashie::Mash).should be_true
54
54
  end
55
-
55
+
56
56
  it "should allow for multi-level assignment through bang methods" do
57
57
  @mash.author!.name = "Michael Bleigh"
58
58
  @mash.author.should == Hashie::Mash.new(:name => "Michael Bleigh")
59
59
  @mash.author!.website!.url = "http://www.mbleigh.com/"
60
60
  @mash.author.website.should == Hashie::Mash.new(:url => "http://www.mbleigh.com/")
61
61
  end
62
-
62
+
63
63
  it "#deep_update should recursively Hashie::Mash Hashie::Mashes and hashes together" do
64
64
  @mash.first_name = "Michael"
65
65
  @mash.last_name = "Bleigh"
@@ -67,53 +67,53 @@ describe Hashie::Mash do
67
67
  @mash.deep_update({:details => {:email => "michael@intridea.com"}})
68
68
  @mash.details.email.should == "michael@intridea.com"
69
69
  end
70
-
70
+
71
71
  it "should convert hash assignments into Hashie::Mashes" do
72
72
  @mash.details = {:email => 'randy@asf.com', :address => {:state => 'TX'} }
73
73
  @mash.details.email.should == 'randy@asf.com'
74
74
  @mash.details.address.state.should == 'TX'
75
75
  end
76
-
76
+
77
77
  it "should not convert the type of Hashie::Mashes childs to Hashie::Mash" do
78
78
  class MyMash < Hashie::Mash
79
79
  end
80
-
80
+
81
81
  record = MyMash.new
82
82
  record.son = MyMash.new
83
83
  record.son.class.should == MyMash
84
84
  end
85
-
85
+
86
86
  context "#initialize" do
87
87
  it "should convert an existing hash to a Hashie::Mash" do
88
88
  converted = Hashie::Mash.new({:abc => 123, :name => "Bob"})
89
89
  converted.abc.should == 123
90
90
  converted.name.should == "Bob"
91
91
  end
92
-
92
+
93
93
  it "should convert hashes recursively into Hashie::Mashes" do
94
94
  converted = Hashie::Mash.new({:a => {:b => 1, :c => {:d => 23}}})
95
95
  converted.a.is_a?(Hashie::Mash).should be_true
96
96
  converted.a.b.should == 1
97
97
  converted.a.c.d.should == 23
98
98
  end
99
-
99
+
100
100
  it "should convert hashes in arrays into Hashie::Mashes" do
101
101
  converted = Hashie::Mash.new({:a => [{:b => 12}, 23]})
102
102
  converted.a.first.b.should == 12
103
103
  converted.a.last.should == 23
104
104
  end
105
-
105
+
106
106
  it "should convert an existing Hashie::Mash into a Hashie::Mash" do
107
107
  initial = Hashie::Mash.new(:name => 'randy', :address => {:state => 'TX'})
108
108
  copy = Hashie::Mash.new(initial)
109
- initial.name.should == copy.name
109
+ initial.name.should == copy.name
110
110
  initial.object_id.should_not == copy.object_id
111
111
  copy.address.state.should == 'TX'
112
112
  copy.address.state = 'MI'
113
113
  initial.address.state.should == 'TX'
114
114
  copy.address.object_id.should_not == initial.address.object_id
115
115
  end
116
-
116
+
117
117
  it "should accept a default block" do
118
118
  initial = Hashie::Mash.new { |h,i| h[i] = []}
119
119
  initial.default_proc.should_not be_nil
@@ -121,5 +121,15 @@ describe Hashie::Mash do
121
121
  initial.test.should == []
122
122
  initial.test?.should be_true
123
123
  end
124
+
125
+ describe "to_json" do
126
+
127
+ it "should render to_json" do
128
+ @mash.foo = :bar
129
+ @mash.bar = {"homer" => "simpson"}
130
+ expected = {"foo" => "bar", "bar" => {"homer" => "simpson"}}
131
+ JSON.parse(@mash.to_json).should == expected
132
+ end
133
+ end
124
134
  end
125
- end
135
+ end
@@ -1,3 +1,6 @@
1
+ require 'rubygems'
2
+ require 'json'
3
+
1
4
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
5
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
6
 
@@ -6,5 +9,5 @@ require 'spec'
6
9
  require 'spec/autorun'
7
10
 
8
11
  Spec::Runner.configure do |config|
9
-
12
+
10
13
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 0
9
- version: 0.2.0
8
+ - 1
9
+ version: 0.2.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Michael Bleigh
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-05 00:00:00 -05:00
17
+ date: 2010-06-22 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -41,6 +41,8 @@ extra_rdoc_files:
41
41
  files:
42
42
  - .document
43
43
  - .gitignore
44
+ - Gemfile
45
+ - Gemfile.lock
44
46
  - LICENSE
45
47
  - README.rdoc
46
48
  - Rakefile