module DocxManagerClient::ModelAdditions::DocxTemplate
Public Instance Methods
docx_template(template_type:)
click to toggle source
# File lib/docx_manager_client/model_additions/docx_template.rb, line 4 def docx_template(template_type:) # attr_accessor attr_accessor :"#{template_type}_docx_file" # callbacks after_save :"post_#{template_type}_document" after_destroy :"delete_#{template_type}_document" # instance methods define_method "#{template_type}_docx_path" do status, response = DocxManagerClient::Connection.docx_server_api(:get, send("#{template_type}_docx_request_paht")) docx_response_attr(status, response, :docx_url) end define_method "post_#{template_type}_document" do return unless send("#{template_type}_docx_file").present? file = Faraday::FilePart.new( send("#{template_type}_docx_file").tempfile.path, send("#{template_type}_docx_file").content_type, send("#{template_type}_docx_file").original_filename ) payload = { template: { document: file } } status, response = DocxManagerClient::Connection.docx_server_api_multipart(:post, send("#{template_type}_docx_request_paht"), payload) docx_response_attr(status, response, :docx_url) end define_method "delete_#{template_type}_document" do status, response = DocxManagerClient::Connection.docx_server_api(:delete, send("#{template_type}_docx_request_paht")) docx_response_attr(status, response) end # private methods define_method :docx_response_attr do |status, response, attr = nil| if status < 300 attr.nil? ? response.data : response.data.attributes.send(attr) else response.errors end end define_method "#{template_type}_docx_request_paht" do "templates/#{template_type}/#{self.class.name}/#{id}" end private :docx_response_attr, "#{template_type}_docx_request_paht".to_sym end