Class: BlueStateDigital::SignupForm
- Inherits:
-
ApiDataModel
- Object
- ApiDataModel
- BlueStateDigital::SignupForm
- Defined in:
- lib/blue_state_digital/signup_form.rb
Constant Summary collapse
- FIELDS =
[:id, :name, :slug, :public_title, :create_dt]
Constants inherited from ApiDataModel
Instance Attribute Summary
Attributes inherited from ApiDataModel
Class Method Summary collapse
Instance Method Summary collapse
- #form_fields ⇒ Object
-
#process_signup(field_data:, email_opt_in: false, source: nil, subsource: nil) ⇒ Object
field_data is a hash mapping field labels to field values, like Name’ => ‘Alice’.
- #set_cons_group(cons_group_id) ⇒ Object
Methods inherited from ApiDataModel
Constructor Details
This class inherits a constructor from BlueStateDigital::ApiDataModel
Class Method Details
.clone(clone_from_id:, slug:, name:, public_title:, connection:) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/blue_state_digital/signup_form.rb', line 23 def self.clone(clone_from_id:, slug:, name:, public_title:, connection:) params = {signup_form_id: clone_from_id, title: public_title, signup_form_name: name, slug: slug} xml_response = connection.perform_request '/signup/clone_form', {}, 'POST', params doc = Nokogiri::XML(xml_response) record = doc.xpath('//signup_form').first if record id = record.xpath('id').text.to_i SignupForm.new(id: id, name: name, slug: slug, public_title: public_title, connection: connection) else raise "Cloning signup form failed with message: #{xml_response}" end end |
Instance Method Details
#form_fields ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/blue_state_digital/signup_form.rb', line 80 def form_fields if @_form_fields.nil? xml_response = connection.perform_request '/signup/list_form_fields', {signup_form_id: id}, 'GET', nil doc = Nokogiri::XML(xml_response) @_form_fields = [] doc.xpath('//signup_form_field').each do |form_field_record| @_form_fields << SignupFormField.from_xml(form_field_record) end end @_form_fields end |
#process_signup(field_data:, email_opt_in: false, source: nil, subsource: nil) ⇒ Object
field_data is a hash mapping field labels to field values, like Name’ => ‘Alice’
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/blue_state_digital/signup_form.rb', line 38 def process_signup(field_data:, email_opt_in: false, source: nil, subsource: nil) # Construct the XML to send builder = Builder::XmlMarkup.new builder.instruct! :xml, version: '1.0', encoding: 'utf-8' xml_body = builder.api do |api| api.signup_form(id: self.id) do |form| form_fields.each do |field| form.signup_form_field(field_data[field.label], id: field.id) end unless email_opt_in.nil? form.email_opt_in(email_opt_in ? '1' : '0') end form.source(source) unless source.nil? form.subsource(subsource) unless subsource.nil? end end # Post it to the endpoint begin response = connection.perform_request_raw '/signup/process_signup', {}, 'POST', xml_body if response.status >= 200 && response.status < 300 return true else raise "process signup failed with message: #{response.body}" end rescue BlueStateDigital::XmlErrorResponse => err begin errors = {} error_xmls = Nokogiri::XML(err.).xpath('//error') error_xmls.each do |error_xml| field = form_fields.select{|field| field.id.to_s == error_xml.xpath('signup_form_field_id').text}.first errors[field.label] = error_xml.xpath('description').text raise "process_signup failed with errors: #{errors}" end end end end |
#set_cons_group(cons_group_id) ⇒ Object
76 77 78 |
# File 'lib/blue_state_digital/signup_form.rb', line 76 def set_cons_group(cons_group_id) connection.perform_request('/signup/set_cons_group', {signup_form_id: self.id}, 'POST', {cons_group_id: cons_group_id}) end |