Class: Dommy::FormData

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/dommy/form_data.rb

Overview

‘FormData` — collects name/value entries from an `<form>` (or programmatically), preserving insertion order. Values are stringified per spec; `File` values are passed through as-is (Dommy has no File class, so this only matters for embedders that supply their own).

Usage:

fd = Dommy::FormData.new(form)
fd.get("email")          # "alice@x.test"
fd.append("tag", "ruby")
fd.entries               # [["email", "..."], ["tag", "ruby"]]

Instance Method Summary collapse

Constructor Details

#initialize(form = nil) ⇒ FormData

Returns a new instance of FormData.



18
19
20
21
# File 'lib/dommy/form_data.rb', line 18

def initialize(form = nil)
  @pairs = []
  collect_from(form) if form
end

Instance Method Details

#__js_call__(method, args) ⇒ Object



111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/dommy/form_data.rb', line 111

def __js_call__(method, args)
  case method
  when "append"
    append(args[0], args[1], args[2])
  when "set"
    set(args[0], args[1], args[2])
  when "get"
    get(args[0])
  when "getAll"
    get_all(args[0])
  when "has"
    has(args[0])
  when "delete"
    delete(args[0])
  when "keys"
    keys
  when "values"
    values
  when "entries"
    entries
  when "forEach"
    for_each(&args[0])
  end
end

#__js_get__(key) ⇒ Object



104
105
106
107
108
109
# File 'lib/dommy/form_data.rb', line 104

def __js_get__(key)
  case key
  when "size", "length"
    size
  end
end

#append(name, value, _filename = nil) ⇒ Object



23
24
25
26
# File 'lib/dommy/form_data.rb', line 23

def append(name, value, _filename = nil)
  @pairs << [name.to_s, stringify(value)]
  nil
end

#delete(name) ⇒ Object



66
67
68
69
# File 'lib/dommy/form_data.rb', line 66

def delete(name)
  @pairs.reject! { |k, _| k == name.to_s }
  nil
end

#each(&block) ⇒ Object



90
91
92
# File 'lib/dommy/form_data.rb', line 90

def each(&block)
  @pairs.each(&block)
end

#entriesObject



79
80
81
# File 'lib/dommy/form_data.rb', line 79

def entries
  @pairs.dup
end

#for_each(&block) ⇒ Object Also known as: forEach



83
84
85
86
# File 'lib/dommy/form_data.rb', line 83

def for_each(&block)
  @pairs.each { |k, v| block.call(v, k, self) }
  nil
end

#get(name) ⇒ Object



49
50
51
52
# File 'lib/dommy/form_data.rb', line 49

def get(name)
  pair = @pairs.find { |k, _| k == name.to_s }
  pair && pair[1]
end

#get_all(name) ⇒ Object Also known as: getAll



54
55
56
# File 'lib/dommy/form_data.rb', line 54

def get_all(name)
  @pairs.select { |k, _| k == name.to_s }.map { |_, v| v }
end

#has(name) ⇒ Object Also known as: has?



60
61
62
# File 'lib/dommy/form_data.rb', line 60

def has(name)
  @pairs.any? { |k, _| k == name.to_s }
end

#keysObject



71
72
73
# File 'lib/dommy/form_data.rb', line 71

def keys
  @pairs.map { |k, _| k }
end

#set(name, value, _filename = nil) ⇒ Object



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

def set(name, value, _filename = nil)
  key = name.to_s
  v = stringify(value)
  replaced = false
  @pairs = @pairs.flat_map do |k, existing|
    if k == key
      if replaced
        []
      else
        replaced = true
        [[key, v]]
      end
    else
      [[k, existing]]
    end
  end

  @pairs << [key, v] unless replaced
  nil
end

#sizeObject Also known as: length



94
95
96
# File 'lib/dommy/form_data.rb', line 94

def size
  @pairs.length
end

#to_sObject



100
101
102
# File 'lib/dommy/form_data.rb', line 100

def to_s
  @pairs.map { |k, v| "#{k}=#{v}" }.join("&")
end

#valuesObject



75
76
77
# File 'lib/dommy/form_data.rb', line 75

def values
  @pairs.map { |_, v| v }
end