Module: Markita::Markdown::Form

Defined in:
lib/markita/markdown/form.rb

Overview

Module to isolate from Markdown

Constant Summary collapse

FIELD =
Regexp.new field
RGX =
/^!( #{field})+/
POST =
/!$/
ACTION =
/\(([^()]*)\)!?$/

Class Method Summary collapse

Class Method Details

.input(type, field, name, values) ⇒ Object

:reek:LongParameterList :reek:TooManyStatements



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/markita/markdown/form.rb', line 30

def self.input(type, field, name, values)
  if field
    if values.empty? then input_text(field, type, name)
    elsif values.count > 1 then input_select(field, name, values)
    else
      input_defaulted(field, type, name, values)
    end
  elsif name == 'submit' then input_submit(values)
  else
    input_hidden(name, values)
  end
end

.input_defaulted(field, type, name, values) ⇒ Object

:reek:LongParameterList



52
53
54
55
56
57
# File 'lib/markita/markdown/form.rb', line 52

def self.input_defaulted(field, type, name, values)
  <<-INPUT
  #{field}:<input type="#{type}" name="#{name}"
    value="#{values[0]}">
  INPUT
end

.input_hidden(name, values) ⇒ Object



47
48
49
# File 'lib/markita/markdown/form.rb', line 47

def self.input_hidden(name, values)
  %(  <input type="hidden" name="#{name}" value="#{values[0]}">\n)
end

.input_select(field, name, values) ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/markita/markdown/form.rb', line 16

def self.input_select(field, name, values)
  %(  #{field}:<select name="#{name}">\n).tap do |html|
    values.each do |value|
      html << %(    <option value="#{value}">#{value}</option>\n)
    end
    html << "  </select>\n"
  end
end

.input_submit(values) ⇒ Object



43
44
45
# File 'lib/markita/markdown/form.rb', line 43

def self.input_submit(values)
  %(  <input type="submit" value="#{values[0] || 'Submit'}">\n)
end

.input_text(field, type, name) ⇒ Object



25
26
27
# File 'lib/markita/markdown/form.rb', line 25

def self.input_text(field, type, name)
  %(  #{field}:<input type="#{type}" name="#{name}">\n)
end

.match?(line) ⇒ Boolean

Returns:

  • (Boolean)


59
# File 'lib/markita/markdown/form.rb', line 59

def self.match?(line) = RGX.match?(line)

.maybe(yon, name, field, values) ⇒ Object

:reek:ControlParameter :reek:NilCheck :reek:LongParameterList



62
63
64
65
66
67
# File 'lib/markita/markdown/form.rb', line 62

def self.maybe(yon, name, field, values)
  return :NO if yon == :NO || (field.nil? && name == 'submit')
  return yon unless field && values.count < 2

  yon == :yes ? :no : :YES
end

.scan(line) ⇒ Object

:reek:LongYieldList :reek:TooManyStatements



70
71
72
73
74
75
76
77
# File 'lib/markita/markdown/form.rb', line 70

def self.scan(line)
  line.scan(FIELD).each do |field, pwd, name, value|
    field &&= field[0...-1]
    values = value ? value[2...-1].split('","') : []
    type = pwd ? 'password' : 'text'
    yield field, type, name, values
  end
end

.start(line, attributes) ⇒ Object



79
80
81
82
83
# File 'lib/markita/markdown/form.rb', line 79

def self.start(line, attributes)
  method = POST.match?(line) ? ' method="post"' : ''
  action = (mdt = ACTION.match(line)) ? %( action="#{mdt[1]}") : ''
  %(<form#{action}#{method}#{attributes.shift}>\n)
end

.stopObject



85
# File 'lib/markita/markdown/form.rb', line 85

def self.stop = %(</form>\n)

.submit(yon) ⇒ Object

:reek:ControlParameter



88
89
90
91
92
93
94
95
96
97
# File 'lib/markita/markdown/form.rb', line 88

def self.submit(yon)
  case yon
  when :yes
    %(  <input type="submit">\n)
  when :YES
    %(  <br>\n  <input type="submit">\n)
  else
    ''
  end
end