reindeer 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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +0 -2
- data/README.md +49 -41
- data/lib/reindeer/meta.rb +2 -2
- data/lib/reindeer/version.rb +1 -1
- data/spec/reindeer/attributes_spec.rb +13 -0
- data/{.rspec → spec/spec_helper.rb} +0 -0
- metadata +9 -14
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 69a46e362ec033d7e2681ea545e96c9d6d3f9a60
|
4
|
+
data.tar.gz: cdf916813387c7cbdba22161b627260ef3d7c0c6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 944cb90ba2b6d8bb74b089a2c79dfd942463b2a1515da32eea5ec8ecf12010a074204113d836855eb42d0128caaae639bf9bc4c82980e94d9a4615ee72cda384
|
7
|
+
data.tar.gz: 258f371f131f9efddbb49c92688566dba79af9718f6d0341812dc3c76f0d83e7cbb3c9f255b5912f9a4bb99e6d4c8dd299412bddaeb1871181fa9ddc4a906758
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -9,18 +9,20 @@ borrowed from [Moose](http://p3rl.org/Moose).
|
|
9
9
|
|
10
10
|
# Usage
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
```ruby
|
13
|
+
require 'reindeer'
|
14
|
+
class Point < Reindeer
|
15
|
+
has :x, is: :rw, is_a: Integer
|
16
|
+
has :y, is: :rw, is_a: Integer
|
17
|
+
end
|
18
|
+
class Point3D < Point
|
19
|
+
has :z, is: :rw, is_a: Integer
|
20
|
+
end
|
21
|
+
```
|
20
22
|
|
21
23
|
# Features
|
22
24
|
|
23
|
-
These features are supported to a
|
25
|
+
These features are supported to a lesser or greater extent:
|
24
26
|
|
25
27
|
## Construction
|
26
28
|
|
@@ -111,21 +113,23 @@ To compose a role in a Reindeer class two expressions are required,
|
|
111
113
|
latter brings in the role attributes and asserts the existence of any
|
112
114
|
required methods e.g
|
113
115
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
116
|
+
```ruby
|
117
|
+
module Breakable
|
118
|
+
include Reindeer::Role
|
119
|
+
has :is_broken, default: -> { false }
|
120
|
+
requires :fix!
|
121
|
+
end
|
122
|
+
|
123
|
+
class Egg < Reindeer
|
124
|
+
with Breakable
|
125
|
+
|
126
|
+
def fix!
|
127
|
+
throw :no_dice if is_broken
|
128
|
+
end
|
129
|
+
|
130
|
+
meta.compose!
|
131
|
+
end
|
132
|
+
```
|
129
133
|
|
130
134
|
The `.does?` method can be used to inspect which roles have been
|
131
135
|
consumed e.g `Egg.does?(Breakable) == true`.
|
@@ -140,29 +144,33 @@ Given that Ruby has a well established class system one need only
|
|
140
144
|
assert an attribute is of a given (existing) class a Reindeer will go
|
141
145
|
to the trouble of asserting that when the attribute value is set e.g
|
142
146
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
147
|
+
```ruby
|
148
|
+
class AccountSqlTable < Reindeer
|
149
|
+
has :id, is_a: Fixnum
|
150
|
+
has :owner, is_a: String
|
151
|
+
has :amount, is_a: Float
|
152
|
+
# ...
|
153
|
+
end
|
154
|
+
```
|
149
155
|
|
150
156
|
However if you need a specific type of class (e.g strings of a certain
|
151
157
|
length) then a custom type constraint is needed. These can be defined
|
152
158
|
simply by composing the `Reindeer::Role::TypeConstraint` and
|
153
159
|
implementing a `verify` method e.g
|
154
160
|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
161
|
+
```ruby
|
162
|
+
class Varchar255 < Reindeer
|
163
|
+
with Reindeer::Role::TypeConstraint
|
164
|
+
def verify(v)
|
165
|
+
v.length <= 255
|
166
|
+
end
|
167
|
+
meta.compose!
|
168
|
+
end
|
169
|
+
|
170
|
+
class AccountSqlTable # continued from above
|
171
|
+
has :summary, type_of: Varchar255
|
172
|
+
end
|
173
|
+
```
|
166
174
|
|
167
175
|
*NB* The distinction between class and type constraints seems apt at this
|
168
176
|
point but is by no means set in stone. Hopefully the passage of time
|
data/lib/reindeer/meta.rb
CHANGED
@@ -88,12 +88,12 @@ class Reindeer
|
|
88
88
|
end
|
89
89
|
|
90
90
|
def has_attribute?(name)
|
91
|
-
|
91
|
+
get_all_attributes.any? {|a| a.name == name }
|
92
92
|
end
|
93
93
|
|
94
94
|
def get_attribute(sym)
|
95
95
|
sym = sym.sub(/^@/, '').to_sym if sym.is_a?(String)
|
96
|
-
|
96
|
+
get_all_attributes.select{|a| a.name == sym}.first
|
97
97
|
end
|
98
98
|
end
|
99
99
|
end
|
data/lib/reindeer/version.rb
CHANGED
@@ -219,4 +219,17 @@ describe 'Reindeer attributes' do
|
|
219
219
|
end
|
220
220
|
}.to raise_error(Reindeer::Meta::Attribute::AttributeError)
|
221
221
|
end
|
222
|
+
|
223
|
+
it 'should find attributes up the inheritance chain' do
|
224
|
+
class NineteenthOne < Reindeer
|
225
|
+
has :foo, is: :rw
|
226
|
+
class Specialised < NineteenthOne
|
227
|
+
has :bar
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
obj = NineteenthOne::Specialised.new(bar: 'abc')
|
232
|
+
obj.foo = 123
|
233
|
+
expect(obj.foo).to eq(123)
|
234
|
+
end
|
222
235
|
end
|
File without changes
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reindeer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Dan Brook
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-04-14 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rspec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -49,7 +44,6 @@ executables: []
|
|
49
44
|
extensions: []
|
50
45
|
extra_rdoc_files: []
|
51
46
|
files:
|
52
|
-
- .rspec
|
53
47
|
- CHANGELOG.md
|
54
48
|
- Gemfile
|
55
49
|
- Gemfile.lock
|
@@ -68,29 +62,29 @@ files:
|
|
68
62
|
- spec/reindeer/roles_spec.rb
|
69
63
|
- spec/reindeer/types_spec.rb
|
70
64
|
- spec/reindeer_spec.rb
|
65
|
+
- spec/spec_helper.rb
|
71
66
|
homepage: http://github.com/broquaint/reindeer
|
72
67
|
licenses: []
|
68
|
+
metadata: {}
|
73
69
|
post_install_message:
|
74
70
|
rdoc_options: []
|
75
71
|
require_paths:
|
76
72
|
- lib
|
77
73
|
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
-
none: false
|
79
74
|
requirements:
|
80
|
-
- -
|
75
|
+
- - '>='
|
81
76
|
- !ruby/object:Gem::Version
|
82
77
|
version: '1.9'
|
83
78
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
-
none: false
|
85
79
|
requirements:
|
86
|
-
- -
|
80
|
+
- - '>='
|
87
81
|
- !ruby/object:Gem::Version
|
88
82
|
version: '0'
|
89
83
|
requirements: []
|
90
84
|
rubyforge_project:
|
91
|
-
rubygems_version:
|
85
|
+
rubygems_version: 2.0.14
|
92
86
|
signing_key:
|
93
|
-
specification_version:
|
87
|
+
specification_version: 4
|
94
88
|
summary: Moose sugar in Ruby
|
95
89
|
test_files:
|
96
90
|
- spec/reindeer/attributes_spec.rb
|
@@ -98,3 +92,4 @@ test_files:
|
|
98
92
|
- spec/reindeer/roles_spec.rb
|
99
93
|
- spec/reindeer/types_spec.rb
|
100
94
|
- spec/reindeer_spec.rb
|
95
|
+
- spec/spec_helper.rb
|