lib/hubspot/form.rb in hubspot-ruby-0.1.7 vs lib/hubspot/form.rb in hubspot-ruby-0.1.8

- old
+ new

@@ -1,11 +1,95 @@ module Hubspot + # + # HubSpot Form API + # + # {https://developers.hubspot.com/docs/methods/forms/forms_overview} + # class Form - def initialize(form_guid) - @form_guid = form_guid + FORMS_PATH = '/contacts/v1/forms' + FORM_PATH = '/contacts/v1/forms/:form_guid' + FIELDS_PATH = '/contacts/v1/fields/:form_guid' + FIELD_PATH = FIELDS_PATH + '/:field_name' + SUBMIT_DATA_PATH = '/uploads/form/v2/:portal_id/:form_guid' + + class << self + # {https://developers.hubspot.com/docs/methods/forms/create_form} + def create!(opts={}) + response = Hubspot::Connection.post_json(FORMS_PATH, params: {}, body: opts) + new(response) + end + + def all + response = Hubspot::Connection.get_json(FORMS_PATH, {}) + response.map { |f| new(f) } + end + + # {https://developers.hubspot.com/docs/methods/forms/get_form} + def find(guid) + response = Hubspot::Connection.get_json(FORM_PATH, { form_guid: guid }) + new(response) + end end - def url - Hubspot::Utils.generate_url("/uploads/form/v2/:portal_id/:form_guid", {form_guid: @form_guid}, {base_url: "https://forms.hubspot.com", hapikey: false}) + attr_reader :guid + attr_reader :fields + attr_reader :properties + + def initialize(hash) + self.send(:assign_properties, hash) + end + + # {https://developers.hubspot.com/docs/methods/forms/get_fields} + # {https://developers.hubspot.com/docs/methods/forms/get_field} + def fields(opts={}) + bypass_cache = opts.delete(:bypass_cache) { false } + field_name = opts.delete(:only) { nil } + + if field_name + field_name = field_name.to_s + if bypass_cache || @fields.nil? || @fields.empty? + response = Hubspot::Connection.get_json(FIELD_PATH, { form_guid: @guid, field_name: field_name }) + response + else + @fields.detect { |f| f['name'] == field_name } + end + else + if bypass_cache || @fields.nil? || @fields.empty? + response = Hubspot::Connection.get_json(FIELDS_PATH, { form_guid: @guid }) + @fields = response + end + @fields + end + end + + # {https://developers.hubspot.com/docs/methods/forms/submit_form} + def submit(opts={}) + response = Hubspot::FormsConnection.submit(SUBMIT_DATA_PATH, params: { form_guid: @guid }, body: opts) + [204, 302].include?(response.code) + end + + # {https://developers.hubspot.com/docs/methods/forms/update_form} + def update!(opts={}) + response = Hubspot::Connection.post_json(FORM_PATH, params: { form_guid: @guid }, body: opts) + self.send(:assign_properties, response) + self + end + + # {https://developers.hubspot.com/docs/methods/forms/delete_form} + def destroy! + response = Hubspot::Connection.delete_json(FORM_PATH, { form_guid: @guid }) + @destroyed = (response.code == 204) + end + + def destroyed? + !!@destroyed + end + + private + + def assign_properties(hash) + @guid = hash['guid'] + @fields = hash['fields'] + @properties = hash end end end \ No newline at end of file