Class: IAA::BaseForm

Inherits:
Object
  • Object
show all
Defined in:
lib/base_form.rb

Direct Known Subclasses

Form7600A, Form7600B

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pdf_path: nil, pdftk_path: nil) ⇒ BaseForm

Returns a new instance of BaseForm.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/base_form.rb', line 31

def initialize(pdf_path: nil, pdftk_path: nil)
  @fields = get_mapper_fields(self.class.mapper_path)
  @pdftk = init_pdftk(pdftk_path)
  @save_filename = nil
  @fill_values = {}
  load_fields_from_pdf!(pdf_path, @pdftk, self)
  @pdf_path = get_full_path(pdf_path || self.class.default_pdf_path)
  
  @fields.each do |field|
    self.class.send(:define_method, field['attribute_name']) do
      get_attr(field['name'])
    end
  end
  
  @fields.each do |field|
    self.class.send(:define_method, "#{field['attribute_name']}=") do |argument|
      set_attr(field['name'], argument)
    end
  end
end

Class Method Details

.default_pdf_pathObject



93
94
95
# File 'lib/base_form.rb', line 93

def self.default_pdf_path
  "lib/pdfs/#{self.form_name}.pdf"
end

.mapper_pathObject



89
90
91
# File 'lib/base_form.rb', line 89

def self.mapper_path
  "lib/mappings/#{self.form_name}.json"
end

Instance Method Details

#filenameObject



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

def filename
  @save_filename
end

#fill_attributesObject



67
68
69
# File 'lib/base_form.rb', line 67

def fill_attributes
  @fill_values
end

#get_attr(field) ⇒ Object



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

def get_attr(field)
  @fill_values[field]
end

#get_full_path(path) ⇒ Object



12
13
14
# File 'lib/base_form.rb', line 12

def get_full_path(path)
  File.expand_path(File.join('..', '..', path), __FILE__)
end

#get_mapper_fields(path) ⇒ Object



16
17
18
19
20
# File 'lib/base_form.rb', line 16

def get_mapper_fields(path)
  #full_path = File.expand_path(File.join('..', '..', path), __FILE__)
  full_path = get_full_path(path)
  JSON.parse(File.read(full_path))
end

#init_pdftk(pdftk_path) ⇒ Object



8
9
10
# File 'lib/base_form.rb', line 8

def init_pdftk(pdftk_path)
  PdfForms.new(pdftk_path || Cliver.detect('pdftk'))
end

#load_fields_from_pdf!(pdf_path, pdftk, form_object) ⇒ Object



22
23
24
25
26
27
28
29
# File 'lib/base_form.rb', line 22

def load_fields_from_pdf!(pdf_path, pdftk, form_object)
  return if pdf_path.nil?
  fields = pdftk.get_fields(pdf_path)
  fields.each do |field|
    value = field.value rescue nil
    form_object.set_attr(field.name, value)
  end
end

#read_field(field_name) ⇒ Object



63
64
65
# File 'lib/base_form.rb', line 63

def read_field(field_name)
  read_fields.find {|f| f["name"] == field_name}["value"]
end

#read_fieldsObject



52
53
54
55
56
57
58
59
60
61
# File 'lib/base_form.rb', line 52

def read_fields
  @pdftk.get_fields(@pdf_path).map do |field|
    {
      "name" => field.name,
      "options" => field.options,
      "type" => field.type,
      "value" => field.value
    }
  end
end

#save(save_path = 'tmp') ⇒ Object



83
84
85
86
87
# File 'lib/base_form.rb', line 83

def save(save_path='tmp')
  filename = "#{save_path}/#{self.class.form_name}_#{Time.now.to_i}.pdf"
  @pdftk.fill_form @pdf_path, filename, @fill_values
  @filename = filename
end

#set_attr(field, value) ⇒ Object



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

def set_attr(field, value)
  @fill_values[field] = value
end