deepstruct 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.markdown CHANGED
@@ -11,15 +11,11 @@ An adapter that wraps common ruby data-structures and makes them look like prope
11
11
  Installation
12
12
  ============
13
13
 
14
- Not yet published as a gem, so you'll have to
15
-
16
- git clone git@github.com:simen/deepstruct.git
17
- cd deepstruct
18
- rake install
14
+ gem install deepstruct
19
15
 
20
16
  Or if you use the awesomeness that is bundler, you stick this in your Gemfile:
21
17
 
22
- gem "deepstruct", :git => git@github.com:simen/deepstruct.git
18
+ gem "deepstruct"
23
19
 
24
20
  Usage
25
21
  =====
data/lib/deepstruct.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'set'
2
+
1
3
  module DeepStruct
2
4
  class DeepWrapper
3
5
  def initialize(value)
@@ -55,7 +57,10 @@ module DeepStruct
55
57
  def method_missing(method, *args, &block)
56
58
  return @value.send(method, *args, &block) if @value.respond_to?(method)
57
59
  method = method.to_s
58
- if method.chomp!('=')
60
+ if method.chomp!('?')
61
+ key = method.to_sym
62
+ @value.has_key?(key) && !!@value[key]
63
+ elsif method.chomp!('=')
59
64
  raise ArgumentError, "wrong number of arguments (#{arg_count} for 1)", caller(1) if args.length != 1
60
65
  self[method] = args[0]
61
66
  elsif args.length == 0 && self.has_key?(method)
@@ -84,11 +89,11 @@ module DeepStruct
84
89
  def self.wrap(value)
85
90
  case value
86
91
  when Hash
87
- return HashWrapper.new(value)
88
- when Enumerable
89
- return ArrayWrapper.new(value)
92
+ HashWrapper.new(value)
93
+ when Array, Set
94
+ ArrayWrapper.new(value)
90
95
  else
91
- return value
96
+ value
92
97
  end
93
98
  end
94
99
  end
@@ -1,3 +1,3 @@
1
1
  module Deepstruct
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -114,6 +114,14 @@ describe DeepStruct do
114
114
  struct = DeepStruct.wrap({:a => true})
115
115
  struct.respond_to?(:a=).should be_true
116
116
  end
117
+ end
117
118
 
119
+ describe "predicate methods" do
120
+ subject { DeepStruct.wrap({:a => 1, :b => false, :c => nil, :d => true}) }
121
+ its(:a?) { should be_true }
122
+ its(:b?) { should be_false }
123
+ its(:c?) { should be_false }
124
+ its(:d?) { should be_true }
118
125
  end
126
+
119
127
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deepstruct
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,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-29 00:00:00.000000000Z
12
+ date: 2012-06-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70116432443300 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,12 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70116432443300
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  description: A sibling of ostruct that handles deeply nested structures and basic
26
31
  data type detection
27
32
  email:
@@ -60,7 +65,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
65
  version: '0'
61
66
  requirements: []
62
67
  rubyforge_project: deepstruct
63
- rubygems_version: 1.8.10
68
+ rubygems_version: 1.8.24
64
69
  signing_key:
65
70
  specification_version: 3
66
71
  summary: A sibling of ostruct that handles deeply nested structures and basic data