nemo 0.1.0

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.
@@ -0,0 +1,63 @@
1
+ class Nemo::Visitors::Viewer < Nemo::Visitors::Visitor
2
+
3
+ def initialize(metaobject)
4
+ super
5
+ @viewer = true
6
+ end
7
+
8
+ def render
9
+ r.table { render_fields }
10
+ end
11
+
12
+ def render_fields
13
+ @metaobject.accept(self)
14
+ end
15
+
16
+ def render_label(a, &block)
17
+ r.table_row do
18
+ r.table_header(a.label)
19
+ r.table_data { block ? block.call : r.space }
20
+ end
21
+ end
22
+
23
+ def render_relationship_item(a, item)
24
+ return if item.nil?
25
+ text = a.format(item)
26
+ if a.link_action.nil?
27
+ r.encode_text(text)
28
+ else
29
+ r.anchor.callback{ a.link_action.call(item) }.with { r.encode_text(text) }
30
+ end
31
+ end
32
+
33
+ def visit_text_attribute(a)
34
+ render_label(a) { r.encode_text(a.formatted_value) }
35
+ end
36
+
37
+ def visit_password_attribute(a)
38
+ render_label(a) { r.text('********') }
39
+ end
40
+
41
+ def visit_date_attribute(a)
42
+ visit_text_attribute(a)
43
+ end
44
+
45
+ def visit_boolean_attribute(a)
46
+ visit_text_attribute(a)
47
+ end
48
+
49
+ def visit_multiple_attribute(a)
50
+ visit_multiple_relationship_attribute(a)
51
+ end
52
+
53
+ def visit_single_relationship_attribute(a)
54
+ render_label(a) { render_relationship_item(a, a.value) }
55
+ end
56
+
57
+ def visit_multiple_relationship_attribute(a)
58
+ render_label(a) do
59
+ a.value.each { |item| render_relationship_item(a, item); r.break }
60
+ end
61
+ end
62
+
63
+ end
@@ -0,0 +1,14 @@
1
+ class Nemo::Visitors::Visitor < Wee::Component
2
+
3
+ extend Nemo::Util::Accessors
4
+
5
+ attr_accessor :metaobject
6
+ bool_accessor :viewer
7
+
8
+ def initialize(metaobject)
9
+ super()
10
+ @metaobject = metaobject
11
+ @viewer = false
12
+ end
13
+
14
+ end
data/nemo.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ require 'rubygems'
2
+
3
+ if File.read('lib/nemo.rb') =~ /Version\s+=\s+"(\d+\.\d+\.\d+)"/
4
+ version = $1
5
+ else
6
+ raise "no version"
7
+ end
8
+
9
+ spec = Gem::Specification.new do |s|
10
+ s.name = 'nemo'
11
+ s.version = version
12
+ s.summary = 'Ruby port of Mewa for Wee'
13
+ s.add_dependency('wee', '>= 0.3.1')
14
+
15
+ s.files = Dir['**/*'].delete_if {|item| item.include?(".svn") }
16
+
17
+ s.require_path = 'lib'
18
+
19
+ s.author = "Kevin Howe"
20
+ s.email = "kh@newclear.ca"
21
+ s.homepage = "nemo.rubyforge.org"
22
+ s.rubyforge_project = "nemo"
23
+ end
data/nemo_rdoc.bat ADDED
@@ -0,0 +1 @@
1
+ rdoc -m lib/nemo.rb -o nemodoc -a -S lib -A "call_accessor=RW:Call,bool_accessor=RW:Bool,proc_accessor=RW:Proc"
@@ -0,0 +1,14 @@
1
+ $LOAD_PATH.unshift('../lib')
2
+ require 'nemo'
3
+ require 'wee/adaptors/webrick'
4
+
5
+ app = Wee::Application.new { |app|
6
+ app.default_request_handler { Nemo::Examples::DatePicker::Session.new }
7
+ app.id_generator = Wee::SimpleIdGenerator.new(rand(1_000_000))
8
+ }
9
+
10
+ Wee::WEBrickAdaptor.
11
+ register('/app' => app).
12
+ start(:Port => 2000) { |server|
13
+ server.mount('/', WEBrick::HTTPServlet::FileHandler, './')
14
+ }
@@ -0,0 +1,26 @@
1
+ a {
2
+ text-decoration: none;
3
+ }
4
+ body {
5
+ font-size : 11px;
6
+ font-family : Arial, Helvetica, sans-serif;
7
+ text-align: center;
8
+ }
9
+ td {
10
+ font-family: Arial, Helvetica, sans-serif;
11
+ font-size: 11px;
12
+ border: 1px solid;
13
+ background-color: #FFFFFF;
14
+ vertical-align: top;
15
+ text-align: center;
16
+ }
17
+ th {
18
+ font-family: Arial, Helvetica, sans-serif;
19
+ font-size: 11px;
20
+ font-style: normal;
21
+ font-weight: bold;
22
+ background-color: #BBCCFF;
23
+ border: 1px solid;
24
+ vertical-align: top;
25
+ text-align: center;
26
+ }
Binary file
@@ -0,0 +1,40 @@
1
+ a:link, a:active, a:visited {
2
+ color: blue
3
+ }
4
+ body {
5
+ font-size : 12px;
6
+ font-family : Arial, Helvetica, sans-serif;
7
+ }
8
+ td {
9
+ font-family: Arial, Helvetica, sans-serif;
10
+ font-size: 12px;
11
+ background-color: #BBCCFF;
12
+ border: 1px solid;
13
+ vertical-align: top;
14
+ padding: 2px;
15
+ }
16
+ th {
17
+ font-family: Arial, Helvetica, sans-serif;
18
+ font-size: 12px;
19
+ font-style: normal;
20
+ font-weight: bold;
21
+ background-color: #FFFFFF;
22
+ border: 1px solid;
23
+ vertical-align: top;
24
+ padding: 2px;
25
+ }
26
+ input {
27
+ font-family: Arial, Helvetica, sans-serif;
28
+ font-size: 12px;
29
+ font-style: normal;
30
+ font-weight: bold;
31
+ background-color: #FFFFFF;
32
+ border: 1px solid;
33
+ vertical-align: top;
34
+ }
35
+ select, text, textarea {
36
+ font-family: Arial, Helvetica, sans-serif;
37
+ font-size: 12px;
38
+ font-style: normal;
39
+ font-weight: normal;
40
+ }
@@ -0,0 +1,14 @@
1
+ $LOAD_PATH.unshift('../lib')
2
+ require 'nemo'
3
+ require 'wee/adaptors/webrick'
4
+
5
+ app = Wee::Application.new { |app|
6
+ app.default_request_handler { Nemo::Examples::PersonEditor::Session.new }
7
+ app.id_generator = Wee::SimpleIdGenerator.new(rand(1_000_000))
8
+ }
9
+
10
+ Wee::WEBrickAdaptor.
11
+ register('/app' => app).
12
+ start(:Port => 2000) { |server|
13
+ server.mount('/', WEBrick::HTTPServlet::FileHandler, './')
14
+ }
data/test/unit_test.rb ADDED
@@ -0,0 +1,128 @@
1
+ # Need many more tests, use ZenTest?
2
+
3
+ $LOAD_PATH.unshift('../lib')
4
+ require 'test/unit'
5
+ require 'nemo'
6
+
7
+ module Nemo::Test
8
+
9
+ module_function
10
+
11
+ def person(hash=Hash.new)
12
+ obj = Nemo::Examples::PersonEditor::Person.new
13
+ hash.each { |k,v| obj.send(k.to_s+'=', v) }
14
+ obj
15
+ end
16
+
17
+ end
18
+
19
+ class Nemo::Test::Accessors < Test::Unit::TestCase
20
+
21
+ def test_accessor()
22
+ demo = Class.new
23
+ demo.extend(Nemo::Util::Accessors)
24
+ demo.class_eval { call_accessor(:age) }
25
+ demo.class_eval { bool_accessor(:married) }
26
+ demo.class_eval { proc_accessor(:multiply) }
27
+ d = demo.new
28
+ assert_equal(true, d.respond_to?(:married))
29
+ assert_equal(true, d.respond_to?(:married?))
30
+ assert_equal(true, d.respond_to?(:married=))
31
+ assert_equal(true, d.respond_to?(:age))
32
+ assert_equal(true, d.respond_to?(:age=))
33
+ assert_equal(true, d.respond_to?(:multiply))
34
+ assert_equal(true, d.respond_to?(:multiply=))
35
+ d.married = true
36
+ assert_equal(true, d.married?)
37
+ d.married = false
38
+ assert_equal(false, d.married?)
39
+ d.married(true)
40
+ assert_equal(true, d.married?)
41
+ d.age(5)
42
+ assert_equal(5, d.age)
43
+ d.multiply { |n| n*100 }
44
+ assert_equal(500, d.multiply.call(d.age))
45
+ end
46
+
47
+ end
48
+
49
+ class Nemo::Test::ObjectCollector < Test::Unit::TestCase
50
+
51
+ def collect(*args, &block)
52
+ Nemo::Util::ObjectCollector.collect(*args, &block)
53
+ end
54
+
55
+ def test_collect()
56
+ assert_raise(IndexError) { collect { no_objects_yet } }
57
+ assert_raise(NoMethodError) { collect { o Object.new; invalid_message } }
58
+ assert_equal(3, begin collect { o Object.new; o Object.new; o Object.new }.size rescue nil end)
59
+ assert_equal('bar', begin collect { o Object.new; instance_variable_set('@foo', 'bar') }[0].instance_variable_get('@foo') rescue nil end)
60
+ end
61
+
62
+ end
63
+
64
+ class Nemo::Test::AttributeCollector < Test::Unit::TestCase
65
+
66
+ def test_collect()
67
+ ac = Nemo::MetaObject::AttributeCollector.new(Nemo::Test.person.metaobject)
68
+ assert_equal(ac[:text, :name].class, Nemo::MetaObject::TextAttribute)
69
+ ac << ac[:text, :name]
70
+ assert_equal(ac.collect[0].class, Nemo::MetaObject::TextAttribute)
71
+ end
72
+
73
+ end
74
+
75
+ class Nemo::Test::Attribute < Test::Unit::TestCase
76
+
77
+ def test_value()
78
+ p = Nemo::Test.person(:name=>'Joe', :sex=>true, :birthday=>Date.new(1950, 1, 1))
79
+ b = p.metaobject[:birthday]
80
+ assert_equal(b.value, Date.new(1950,1,1))
81
+ assert_equal(b.formatted_value, 'Jan 01, 1950')
82
+ b.format_with { |value| sprintf('%s-%s-%s',value.day,value.month,value.year) }
83
+ assert_equal('1-1-1950', b.formatted_value)
84
+ end
85
+
86
+ def test_multiple()
87
+ p = Nemo::Test.person(:name=>'Joe', :sex=>true, :birthday=>Date.new(1950, 1, 1))
88
+ pn = p.metaobject[:phone_numbers]
89
+ assert_equal(true, pn.multiple_attribute?)
90
+ n = p.metaobject[:name]
91
+ assert_equal(false, n.multiple_attribute?)
92
+ end
93
+
94
+ end
95
+
96
+ class Nemo::Test::Util < Test::Unit::TestCase
97
+
98
+ def test_pascal_case
99
+ assert_equal(Nemo::Util.pascal_case('ruby_case'), 'RubyCase')
100
+ assert_equal(Nemo::Util.pascal_case('camelCase'), 'CamelCase')
101
+ assert_equal(Nemo::Util.pascal_case('PascalCase'), 'PascalCase')
102
+ end
103
+
104
+ def test_to_bool()
105
+ assert_equal(false, Nemo::Util.to_bool(nil))
106
+ end
107
+
108
+ end
109
+
110
+ class Nemo::Test::MetaObject < Test::Unit::TestCase
111
+
112
+ def test_validate()
113
+ p = Nemo::Test.person(:name=>'Joe', :sex=>true, :birthday=>Date.new(1950, 1, 1)).metaobject
114
+ p.refresh_cache
115
+ assert_equal(true, p.validate.empty?)
116
+ end
117
+
118
+ def test_hidden()
119
+ m = Nemo.metaobject_for(self) { text :name; label 'Name' }
120
+ name = m[:name]
121
+ assert_equal('Name', name.label)
122
+ assert_equal(false, name.hidden?)
123
+ m.hide!(:name)
124
+ assert_equal(true, name.hidden?)
125
+ end
126
+
127
+ end
128
+
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.1
3
+ specification_version: 1
4
+ name: nemo
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.1.0
7
+ date: 2005-01-11
8
+ summary: Ruby port of Mewa for Wee
9
+ require_paths:
10
+ - lib
11
+ author: Kevin Howe
12
+ email: kh@newclear.ca
13
+ homepage: nemo.rubyforge.org
14
+ rubyforge_project: nemo
15
+ description:
16
+ autorequire:
17
+ default_executable:
18
+ bindir: bin
19
+ has_rdoc: false
20
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
21
+ requirements:
22
+ -
23
+ - ">"
24
+ - !ruby/object:Gem::Version
25
+ version: 0.0.0
26
+ version:
27
+ platform: ruby
28
+ files:
29
+ - test
30
+ - lib
31
+ - nemo_rdoc.bat
32
+ - nemo.gemspec
33
+ - README
34
+ - INSTALL
35
+ - test/date_picker.rb
36
+ - test/person_editor.rb
37
+ - test/nemo
38
+ - test/unit_test.rb
39
+ - test/nemo/calendar.gif
40
+ - test/nemo/calendar.css
41
+ - test/nemo/person_editor.css
42
+ - lib/nemo
43
+ - lib/nemo.rb
44
+ - lib/nemo/visitors
45
+ - lib/nemo/components
46
+ - lib/nemo/metaobject
47
+ - lib/nemo/util
48
+ - lib/nemo/examples
49
+ - lib/nemo/metaobject.rb
50
+ - lib/nemo/examples.rb
51
+ - lib/nemo/visitors.rb
52
+ - lib/nemo/components.rb
53
+ - lib/nemo/util.rb
54
+ - lib/nemo/visitors/visitor.rb
55
+ - lib/nemo/visitors/editor.rb
56
+ - lib/nemo/visitors/viewer.rb
57
+ - lib/nemo/components/confirm.rb
58
+ - lib/nemo/components/calendar.rb
59
+ - lib/nemo/components/multiattr.rb
60
+ - lib/nemo/metaobject/metaobject.rb
61
+ - lib/nemo/metaobject/validation.rb
62
+ - lib/nemo/metaobject/attributes.rb
63
+ - lib/nemo/metaobject/acollector.rb
64
+ - lib/nemo/util/date.rb
65
+ - lib/nemo/util/blankslate.rb
66
+ - lib/nemo/util/accessors.rb
67
+ - lib/nemo/util/collector.rb
68
+ - lib/nemo/examples/date_picker.rb
69
+ - lib/nemo/examples/person_editor.rb
70
+ test_files: []
71
+ rdoc_options: []
72
+ extra_rdoc_files: []
73
+ executables: []
74
+ extensions: []
75
+ requirements: []
76
+ dependencies:
77
+ - !ruby/object:Gem::Dependency
78
+ name: wee
79
+ version_requirement:
80
+ version_requirements: !ruby/object:Gem::Version::Requirement
81
+ requirements:
82
+ -
83
+ - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: 0.3.1
86
+ version: