Class: Circuitdata::Summary

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

Instance Method Summary collapse

Constructor Details

#initialize(product) ⇒ Summary



5
6
7
# File 'lib/circuitdata/summary.rb', line 5

def initialize(product)
  @product = product
end

Instance Method Details

#base_materialsObject



22
23
24
25
26
27
28
29
30
31
# File 'lib/circuitdata/summary.rb', line 22

def base_materials
  dielectrics = layers_with_function("dielectric")
  return nil if dielectrics.length == 0

  flexes = dielectrics.map { |d| d.dig(:flexible) }.compact.uniq
  return "Flexible" if flexes == [true]
  return "Rigid" if flexes == [false]
  return "Rigid Flex" if flexes.length == 2
  return "Unknown" # dielectric is present, but does not have flex info.
end

#board_areaObject



13
14
15
16
# File 'lib/circuitdata/summary.rb', line 13

def board_area
  sizes = @product.sections.map { |section| section[:mm2] }
  sizes.compact.sum
end

#board_outlineObject



45
46
47
48
49
50
# File 'lib/circuitdata/summary.rb', line 45

def board_outline
  array = @product.metrics.fetch(:board, {})
  size_x = array[:size_x]
  size_y = array[:size_y]
  return size_x.to_s + " x " + size_y.to_s + " mm" if size_x && size_y
end

#conductive_layersObject



9
10
11
# File 'lib/circuitdata/summary.rb', line 9

def conductive_layers
  layers_with_function("conductive")
end

#final_thicknessObject



52
53
54
# File 'lib/circuitdata/summary.rb', line 52

def final_thickness
  @product.metrics.dig(:board, :thickness)
end

#layers_with_function(func) ⇒ Object



18
19
20
# File 'lib/circuitdata/summary.rb', line 18

def layers_with_function(func)
  @product.layers.select { |layer| layer[:function] == func }
end

#max_aspect_ratioObject



61
62
63
64
65
66
67
# File 'lib/circuitdata/summary.rb', line 61

def max_aspect_ratio
  if final_thickness && min_through_hole_size
    th = BigDecimal(min_through_hole_size.to_s) / 1000.0
    ft = BigDecimal(final_thickness.to_s)
    return (ft / th).truncate(2).to_s.to_f
  end
end

#min_through_hole_sizeObject



56
57
58
59
# File 'lib/circuitdata/summary.rb', line 56

def min_through_hole_size
  @product.processes.select { |process| process.dig(:function_attributes, :hole_type) == "through" }
    .map { |process| process.dig(:function_attributes, :finished_size) }.compact.min
end

#minimum_spacingObject



41
42
43
# File 'lib/circuitdata/summary.rb', line 41

def minimum_spacing
  conductive_layers.map { |layer| layer.dig(:layer_attributes, :minimum_spacing_width) }.compact.min
end

#minimum_trackObject



37
38
39
# File 'lib/circuitdata/summary.rb', line 37

def minimum_track
  conductive_layers.map { |layer| layer.dig(:layer_attributes, :minimum_track_width) }.compact.min
end

#number_of_conductive_layersObject



33
34
35
# File 'lib/circuitdata/summary.rb', line 33

def number_of_conductive_layers
  conductive_layers.length
end