ethos 0.2.0.beta5 → 0.2.0.beta6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c27f8f8f52e943a5a3e0f4001bd2dbd0e51dfde2
4
- data.tar.gz: d9934aa42583ef5992e77ca9aa2ff70b1eff97f2
3
+ metadata.gz: a5276ca4d23c477202536ce281058bbf651ee991
4
+ data.tar.gz: 8b8b8b06029d531098f59b7a35c3fc9a210f0af9
5
5
  SHA512:
6
- metadata.gz: 409a53cba266a6c85d9f063f2ac3b5f001fa9ccab7141a351af1df5f91cbae5522d39cb130fe027a3e4fcdeb6bf04dac96194a9f514befe6dc5d168e87cbdd47
7
- data.tar.gz: 8e30891588e5433b6454c4986985d3eb4d8da22009f85c69d5c5a79777f34e2225f32fdd57e0e3b75495df8be4fd8365def92f6f35da3eb0ceaaa0ab82f23432
6
+ metadata.gz: 6e444f7539a1d2edc76945a986ac9515584d11de2634c9e4bd98b989ff252344de784cb73c55b832718438dcee7ad64e1517b6bde64a948dd4827731d75d3326
7
+ data.tar.gz: 6baf42220b5190238dd5ee074c56ca508de73c4236df57d37f9d84b14f94e877085847a953612317d659a7e35aade4b20b3c07af96ebc62bd365a4da57b0a395
@@ -0,0 +1,50 @@
1
+ module Ethos
2
+ class Collection
3
+ def type=(type)
4
+ @_type = type
5
+ end
6
+
7
+ def type
8
+ @_type
9
+ end
10
+
11
+ def initialize(values)
12
+ @_values = values
13
+ end
14
+
15
+ def size
16
+ @_values.size
17
+ end
18
+
19
+ def [](index)
20
+ memoize index do
21
+ Ethos::Type.cast @_values[index], type
22
+ end
23
+ end
24
+
25
+ def ==(other)
26
+ return false unless other.is_a? self.class
27
+ return false unless self.size == other.size
28
+
29
+ not size.times.any? do |i|
30
+ self[i] != other[i]
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def memoized
37
+ @_memoized ||= []
38
+ end
39
+
40
+ def memoize(index)
41
+ return memoized[index] if memoized[index]
42
+
43
+ memoized[index] = yield
44
+ end
45
+
46
+ def unmemoize(index)
47
+ memoized[index] = nil
48
+ end
49
+ end
50
+ end
data/lib/ethos/entity.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'ethos/schema'
2
2
  require 'ethos/attributes'
3
+ require 'ethos/collection'
3
4
 
4
5
  module Ethos
5
6
  module Entity
@@ -22,6 +23,12 @@ module Ethos
22
23
  attributes[key] = value
23
24
  end
24
25
  end
26
+
27
+ def collection(key, type)
28
+ attribute key, Ethos::Collection, default: []
29
+
30
+ schema.attributes[key][:extensions].push Proc.new { self.type = type }
31
+ end
25
32
  end
26
33
 
27
34
  def self.prepended(base)
data/lib/ethos/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ethos
2
- VERSION = '0.2.0.beta5'
2
+ VERSION = '0.2.0.beta6'
3
3
  end
data/spec/ethos/entity.rb CHANGED
@@ -131,6 +131,45 @@ scope do
131
131
  end
132
132
  end
133
133
 
134
+ scope do
135
+ setup do
136
+ class Entity
137
+ prepend Ethos::Entity
138
+
139
+ attribute :name, String
140
+ collection :children, Entity
141
+ end
142
+ end
143
+
144
+ scope do
145
+ define entity: -> { Entity.new }
146
+
147
+ spec do
148
+ asserts(entity.children.size) == 0
149
+ end
150
+ end
151
+
152
+ scope do
153
+ define entity: -> { Entity.new children: [{name: 'Child 1'}, {name: 'Child 2'}] }
154
+
155
+ spec do
156
+ asserts(entity.children.size) == 2
157
+ end
158
+
159
+ spec do
160
+ expected = Entity.new name: 'Child 1'
161
+
162
+ asserts(entity.children[0]) == expected
163
+ end
164
+
165
+ spec do
166
+ expected = Entity.new name: 'Child 2'
167
+
168
+ asserts(entity.children[1]) == expected
169
+ end
170
+ end
171
+ end
172
+
134
173
  scope do
135
174
  setup do
136
175
  class Entity
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ethos
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0.beta5
4
+ version: 0.2.0.beta6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erol Fornoles
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-13 00:00:00.000000000 Z
11
+ date: 2015-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -82,6 +82,7 @@ files:
82
82
  - ethos.gemspec
83
83
  - lib/ethos.rb
84
84
  - lib/ethos/attributes.rb
85
+ - lib/ethos/collection.rb
85
86
  - lib/ethos/entity.rb
86
87
  - lib/ethos/schema.rb
87
88
  - lib/ethos/type.rb