circuitdata 0.6.4 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +25 -122
- data/Rakefile +4 -6
- data/lib/circuitdata.rb +32 -120
- data/lib/circuitdata/bury/bury.rb +61 -0
- data/lib/circuitdata/dereferencer.rb +49 -17
- data/lib/circuitdata/exposed_area.rb +84 -0
- data/lib/circuitdata/json_schema.rb +14 -0
- data/lib/circuitdata/json_validator.rb +56 -0
- data/lib/circuitdata/json_validator/json_schema_error_parser.rb +57 -0
- data/lib/circuitdata/material_validator.rb +40 -0
- data/lib/circuitdata/product.rb +125 -0
- data/lib/circuitdata/product_id_validator.rb +81 -0
- data/lib/circuitdata/profile.rb +31 -69
- data/lib/circuitdata/schema.rb +145 -0
- data/lib/circuitdata/schema_files/schema_v1_dereferenced.json +107155 -0
- data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema.json +68 -5307
- data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema_generics.json +23 -0
- data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema_materials.json +99 -0
- data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema_products.json +779 -0
- data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema_profiles_and_capabilities.json +323 -0
- data/lib/circuitdata/summary.rb +96 -0
- data/lib/circuitdata/validator.rb +28 -0
- data/lib/circuitdata/version.rb +2 -1
- metadata +113 -20
- data/lib/circuitdata/bk_comparer.rb +0 -106
- data/lib/circuitdata/compatibility_checker.rb +0 -160
- data/lib/circuitdata/file_comparer.rb +0 -276
- data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema_definitions.json +0 -1249
- data/lib/circuitdata/schema_files/v1/ottp_circuitdata_skeleton_schema.json +0 -94
- data/lib/circuitdata/schema_files/v1/ottp_schema_definitions.json +0 -102
- data/lib/circuitdata/tools.rb +0 -207
@@ -1,94 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
-
"type": "object",
|
4
|
-
"additionalProperties": false,
|
5
|
-
"required": ["open_trade_transfer_package"],
|
6
|
-
"properties": {
|
7
|
-
"open_trade_transfer_package": {
|
8
|
-
"type": "object",
|
9
|
-
"properties": {
|
10
|
-
"version": {
|
11
|
-
"type": "string",
|
12
|
-
"pattern": "^1.0$"
|
13
|
-
},
|
14
|
-
"information": {
|
15
|
-
"$ref": "ottp_schema_definitions.json#/definitions/information"
|
16
|
-
},
|
17
|
-
"products": {
|
18
|
-
"type": "object",
|
19
|
-
"properties": {
|
20
|
-
"generic": {
|
21
|
-
"type": "object",
|
22
|
-
"properties": {},
|
23
|
-
"id": "generic",
|
24
|
-
"description": "this should validate any element under generic to be valid"
|
25
|
-
}
|
26
|
-
},
|
27
|
-
"patternProperties": {
|
28
|
-
"^(?!generic$).*": {
|
29
|
-
"type": "object",
|
30
|
-
"required": ["printed_circuits_fabrication_data"],
|
31
|
-
"properties": {
|
32
|
-
"printed_circuits_fabrication_data": {
|
33
|
-
"type": "object",
|
34
|
-
"required": ["version"],
|
35
|
-
"properties": {
|
36
|
-
"stackup": {
|
37
|
-
"type": "object",
|
38
|
-
"properties": {
|
39
|
-
"specified": {
|
40
|
-
"type": "object",
|
41
|
-
"properties": {}
|
42
|
-
}
|
43
|
-
}
|
44
|
-
}
|
45
|
-
}
|
46
|
-
}
|
47
|
-
}
|
48
|
-
}
|
49
|
-
}
|
50
|
-
},
|
51
|
-
"custom": {
|
52
|
-
"properties": {
|
53
|
-
"colors": {
|
54
|
-
"type": "array",
|
55
|
-
"items": {
|
56
|
-
"type": "object",
|
57
|
-
"properties": {}
|
58
|
-
}
|
59
|
-
} ,
|
60
|
-
"materials": {
|
61
|
-
"properties": {
|
62
|
-
"printed_circuits_fabrication_data": {
|
63
|
-
"properties": {
|
64
|
-
"dielectrics": {
|
65
|
-
"type": "array",
|
66
|
-
"items": {
|
67
|
-
"type": "object",
|
68
|
-
"properties": {}
|
69
|
-
}
|
70
|
-
},
|
71
|
-
"soldermasks": {
|
72
|
-
"type": "array",
|
73
|
-
"items": {
|
74
|
-
"type": "object",
|
75
|
-
"properties": {}
|
76
|
-
}
|
77
|
-
},
|
78
|
-
"stiffeners": {
|
79
|
-
"type": "array",
|
80
|
-
"items": {
|
81
|
-
"type": "object",
|
82
|
-
"properties": {}
|
83
|
-
}
|
84
|
-
}
|
85
|
-
}
|
86
|
-
}
|
87
|
-
}
|
88
|
-
}
|
89
|
-
}
|
90
|
-
}
|
91
|
-
}
|
92
|
-
}
|
93
|
-
}
|
94
|
-
}
|
@@ -1,102 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"definitions": {
|
3
|
-
"information": {
|
4
|
-
"type": "object",
|
5
|
-
"additionalProperties": false,
|
6
|
-
"properties": {
|
7
|
-
"company": {
|
8
|
-
"type": "string",
|
9
|
-
"description": "The company who owns the information in the file"
|
10
|
-
},
|
11
|
-
"person": {
|
12
|
-
"type": "string",
|
13
|
-
"description": "The person responsible for the information in the file"
|
14
|
-
},
|
15
|
-
"editor_software": {
|
16
|
-
"type": "string",
|
17
|
-
"description": "The software that has generated the file"
|
18
|
-
},
|
19
|
-
"created": {
|
20
|
-
"type": "string",
|
21
|
-
"format": "date-time",
|
22
|
-
"description": "The timestamp of the creation of the file, in RFC 3339 date-time format"
|
23
|
-
},
|
24
|
-
"updated": {
|
25
|
-
"type": "string",
|
26
|
-
"format": "date-time",
|
27
|
-
"description": "The timestamp of the last update of the file, in RFC 3339 date-time format"
|
28
|
-
},
|
29
|
-
"project": {
|
30
|
-
"type": "string",
|
31
|
-
"description": "The name of the project included in the file"
|
32
|
-
},
|
33
|
-
"version": {
|
34
|
-
"type": "number",
|
35
|
-
"description": "The name of the project included in the file"
|
36
|
-
},
|
37
|
-
"description": {
|
38
|
-
"type": "string"
|
39
|
-
}
|
40
|
-
}
|
41
|
-
},
|
42
|
-
"product": {
|
43
|
-
"type": "object",
|
44
|
-
"properties": {
|
45
|
-
}
|
46
|
-
},
|
47
|
-
"profile": {
|
48
|
-
"type": "object",
|
49
|
-
"additionalProperties": false,
|
50
|
-
"properties": {
|
51
|
-
"defaults": {
|
52
|
-
"type": "object",
|
53
|
-
"properties": {
|
54
|
-
}
|
55
|
-
},
|
56
|
-
"enforced": {
|
57
|
-
"type": "object",
|
58
|
-
"properties": {
|
59
|
-
}
|
60
|
-
},
|
61
|
-
"restricted": {
|
62
|
-
"type": "object",
|
63
|
-
"properties": {
|
64
|
-
}
|
65
|
-
}
|
66
|
-
}
|
67
|
-
},
|
68
|
-
"capability": {
|
69
|
-
"type": "object",
|
70
|
-
"properties": {
|
71
|
-
"summary": {
|
72
|
-
"type": "object",
|
73
|
-
"properties": {
|
74
|
-
}
|
75
|
-
},
|
76
|
-
"materials": {
|
77
|
-
"type": "object",
|
78
|
-
"properties": {
|
79
|
-
}
|
80
|
-
}
|
81
|
-
}
|
82
|
-
},
|
83
|
-
"custom": {
|
84
|
-
"type": "object",
|
85
|
-
"properties": {
|
86
|
-
"colors": {
|
87
|
-
"type": "object",
|
88
|
-
"properties": {
|
89
|
-
},
|
90
|
-
"aliases": "",
|
91
|
-
"name": "any_name",
|
92
|
-
"description": "Colors can be defined by hex, rgb, cmyk or name. Name of the color present here can be references in the other elements"
|
93
|
-
},
|
94
|
-
"materials": {
|
95
|
-
"type": "object",
|
96
|
-
"properties": {
|
97
|
-
}
|
98
|
-
}
|
99
|
-
}
|
100
|
-
}
|
101
|
-
}
|
102
|
-
}
|
data/lib/circuitdata/tools.rb
DELETED
@@ -1,207 +0,0 @@
|
|
1
|
-
class Circuitdata::Tools
|
2
|
-
def initialize()
|
3
|
-
require 'json'
|
4
|
-
@schema_path = File.join(File.dirname(__FILE__), 'schema_files/v1/ottp_circuitdata_schema.json')
|
5
|
-
@definitions_path = File.join(File.dirname(__FILE__), 'schema_files/v1/ottp_circuitdata_schema_definitions.json')
|
6
|
-
@ra = {}
|
7
|
-
end
|
8
|
-
|
9
|
-
def update_ra(type, key, value)
|
10
|
-
if key == :materials
|
11
|
-
update_ra(type, :dielectric, value[:properties][:printed_circuits_fabrication_data][:properties][:dielectrics])
|
12
|
-
update_ra(type, :soldermask, value[:properties][:printed_circuits_fabrication_data][:properties][:soldermasks])
|
13
|
-
update_ra(type, :stiffener, value[:properties][:printed_circuits_fabrication_data][:properties][:stiffeners])
|
14
|
-
return
|
15
|
-
end
|
16
|
-
parsed_elements = Circuitdata.read_json(@definitions_path)[2]
|
17
|
-
unless @ra[:structured][:elements].has_key? key
|
18
|
-
@ra[:structured][:elements][key] = {
|
19
|
-
:type => value[:type],
|
20
|
-
:elements => {},
|
21
|
-
:name => nil,
|
22
|
-
:description => nil,
|
23
|
-
:aliases => nil
|
24
|
-
}
|
25
|
-
@ra[:structured][:elements][key][:name] = value[:descriptive_name] if value.has_key? :descriptive_name
|
26
|
-
@ra[:structured][:elements][key][:description] = value[:description] if value.has_key? :description
|
27
|
-
if value.has_key? :aliases
|
28
|
-
@ra[:structured][:elements][key][:aliases] = value[:aliases] unless value[:aliases] == ""
|
29
|
-
end
|
30
|
-
end
|
31
|
-
if value[:type] == "array"
|
32
|
-
subelement = value[:items]
|
33
|
-
else
|
34
|
-
subelement = value
|
35
|
-
end
|
36
|
-
if subelement.has_key? :properties
|
37
|
-
subelement[:properties].each do |skey, svalue|
|
38
|
-
unless @ra[:structured][:elements][key][:elements].has_key? skey
|
39
|
-
@ra[:structured][:elements][key][:elements][skey] = {
|
40
|
-
:in_product_generic => false,
|
41
|
-
:in_product_stackup => false,
|
42
|
-
:in_profile_default => false,
|
43
|
-
:in_profile_enforced => false,
|
44
|
-
:in_profile_restricted => false,
|
45
|
-
:in_custom => false,
|
46
|
-
:in_capabilities => false,
|
47
|
-
:type => nil,
|
48
|
-
:arrayitems => nil,
|
49
|
-
:enum => nil,
|
50
|
-
:enum_description => nil,
|
51
|
-
:description => nil,
|
52
|
-
:uom => nil,
|
53
|
-
:minimum => nil,
|
54
|
-
:maximum => nil
|
55
|
-
}
|
56
|
-
if svalue.has_key? :$ref
|
57
|
-
elements = svalue[:$ref].split('/')
|
58
|
-
if elements.length == 4
|
59
|
-
element = parsed_elements[elements[1].to_sym][elements[2].to_sym][elements[3].to_sym]
|
60
|
-
elsif elements.length == 5
|
61
|
-
element = parsed_elements[elements[1].to_sym][elements[2].to_sym][elements[3].to_sym][elements[4].to_sym]
|
62
|
-
else
|
63
|
-
element = parsed_elements[elements[1].to_sym][elements[2].to_sym][elements[3].to_sym][elements[4].to_sym][elements[5].to_sym]
|
64
|
-
end
|
65
|
-
else
|
66
|
-
element = nil
|
67
|
-
[:rigid_conductive_layer, :flexible_conductive_layer].include? key.to_sym ? newkey = :conductive_layer : newkey = key.to_sym
|
68
|
-
if parsed_elements[:definitions][:elements].has_key? newkey
|
69
|
-
element = parsed_elements[:definitions][:elements][newkey][skey.to_sym] if parsed_elements[:definitions][:elements][newkey].has_key? skey.to_sym
|
70
|
-
end
|
71
|
-
end
|
72
|
-
unless element.nil?
|
73
|
-
if element.has_key? :type
|
74
|
-
@ra[:structured][:elements][key][:elements][skey][:type] = element[:type]
|
75
|
-
if element[:type] == "array"
|
76
|
-
if element.has_key? :items and element[:items].has_key? :type
|
77
|
-
@ra[:structured][:elements][key][:elements][skey][:arrayitems] == element[:items][:type]
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
if element.has_key? :enum
|
82
|
-
@ra[:structured][:elements][key][:elements][skey][:enum] = element[:enum]
|
83
|
-
@ra[:structured][:elements][key][:elements][skey][:enum_description] = element[:enum_description] if element.has_key? :enum_description
|
84
|
-
end
|
85
|
-
@ra[:structured][:elements][key][:elements][skey][:description] = element[:description] if element.has_key? :description
|
86
|
-
@ra[:structured][:elements][key][:elements][skey][:uom] = element[:uom] if element.has_key? :uom
|
87
|
-
@ra[:structured][:elements][key][:elements][skey][:minimum] = element[:minimum] if element.has_key? :minimum
|
88
|
-
@ra[:structured][:elements][key][:elements][skey][:maximum] = element[:maximum] if element.has_key? :maximum
|
89
|
-
end
|
90
|
-
else
|
91
|
-
if [:in_profile_restricted, :in_capabilities].include? type
|
92
|
-
if @ra[:structured][:elements][key][:elements][skey][:type].nil?
|
93
|
-
@ra[:structured][:elements][key][:elements][skey][:type] = svalue[:type] unless ['array', 'object'].include? svalue[:type]
|
94
|
-
end
|
95
|
-
case @ra[:structured][:elements][key][:elements][skey][:type]
|
96
|
-
when *["number", "integer", "boolean", "string"]
|
97
|
-
@ra[:structured][:elements][key][:elements][skey][:type] = "number" if @ra[:structured][:elements][key][:elements][skey][:type] == "integer"
|
98
|
-
unless ( svalue.has_key? :type and svalue[:type] == "array" ) and ( svalue.has_key? :items and svalue[:items].has_key? :type and svalue[:items][:type] == @ra[:structured][:elements][key][:elements][skey][:type])
|
99
|
-
(@ra[:errors][type][key] ||= {})[skey] = "Type is #{@ra[:structured][:elements][key][:elements][skey][:type]}, wrong check"
|
100
|
-
end
|
101
|
-
if type == :in_profile_restricted and not @ra[:structured][:elements][key][:elements][skey][:enum].nil? and svalue.has_key? :minItems
|
102
|
-
puts
|
103
|
-
(@ra[:errors][type][key] ||= {})[skey] = "Error in profile restricted where enum is not considered"
|
104
|
-
end
|
105
|
-
when "array"
|
106
|
-
unless svalue.has_key? :type and svalue[:type] == "array"
|
107
|
-
(@ra[:errors][type][key] ||= {})[skey] = "Type is #{@ra[:structured][:elements][key][:elements][skey][:type]}, wrong check"
|
108
|
-
end
|
109
|
-
else
|
110
|
-
(@ra[:errors][type][key] ||= {})[skey] = "Unknown type #{@ra[:structured][:elements][key][:elements][skey][:type]} in #{key}, #{skey} when doing #{type}"
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
@ra[:structured][:elements][key][:elements][skey][type] = true
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def create_structure
|
120
|
-
@ra[:structured] = {:elements => {}, :custom => {}}
|
121
|
-
@ra[:errors] = {:in_profile_restricted => {}, :in_capabilities => {}}
|
122
|
-
parsed_schema = Circuitdata.read_json(@schema_path)[2]
|
123
|
-
# Go through all products
|
124
|
-
parsed_schema[:properties][:open_trade_transfer_package][:properties][:products][:patternProperties]["^(?!generic$).*".to_sym][:properties][:printed_circuits_fabrication_data][:properties].each do |key, value|
|
125
|
-
self.update_ra(:in_product_generic, key, value)
|
126
|
-
end
|
127
|
-
# Go through all profiles
|
128
|
-
["defaults", "restricted", "enforced"].each do |sym|
|
129
|
-
parsed_schema[:properties][:open_trade_transfer_package][:properties][:profiles][:properties][sym.to_sym][:properties][:printed_circuits_fabrication_data][:properties].each do |key, value|
|
130
|
-
case sym
|
131
|
-
when "defaults"
|
132
|
-
t = :in_profile_default
|
133
|
-
when "restricted"
|
134
|
-
t = :in_profile_restricted
|
135
|
-
when "enforced"
|
136
|
-
t = :in_profile_enforced
|
137
|
-
end
|
138
|
-
self.update_ra(t, key, value)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
# Go through all capabilities
|
142
|
-
parsed_schema[:properties][:open_trade_transfer_package][:properties][:capabilities][:properties][:printed_circuits_fabrication_data][:properties].each do |key, value|
|
143
|
-
self.update_ra(:in_capabilities, key, value)
|
144
|
-
end
|
145
|
-
# Go through all custom
|
146
|
-
parsed_schema[:properties][:open_trade_transfer_package][:properties][:custom][:properties].each do |key, value|
|
147
|
-
self.update_ra(:in_custom, key, value)
|
148
|
-
end
|
149
|
-
|
150
|
-
@ra[:structured][:elements].sort.to_h
|
151
|
-
@ra[:structured][:elements].delete(:version)
|
152
|
-
@ra[:structured][:elements][:stackup].delete(:specified)
|
153
|
-
return @ra
|
154
|
-
end
|
155
|
-
|
156
|
-
def create_documentation(ra)
|
157
|
-
ra[:documentation] = "## Elements and tags\n"
|
158
|
-
ra[:structured][:elements].each do |element_key, element_value|
|
159
|
-
ra[:documentation] += "### #{element_key} [link](##{element_key.to_s.downcase.tr(" ", "-")})\n"
|
160
|
-
element_value[:elements].each do |e_key, e_value|
|
161
|
-
ra[:documentation] += "* #{e_key}\n"
|
162
|
-
end
|
163
|
-
ra[:documentation] += "\n"
|
164
|
-
end
|
165
|
-
ra[:structured][:elements].each do |element_key, element_value|
|
166
|
-
ra[:documentation] += "### #{element_key}\n"
|
167
|
-
ra[:documentation] += "Name: #{element_value[:descriptive_name]}\n\n" unless element_value[:descriptive_name].nil?
|
168
|
-
ra[:documentation] += "Aliases: #{element_value[:aliases]}\n\n" unless element_value[:aliases].nil?
|
169
|
-
ra[:documentation] += "#{element_value[:description]}\n" unless element_value[:description].nil?
|
170
|
-
ra[:documentation] += "\n"
|
171
|
-
if element_value[:type] == "array"
|
172
|
-
ra[:documentation] += "**You must specify this as en array when used in a generic product description or a stackup, but as a object when used in any of the other parts. Read more [here](#elements-that-are-both-arrays-and-objects)**\n\n"
|
173
|
-
end
|
174
|
-
element_value[:elements].each do |e_key, e_value|
|
175
|
-
ra[:documentation] += "#### #{e_key}\n"
|
176
|
-
ra[:documentation] += "Aliases: #{e_value[:aliases]}\n\n" unless e_value[:aliases].nil?
|
177
|
-
ra[:documentation] += "#{e_value[:description]}\n\n" unless e_value[:description].nil?
|
178
|
-
ra[:documentation] += "Unit of Measure: #{e_value[:uom][0]}\n\n" unless e_value[:uom].nil?
|
179
|
-
if e_value.has_key? :enum and not e_value[:enum].nil?
|
180
|
-
ra[:documentation] += "Use one of these values:\n"
|
181
|
-
e_value[:enum].each do |ev|
|
182
|
-
ra[:documentation] += "* #{ev}"
|
183
|
-
if e_value.has_key? :enum_description and not e_value[:enum_description].nil? and e_value[:enum_description].has_key? ev.to_sym and not e_value[:enum_description][ev.to_sym].nil?
|
184
|
-
ra[:documentation] += " (#{e_value[:enum_description][ev.to_sym]})\n"
|
185
|
-
else
|
186
|
-
ra[:documentation] += "\n"
|
187
|
-
end
|
188
|
-
end
|
189
|
-
ra[:documentation] += "\n"
|
190
|
-
end
|
191
|
-
ra[:documentation] += "| | Generic product | Stackup | Profile defaults | Profile enforced | Profile restricted | Capabilities | Custom |\n"
|
192
|
-
ra[:documentation] += "|-:|:---------------:|:-------:|:----------------:|:----------------:|:------------------:|:------------:|:------:|\n| **Use in:** | "
|
193
|
-
[:in_product_generic, :in_product_stackup, :in_profile_default, :in_profile_enforced, :in_profile_restricted, :in_capabilities, :in_custom].each do |part|
|
194
|
-
e_value[part] ? ra[:documentation] += "Allowed | " : ra[:documentation] += "Disallowed | "
|
195
|
-
end
|
196
|
-
ra[:documentation] += "\n|**Format:** | #{e_value[:type]} | #{e_value[:type]} | #{e_value[:type]} | #{e_value[:type]} | Array of #{e_value[:type]}s | Array of #{e_value[:type]}s | Array of #{e_value[:type]}s |\n"
|
197
|
-
if e_value[:enum].nil? and e_value[:type] == "number"
|
198
|
-
ra[:documentation] += "|**Min value:** | #{e_value[:minimum]} | #{e_value[:minimum]} | #{e_value[:minimum]} | #{e_value[:minimum]} | Each item: #{e_value[:minimum]} | Each item: #{e_value[:minimum]} | Each item: #{e_value[:minimum]} |\n" unless e_value[:minimum].nil?
|
199
|
-
ra[:documentation] += "|**Max value:** | #{e_value[:maximum]} | #{e_value[:maximum]} | #{e_value[:maximum]} | #{e_value[:maximum]} | Each item : #{e_value[:maximum]} | Each item: #{e_value[:maximum]} | Each item: #{e_value[:maximum]} |\n" unless e_value[:maximum].nil?
|
200
|
-
end
|
201
|
-
ra[:documentation] += "\n"
|
202
|
-
end
|
203
|
-
end
|
204
|
-
return ra[:documentation]
|
205
|
-
end
|
206
|
-
|
207
|
-
end
|