Class: Primer::Forms::Base
  
  
  
  
  
    - Inherits:
 
    - 
      Object
      
        
          - Object
 
          
            - Primer::Forms::Base
 
          
        
        show all
      
     
  
  
  
  
  
      - Extended by:
 
      - ActsAsComponent
 
  
  
  
  
  
  
  
  
    - Defined in:
 
    - lib/primer/forms/base.rb
 
  
  
 
Overview
  
  Class Attribute Summary collapse
  
  
  
  
  #template_root_path
  
    
      Class Method Summary
      collapse
    
    
  
    
      Instance Method Summary
      collapse
    
    
  
  
  
  
  
  
  
  
  
  
  compile!, extended, renders_templates
  
    Class Attribute Details
    
      
      
      
  
  
    .__vcf_builder  ⇒ Object  
  
  
  
  
    
Returns the value of attribute __vcf_builder.
   
 
  
  
    
      
12
13
14 
     | 
    
      # File 'lib/primer/forms/base.rb', line 12
def __vcf_builder
  @__vcf_builder
end 
     | 
  
 
    
      
      
      
  
  
    
Returns the value of attribute __vcf_form_block.
   
 
  
  
    
      
12
13
14 
     | 
    
      # File 'lib/primer/forms/base.rb', line 12
def __vcf_form_block
  @__vcf_form_block
end 
     | 
  
 
    
      
      
      
  
  
    .has_after_content  ⇒ Object  
  
  
    Also known as:
    after_content?
    
  
  
  
    
Returns the value of attribute has_after_content.
   
 
  
  
    
      
12
13
14 
     | 
    
      # File 'lib/primer/forms/base.rb', line 12
def has_after_content
  @has_after_content
end 
     | 
  
 
    
   
  
    Class Method Details
    
      
  
  
    .caption_template?(field_name)  ⇒ Boolean 
  
  
  
  
    
      
46
47
48 
     | 
    
      # File 'lib/primer/forms/base.rb', line 46
def caption_template?(field_name)
  fields_with_caption_templates.include?(sanitize_field_name_for_template_path(field_name))
end 
     | 
  
 
    
      
  
  
    .fields_with_caption_templates  ⇒ Object 
  
  
  
  
    
      
50
51
52 
     | 
    
      # File 'lib/primer/forms/base.rb', line 50
def fields_with_caption_templates
  @fields_with_caption_templates ||= []
end 
     | 
  
 
    
      
  
  
    
      
15
16
17 
     | 
    
      # File 'lib/primer/forms/base.rb', line 15
def form(&block)
  @__vcf_form_block = block
end 
     | 
  
 
    
      
  
  
    .inherited(base)  ⇒ Object 
  
  
  
  
    
      
31
32
33
34
35
36
37
38
39
40
41
42
43
44 
     | 
    
      # File 'lib/primer/forms/base.rb', line 31
def inherited(base)
  form_path = Utils.const_source_location(base.name)
  return unless form_path
  base.template_root_path = File.join(File.dirname(form_path), base.name.demodulize.underscore)
  base.renders_template "after_content.html.erb" do
    base.instance_variable_set(:@has_after_content, true)
  end
  base.renders_templates "*_caption.html.erb" do |path|
    base.fields_with_caption_templates << File.basename(path).chomp("_caption.html.erb").to_sym
  end
end
     | 
  
 
    
      
  
  
    .new(builder, **options)  ⇒ Object 
  
  
  
  
    
      
19
20
21
22
23
24
25
26
27
28
29 
     | 
    
      # File 'lib/primer/forms/base.rb', line 19
def new(builder, **options)
  if builder && !builder.is_a?(Primer::Forms::Builder)
    raise ArgumentError, "please pass an instance of Primer::Forms::Builder when "\
      "constructing a form object (consider using the `primer_form_with` helper)"
  end
  allocate.tap do |form|
    form.instance_variable_set(:@builder, builder)
    form.send(:initialize, **options)
  end
end
     | 
  
 
    
      
  
  
    .sanitize_field_name_for_template_path(field_name)  ⇒ Object 
  
  
  
  
    
      
54
55
56 
     | 
    
      # File 'lib/primer/forms/base.rb', line 54
def sanitize_field_name_for_template_path(field_name)
  field_name.to_s.delete_suffix("?").to_sym
end
     | 
  
 
    
   
  
    Instance Method Details
    
      
  
  
    #after_content?(*args)  ⇒ Boolean 
  
  
  
  
    
      
99
100
101 
     | 
    
      # File 'lib/primer/forms/base.rb', line 99
def after_content?(*args)
  self.class.after_content?(*args)
end 
     | 
  
 
    
      
  
  
    #before_render  ⇒ Object 
  
  
  
  
    
      
86
87
88
89
90
91
92
93 
     | 
    
      # File 'lib/primer/forms/base.rb', line 86
def before_render
  each_input_in(self) do |input|
    if input.input? && input.invalid? && input.focusable?
      input.autofocus!
      break
    end
  end
end
     | 
  
 
    
      
  
  
    #caption_template?(*args)  ⇒ Boolean 
  
  
  
  
    
      
95
96
97 
     | 
    
      # File 'lib/primer/forms/base.rb', line 95
def caption_template?(*args)
  self.class.caption_template?(*args)
end 
     | 
  
 
    
      
  
  
    
      
74
75
76
77
78
79
80
81
82
83
84 
     | 
    
      # File 'lib/primer/forms/base.rb', line 74
def each_input_in(root_input, &block)
  return enum_for(__method__, root_input) unless block
  root_input.inputs.each do |input|
    if input.respond_to?(:inputs)
      each_input_in(input, &block)
    else
      yield input
    end
  end
end
     | 
  
 
    
      
  
  
    
      
59
60
61
62
63
64
65
66
67
68
69
70
71
72 
     | 
    
      # File 'lib/primer/forms/base.rb', line 59
def inputs
  @inputs ||= form_object.inputs.map do |input|
    next input unless input.input?
        if input.type == :group
      input
    else
      Primer::Forms::Dsl::InputGroup.new(builder: @builder, form: self) do |group|
        group.send(:add_input, input)
      end
    end
  end
end
     | 
  
 
    
      
  
  
    
      
107
108
109
110
111
112
113
114 
     | 
    
      # File 'lib/primer/forms/base.rb', line 107
def perform_render(&_block)
  return "" unless render?
  Base.compile!
  self.class.compile!
  render_base_form
end 
     | 
  
 
    
      
  
  
    #render?  ⇒ Boolean 
  
  
  
  
    
      
116
117
118 
     | 
    
      # File 'lib/primer/forms/base.rb', line 116
def render?
  true
end 
     | 
  
 
    
      
  
  
    #render_caption_template(field_name)  ⇒ Object 
  
  
  
  
    
      
103
104
105 
     | 
    
      # File 'lib/primer/forms/base.rb', line 103
def render_caption_template(field_name)
  send(:"render_#{self.class.sanitize_field_name_for_template_path(field_name)}_caption")
end
     |