Class: Anvil::Webform

Inherits:
Resources::Base show all
Defined in:
lib/anvil/resources/webform.rb

Instance Attribute Summary

Attributes inherited from Resources::Base

#attributes, #client

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Resources::Base

#==, build_from_response, #initialize, #inspect, list, #method_missing, #respond_to_missing?, #to_h, #to_json, with_client

Constructor Details

This class inherits a constructor from Anvil::Resources::Base

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Anvil::Resources::Base

Class Method Details

.create(name:, fields: [], **options) ⇒ Webform

Create a new webform

Parameters:

  • name (String)

    Name of the form

  • fields (Array<Hash>) (defaults to: [])

    Form field definitions

  • options (Hash)

    Additional options

Returns:

  • (Webform)

    The created webform

Raises:



72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/anvil/resources/webform.rb', line 72

def create(name:, fields: [], **options)
  api_key = options.delete(:api_key)
  client = api_key ? Client.new(api_key: api_key) : self.client

  payload = { name: name, fields: fields }
  payload[:slug] = options[:slug] if options[:slug]

  result = client.graphql(create_forge_mutation, variables: { input: payload })
  raise APIError, "Failed to create webform: #{result}" unless result && result[:createForge]

  new(result[:createForge], client: client)
end

.find(form_eid, client: nil) ⇒ Webform

Find a webform by EID

Parameters:

  • form_eid (String)

    The webform EID

  • client (Client) (defaults to: nil)

    Optional client instance

Returns:

Raises:



90
91
92
93
94
95
96
97
# File 'lib/anvil/resources/webform.rb', line 90

def find(form_eid, client: nil)
  client ||= self.client

  result = client.graphql(forge_query, variables: { eid: form_eid })
  raise NotFoundError, "Webform not found: #{form_eid}" unless result && result[:forge]

  new(result[:forge], client: client)
end

Instance Method Details

#eidObject



9
10
11
# File 'lib/anvil/resources/webform.rb', line 9

def eid
  attributes[:eid]
end

#fieldsObject



21
22
23
# File 'lib/anvil/resources/webform.rb', line 21

def fields
  Array(attributes[:fields])
end

#idObject



5
6
7
# File 'lib/anvil/resources/webform.rb', line 5

def id
  attributes[:eid] || attributes[:id]
end

#nameObject



13
14
15
# File 'lib/anvil/resources/webform.rb', line 13

def name
  attributes[:name]
end

#reload!Object

Reload from API



59
60
61
62
63
# File 'lib/anvil/resources/webform.rb', line 59

def reload!
  refreshed = self.class.find(eid, client: client)
  @attributes = refreshed.attributes
  self
end

#slugObject



17
18
19
# File 'lib/anvil/resources/webform.rb', line 17

def slug
  attributes[:slug]
end

#submissions(limit: 10, offset: 0) ⇒ Array<Hash>

Get submissions for this webform

Parameters:

  • limit (Integer) (defaults to: 10)

    Number of submissions to return

  • offset (Integer) (defaults to: 0)

    Offset for pagination

Returns:

  • (Array<Hash>)

    The form submissions



44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/anvil/resources/webform.rb', line 44

def submissions(limit: 10, offset: 0)
  result = client.graphql(self.class.send(:submissions_query), variables: {
                            forgeEid: eid,
                            limit: limit,
                            offset: offset
                          })

  if result && result[:forgeSubmissions]
    Array(result[:forgeSubmissions])
  else
    []
  end
end

#submit(data: {}) ⇒ Hash

Submit data to this webform

Parameters:

  • data (Hash) (defaults to: {})

    The form data to submit

Returns:

  • (Hash)

    The submission result

Raises:



29
30
31
32
33
34
35
36
37
# File 'lib/anvil/resources/webform.rb', line 29

def submit(data: {})
  result = client.graphql(self.class.send(:create_submission_mutation), variables: {
                            forgeEid: eid,
                            input: data
                          })
  raise APIError, "Failed to submit form data: #{eid}" unless result && result[:createSubmission]

  result[:createSubmission]
end