hanswurst 0.1.0 → 0.2.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 +31 -5
  2. data/VERSION +1 -1
  3. data/lib/hanswurst.rb +19 -3
  4. data/test/test_hanswurst.rb +24 -0
  5. metadata +23 -23
data/README.md CHANGED
@@ -31,8 +31,8 @@ first you have to build your roles as normal couch potato classes
31
31
  then you may use them as you like
32
32
 
33
33
  hw = Hanswurst.new
34
- hw.add_role Person
35
- hw.add_role Product
34
+ hw.add_role 'person', Person # first role then class
35
+ hw.add_role 'product', Product
36
36
 
37
37
  hw.person___first_name = 'Diederich'
38
38
  hw.person___last_name = 'Hessling' # an RoleNotValid error is raised if person___last_name is missing
@@ -40,7 +40,7 @@ then you may use them as you like
40
40
  # this is also possible
41
41
  hw.product = Product.new :price => 20, :in_stock => 1
42
42
 
43
- id = CouchPotato.database.save_document hanswurst
43
+ id = CouchPotato.database.save_document hw
44
44
 
45
45
  later...
46
46
 
@@ -49,7 +49,33 @@ later...
49
49
  hw.person___first_name # => 'Diederich'
50
50
  hw.product___price # => 20
51
51
 
52
+ you may also declare that roles are depending on other roles
53
+ when you add that role, the others are also automatically added
54
+ class Address
55
+ include CouchPotato::Persistence
56
+
57
+ property :street
58
+ property :zip
59
+ property :city
60
+ end
61
+
62
+ class Person
63
+ include CouchPotato::Persistence
64
+ include Hanswurst::Depends
52
65
 
66
+ depends_on 'address_privat', Address
67
+ depends_on 'address_work', Address
68
+
69
+ property :last_name
70
+ property :first_name
71
+ end
72
+
73
+ hw = Hanswurst.new
74
+ hw.add_role 'employee', Person
75
+ hw.employee___last_name = 'Hessling'
76
+ hw.address_privat___city = 'Berlin'
77
+ hw.address_work___city = 'Potsdam'
78
+
53
79
  All views are attached to the hanswurst design document
54
80
  You may create general views:
55
81
 
@@ -57,10 +83,10 @@ You may create general views:
57
83
 
58
84
  or views specific for a role
59
85
 
60
- Hanswurst.view_for :person, :all, :key => :created_at
86
+ Hanswurst.view_for :employee, :all, :key => :created_at
61
87
 
62
88
  # execute them this way
63
- CouchPotato.database.view Hanswurst.person_all
89
+ CouchPotato.database.view Hanswurst.employee_all
64
90
 
65
91
  the same works with lists.
66
92
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/lib/hanswurst.rb CHANGED
@@ -3,6 +3,21 @@ require 'couch_potato'
3
3
  # Each Hanswurst may have a different combination of roles. It's a very flexible way to be a couch potato.
4
4
  class Hanswurst
5
5
 
6
+ module Depends
7
+ def self.included(mod)
8
+ mod.instance_eval do
9
+ def depends_on(aliasname, role)
10
+ @dependancies ||= {}
11
+ @dependancies[aliasname] = role
12
+ end
13
+
14
+ def dependancies
15
+ @dependancies || {}
16
+ end
17
+ end
18
+ end
19
+ end
20
+
6
21
  # error raised when a role is not valid
7
22
  class RoleNotValid < Exception
8
23
  def initialize(role, value)
@@ -98,12 +113,13 @@ class Hanswurst
98
113
  # add more roles at once
99
114
  def add_roles(hsh)
100
115
  self.data ||= {}
101
- r = self.roles || {}
116
+ self.roles ||= {}
102
117
  hsh.each do |role,klass|
103
118
  raise "class expected: #{klass.inspect}" unless klass.is_a? Class
104
- r.update(role.to_s => klass.name)
119
+ add_roles klass.dependancies if klass.respond_to?(:dependancies)
120
+ self.roles.update role.to_s => klass.name
105
121
  end
106
- self.roles = r
122
+ self.roles
107
123
  end
108
124
 
109
125
  # does he have a role
@@ -26,6 +26,16 @@ module Thing
26
26
  end
27
27
  end
28
28
 
29
+ class D
30
+ include CouchPotato::Persistence
31
+ include Hanswurst::Depends
32
+
33
+ depends_on 'person', Pers
34
+ depends_on 'prod', Prod
35
+ property :d
36
+
37
+ end
38
+
29
39
  Hanswurst.list_for :pers, :complete_name, %q|
30
40
  function(head, req) {
31
41
  var row;
@@ -160,6 +170,20 @@ class TestCouch < Test::Unit::TestCase
160
170
  assert_equal "Donald Duck", view(Hanswurst.pers_all_names(:startkey_docid => "Donald")).first.data["pers"].complete_name
161
171
  assert_equal "Donald", view(Hanswurst.pers_all_names(:startkey_docid => "Donald")).first.data["pers"].firstname
162
172
  end
173
+
174
+ should "create dependancies based on definitions" do
175
+ o = Hanswurst.new
176
+ o.add_role 'do', D
177
+ o.do___d = "4AD"
178
+ o.person___firstname = "Dagobert"
179
+ o.person___lastname = "Duck"
180
+ o.prod___name = "Comic Hero"
181
+ save o
182
+ o = load(o._id)
183
+ assert_equal "4AD", o.do___d
184
+ assert_equal "Dagobert", o.person___firstname
185
+ assert_equal "Comic Hero", o.prod___name
186
+ end
163
187
  end
164
188
 
165
189
  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.1.0
4
+ version: 0.2.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-05 00:00:00.000000000Z
12
+ date: 2012-01-06 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: couch_potato
16
- requirement: &27122780 !ruby/object:Gem::Requirement
16
+ requirement: &27901180 !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: *27122780
24
+ version_requirements: *27901180
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: yard
27
- requirement: &27122300 !ruby/object:Gem::Requirement
27
+ requirement: &27900580 !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: *27122300
35
+ version_requirements: *27900580
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &27097640 !ruby/object:Gem::Requirement
38
+ requirement: &27899980 !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: *27097640
46
+ version_requirements: *27899980
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &27097060 !ruby/object:Gem::Requirement
49
+ requirement: &27890820 !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: *27097060
57
+ version_requirements: *27890820
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rcov
60
- requirement: &27096480 !ruby/object:Gem::Requirement
60
+ requirement: &27890320 !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: *27096480
68
+ version_requirements: *27890320
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mocha
71
- requirement: &27095960 !ruby/object:Gem::Requirement
71
+ requirement: &27889780 !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: *27095960
79
+ version_requirements: *27889780
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: shoulda
82
- requirement: &27095360 !ruby/object:Gem::Requirement
82
+ requirement: &27889300 !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: *27095360
90
+ version_requirements: *27889300
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: linecache19
93
- requirement: &27094800 !ruby/object:Gem::Requirement
93
+ requirement: &27888760 !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: *27094800
101
+ version_requirements: *27888760
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: ruby-debug19
104
- requirement: &27094320 !ruby/object:Gem::Requirement
104
+ requirement: &27888240 !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: *27094320
112
+ version_requirements: *27888240
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: couch_potato
115
- requirement: &27093760 !ruby/object:Gem::Requirement
115
+ requirement: &27887700 !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: *27093760
123
+ version_requirements: *27887700
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: -565794256545933132
158
+ hash: -1466396056601351153
159
159
  required_rubygems_version: !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements: