Class: Circuitdata::Summary
- Inherits:
-
Object
- Object
- Circuitdata::Summary
- Defined in:
- lib/circuitdata/summary.rb
Instance Method Summary collapse
- #base_materials ⇒ Object
- #board_area ⇒ Object
- #board_outline ⇒ Object
- #conductive_layers ⇒ Object
- #final_thickness ⇒ Object
-
#initialize(product) ⇒ Summary
constructor
A new instance of Summary.
- #layers_with_function(func) ⇒ Object
- #max_aspect_ratio ⇒ Object
- #min_through_hole_size ⇒ Object
- #minimum_spacing ⇒ Object
- #minimum_track ⇒ Object
- #number_of_conductive_layers ⇒ Object
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_materials ⇒ Object
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_area ⇒ Object
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_outline ⇒ Object
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_layers ⇒ Object
9 10 11 |
# File 'lib/circuitdata/summary.rb', line 9 def conductive_layers layers_with_function("conductive") end |
#final_thickness ⇒ Object
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_ratio ⇒ Object
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_size ⇒ Object
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_spacing ⇒ Object
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_track ⇒ Object
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_layers ⇒ Object
33 34 35 |
# File 'lib/circuitdata/summary.rb', line 33 def number_of_conductive_layers conductive_layers.length end |