hanswurst 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/README.md +13 -1
  2. data/VERSION +1 -1
  3. data/lib/hanswurst.rb +31 -31
  4. data/test/test_hanswurst.rb +35 -15
  5. metadata +23 -23
data/README.md CHANGED
@@ -5,7 +5,19 @@ Hanswurst is a library that uses couch potato to create arbitrary
5
5
  objects that may have different roles. The roles determine the
6
6
  properties and they can be mixed and matched at will.
7
7
 
8
- Hanswurst is only tested with ruby 1.9.2 and above.
8
+
9
+ Installation
10
+ ------------
11
+ _hanswurst_ is only tested with ruby 1.9.2 and above.
12
+
13
+ Install it as a gem:
14
+
15
+ sudo gem install hanswurst
16
+
17
+ or in rvm:
18
+
19
+ gem install hanswurst
20
+
9
21
 
10
22
  Example:
11
23
  --------
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
data/lib/hanswurst.rb CHANGED
@@ -44,7 +44,7 @@ class Hanswurst
44
44
  errors = @value.errors.messages.collect do |field, err|
45
45
  "#{field} #{err.join('/')}"
46
46
  end.join(" # ")
47
- "role not valid #{@role}: #{errors}"
47
+ "#{@role} not valid: #{errors}"
48
48
  end
49
49
  end
50
50
 
@@ -61,7 +61,7 @@ class Hanswurst
61
61
  # I keep this commented out to inform the reader that we don't want this in order to easily reuse general lists
62
62
  #options[:list] &&= :"#{role_alias}_#{options[:list]}"
63
63
  options[:conditions] &&= " && ( #{options[:conditions]} )"
64
- options[:conditions] = "(doc.roles.#{role_alias} !== undefined)#{options[:conditions]}"
64
+ options[:conditions] = "(doc.hanswurst_roles.#{role_alias} !== undefined)#{options[:conditions]}"
65
65
  self.view :"#{role_alias}_#{viewname}", options
66
66
  end
67
67
 
@@ -106,12 +106,12 @@ class Hanswurst
106
106
  end
107
107
  end
108
108
 
109
- property :roles
110
- property :data
109
+ property :hanswurst_roles
110
+ property :hanswurst_data
111
111
 
112
112
  # check if every role is valid before saving
113
113
  before_save do
114
- self.data.each do |role,val|
114
+ self.hanswurst_data.each do |role,val|
115
115
  unless val.valid?
116
116
  raise RoleNotValid.new(role, val)
117
117
  end
@@ -145,33 +145,33 @@ class Hanswurst
145
145
  end
146
146
  end
147
147
 
148
- # add more roles at once
148
+ # add more hanswurst_roles at once
149
149
  def add_roles(hsh)
150
- self.data ||= {}
151
- self.roles ||= {}
150
+ self.hanswurst_data ||= {}
151
+ self.hanswurst_roles ||= {}
152
152
  hsh.each do |role,klass|
153
153
  raise "class expected: #{klass.inspect}" unless klass.is_a? Class
154
154
  handle_dependancies(role, klass)
155
155
  handle_shared(role, klass)
156
- self.roles.update role.to_s => klass.name
156
+ self.hanswurst_roles.update role.to_s => klass.name
157
157
  end
158
- self.roles
158
+ self.hanswurst_roles
159
159
  end
160
160
 
161
161
  # does he have a role
162
162
  def role_exists?(role)
163
- self.roles and self.roles[role.to_s]
163
+ self.hanswurst_roles and self.hanswurst_roles[role.to_s]
164
164
  end
165
165
 
166
- # does he have data for the role
167
- def data_exists?(role)
168
- self.data and self.data[role.to_s]
166
+ # does he have hanswurst_data for the role
167
+ def hanswurst_data_exists?(role)
168
+ self.hanswurst_data and self.hanswurst_data[role.to_s]
169
169
  end
170
170
 
171
171
  # set a property of a role
172
172
  def set_property(role, property, value)
173
173
  return unless role_exists? role
174
- create(role) unless data_exists? role
174
+ create(role) unless hanswurst_data_exists? role
175
175
  update role, property, value
176
176
  end
177
177
 
@@ -182,46 +182,46 @@ class Hanswurst
182
182
 
183
183
  # delete a role
184
184
  def delete_role(role)
185
- delete role # delete the data
186
- self.roles.delete role.to_s # and the role itself
185
+ delete role # delete the hanswurst_data
186
+ self.hanswurst_roles.delete role.to_s # and the role itself
187
187
  end
188
188
 
189
189
  # set instance for a role
190
190
  def set(role, val)
191
- self.data ||= {}
192
- self.data.update role.to_s => val
191
+ self.hanswurst_data ||= {}
192
+ self.hanswurst_data.update role.to_s => val
193
193
  end
194
194
 
195
195
  # create a new instance of a role
196
196
  def create(role)
197
197
  raise "unknown role #{role.inspect}" unless role_exists? role.to_s
198
- self.data ||= {}
199
- self.data[role.to_s] = self.class.getClass(self.roles[role.to_s]).new
198
+ self.hanswurst_data ||= {}
199
+ self.hanswurst_data[role.to_s] = self.class.getClass(self.hanswurst_roles[role.to_s]).new
200
200
  end
201
201
 
202
202
  # delete a role
203
203
  def delete(role)
204
- self.data ||= {}
205
- hsh = self.data
204
+ self.hanswurst_data ||= {}
205
+ hsh = self.hanswurst_data
206
206
  hsh.delete(role.to_s)
207
- self.data = {} # we have to do this, otherwise it won't save?!
208
- self.data = hsh
207
+ self.hanswurst_data = {} # we have to do this, otherwise it won't save?!
208
+ self.hanswurst_data = hsh
209
209
  end
210
210
 
211
211
  # read a property of a role
212
212
  def read(role, property)
213
- return self.data[role.to_s].send(property.to_sym) if data_exists?(role.to_s)
213
+ return self.hanswurst_data[role.to_s].send(property.to_sym) if hanswurst_data_exists?(role.to_s)
214
214
  nil
215
215
  end
216
216
 
217
217
  # update a property of a role
218
218
  # we have to use this method in order to make sure that everything is saved
219
219
  def update(role, property, value)
220
- if data_exists? role
221
- self.data[role.to_s].send(:"#{property}=", value)
222
- hsh = self.data.merge(role.to_s => self.data[role.to_s])
223
- self.data = {} # we have to do this, otherwise it won't save?!
224
- self.data = hsh
220
+ if hanswurst_data_exists? role
221
+ self.hanswurst_data[role.to_s].send(:"#{property}=", value)
222
+ hsh = self.hanswurst_data.merge(role.to_s => self.hanswurst_data[role.to_s])
223
+ self.hanswurst_data = {} # we have to do this, otherwise it won't save?!
224
+ self.hanswurst_data = hsh
225
225
  end
226
226
  end
227
227
  end
@@ -45,15 +45,24 @@ class E
45
45
  property :e
46
46
  end
47
47
 
48
+
49
+ class F
50
+ include CouchPotato::Persistence
51
+ include Hanswurst::Depends
52
+
53
+ depends_on 'd', D
54
+ property :f
55
+
56
+ end
48
57
  Hanswurst.list_for :pers, :complete_name, %q|
49
58
  function(head, req) {
50
59
  var row;
51
60
  var rows = [];
52
61
  send('{"rows": ');
53
62
  while(row = getRow()) {
54
- row.doc.data.q = req.query;
55
- if(req.query["startkey_docid"] && row.doc.data.pers.firstname == req.query["startkey_docid"]){
56
- row.doc.data.pers.complete_name = row.doc.data.pers.firstname + ' ' + row.doc.data.pers.lastname;
63
+ row.doc.hanswurst_data.q = req.query;
64
+ if(req.query["startkey_docid"] && row.doc.hanswurst_data.pers.firstname == req.query["startkey_docid"]){
65
+ row.doc.hanswurst_data.pers.complete_name = row.doc.hanswurst_data.pers.firstname + ' ' + row.doc.hanswurst_data.pers.lastname;
57
66
  rows[rows.length] = row;
58
67
  }
59
68
  };
@@ -107,14 +116,14 @@ class TestCouch < Test::Unit::TestCase
107
116
  o.person = Pers.new( :firstname => 'Donald', :lastname => 'Duck' )
108
117
  save o
109
118
  o = load(o._id)
110
- roles = {'person' => 'Pers', 'product' => 'Prod'}
111
- assert_equal roles, o.roles
112
- assert_equal 'prod1', o.data["product"].name
113
- assert_equal 'Donald', o.data["person"].firstname
119
+ hanswurst_roles = {'person' => 'Pers', 'product' => 'Prod'}
120
+ assert_equal hanswurst_roles, o.hanswurst_roles
121
+ assert_equal 'prod1', o.hanswurst_data["product"].name
122
+ assert_equal 'Donald', o.hanswurst_data["person"].firstname
114
123
  assert_equal 'Donald', o.person___firstname
115
124
  end
116
125
 
117
- should "save roles" do
126
+ should "save hanswurst_roles" do
118
127
  o = Hanswurst.new
119
128
  o.add_role 'person', Pers
120
129
  o.add_role 'product', Prod
@@ -124,8 +133,8 @@ class TestCouch < Test::Unit::TestCase
124
133
  o.person___lastname = "Bunny"
125
134
  save o
126
135
  o = load(o._id)
127
- roles = {'person' => 'Pers', 'product' => 'Prod'}
128
- assert_equal roles, o.roles
136
+ hanswurst_roles = {'person' => 'Pers', 'product' => 'Prod'}
137
+ assert_equal hanswurst_roles, o.hanswurst_roles
129
138
  assert_equal 'Bugs', o.person___firstname
130
139
  assert_equal 'Bunny', o.person___lastname
131
140
  assert_equal 'abc', o.product___article_number
@@ -141,7 +150,7 @@ class TestCouch < Test::Unit::TestCase
141
150
  save o
142
151
  o = load(o._id)
143
152
  assert_equal nil, o.product___name
144
- assert !o.roles.has_key?("product")
153
+ assert !o.hanswurst_roles.has_key?("product")
145
154
  assert_equal 'Bugs', o.person___firstname
146
155
  assert_equal nil, o.product___article_number
147
156
  end
@@ -152,8 +161,8 @@ class TestCouch < Test::Unit::TestCase
152
161
  o.thing___a = "hiho"
153
162
  save o
154
163
  o = load(o._id)
155
- roles = {'thing' => 'Thing::A'}
156
- assert_equal roles, o.roles
164
+ hanswurst_roles = {'thing' => 'Thing::A'}
165
+ assert_equal hanswurst_roles, o.hanswurst_roles
157
166
  assert_equal 'hiho', o.thing___a
158
167
  end
159
168
 
@@ -176,8 +185,8 @@ class TestCouch < Test::Unit::TestCase
176
185
  a.add_role 'pers', Pers
177
186
  a.pers = Pers.new :firstname => "Mickey", :lastname => "Mouse"
178
187
  save a
179
- assert_equal "Donald Duck", view(Hanswurst.pers_all_names(:startkey_docid => "Donald")).first.data["pers"].complete_name
180
- assert_equal "Donald", view(Hanswurst.pers_all_names(:startkey_docid => "Donald")).first.data["pers"].firstname
188
+ assert_equal "Donald Duck", view(Hanswurst.pers_all_names(:startkey_docid => "Donald")).first.hanswurst_data["pers"].complete_name
189
+ assert_equal "Donald", view(Hanswurst.pers_all_names(:startkey_docid => "Donald")).first.hanswurst_data["pers"].firstname
181
190
  end
182
191
 
183
192
  should "create dependancies based on definitions" do
@@ -213,6 +222,17 @@ class TestCouch < Test::Unit::TestCase
213
222
  assert_equal "4AD", o.do___e
214
223
  assert_equal "Duck", o.person___lastname
215
224
  end
225
+
226
+ should "create shared dependancies based on definitions" do
227
+ o = Hanswurst.new
228
+ o.add_role 'fff', F
229
+ o.fff___f = "FFF"
230
+ o.fff__d__person___lastname = "Duck"
231
+ save o
232
+ q = load(o._id)
233
+ assert_equal "FFF", q.fff___f
234
+ assert_equal "Duck", q.fff__d__person___lastname
235
+ end
216
236
  end
217
237
 
218
238
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanswurst
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
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: 2012-01-07 00:00:00.000000000Z
12
+ date: 2012-01-14 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: couch_potato
16
- requirement: &27848040 !ruby/object:Gem::Requirement
16
+ requirement: &15343840 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *27848040
24
+ version_requirements: *15343840
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: yard
27
- requirement: &27847420 !ruby/object:Gem::Requirement
27
+ requirement: &15343060 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.6.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *27847420
35
+ version_requirements: *15343060
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &27842680 !ruby/object:Gem::Requirement
38
+ requirement: &15342300 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.0.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *27842680
46
+ version_requirements: *15342300
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &27842200 !ruby/object:Gem::Requirement
49
+ requirement: &15341560 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.5.2
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *27842200
57
+ version_requirements: *15341560
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rcov
60
- requirement: &27841700 !ruby/object:Gem::Requirement
60
+ requirement: &15340960 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *27841700
68
+ version_requirements: *15340960
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mocha
71
- requirement: &27841200 !ruby/object:Gem::Requirement
71
+ requirement: &15340260 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *27841200
79
+ version_requirements: *15340260
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: shoulda
82
- requirement: &27840680 !ruby/object:Gem::Requirement
82
+ requirement: &15339560 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *27840680
90
+ version_requirements: *15339560
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: linecache19
93
- requirement: &27840180 !ruby/object:Gem::Requirement
93
+ requirement: &15322280 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *27840180
101
+ version_requirements: *15322280
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: ruby-debug19
104
- requirement: &27839620 !ruby/object:Gem::Requirement
104
+ requirement: &15321680 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *27839620
112
+ version_requirements: *15321680
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: couch_potato
115
- requirement: &27839100 !ruby/object:Gem::Requirement
115
+ requirement: &15321080 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,7 +120,7 @@ dependencies:
120
120
  version: '0'
121
121
  type: :runtime
122
122
  prerelease: false
123
- version_requirements: *27839100
123
+ version_requirements: *15321080
124
124
  description: flexible enhancement of couch potato
125
125
  email: ! 'Base64.decode64(''bGludXhAbWFyY3JlbmVhcm5zLmRl
126
126
 
@@ -155,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
155
155
  version: '0'
156
156
  segments:
157
157
  - 0
158
- hash: 3450462200731043631
158
+ hash: -2504078645592477714
159
159
  required_rubygems_version: !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements: