Class: OgScaffolder

Inherits:
Wee::Component show all
Defined in:
lib/wee/databases/og/scaffolder.rb,
lib/wee/databases/og/old_scaffolder.rb

Overview

This is a Rails-like scaffolder for use with Og (navel.gr/nitro) domain objects.

Defined Under Namespace

Classes: Editor

Instance Method Summary collapse

Methods inherited from Wee::Component

#add_decoration, #backtrack_state, #backtrack_state_chain, #decoration, #decoration=, #do_render_chain, #each_decoration, #process_callbacks, #process_callbacks_chain, #remove_decoration, #remove_decoration_if

Methods inherited from Wee::Presenter

#backtrack_state, #do_render, #get_property, #lookup_property, #process_callbacks, #properties, #properties=, #session, template, uses_property

Constructor Details

#initialize(domain_class) ⇒ OgScaffolder

Returns a new instance of OgScaffolder.



5
6
7
8
9
# File 'lib/wee/databases/og/scaffolder.rb', line 5

def initialize(domain_class)
  super()
  @domain_class = domain_class
  @props = @domain_class.__props.reject {|a| a.name == 'oid'}
end

Instance Method Details

#addObject



69
70
71
# File 'lib/wee/databases/og/scaffolder.rb', line 69

def add
  call editor_for(@domain_class.new)
end

#cancelObject



29
30
31
32
# File 'lib/wee/databases/og/old_scaffolder.rb', line 29

def cancel
  @objs.delete(@edit) if @edit and @edit.oid.nil?
  @edit = nil
end

#confirm_delete(confirmed, obj) ⇒ Object



13
14
15
16
17
18
# File 'lib/wee/databases/og/old_scaffolder.rb', line 13

def confirm_delete(confirmed, obj)
  if confirmed
    @objs.delete(obj)
    obj.delete!
  end
end

#confirm_destroy(obj, confirmed) ⇒ Object



78
79
80
# File 'lib/wee/databases/og/scaffolder.rb', line 78

def confirm_destroy(obj, confirmed)
  obj.delete! if confirmed
end

#createObject



38
39
40
# File 'lib/wee/databases/og/old_scaffolder.rb', line 38

def create
  @objs << (@edit = @domain_class.new)
end

#delete(obj) ⇒ Object



9
10
11
# File 'lib/wee/databases/og/old_scaffolder.rb', line 9

def delete(obj)
  call Wee::MessageBox.new('Really delete?'), :confirm_delete, obj
end

#destroy(obj) ⇒ Object



73
74
75
76
# File 'lib/wee/databases/og/scaffolder.rb', line 73

def destroy(obj)
  call Wee::MessageBox.new('Do you really want to destroy the object?'), 
    :confirm_destroy, obj
end

#domain_objectsObject



82
83
84
# File 'lib/wee/databases/og/scaffolder.rb', line 82

def domain_objects
  @domain_class.all || []
end

#edit(obj) ⇒ Object



65
66
67
# File 'lib/wee/databases/og/scaffolder.rb', line 65

def edit(obj)
  call editor_for(obj)
end

#editor_classObject



86
87
88
# File 'lib/wee/databases/og/scaffolder.rb', line 86

def editor_class
  Editor
end

#editor_for(obj) ⇒ Object



90
91
92
# File 'lib/wee/databases/og/scaffolder.rb', line 90

def editor_for(obj)
  editor_class.new(obj).add_decoration(Wee::FormDecoration.new)
end

#refreshObject



34
35
36
# File 'lib/wee/databases/og/old_scaffolder.rb', line 34

def refresh
  @objs = @domain_class.all || []
end

#renderObject



11
12
13
14
15
16
17
18
19
20
# File 'lib/wee/databases/og/scaffolder.rb', line 11

def render
  r.h1 "List #{ @domain_class }"
  r.paragraph
  r.table.border(1).with {
    render_header
    render_body
  }
  r.paragraph
  r.anchor.callback(:add).with("Add new #{ @domain_class }")
end

#render_action(obj) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/wee/databases/og/scaffolder.rb', line 53

def render_action(obj)
  r.table_data.with {
    r.anchor.callback(:edit, obj).with("Edit")
    r.space
    r.anchor.callback(:destroy, obj).with("Destroy")
  }
end

#render_action_headerObject



31
32
33
34
# File 'lib/wee/databases/og/scaffolder.rb', line 31

def render_action_header
  r.paragraph
  r.table_header.with { r.space(2) }  # the action column
end

#render_bodyObject



42
43
44
# File 'lib/wee/databases/og/scaffolder.rb', line 42

def render_body
  domain_objects.each {|obj| render_object(obj) }
end

#render_headerObject



22
23
24
25
26
27
28
29
# File 'lib/wee/databases/og/scaffolder.rb', line 22

def render_header
  r.table_row.with {
    @props.each {|prop|
      render_property_header(prop)
    }
    render_action_header
  }
end

#render_object(obj) ⇒ Object



46
47
48
49
50
51
# File 'lib/wee/databases/og/scaffolder.rb', line 46

def render_object(obj)
  r.table_row {
    @props.each {|prop| render_property(obj, prop) } 
    render_action(obj)
  }
end

#render_property(obj, prop) ⇒ Object



61
62
63
# File 'lib/wee/databases/og/scaffolder.rb', line 61

def render_property(obj, prop)
  r.table_data(obj.send(prop.name).to_s)
end

#render_property_header(prop) ⇒ Object



36
37
38
39
40
# File 'lib/wee/databases/og/scaffolder.rb', line 36

def render_property_header(prop)
  r.table_header.with {
    r.bold(prop.name.to_s.capitalize)
  }
end

#save(obj) ⇒ Object



24
25
26
27
# File 'lib/wee/databases/og/old_scaffolder.rb', line 24

def save(obj)
  obj.save!
  @edit = nil
end