bound 0.1.2 → 0.1.3

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.
@@ -1,3 +1,3 @@
1
1
  class Bound
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -11,7 +11,8 @@ describe HashObject do
11
11
  :posts => [
12
12
  {:title => 'It is christmas'},
13
13
  {:title => 'NOT'}
14
- ]
14
+ ],
15
+ :living? => true
15
16
  }
16
17
  end
17
18
 
@@ -21,5 +22,6 @@ describe HashObject do
21
22
  assert_equal hash[:posts].size, subject.posts.size
22
23
  assert_equal hash[:posts][0][:title], subject.posts[0].title
23
24
  assert_equal hash[:posts][1][:title], subject.posts[1].title
25
+ assert_equal hash[:living?], subject.living?
24
26
  end
25
27
  end
@@ -7,16 +7,29 @@
7
7
  # OpenStruct.new(:id => 2).name # => nil
8
8
  # HashObject.new(:id => 2).name # => NoMethodError
9
9
  #
10
+ # We also can not us struct, because it breaks on 1.9.3
11
+ # with ?-postifxed attributes.
12
+ #
13
+ # Hence this bare-metal implementation
14
+ #
10
15
  class HashObject
11
16
  def self.new(hash)
12
17
  attributes = hash.keys
13
- values = hash.values
14
- if attributes.empty?
15
- Class.new
16
- else
17
- mapped_values = values.map { |v| map_value(v) }
18
- Struct.new(*attributes).new(*mapped_values)
18
+
19
+ cls = Class.new
20
+
21
+ attributes.each do |attr|
22
+ define_accessor cls, attr
23
+ end
24
+
25
+ instance = cls.new
26
+
27
+ attributes.each do |attr|
28
+ value = map_value(hash[attr])
29
+ assign_value instance, attr, value
19
30
  end
31
+
32
+ instance
20
33
  end
21
34
 
22
35
  def self.map_value(value)
@@ -29,4 +42,20 @@ class HashObject
29
42
  value
30
43
  end
31
44
  end
45
+
46
+ def self.define_accessor(cls, attribute)
47
+ cls.send :define_method, :"#{attribute}=" do |a|
48
+ @suffix_attributes ||= {}
49
+ @suffix_attributes[attribute] = a
50
+ end
51
+
52
+ cls.send :define_method, :"#{attribute}" do
53
+ @suffix_attributes ||= {}
54
+ @suffix_attributes[attribute]
55
+ end
56
+ end
57
+
58
+ def self.assign_value(instance, attr, value)
59
+ instance.send :"#{attr}=", value
60
+ end
32
61
  end
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bound
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Jakob Holderbaum
@@ -9,11 +10,12 @@ authors:
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2013-10-01 00:00:00.000000000 Z
13
+ date: 2013-10-02 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: bundler
16
17
  requirement: !ruby/object:Gem::Requirement
18
+ none: false
17
19
  requirements:
18
20
  - - ~>
19
21
  - !ruby/object:Gem::Version
@@ -21,6 +23,7 @@ dependencies:
21
23
  type: :development
22
24
  prerelease: false
23
25
  version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
24
27
  requirements:
25
28
  - - ~>
26
29
  - !ruby/object:Gem::Version
@@ -28,20 +31,23 @@ dependencies:
28
31
  - !ruby/object:Gem::Dependency
29
32
  name: rake
30
33
  requirement: !ruby/object:Gem::Requirement
34
+ none: false
31
35
  requirements:
32
- - - '>='
36
+ - - ! '>='
33
37
  - !ruby/object:Gem::Version
34
38
  version: '0'
35
39
  type: :development
36
40
  prerelease: false
37
41
  version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
38
43
  requirements:
39
- - - '>='
44
+ - - ! '>='
40
45
  - !ruby/object:Gem::Version
41
46
  version: '0'
42
47
  - !ruby/object:Gem::Dependency
43
48
  name: minitest
44
49
  requirement: !ruby/object:Gem::Requirement
50
+ none: false
45
51
  requirements:
46
52
  - - ~>
47
53
  - !ruby/object:Gem::Version
@@ -49,6 +55,7 @@ dependencies:
49
55
  type: :development
50
56
  prerelease: false
51
57
  version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
52
59
  requirements:
53
60
  - - ~>
54
61
  - !ruby/object:Gem::Version
@@ -56,15 +63,17 @@ dependencies:
56
63
  - !ruby/object:Gem::Dependency
57
64
  name: simplecov
58
65
  requirement: !ruby/object:Gem::Requirement
66
+ none: false
59
67
  requirements:
60
- - - '>='
68
+ - - ! '>='
61
69
  - !ruby/object:Gem::Version
62
70
  version: '0'
63
71
  type: :development
64
72
  prerelease: false
65
73
  version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
66
75
  requirements:
67
- - - '>='
76
+ - - ! '>='
68
77
  - !ruby/object:Gem::Version
69
78
  version: '0'
70
79
  description:
@@ -91,26 +100,33 @@ files:
91
100
  homepage: ''
92
101
  licenses:
93
102
  - MIT
94
- metadata: {}
95
103
  post_install_message:
96
104
  rdoc_options: []
97
105
  require_paths:
98
106
  - lib
99
107
  required_ruby_version: !ruby/object:Gem::Requirement
108
+ none: false
100
109
  requirements:
101
- - - '>='
110
+ - - ! '>='
102
111
  - !ruby/object:Gem::Version
103
112
  version: '0'
113
+ segments:
114
+ - 0
115
+ hash: -3582315724912543482
104
116
  required_rubygems_version: !ruby/object:Gem::Requirement
117
+ none: false
105
118
  requirements:
106
- - - '>='
119
+ - - ! '>='
107
120
  - !ruby/object:Gem::Version
108
121
  version: '0'
122
+ segments:
123
+ - 0
124
+ hash: -3582315724912543482
109
125
  requirements: []
110
126
  rubyforge_project:
111
- rubygems_version: 2.0.0
127
+ rubygems_version: 1.8.25
112
128
  signing_key:
113
- specification_version: 4
129
+ specification_version: 3
114
130
  summary: Implements a nice helper for fast boundary definitions
115
131
  test_files:
116
132
  - spec/bound_spec.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 0c59c6c0f35aaaddeab4dfbea0f9987845b3f1be
4
- data.tar.gz: 9046059a697cd8300cb0d3b699729f03f9ba0c82
5
- SHA512:
6
- metadata.gz: bc0c1d56bb48519bd7fa99a5e1594fa10f1140f694ec16b46b49ded5249a99d74a708302210dc5fc07ec1859d621bb8f2167d105ddc54d80caccb9ac1c902181
7
- data.tar.gz: 397d6a4af2cef4b156b638c13d3f02455ddd9254e8e193a7f1cb6aec34b0bf2400c9a691537e80afd38ded7657d0799a6a70982e6bd8c2731dc9881145ce143d