circuitdata 0.6.3 → 0.6.4
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 +4 -4
- data/lib/circuitdata.rb +0 -1
- data/lib/circuitdata/compatibility_checker.rb +70 -30
- data/lib/circuitdata/dereferencer.rb +2 -2
- data/lib/circuitdata/profile.rb +6 -2
- data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema.json +815 -836
- data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema_definitions.json +198 -125
- data/lib/circuitdata/schema_files/v1/ottp_circuitdata_skeleton_schema.json +41 -1
- data/lib/circuitdata/tools.rb +48 -15
- data/lib/circuitdata/version.rb +1 -1
- metadata +9 -6
@@ -47,8 +47,48 @@
|
|
47
47
|
}
|
48
48
|
}
|
49
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
|
+
}
|
50
90
|
}
|
51
91
|
}
|
52
92
|
}
|
53
93
|
}
|
54
|
-
}
|
94
|
+
}
|
data/lib/circuitdata/tools.rb
CHANGED
@@ -7,6 +7,12 @@ class Circuitdata::Tools
|
|
7
7
|
end
|
8
8
|
|
9
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
|
10
16
|
parsed_elements = Circuitdata.read_json(@definitions_path)[2]
|
11
17
|
unless @ra[:structured][:elements].has_key? key
|
12
18
|
@ra[:structured][:elements][key] = {
|
@@ -36,10 +42,12 @@ class Circuitdata::Tools
|
|
36
42
|
:in_profile_default => false,
|
37
43
|
:in_profile_enforced => false,
|
38
44
|
:in_profile_restricted => false,
|
45
|
+
:in_custom => false,
|
39
46
|
:in_capabilities => false,
|
40
47
|
:type => nil,
|
41
48
|
:arrayitems => nil,
|
42
49
|
:enum => nil,
|
50
|
+
:enum_description => nil,
|
43
51
|
:description => nil,
|
44
52
|
:uom => nil,
|
45
53
|
:minimum => nil,
|
@@ -47,10 +55,12 @@ class Circuitdata::Tools
|
|
47
55
|
}
|
48
56
|
if svalue.has_key? :$ref
|
49
57
|
elements = svalue[:$ref].split('/')
|
50
|
-
if elements.length
|
58
|
+
if elements.length == 4
|
51
59
|
element = parsed_elements[elements[1].to_sym][elements[2].to_sym][elements[3].to_sym]
|
52
|
-
|
60
|
+
elsif elements.length == 5
|
53
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]
|
54
64
|
end
|
55
65
|
else
|
56
66
|
element = nil
|
@@ -68,7 +78,10 @@ class Circuitdata::Tools
|
|
68
78
|
end
|
69
79
|
end
|
70
80
|
end
|
71
|
-
|
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
|
72
85
|
@ra[:structured][:elements][key][:elements][skey][:description] = element[:description] if element.has_key? :description
|
73
86
|
@ra[:structured][:elements][key][:elements][skey][:uom] = element[:uom] if element.has_key? :uom
|
74
87
|
@ra[:structured][:elements][key][:elements][skey][:minimum] = element[:minimum] if element.has_key? :minimum
|
@@ -76,18 +89,25 @@ class Circuitdata::Tools
|
|
76
89
|
end
|
77
90
|
else
|
78
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
|
79
95
|
case @ra[:structured][:elements][key][:elements][skey][:type]
|
80
96
|
when *["number", "integer", "boolean", "string"]
|
81
97
|
@ra[:structured][:elements][key][:elements][skey][:type] = "number" if @ra[:structured][:elements][key][:elements][skey][:type] == "integer"
|
82
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])
|
83
99
|
(@ra[:errors][type][key] ||= {})[skey] = "Type is #{@ra[:structured][:elements][key][:elements][skey][:type]}, wrong check"
|
84
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
|
85
105
|
when "array"
|
86
106
|
unless svalue.has_key? :type and svalue[:type] == "array"
|
87
107
|
(@ra[:errors][type][key] ||= {})[skey] = "Type is #{@ra[:structured][:elements][key][:elements][skey][:type]}, wrong check"
|
88
108
|
end
|
89
109
|
else
|
90
|
-
|
110
|
+
(@ra[:errors][type][key] ||= {})[skey] = "Unknown type #{@ra[:structured][:elements][key][:elements][skey][:type]} in #{key}, #{skey} when doing #{type}"
|
91
111
|
end
|
92
112
|
end
|
93
113
|
end
|
@@ -100,9 +120,11 @@ class Circuitdata::Tools
|
|
100
120
|
@ra[:structured] = {:elements => {}, :custom => {}}
|
101
121
|
@ra[:errors] = {:in_profile_restricted => {}, :in_capabilities => {}}
|
102
122
|
parsed_schema = Circuitdata.read_json(@schema_path)[2]
|
123
|
+
# Go through all products
|
103
124
|
parsed_schema[:properties][:open_trade_transfer_package][:properties][:products][:patternProperties]["^(?!generic$).*".to_sym][:properties][:printed_circuits_fabrication_data][:properties].each do |key, value|
|
104
125
|
self.update_ra(:in_product_generic, key, value)
|
105
126
|
end
|
127
|
+
# Go through all profiles
|
106
128
|
["defaults", "restricted", "enforced"].each do |sym|
|
107
129
|
parsed_schema[:properties][:open_trade_transfer_package][:properties][:profiles][:properties][sym.to_sym][:properties][:printed_circuits_fabrication_data][:properties].each do |key, value|
|
108
130
|
case sym
|
@@ -116,17 +138,23 @@ class Circuitdata::Tools
|
|
116
138
|
self.update_ra(t, key, value)
|
117
139
|
end
|
118
140
|
end
|
141
|
+
# Go through all capabilities
|
119
142
|
parsed_schema[:properties][:open_trade_transfer_package][:properties][:capabilities][:properties][:printed_circuits_fabrication_data][:properties].each do |key, value|
|
120
143
|
self.update_ra(:in_capabilities, key, value)
|
121
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
|
+
|
122
150
|
@ra[:structured][:elements].sort.to_h
|
123
151
|
@ra[:structured][:elements].delete(:version)
|
124
|
-
|
152
|
+
@ra[:structured][:elements][:stackup].delete(:specified)
|
125
153
|
return @ra
|
126
154
|
end
|
127
155
|
|
128
156
|
def create_documentation(ra)
|
129
|
-
ra[:documentation] = "## Elements and tags\n
|
157
|
+
ra[:documentation] = "## Elements and tags\n"
|
130
158
|
ra[:structured][:elements].each do |element_key, element_value|
|
131
159
|
ra[:documentation] += "### #{element_key} [link](##{element_key.to_s.downcase.tr(" ", "-")})\n"
|
132
160
|
element_value[:elements].each do |e_key, e_value|
|
@@ -141,7 +169,7 @@ class Circuitdata::Tools
|
|
141
169
|
ra[:documentation] += "#{element_value[:description]}\n" unless element_value[:description].nil?
|
142
170
|
ra[:documentation] += "\n"
|
143
171
|
if element_value[:type] == "array"
|
144
|
-
ra[:documentation] += "**You must specify this as en array when used in a generic product description or a stackup, but as a
|
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"
|
145
173
|
end
|
146
174
|
element_value[:elements].each do |e_key, e_value|
|
147
175
|
ra[:documentation] += "#### #{e_key}\n"
|
@@ -151,19 +179,24 @@ class Circuitdata::Tools
|
|
151
179
|
if e_value.has_key? :enum and not e_value[:enum].nil?
|
152
180
|
ra[:documentation] += "Use one of these values:\n"
|
153
181
|
e_value[:enum].each do |ev|
|
154
|
-
ra[:documentation] += "* #{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
|
155
188
|
end
|
156
189
|
ra[:documentation] += "\n"
|
157
190
|
end
|
158
|
-
ra[:documentation] += "| | Generic product | Stackup | Profile defaults | Profile enforced | Profile restricted | Capabilities |\n"
|
159
|
-
ra[:documentation] += "
|
160
|
-
[
|
161
|
-
part
|
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 | "
|
162
195
|
end
|
163
|
-
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 |\n"
|
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"
|
164
197
|
if e_value[:enum].nil? and e_value[:type] == "number"
|
165
|
-
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]} |\n" unless e_value[:minimum].nil?
|
166
|
-
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]} |\n" unless e_value[:maximum].nil?
|
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?
|
167
200
|
end
|
168
201
|
ra[:documentation] += "\n"
|
169
202
|
end
|
data/lib/circuitdata/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: circuitdata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Lydersen
|
8
|
+
- Maximilian Brosnahan
|
9
|
+
- Benjamin Mwendwa
|
8
10
|
autorequire:
|
9
11
|
bindir: bin
|
10
12
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
13
|
+
date: 2017-10-23 00:00:00.000000000 Z
|
12
14
|
dependencies:
|
13
15
|
- !ruby/object:Gem::Dependency
|
14
16
|
name: json-schema
|
@@ -66,8 +68,9 @@ dependencies:
|
|
66
68
|
- - "~>"
|
67
69
|
- !ruby/object:Gem::Version
|
68
70
|
version: '4.2'
|
69
|
-
description: This gem
|
70
|
-
the
|
71
|
+
description: This gem provides you with functions to work with the CricuitData language.
|
72
|
+
Run files against the schema, check their compatibility agains each other compare
|
73
|
+
multiple files to find conflicts.
|
71
74
|
email:
|
72
75
|
- andreas.lydersen@ntty.com
|
73
76
|
executables: []
|
@@ -112,6 +115,6 @@ rubyforge_project:
|
|
112
115
|
rubygems_version: 2.6.13
|
113
116
|
signing_key:
|
114
117
|
specification_version: 4
|
115
|
-
summary:
|
116
|
-
|
118
|
+
summary: Basic test and comparison of JSON files agains the CircuitData JSON schema
|
119
|
+
and each other
|
117
120
|
test_files: []
|