vedeu 0.6.8 → 0.6.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -0
  3. data/README.md +1 -1
  4. data/docs/api.md +60 -67
  5. data/docs/configuration.md +8 -5
  6. data/docs/events.md +31 -15
  7. data/docs/events/application.md +12 -0
  8. data/docs/events/document.md +57 -0
  9. data/docs/events/drb.md +43 -0
  10. data/docs/events/focus.md +24 -0
  11. data/docs/events/menu.md +57 -0
  12. data/docs/events/movement.md +57 -0
  13. data/docs/events/refresh.md +25 -0
  14. data/docs/events/system.md +90 -0
  15. data/docs/events/visibility.md +68 -0
  16. data/lib/vedeu.rb +2 -2
  17. data/lib/vedeu/all.rb +3 -2
  18. data/lib/vedeu/api.rb +18 -18
  19. data/lib/vedeu/application/controller.rb +1 -1
  20. data/lib/vedeu/application/helper.rb +1 -1
  21. data/lib/vedeu/application/view.rb +1 -1
  22. data/lib/vedeu/bindings/application.rb +1 -12
  23. data/lib/vedeu/bindings/bindings.rb +3 -1
  24. data/lib/vedeu/bindings/document.rb +9 -62
  25. data/lib/vedeu/bindings/drb.rb +12 -56
  26. data/lib/vedeu/bindings/focus.rb +3 -28
  27. data/lib/vedeu/bindings/menus.rb +10 -66
  28. data/lib/vedeu/bindings/movement.rb +4 -69
  29. data/lib/vedeu/bindings/refresh.rb +3 -33
  30. data/lib/vedeu/bindings/system.rb +14 -100
  31. data/lib/vedeu/bindings/visibility.rb +20 -71
  32. data/lib/vedeu/borders/all.rb +4 -3
  33. data/lib/vedeu/borders/border.rb +39 -33
  34. data/lib/vedeu/borders/dsl.rb +40 -33
  35. data/lib/vedeu/borders/null.rb +2 -2
  36. data/lib/vedeu/borders/render.rb +29 -24
  37. data/lib/vedeu/borders/repository.rb +2 -2
  38. data/lib/vedeu/buffers/all.rb +8 -7
  39. data/lib/vedeu/buffers/buffer.rb +47 -39
  40. data/lib/vedeu/buffers/null.rb +2 -2
  41. data/lib/vedeu/buffers/refresh.rb +4 -3
  42. data/lib/vedeu/buffers/virtual_buffer.rb +122 -118
  43. data/lib/vedeu/buffers/virtual_buffers.rb +62 -56
  44. data/lib/vedeu/colours/background.rb +2 -1
  45. data/lib/vedeu/colours/colour.rb +21 -19
  46. data/lib/vedeu/colours/foreground.rb +2 -1
  47. data/lib/vedeu/colours/repository.rb +6 -5
  48. data/lib/vedeu/colours/translator.rb +39 -35
  49. data/lib/vedeu/configuration/api.rb +59 -51
  50. data/lib/vedeu/configuration/cli.rb +9 -7
  51. data/lib/vedeu/configuration/configuration.rb +41 -32
  52. data/lib/vedeu/cursors/cursor.rb +1 -1
  53. data/lib/vedeu/cursors/refresh.rb +20 -16
  54. data/lib/vedeu/distributed/server.rb +8 -6
  55. data/lib/vedeu/distributed/subprocess.rb +90 -86
  56. data/lib/vedeu/distributed/uri.rb +4 -3
  57. data/lib/vedeu/dsl/composition.rb +2 -2
  58. data/lib/vedeu/dsl/group.rb +4 -4
  59. data/lib/vedeu/dsl/interface.rb +5 -5
  60. data/lib/vedeu/dsl/presentation.rb +2 -2
  61. data/lib/vedeu/dsl/text.rb +1 -1
  62. data/lib/vedeu/editor/cropper.rb +4 -4
  63. data/lib/vedeu/editor/cursor.rb +6 -4
  64. data/lib/vedeu/editor/document.rb +20 -18
  65. data/lib/vedeu/editor/editor.rb +2 -2
  66. data/lib/vedeu/editor/line.rb +10 -5
  67. data/lib/vedeu/editor/lines.rb +2 -2
  68. data/lib/vedeu/internal_api.rb +4 -4
  69. data/lib/vedeu/models/focus.rb +197 -191
  70. data/lib/vedeu/models/group.rb +171 -159
  71. data/lib/vedeu/models/groups.rb +14 -10
  72. data/lib/vedeu/models/interface.rb +116 -110
  73. data/lib/vedeu/models/interfaces.rb +24 -20
  74. data/lib/vedeu/models/toggleable.rb +4 -4
  75. data/lib/vedeu/models/views/char.rb +1 -1
  76. data/lib/vedeu/models/views/composition.rb +1 -1
  77. data/lib/vedeu/models/views/line.rb +1 -1
  78. data/lib/vedeu/models/views/stream.rb +1 -1
  79. data/lib/vedeu/models/views/view.rb +1 -1
  80. data/lib/vedeu/null/interface.rb +1 -1
  81. data/lib/vedeu/null/view.rb +1 -1
  82. data/lib/vedeu/output/clear/named_interface.rb +1 -1
  83. data/lib/vedeu/output/compressor.rb +78 -73
  84. data/lib/vedeu/output/direct.rb +61 -57
  85. data/lib/vedeu/output/output.rb +34 -29
  86. data/lib/vedeu/output/{presentation.rb → presentation/presentation.rb} +2 -1
  87. data/lib/vedeu/output/presentation/style.rb +64 -18
  88. data/lib/vedeu/output/presentation/styles.rb +39 -0
  89. data/lib/vedeu/output/renderers/html.rb +2 -2
  90. data/lib/vedeu/output/renderers/json.rb +2 -1
  91. data/lib/vedeu/output/renderers/terminal.rb +3 -3
  92. data/lib/vedeu/output/renderers/text.rb +3 -3
  93. data/lib/vedeu/output/text.rb +186 -180
  94. data/lib/vedeu/output/wordwrap.rb +142 -138
  95. data/lib/vedeu/refresh/refresh.rb +2 -2
  96. data/lib/vedeu/templating/helpers.rb +11 -6
  97. data/lib/vedeu/templating/view_template.rb +1 -1
  98. data/lib/vedeu/terminal/terminal.rb +2 -2
  99. data/lib/vedeu/version.rb +1 -1
  100. data/test/lib/vedeu/borders/render_test.rb +1 -1
  101. data/test/lib/vedeu/buffers/buffer_test.rb +16 -14
  102. data/test/lib/vedeu/buffers/virtual_buffer_test.rb +105 -101
  103. data/test/lib/vedeu/buffers/virtual_buffers_test.rb +43 -39
  104. data/test/lib/vedeu/colours/colour_test.rb +4 -4
  105. data/test/lib/vedeu/cursors/cursor_test.rb +2 -2
  106. data/test/lib/vedeu/cursors/repository_test.rb +3 -3
  107. data/test/lib/vedeu/distributed/subprocess_test.rb +33 -29
  108. data/test/lib/vedeu/dsl/group_test.rb +3 -3
  109. data/test/lib/vedeu/dsl/interface_test.rb +6 -5
  110. data/test/lib/vedeu/dsl/line_test.rb +4 -2
  111. data/test/lib/vedeu/dsl/presentation_test.rb +2 -2
  112. data/test/lib/vedeu/dsl/text_test.rb +8 -8
  113. data/test/lib/vedeu/editor/document_test.rb +10 -6
  114. data/test/lib/vedeu/input/keymap_test.rb +1 -10
  115. data/test/lib/vedeu/models/focus_test.rb +177 -170
  116. data/test/lib/vedeu/models/group_test.rb +99 -95
  117. data/test/lib/vedeu/models/groups_test.rb +13 -9
  118. data/test/lib/vedeu/models/interface_test.rb +93 -87
  119. data/test/lib/vedeu/models/interfaces_test.rb +24 -20
  120. data/test/lib/vedeu/models/views/char_test.rb +2 -2
  121. data/test/lib/vedeu/models/views/line_test.rb +11 -7
  122. data/test/lib/vedeu/models/views/stream_test.rb +1 -1
  123. data/test/lib/vedeu/models/views/view_test.rb +1 -1
  124. data/test/lib/vedeu/output/clear/named_group_test.rb +1 -1
  125. data/test/lib/vedeu/output/clear/named_interface_test.rb +3 -1
  126. data/test/lib/vedeu/output/compressor_test.rb +126 -122
  127. data/test/lib/vedeu/output/direct_test.rb +49 -43
  128. data/test/lib/vedeu/output/output_test.rb +35 -31
  129. data/test/lib/vedeu/output/{presentation_test.rb → presentation/presentation_test.rb} +11 -7
  130. data/test/lib/vedeu/output/presentation/style_test.rb +88 -48
  131. data/test/lib/vedeu/output/presentation/styles_test.rb +84 -0
  132. data/test/lib/vedeu/output/text_test.rb +109 -105
  133. data/test/lib/vedeu/output/viewport_test.rb +3 -1
  134. data/test/lib/vedeu/output/wordwrap_test.rb +209 -205
  135. data/test/lib/vedeu/refresh/refresh_test.rb +3 -1
  136. data/test/lib/vedeu/templating/helpers_test.rb +6 -6
  137. data/test/lib/vedeu/templating/view_template_test.rb +1 -1
  138. metadata +17 -8
  139. data/lib/vedeu/output/style.rb +0 -76
  140. data/test/lib/vedeu/output/style_test.rb +0 -120
@@ -2,136 +2,140 @@ require 'test_helper'
2
2
 
3
3
  module Vedeu
4
4
 
5
- describe Group do
6
-
7
- let(:described) { Vedeu::Group }
8
- let(:instance) { described.new(attributes) }
9
- let(:attributes) {
10
- {
11
- name: _name,
12
- members: members,
13
- repository: repository,
14
- visible: visible,
5
+ module Models
6
+
7
+ describe Group do
8
+
9
+ let(:described) { Vedeu::Models::Group }
10
+ let(:instance) { described.new(attributes) }
11
+ let(:attributes) {
12
+ {
13
+ name: _name,
14
+ members: members,
15
+ repository: repository,
16
+ visible: visible,
17
+ }
15
18
  }
16
- }
17
- let(:_name) { 'organics' }
18
- let(:members) { Set.new(['carbon', 'nitrogen', 'oxygen']) }
19
- let(:repository) { Vedeu.groups }
20
- let(:visible) { true }
21
-
22
- describe '#initialize' do
23
- it { instance.must_be_instance_of(described) }
24
- it {
25
- instance.instance_variable_get('@attributes').must_be_instance_of(Hash)
26
- }
27
- it { instance.instance_variable_get('@members').must_equal(members) }
28
- it { instance.instance_variable_get('@name').must_equal(_name) }
29
- it {
30
- instance.instance_variable_get('@repository').must_equal(repository)
31
- }
32
- it { instance.instance_variable_get('@visible').must_equal(visible) }
33
- end
19
+ let(:_name) { 'organics' }
20
+ let(:members) { Set.new(['carbon', 'nitrogen', 'oxygen']) }
21
+ let(:repository) { Vedeu.groups }
22
+ let(:visible) { true }
23
+
24
+ describe '#initialize' do
25
+ it { instance.must_be_instance_of(described) }
26
+ it {
27
+ instance.instance_variable_get('@attributes').must_be_instance_of(Hash)
28
+ }
29
+ it { instance.instance_variable_get('@members').must_equal(members) }
30
+ it { instance.instance_variable_get('@name').must_equal(_name) }
31
+ it {
32
+ instance.instance_variable_get('@repository').must_equal(repository)
33
+ }
34
+ it { instance.instance_variable_get('@visible').must_equal(visible) }
35
+ end
34
36
 
35
- describe 'accessors' do
36
- it { instance.must_respond_to(:name) }
37
- it { instance.must_respond_to(:name=) }
38
- it { instance.must_respond_to(:visible) }
39
- it { instance.must_respond_to(:visible=) }
40
- it { instance.must_respond_to(:visible?) }
41
- end
37
+ describe 'accessors' do
38
+ it { instance.must_respond_to(:name) }
39
+ it { instance.must_respond_to(:name=) }
40
+ it { instance.must_respond_to(:visible) }
41
+ it { instance.must_respond_to(:visible=) }
42
+ it { instance.must_respond_to(:visible?) }
43
+ end
42
44
 
43
- describe '#add' do
44
- subject { instance.add('hydrogen') }
45
+ describe '#add' do
46
+ subject { instance.add('hydrogen') }
45
47
 
46
- it { subject.must_be_instance_of(Vedeu::Group) }
48
+ it { subject.must_be_instance_of(Vedeu::Models::Group) }
47
49
 
48
- context 'when the member already exists' do
49
- it 'does not add the member again but returns a new Group' do
50
- subject.wont_equal(instance)
50
+ context 'when the member already exists' do
51
+ it 'does not add the member again but returns a new Group' do
52
+ subject.wont_equal(instance)
53
+ end
51
54
  end
52
- end
53
55
 
54
- context 'when the member does not exist' do
55
- it 'adds the member and returns a new Group' do
56
- subject.wont_equal(instance)
56
+ context 'when the member does not exist' do
57
+ it 'adds the member and returns a new Group' do
58
+ subject.wont_equal(instance)
59
+ end
57
60
  end
58
61
  end
59
- end
60
62
 
61
- describe '#by_zindex' do
62
- subject { instance.by_zindex }
63
+ describe '#by_zindex' do
64
+ subject { instance.by_zindex }
63
65
 
64
- it { subject.must_be_instance_of(Array) }
66
+ it { subject.must_be_instance_of(Array) }
65
67
 
66
- # @todo Add more tests.
67
- # it { skip }
68
- end
68
+ # @todo Add more tests.
69
+ # it { skip }
70
+ end
69
71
 
70
- describe '#hide' do
71
- subject { instance.hide }
72
+ describe '#hide' do
73
+ subject { instance.hide }
72
74
 
73
- it { subject.must_equal(instance) }
74
- end
75
+ it { subject.must_equal(instance) }
76
+ end
75
77
 
76
- describe '#members' do
77
- subject { instance.members }
78
+ describe '#members' do
79
+ subject { instance.members }
78
80
 
79
- it { subject.must_be_instance_of(Set) }
81
+ it { subject.must_be_instance_of(Set) }
80
82
 
81
- context 'when the group has no members' do
82
- let(:members) { [] }
83
+ context 'when the group has no members' do
84
+ let(:members) { [] }
83
85
 
84
- it 'returns an empty Set' do
85
- subject.must_be_empty
86
+ it 'returns an empty Set' do
87
+ subject.must_be_empty
88
+ end
86
89
  end
87
- end
88
90
 
89
- context 'when the group has members' do
90
- it 'returns a set of members' do
91
- subject.wont_be_empty
91
+ context 'when the group has members' do
92
+ it 'returns a set of members' do
93
+ subject.wont_be_empty
94
+ end
92
95
  end
93
96
  end
94
- end
95
97
 
96
- describe '#remove' do
97
- let(:member) { 'hydrogen' }
98
+ describe '#remove' do
99
+ let(:member) { 'hydrogen' }
98
100
 
99
- subject { instance.remove(member) }
101
+ subject { instance.remove(member) }
100
102
 
101
- it { subject.must_be_instance_of(described) }
103
+ it { subject.must_be_instance_of(described) }
102
104
 
103
- context 'when the group is already empty' do
104
- let(:members) { [] }
105
+ context 'when the group is already empty' do
106
+ let(:members) { [] }
105
107
 
106
- it { subject.wont_equal(instance) }
107
- end
108
+ it { subject.wont_equal(instance) }
109
+ end
108
110
 
109
- context 'when the member exists' do
110
- let(:member) { 'oxygen' }
111
+ context 'when the member exists' do
112
+ let(:member) { 'oxygen' }
111
113
 
112
- it { subject.wont_equal(instance) }
113
- it { subject.members.wont_include(member) }
114
- end
114
+ it { subject.wont_equal(instance) }
115
+ it { subject.members.wont_include(member) }
116
+ end
115
117
 
116
- context 'when the member does not exist' do
117
- it { subject.wont_equal(instance) }
118
- it { subject.members.wont_include(member) }
118
+ context 'when the member does not exist' do
119
+ it { subject.wont_equal(instance) }
120
+ it { subject.members.wont_include(member) }
121
+ end
119
122
  end
120
- end
121
123
 
122
- describe '#reset' do
123
- subject { instance.reset }
124
+ describe '#reset' do
125
+ subject { instance.reset }
126
+
127
+ it { subject.must_be_instance_of(Vedeu::Models::Group) }
128
+ it { subject.members.must_be_empty }
129
+ end
124
130
 
125
- it { subject.must_be_instance_of(Vedeu::Group) }
126
- it { subject.members.must_be_empty }
127
- end
131
+ describe '#show' do
132
+ subject { instance.show }
128
133
 
129
- describe '#show' do
130
- subject { instance.show }
134
+ it { subject.must_equal(instance) }
135
+ end
131
136
 
132
- it { subject.must_equal(instance) }
133
- end
137
+ end # Group
134
138
 
135
- end # Group
139
+ end # Models
136
140
 
137
141
  end # Vedeu
@@ -2,20 +2,24 @@ require 'test_helper'
2
2
 
3
3
  module Vedeu
4
4
 
5
- describe Groups do
5
+ module Models
6
6
 
7
- let(:described) { Vedeu::Groups }
7
+ describe Groups do
8
8
 
9
- it { described.must_respond_to(:groups) }
9
+ let(:described) { Vedeu::Models::Groups }
10
10
 
11
- describe '#by_name' do
12
- let(:_name) { 'carbon' }
11
+ it { described.must_respond_to(:groups) }
13
12
 
14
- subject { described.groups.by_name(_name) }
13
+ describe '#by_name' do
14
+ let(:_name) { 'carbon' }
15
15
 
16
- it { subject.must_be_instance_of(Vedeu::Group) }
17
- end
16
+ subject { described.groups.by_name(_name) }
18
17
 
19
- end # Groups
18
+ it { subject.must_be_instance_of(Vedeu::Models::Group) }
19
+ end
20
+
21
+ end # Groups
22
+
23
+ end # Models
20
24
 
21
25
  end # Vedeu
@@ -2,93 +2,99 @@ require 'test_helper'
2
2
 
3
3
  module Vedeu
4
4
 
5
- describe Interface do
6
-
7
- let(:described) { Vedeu::Interface }
8
- let(:instance) { described.new(attributes) }
9
- let(:attributes) {
10
- {
11
- client: client,
12
- colour: colour,
13
- delay: delay,
14
- group: group,
15
- name: _name,
16
- parent: parent,
17
- style: style,
18
- visible: visible,
19
- zindex: zindex,
5
+ module Models
6
+
7
+ describe Interface do
8
+
9
+ let(:described) { Vedeu::Models::Interface }
10
+ let(:instance) { described.new(attributes) }
11
+ let(:attributes) {
12
+ {
13
+ client: client,
14
+ colour: colour,
15
+ delay: delay,
16
+ group: group,
17
+ name: _name,
18
+ parent: parent,
19
+ style: style,
20
+ visible: visible,
21
+ zindex: zindex,
22
+ }
20
23
  }
21
- }
22
- let(:client) {}
23
- let(:colour) {}
24
- let(:delay) { 0.0 }
25
- let(:group) { '' }
26
- let(:_name) { 'hydrogen' }
27
- let(:parent) {}
28
- let(:repository) { Vedeu.interfaces }
29
- let(:style) {}
30
- let(:visible) { true }
31
- let(:zindex) { 1 }
32
-
33
- describe '#initialize' do
34
- subject { instance }
35
-
36
- it { subject.must_be_instance_of(described) }
37
- it { subject.instance_variable_get('@client').must_equal(client) }
38
- it { subject.instance_variable_get('@delay').must_equal(delay) }
39
- it { subject.instance_variable_get('@group').must_equal(group) }
40
- it { subject.instance_variable_get('@name').must_equal(_name) }
41
- it { subject.instance_variable_get('@parent').must_equal(parent) }
42
- it { subject.instance_variable_get('@repository').must_equal(repository) }
43
- it { subject.instance_variable_get('@visible').must_equal(visible) }
44
- it { subject.instance_variable_get('@zindex').must_equal(zindex) }
45
- end
46
-
47
- describe 'accessors' do
48
- it { instance.must_respond_to(:client) }
49
- it { instance.must_respond_to(:client=) }
50
- it { instance.must_respond_to(:delay) }
51
- it { instance.must_respond_to(:delay=) }
52
- it { instance.must_respond_to(:group) }
53
- it { instance.must_respond_to(:group=) }
54
- it { instance.must_respond_to(:name) }
55
- it { instance.must_respond_to(:name=) }
56
- it { instance.must_respond_to(:parent) }
57
- it { instance.must_respond_to(:parent=) }
58
- it { instance.must_respond_to(:zindex) }
59
- it { instance.must_respond_to(:zindex=) }
60
- it { instance.must_respond_to(:visible) }
61
- it { instance.must_respond_to(:visible=) }
62
- it { instance.must_respond_to(:visible?) }
63
- it { instance.must_respond_to(:attributes) }
64
- end
65
-
66
- describe '#hide' do
67
- let(:buffer) { Vedeu::Buffers::Buffer.new }
68
-
69
- before { Vedeu.buffers.stubs(:by_name).returns(buffer) }
70
-
71
- subject { instance.hide }
72
-
73
- it {
74
- Vedeu.buffers.by_name('hydrogen').expects(:hide)
75
- subject
76
- }
77
- end
78
-
79
- describe '#show' do
80
- let(:buffer) { Vedeu::Buffers::Buffer.new }
81
-
82
- before { Vedeu.buffers.stubs(:by_name).returns(buffer) }
83
-
84
- subject { instance.show }
85
-
86
- it {
87
- Vedeu.buffers.by_name('hydrogen').expects(:show)
88
- subject
89
- }
90
- end
91
-
92
- end # Interface
24
+ let(:client) {}
25
+ let(:colour) {}
26
+ let(:delay) { 0.0 }
27
+ let(:group) { '' }
28
+ let(:_name) { 'hydrogen' }
29
+ let(:parent) {}
30
+ let(:repository) { Vedeu.interfaces }
31
+ let(:style) {}
32
+ let(:visible) { true }
33
+ let(:zindex) { 1 }
34
+
35
+ describe '#initialize' do
36
+ subject { instance }
37
+
38
+ it { subject.must_be_instance_of(described) }
39
+ it { subject.instance_variable_get('@client').must_equal(client) }
40
+ it { subject.instance_variable_get('@delay').must_equal(delay) }
41
+ it { subject.instance_variable_get('@group').must_equal(group) }
42
+ it { subject.instance_variable_get('@name').must_equal(_name) }
43
+ it { subject.instance_variable_get('@parent').must_equal(parent) }
44
+ it {
45
+ subject.instance_variable_get('@repository').must_equal(repository)
46
+ }
47
+ it { subject.instance_variable_get('@visible').must_equal(visible) }
48
+ it { subject.instance_variable_get('@zindex').must_equal(zindex) }
49
+ end
50
+
51
+ describe 'accessors' do
52
+ it { instance.must_respond_to(:client) }
53
+ it { instance.must_respond_to(:client=) }
54
+ it { instance.must_respond_to(:delay) }
55
+ it { instance.must_respond_to(:delay=) }
56
+ it { instance.must_respond_to(:group) }
57
+ it { instance.must_respond_to(:group=) }
58
+ it { instance.must_respond_to(:name) }
59
+ it { instance.must_respond_to(:name=) }
60
+ it { instance.must_respond_to(:parent) }
61
+ it { instance.must_respond_to(:parent=) }
62
+ it { instance.must_respond_to(:zindex) }
63
+ it { instance.must_respond_to(:zindex=) }
64
+ it { instance.must_respond_to(:visible) }
65
+ it { instance.must_respond_to(:visible=) }
66
+ it { instance.must_respond_to(:visible?) }
67
+ it { instance.must_respond_to(:attributes) }
68
+ end
69
+
70
+ describe '#hide' do
71
+ let(:buffer) { Vedeu::Buffers::Buffer.new }
72
+
73
+ before { Vedeu.buffers.stubs(:by_name).returns(buffer) }
74
+
75
+ subject { instance.hide }
76
+
77
+ it {
78
+ Vedeu.buffers.by_name('hydrogen').expects(:hide)
79
+ subject
80
+ }
81
+ end
82
+
83
+ describe '#show' do
84
+ let(:buffer) { Vedeu::Buffers::Buffer.new }
85
+
86
+ before { Vedeu.buffers.stubs(:by_name).returns(buffer) }
87
+
88
+ subject { instance.show }
89
+
90
+ it {
91
+ Vedeu.buffers.by_name('hydrogen').expects(:show)
92
+ subject
93
+ }
94
+ end
95
+
96
+ end # Interface
97
+
98
+ end # Models
93
99
 
94
100
  end # Vedeu