Module: Sequel::Plugins::RackBackendApiAdapter::InstanceMethods

Defined in:
lib/sequel_rack_backend_api_adapter.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(model_class) ⇒ Object



14
15
16
17
18
19
20
21
22
23
# File 'lib/sequel_rack_backend_api_adapter.rb', line 14

def self.included(model_class)
  model_class.class_eval do
    class << self
      alias backend_post new
    end
    alias backend_delete destroy
    alias backend_put set
    alias backend_values values
  end
end

Instance Method Details

#backend_clone_form(url, opts = {}) ⇒ Object



52
53
54
55
56
# File 'lib/sequel_rack_backend_api_adapter.rb', line 52

def backend_clone_form(url, opts={})
  backend_form(url, [], {:submit_text=>'CLONE', :method=>'POST'}.update(opts)) do |out|
    out << "<input type='hidden' name='clone_id' value='#{self.id}' />\n"
  end
end

#backend_delete_form(url, opts = {}) ⇒ Object



51
# File 'lib/sequel_rack_backend_api_adapter.rb', line 51

def backend_delete_form(url, opts={}); backend_form(url, [], {:submit_text=>'X', :method=>'DELETE'}.update(opts)){}; end

#backend_fields(cols) ⇒ Object

Silly but usable form prototype Not really meant to be used in a real case It uses a textarea for everything Override it Or even better, use Sequel-Crushyform plugin instead



70
71
72
73
74
75
76
77
78
# File 'lib/sequel_rack_backend_api_adapter.rb', line 70

def backend_fields(cols)
  o = ''
  cols.each do |c|
    identifier = "#{id.to_i}-#{self.class}-#{c}"
    o << "<label for='#{identifier}'>#{c.to_s.capitalize}</label><br />\n"
    o << "<textarea id='#{identifier}' name='model[#{c}]'>#{self.send(c)}</textarea><br />\n"
  end
  o
end

#backend_form(url, cols = nil, opts = {}) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/sequel_rack_backend_api_adapter.rb', line 27

def backend_form(url, cols=nil, opts={})
  cols ||= default_backend_columns
  if block_given?
    fields_list = ''
    yield(fields_list)
  else
    fields_list = respond_to?(:crushyform) ? crushyform(cols) : backend_fields(cols)
  end
  o = "<form action='#{url}' method='POST' #{"enctype='multipart/form-data'" if fields_list.match(/type='file'/)} class='backend-form'>\n"
  o << backend_form_title unless block_given?
  o << fields_list
  opts[:method] = 'PUT' if (opts[:method].nil? && !self.new?)
  o << "<input type='hidden' name='_method' value='#{opts[:method]}' />\n" unless opts[:method].nil?
  o << "<input type='hidden' name='_destination' value='#{opts[:destination]}' />\n" unless opts[:destination].nil?
  o << "<input type='hidden' name='_submit_text' value='#{opts[:submit_text]}' />\n" unless opts[:submit_text].nil?
  o << "<input type='hidden' name='_no_wrap' value='#{opts[:no_wrap]}' />\n" unless opts[:no_wrap].nil?
  cols.each do |c|
    o << "<input type='hidden' name='fields[]' value='#{c}' />\n"
  end
  o << "<input type='submit' name='save' value='#{opts[:submit_text] || 'SAVE'}' />\n"
  o << "</form>\n"
  o
end

#backend_form_titleObject



58
59
60
61
# File 'lib/sequel_rack_backend_api_adapter.rb', line 58

def backend_form_title
  n = self.respond_to?(:to_label) ? self.to_label : self.backend_to_label
  "<h2>#{'Edit ' unless self.new?}#{n}</h2>"
end

#backend_save?Boolean

Returns:

  • (Boolean)


25
# File 'lib/sequel_rack_backend_api_adapter.rb', line 25

def backend_save?; valid? && save; end

#backend_showObject



83
# File 'lib/sequel_rack_backend_api_adapter.rb', line 83

def backend_show; 'OK'; end

#backend_to_labelObject



63
# File 'lib/sequel_rack_backend_api_adapter.rb', line 63

def backend_to_label; [self.new? ? 'New' : nil, model.name, id].compact!.join(' '); end

#cloning_backend_columnsObject



82
# File 'lib/sequel_rack_backend_api_adapter.rb', line 82

def cloning_backend_columns; default_backend_columns; end

#default_backend_columnsObject

Can be overridden



81
# File 'lib/sequel_rack_backend_api_adapter.rb', line 81

def default_backend_columns; columns - [:id]; end