ethos 0.2.0.beta5 → 0.2.0.beta6

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.
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