mostash 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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -3,6 +3,7 @@ require 'ostruct'
3
3
  require File.join(File.dirname(__FILE__), "mostash", "mostash")
4
4
 
5
5
  def dbg( msg )
6
- file_name = __FILE__.split( '/' ).last
7
- puts "#{file_name} ##{__LINE__}: #{msg}"
6
+ file, line, method_raw = caller[0].split('/').last.split(':')
7
+ method = method_raw.match(/^in `(.+)'/)[1]
8
+ puts "#{method} (#{file}##{line}): #{msg}"
8
9
  end
@@ -21,6 +21,35 @@ class MoStash < OpenStruct
21
21
  self.send "#{key.to_s}"
22
22
  end
23
23
 
24
+ def merge(new_hash)
25
+ new_mo = @table.merge( new_hash ) do |key, oldval, newval|
26
+ if oldval.class == MoStash
27
+ oldval.merge newval
28
+ else
29
+ newval
30
+ end
31
+ end
32
+ MoStash.new( new_mo )
33
+ end
34
+
35
+ #TODO: HACK!!!!!
36
+ def merge!(new_hash)
37
+ @table = self.merge( new_hash ).instance_variable_get( '@table' )
38
+ self
39
+ end
40
+
41
+ def to_hash
42
+ hash = {}
43
+ @table.each_pair do |key, value|
44
+ hash[key] = if value.class == MoStash
45
+ value.to_hash
46
+ else
47
+ value
48
+ end
49
+ end
50
+ hash
51
+ end
52
+
24
53
  private
25
54
 
26
55
  def __init__(hash)
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'MoStash as Hash' do
4
+ it "should support merge when single level" do
5
+ mo = MoStash.new :foo => 'bar', :hello => 'world'
6
+
7
+ new_mo = mo.merge( :hello => 'tester' )
8
+
9
+ new_mo[:foo].should == 'bar'
10
+ new_mo[:hello].should == 'tester'
11
+ end
12
+
13
+ it "should support merge of single level when multi leveled" do
14
+ mo = MoStash.new( { :foo => 'bar', :nested => { :hello => 'world' }} )
15
+
16
+ new_mo = mo.merge( :foo => 'baz' )
17
+
18
+ new_mo[:foo].should == 'baz'
19
+ new_mo[:nested][:hello].should == 'world'
20
+ end
21
+
22
+ it "should support merge of multi levels when is multi leveled" do
23
+ mo = MoStash.new( { :foo => 'bar', :nested => { :hello => 'world' }} )
24
+
25
+ new_mo = mo.merge( :nested => { :hello => 'tester' } )
26
+
27
+ new_mo[:foo].should == 'bar'
28
+ new_mo[:nested][:hello].should == 'tester'
29
+ new_mo[:nested].class.should == MoStash
30
+ end
31
+
32
+ it "should support merge!" do
33
+ mo = MoStash.new( :foo => 'bar' )
34
+
35
+ mo.merge!( :foo => 'baz' )
36
+ mo.foo.should == 'baz'
37
+ end
38
+
39
+ it "should support multi level merge!" do
40
+ mo = MoStash.new( { :foo => 'bar', :nested => { :hello => 'world' }} )
41
+
42
+ mo.merge!( :nested => { :hello => 'tester' } )
43
+
44
+ mo[:foo].should == 'bar'
45
+ mo[:nested][:hello].should == 'tester'
46
+ mo[:nested].class.should == MoStash
47
+ end
48
+
49
+ it "should be able to return a hash for single level" do
50
+ mo = MoStash.new( :foo => 'bar' )
51
+
52
+ mo.to_hash.should == { :foo => 'bar' }
53
+ end
54
+
55
+ it "should be able to return a hash for multi level" do
56
+ mo = MoStash.new( :foo => 'bar', :nested => { :hello => 'world' } )
57
+
58
+ mo.to_hash.should == { :foo => 'bar', :nested => { :hello => 'world' } }
59
+ end
60
+ end
61
+
metadata CHANGED
@@ -3,32 +3,32 @@ name: mostash
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
- - 0
7
- - 0
8
- - 1
9
- version: 0.0.1
6
+ - 0
7
+ - 0
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
- - Joel Friedman
12
+ - Joel Friedman
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-05-02 00:00:00 -05:00
17
+ date: 2010-05-05 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: rspec
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- version: "0"
30
- type: :development
31
- version_requirements: *id001
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :development
31
+ version_requirements: *id001
32
32
  description: You can treat an object as either a hash or as an OpenStruct. In additon to this you can create them nested, unlike OpenStruct
33
33
  email: asher.friedman@gmail.com
34
34
  executables: []
@@ -36,38 +36,39 @@ executables: []
36
36
  extensions: []
37
37
 
38
38
  extra_rdoc_files:
39
- - README.markdown
39
+ - README.markdown
40
40
  files:
41
- - README.markdown
42
- - Rakefile
43
- - VERSION
44
- - lib/mostash.rb
45
- - lib/mostash/mostash.rb
46
- - spec/mostash_spec.rb
47
- - spec/spec_helper.rb
41
+ - README.markdown
42
+ - Rakefile
43
+ - VERSION
44
+ - lib/mostash.rb
45
+ - lib/mostash/mostash.rb
46
+ - spec/as_hash_spec.rb
47
+ - spec/mostash_spec.rb
48
+ - spec/spec_helper.rb
48
49
  has_rdoc: true
49
50
  homepage:
50
51
  licenses: []
51
52
 
52
53
  post_install_message:
53
54
  rdoc_options:
54
- - --charset=UTF-8
55
+ - --charset=UTF-8
55
56
  require_paths:
56
- - lib
57
+ - lib
57
58
  required_ruby_version: !ruby/object:Gem::Requirement
58
59
  requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- segments:
62
- - 0
63
- version: "0"
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ segments:
63
+ - 0
64
+ version: "0"
64
65
  required_rubygems_version: !ruby/object:Gem::Requirement
65
66
  requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- segments:
69
- - 0
70
- version: "0"
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 0
71
+ version: "0"
71
72
  requirements: []
72
73
 
73
74
  rubyforge_project:
@@ -76,5 +77,6 @@ signing_key:
76
77
  specification_version: 3
77
78
  summary: A combo of OpenStruct and a ruby hash
78
79
  test_files:
79
- - spec/mostash_spec.rb
80
- - spec/spec_helper.rb
80
+ - spec/as_hash_spec.rb
81
+ - spec/mostash_spec.rb
82
+ - spec/spec_helper.rb