Class: OgScaffolder::Editor

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

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_object) ⇒ Editor

Returns a new instance of Editor.



97
98
99
100
# File 'lib/wee/databases/og/scaffolder.rb', line 97

def initialize(domain_object)
  super()
  @domain_object = domain_object
end

Instance Method Details

#renderObject



102
103
104
105
106
107
108
109
110
111
# File 'lib/wee/databases/og/scaffolder.rb', line 102

def render
  render_header
  each_property {|prop| 
    unless prop.name == 'oid'
      render_label(prop)
      render_property(prop) 
    end
  }
  render_buttons
end

#render_bool(prop) ⇒ Object



148
149
150
151
152
# File 'lib/wee/databases/og/scaffolder.rb', line 148

def render_bool(prop)
  selected = get_value_of(prop) ? true : false
  r.select_list([true, false]).labels(["Yes", "No"]).selected(selected).
    callback {|choosen| set_value_of(prop, choosen) }
end

#render_buttonsObject



167
168
169
170
171
172
# File 'lib/wee/databases/og/scaffolder.rb', line 167

def render_buttons
  r.paragraph
  r.submit_button.value('Save').callback(:save)
  r.space
  r.submit_button.value('Cancel').callback(:cancel)
end

#render_date(prop) ⇒ Object



155
156
157
158
159
160
161
162
163
164
165
# File 'lib/wee/databases/og/scaffolder.rb', line 155

def render_date(prop)
  t = get_value_of(prop) || Time.now
  
  m = Date::MONTHS.invert
  months = (1..12).map {|i| m[i].capitalize}
  r.select_list((t.year-10 .. t.year+10).to_a).selected(t.year).callback {|year| set_date_of(prop, year, :year) }
  r.space
  r.select_list((1..12).to_a).labels(months).selected(t.month).callback {|month| set_date_of(prop, month, :month) }
  r.space
  r.select_list((1..31).to_a).selected(t.day).callback {|day| set_date_of(prop, day, :day) }
end

#render_headerObject



113
114
115
116
117
118
119
120
121
122
# File 'lib/wee/databases/og/scaffolder.rb', line 113

def render_header
  action =
    if @domain_object.oid.nil?
      "Create"
    else
      "Edit"
    end

  r.h1 "#{ action } #{ @domain_object.class }"
end

#render_label(prop) ⇒ Object



174
175
176
177
178
# File 'lib/wee/databases/og/scaffolder.rb', line 174

def render_label(prop)
  r.paragraph
  r.text prop.name.capitalize
  r.break
end

#render_numeric(prop) ⇒ Object



136
137
138
# File 'lib/wee/databases/og/scaffolder.rb', line 136

def render_numeric(prop)
  r.text_input.value(get_value_of(prop)).callback(:set_value_of, prop) 
end

#render_property(prop) ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
# File 'lib/wee/databases/og/scaffolder.rb', line 124

def render_property(prop)
  if prop.klass.ancestors.include?(Numeric)
    render_numeric(prop)
  elsif prop.klass.ancestors.include?(String)
    render_string(prop)
  elsif prop.klass.ancestors.include?(TrueClass)
    render_bool(prop)
  elsif prop.klass.ancestors.include?(Date)
    render_date(prop)
  end
end

#render_string(prop) ⇒ Object



140
141
142
143
144
145
146
# File 'lib/wee/databases/og/scaffolder.rb', line 140

def render_string(prop)
  if prop.meta[:ui] == :textarea
    r.text_area.callback(:set_value_of, prop).with(get_value_of(prop))
  else
    r.text_input.value(get_value_of(prop)).callback(:set_value_of, prop)
  end
end