class Hypermicrodata::SubmitButton

Attributes

form[R]
method[R]

Public Class Methods

new(button, form) click to toggle source
# File lib/hypermicrodata/submit_button.rb, line 5
def initialize(button, form)
  @button = button
  @form = form.dup
  @excluded_fields = {}
  setup!
end

Public Instance Methods

action_url() click to toggle source
# File lib/hypermicrodata/submit_button.rb, line 16
def action_url
  @form.action
end
item() click to toggle source
# File lib/hypermicrodata/submit_button.rb, line 37
def item
  nil
end
names() click to toggle source
# File lib/hypermicrodata/submit_button.rb, line 28
def names
  (node['itemprop'] || '').split(' ')
end
node() click to toggle source
# File lib/hypermicrodata/submit_button.rb, line 49
def node
  @button.node
end
params() click to toggle source
# File lib/hypermicrodata/submit_button.rb, line 20
def params
  @form.build_query
end
query_string() click to toggle source
# File lib/hypermicrodata/submit_button.rb, line 24
def query_string
  build_query_string(params)
end
rels() click to toggle source
# File lib/hypermicrodata/submit_button.rb, line 32
def rels
  rel = (node['rel'] || node['data-rel'] || @button.dom_class || '')
  rel.split(' ')
end
submit_button?() click to toggle source
# File lib/hypermicrodata/submit_button.rb, line 45
def submit_button?
  true
end
value() click to toggle source
# File lib/hypermicrodata/submit_button.rb, line 12
def value
  "#{action_url}?#{query_string}"
end

Private Instance Methods

build_query_string(parameters) click to toggle source
# File lib/hypermicrodata/submit_button.rb, line 72
def build_query_string(parameters)
  parameters.map do |name, value|
    if field = template_fields[name]
      [CGI.escape(name.to_s), "{#{field.type}}"].join("=")
    elsif !@excluded_fields[name]
      # WEBrick::HTTP.escape* has some problems about m17n on ruby-1.9.*.
      [CGI.escape(name.to_s), CGI.escape(value.to_s)].join("=")
    end
  end.compact.join('&')
end
setup!() click to toggle source
# File lib/hypermicrodata/submit_button.rb, line 54
def setup!
  if method_field = @form.fields.find { |f| f.name == '_method' }
    # overload POST
    @method = method_field.value.upcase
    @excluded_fields['_method'] = method_field
  else
    @method = @form.method
  end
  @form.add_button_to_query(@button) # formをdupしているのでOK
end
template_fields() click to toggle source
# File lib/hypermicrodata/submit_button.rb, line 65
def template_fields
  @template_fields ||= begin
    fields = @form.fields.reject {|field| field.is_a?(Mechanize::Form::Hidden) }
    Hash[fields.map {|field| [field.name, field] }]
  end
end