lib/orange/resources/model_resource.rb in orange-0.0.3 vs lib/orange/resources/model_resource.rb in orange-0.0.4
- old
+ new
@@ -70,11 +70,11 @@
# @return [Hash] hash of options to be used
def view_opts(packet, mode, is_list, *args)
opts = args.extract_options!.with_defaults({:path => ''})
props = model_class.form_props(packet['route.context'])
resource_id = opts[:id] || packet['route.resource_id'] || false
- all_opts = {:props => props, :resource => self.class.to_s, :model_name => @my_orange_name}.merge!(opts)
+ all_opts = {:props => props, :resource => self, :model_name => @my_orange_name}.merge!(opts)
all_opts.with_defaults! :model => find_one(packet, mode, resource_id) unless is_list
all_opts.with_defaults! :list => find_list(packet, mode) if is_list
all_opts.with_defaults! find_extras(packet, mode)
all_opts
end
@@ -117,16 +117,17 @@
model_class.new(packet.request.params[@my_orange_name.to_s]).save
end
packet.reroute(@my_orange_name, :orange)
end
- # Deletes an object specified by packet['route.resource_id'], then reroutes to main
+ # Deletes an object specified by packet['route.resource_id'], then reroutes to main.
+ # The request must come in as a delete. Rack::MethodOverride can be used to do this.
# @param [Orange::Packet] packet the packet being routed
def delete(packet, *opts)
if packet.request.delete?
m = model_class.get(packet['route.resource_id'])
- m.destroy! if m
+ m.destroy if m
end
packet.reroute(@my_orange_name, :orange)
end
# Saves updates to an object specified by packet['route.resource_id'], then reroutes to main
@@ -134,11 +135,10 @@
def save(packet, *opts)
if packet.request.post?
m = model_class.get(packet['route.resource_id'])
if m
m.update(packet.request.params[@my_orange_name.to_s])
- else
end
end
packet.reroute(@my_orange_name, :orange)
end
@@ -194,17 +194,18 @@
# @param [String] text link text to show
# @param [String] link the actual href value of the link
# @param [String, false] confirm text of the javascript confirm (false for none [default])
# @param [optional, Array] args array of optional arguments, only opts[:method] defined
# @option opts [String] method method name (Should be 'DELETE', 'PUT' or 'POST')
- def form_link(text, link, confirm = false, *args)
- opts = args.extract_options!
+ def form_link(text, link, confirm = false, opts = {})
+ text = "<img src='#{opts[:img]}' alt='#{text}' />" if opts[:img]
+ css = opts[:class]? opts[:class] : 'form_button_link'
meth = (opts[:method]? "<input type='hidden' name='_method' value='#{opts[:method]}' />" : '')
if confirm
- "<form action='#{link}' method='post' class='mini' onsubmit='return confirm(\"#{confirm}\")'><button class='link_button'><a href='#'>#{text}</a></button>#{meth}</form>"
+ "<form action='#{link}' method='post' class='mini' onsubmit='return confirm(\"#{confirm}\")'><button class='link_button'><a href='#' class='#{css}'>#{text}</a></button>#{meth}</form>"
else
- "<form action='#{link}' method='post' class='mini'><button class='link_button'><a href='#'>#{text}</a></button>#{meth}</form>"
+ "<form action='#{link}' method='post' class='mini'><button class='link_button'><a href='#' class='#{css}'>#{text}</a></button>#{meth}</form>"
end
end
# Calls view for an orange resource.
def view(model_name, *args)
@@ -216,21 +217,26 @@
args = args.extract_options!
val = args[:value] || ''
label = args[:label] || false
show = args[:show] || false
name = prop[:name]
+ human_readable_name = name.to_s.split('_').each{|w| w.capitalize!}.join(' ')
unless show
case prop[:type]
when :title
ret = "<input class='title' type='text' value='#{val}' name='#{model_name}[#{name}]' />"
when :text
ret = "<input type='text' value='#{val}' name='#{model_name}[#{name}]' />"
when :fulltext
ret = "<textarea name='#{model_name}[#{name}]'>#{val}</textarea>"
+ when :boolean
+ human_readable_name = human_readable_name + '?'
+ ret = "<input type='hidden' name='#{model_name}[#{name}]' value='0' /><input type='checkbox' name='#{model_name}[#{name}]' value='1' #{'checked="checked"' if (val && val != '')}/>"
else
ret = "<input type='text' value='#{val}' name='#{model_name}[#{name}]' />"
end
- ret = "<label for=''>#{name}</label><br />" + ret if label
+ display_name = prop[:display_name] || human_readable_name
+ ret = "<label for=''>#{display_name}</label><br />" + ret if label
else
case prop[:type]
when :title
ret = "<h3 class='#{model_name}-#{name}'>#{val}</h3>"
when :text
\ No newline at end of file