circuitdata 0.5.1 → 0.6.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 +4 -4
 - data/README.md +151 -24
 - data/lib/circuitdata.rb +23 -7
 - data/lib/circuitdata/compatibility_checker.rb +4 -1
 - data/lib/circuitdata/dereferencer.rb +75 -0
 - data/lib/circuitdata/profile.rb +80 -0
 - data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema.json +18 -19
 - data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema_definitions.json +1 -1
 - data/lib/circuitdata/schema_files/v1/ottp_circuitdata_skeleton_schema.json +2 -3
 - data/lib/circuitdata/version.rb +1 -1
 - metadata +47 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 782183884b382968b49c6b4e2f3bfe9222e1064e
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 4153d944609d5aa7644fc52d4f2e8f92ca36ca25
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 9edf4cd6cc18adf6c22e2579b6548bc967baea9854ed9f0f6d86e9f3838155eb7ea66855d019286b3a5e28409e0d178eb7562f1ff9a69ce919f47ef6046cd240
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: d4b11cce34ab6448afd7789287209bef51b57d262a35bdc8eca5dc9e831fa1211fa6fc92ded3a1b5a4b510f2860fc1b4451f39c35a5426c1b771538804787d4d
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -26,32 +26,159 @@ require 'circuitdata' 
     | 
|
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
            ### Commands
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
      
 29 
     | 
    
         
            +
            #### `Circuitdata.compatibility_checker`
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            Test one file against the schema
         
     | 
| 
      
 32 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 33 
     | 
    
         
            +
            Circuitdata.compatibility_checker('testfile-product.json')
         
     | 
| 
      
 34 
     | 
    
         
            +
            ```
         
     | 
| 
      
 35 
     | 
    
         
            +
            When valid gives:
         
     | 
| 
      
 36 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 37 
     | 
    
         
            +
            {
         
     | 
| 
      
 38 
     | 
    
         
            +
              :error => false,
         
     | 
| 
      
 39 
     | 
    
         
            +
              :errormessage => "",
         
     | 
| 
      
 40 
     | 
    
         
            +
              :validationserrors => {},
         
     | 
| 
      
 41 
     | 
    
         
            +
              :restrictederrors => {},
         
     | 
| 
      
 42 
     | 
    
         
            +
              :enforcederrors => {},
         
     | 
| 
      
 43 
     | 
    
         
            +
              :capabilitieserrors => {}
         
     | 
| 
      
 44 
     | 
    
         
            +
            }
         
     | 
| 
      
 45 
     | 
    
         
            +
            ```
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            Test two files up against each other (one must be a product file).
         
     | 
| 
      
 48 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 49 
     | 
    
         
            +
            Circuitdata.compatibility_checker('testfile-product.json','testfile-profile-restricted.json')
         
     | 
| 
      
 50 
     | 
    
         
            +
            ```
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            When invalid results in:
         
     | 
| 
      
 53 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 54 
     | 
    
         
            +
            {
         
     | 
| 
      
 55 
     | 
    
         
            +
              :error => true,
         
     | 
| 
      
 56 
     | 
    
         
            +
              :errormessage => "The product to check did not meet the requirements",
         
     | 
| 
      
 57 
     | 
    
         
            +
              :validationserrors => {},
         
     | 
| 
      
 58 
     | 
    
         
            +
              :restrictederrors => {
         
     | 
| 
      
 59 
     | 
    
         
            +
                "#/open_trade_transfer_package/products/testproduct/printed_circuits_fabrication_data/board/thickness" => [
         
     | 
| 
      
 60 
     | 
    
         
            +
                  "of type number matched the disallowed schema"
         
     | 
| 
      
 61 
     | 
    
         
            +
                  ]
         
     | 
| 
      
 62 
     | 
    
         
            +
              },
         
     | 
| 
      
 63 
     | 
    
         
            +
              :enforcederrors => {},
         
     | 
| 
      
 64 
     | 
    
         
            +
              :capabilitieserrors => {}
         
     | 
| 
      
 65 
     | 
    
         
            +
            }
         
     | 
| 
      
 66 
     | 
    
         
            +
            ```
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            Turn off validation against the schema
         
     | 
| 
      
 69 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 70 
     | 
    
         
            +
            Circuitdata.compatibility_checker( 'testfile-product.json', 'testfile-profile-restricted.json', false )
         
     | 
| 
       29 
71 
     | 
    
         
             
            ```
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             =>  
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
              
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
              
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
              
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
              
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
      
 72 
     | 
    
         
            +
             Gives:
         
     | 
| 
      
 73 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 74 
     | 
    
         
            +
            {
         
     | 
| 
      
 75 
     | 
    
         
            +
              :error => true,
         
     | 
| 
      
 76 
     | 
    
         
            +
              :errormessage => "The product to check did not meet the requirements",
         
     | 
| 
      
 77 
     | 
    
         
            +
              :validationserrors => {},
         
     | 
| 
      
 78 
     | 
    
         
            +
              :restrictederrors => {
         
     | 
| 
      
 79 
     | 
    
         
            +
                "#/open_trade_transfer_package/products/testproduct/printed_circuits_fabrication_data/board/thickness" => ["of type number matched the disallowed schema"]
         
     | 
| 
      
 80 
     | 
    
         
            +
              },
         
     | 
| 
      
 81 
     | 
    
         
            +
              :enforcederrors => {},
         
     | 
| 
      
 82 
     | 
    
         
            +
              :capabilitieserrors => {}
         
     | 
| 
      
 83 
     | 
    
         
            +
            }
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            ```
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            #### `Circuitdata.compare_files`
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            Run a test with several files against each other and get a complete list of values and conflicts, and a summary
         
     | 
| 
      
 90 
     | 
    
         
            +
             ```ruby
         
     | 
| 
      
 91 
     | 
    
         
            +
             product1 = File.join(__dir__, 'test/test_data/test_product1.json')
         
     | 
| 
      
 92 
     | 
    
         
            +
             profile_restricted = File.join(__dir__, 'test/test_data/testfile-profile-restricted.json')
         
     | 
| 
      
 93 
     | 
    
         
            +
             profile_default = File.join(__dir__, 'test/test_data/testfile-profile-default.json')
         
     | 
| 
      
 94 
     | 
    
         
            +
             file_hash = {product1: product1, restricted: profile_restricted, default: profile_default}
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
             Circuitdata.compare_files(file_hash, true)
         
     | 
| 
      
 97 
     | 
    
         
            +
             ```
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
             Results in:
         
     | 
| 
      
 100 
     | 
    
         
            +
             ```ruby
         
     | 
| 
      
 101 
     | 
    
         
            +
             {
         
     | 
| 
      
 102 
     | 
    
         
            +
              :error=>false,
         
     | 
| 
      
 103 
     | 
    
         
            +
              :message=>nil,
         
     | 
| 
      
 104 
     | 
    
         
            +
              :conflict=>false,
         
     | 
| 
      
 105 
     | 
    
         
            +
              :product_name=>"testproduct",
         
     | 
| 
      
 106 
     | 
    
         
            +
              :columns=>[
         
     | 
| 
      
 107 
     | 
    
         
            +
                :summary,
         
     | 
| 
      
 108 
     | 
    
         
            +
                :product1,
         
     | 
| 
      
 109 
     | 
    
         
            +
                :restricted,
         
     | 
| 
      
 110 
     | 
    
         
            +
                :default
         
     | 
| 
      
 111 
     | 
    
         
            +
              ],
         
     | 
| 
      
 112 
     | 
    
         
            +
              :master_column=>nil,
         
     | 
| 
      
 113 
     | 
    
         
            +
              :rows=>{
         
     | 
| 
      
 114 
     | 
    
         
            +
                :rigid_conductive_layer=>{
         
     | 
| 
      
 115 
     | 
    
         
            +
                  :count=>{
         
     | 
| 
      
 116 
     | 
    
         
            +
                    :product1=>{
         
     | 
| 
      
 117 
     | 
    
         
            +
                      :value=>11,
         
     | 
| 
      
 118 
     | 
    
         
            +
                      :conflict=>false,
         
     | 
| 
      
 119 
     | 
    
         
            +
                      :conflicts_with=>[],
         
     | 
| 
      
 120 
     | 
    
         
            +
                      :conflict_message=>[]
         
     | 
| 
      
 121 
     | 
    
         
            +
                    },
         
     | 
| 
      
 122 
     | 
    
         
            +
                    :restricted=>{
         
     | 
| 
      
 123 
     | 
    
         
            +
                      :value=>nil,
         
     | 
| 
      
 124 
     | 
    
         
            +
                      :conflict=>false,
         
     | 
| 
      
 125 
     | 
    
         
            +
                      :conflicts_with=>[],
         
     | 
| 
      
 126 
     | 
    
         
            +
                      :conflict_message=>[]
         
     | 
| 
      
 127 
     | 
    
         
            +
                    },
         
     | 
| 
      
 128 
     | 
    
         
            +
                    :default=>{
         
     | 
| 
      
 129 
     | 
    
         
            +
                      :value=>nil,
         
     | 
| 
      
 130 
     | 
    
         
            +
                      :conflict=>false,
         
     | 
| 
      
 131 
     | 
    
         
            +
                      :conflicts_with=>[],
         
     | 
| 
      
 132 
     | 
    
         
            +
                      :conflict_message=>[]
         
     | 
| 
      
 133 
     | 
    
         
            +
                    },
         
     | 
| 
      
 134 
     | 
    
         
            +
                    :summary=>{
         
     | 
| 
      
 135 
     | 
    
         
            +
                      :value=>11,
         
     | 
| 
      
 136 
     | 
    
         
            +
                      :conflict=>false,
         
     | 
| 
      
 137 
     | 
    
         
            +
                      :conflicts_with=>[:product1],
         
     | 
| 
      
 138 
     | 
    
         
            +
                      :conflict_message=>[]
         
     | 
| 
      
 139 
     | 
    
         
            +
                    }
         
     | 
| 
      
 140 
     | 
    
         
            +
                  }
         
     | 
| 
      
 141 
     | 
    
         
            +
                  # ...
         
     | 
| 
      
 142 
     | 
    
         
            +
                }
         
     | 
| 
      
 143 
     | 
    
         
            +
              }
         
     | 
| 
      
 144 
     | 
    
         
            +
            }
         
     | 
| 
       54 
145 
     | 
    
         
             
            ```
         
     | 
| 
       55 
146 
     | 
    
         | 
| 
      
 147 
     | 
    
         
            +
            #### `Circuitdata.dereferenced_schema`
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
            This returns the JSON schema used internally to validate the Circuit Data information. It
         
     | 
| 
      
 150 
     | 
    
         
            +
            returns the schema without any usage of `$ref` so that it can be utilized without any knowledge of the internal paths.
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
            #### `Circuitdata::Profile.schema`
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
            Returns a subset of the Circuit Data schema that relates to profiles. This is a schema without any `$ref`s.
         
     | 
| 
      
 155 
     | 
    
         
            +
            #### `Circuitdata::Profile.questions`
         
     | 
| 
      
 156 
     | 
    
         
            +
            Returns a list of grouped questions that can be used for populating an input interface related to profiles.
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
            Example output:
         
     | 
| 
      
 159 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 160 
     | 
    
         
            +
            [
         
     | 
| 
      
 161 
     | 
    
         
            +
              {
         
     | 
| 
      
 162 
     | 
    
         
            +
                id: :rigid_conductive_layer,
         
     | 
| 
      
 163 
     | 
    
         
            +
                name: 'Rigid conductive layer',
         
     | 
| 
      
 164 
     | 
    
         
            +
                questions: [
         
     | 
| 
      
 165 
     | 
    
         
            +
                  {
         
     | 
| 
      
 166 
     | 
    
         
            +
                    code: :copper_foil_roughness,
         
     | 
| 
      
 167 
     | 
    
         
            +
                    name: 'Copper foil roughness',
         
     | 
| 
      
 168 
     | 
    
         
            +
                    defaults: {
         
     | 
| 
      
 169 
     | 
    
         
            +
                      descriptor: {
         
     | 
| 
      
 170 
     | 
    
         
            +
                        type: "string",
         
     | 
| 
      
 171 
     | 
    
         
            +
                        enum: ["S", "L", "V"],
         
     | 
| 
      
 172 
     | 
    
         
            +
                        uom: ["um"],
         
     | 
| 
      
 173 
     | 
    
         
            +
                        description: "The roughness of the copper foil."
         
     | 
| 
      
 174 
     | 
    
         
            +
                      },
         
     | 
| 
      
 175 
     | 
    
         
            +
                      path: "/open_trade_transfer_package/profiles/defaults/printed_circuits_fabrication_data/rigid_conductive_layer/copper_foil_roughness"
         
     | 
| 
      
 176 
     | 
    
         
            +
                    }
         
     | 
| 
      
 177 
     | 
    
         
            +
                  },
         
     | 
| 
      
 178 
     | 
    
         
            +
                ]
         
     | 
| 
      
 179 
     | 
    
         
            +
              }
         
     | 
| 
      
 180 
     | 
    
         
            +
              # ...
         
     | 
| 
      
 181 
     | 
    
         
            +
            ]
         
     | 
| 
      
 182 
     | 
    
         
            +
            ```
         
     | 
| 
       56 
183 
     | 
    
         
             
            ## License
         
     | 
| 
       57 
184 
     | 
    
         
             
            The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
         
     | 
    
        data/lib/circuitdata.rb
    CHANGED
    
    | 
         @@ -1,8 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Circuitdata
         
     | 
| 
       2 
2 
     | 
    
         
             
              # SHOULD ONLY HOUSE COMMON FUNCTIONS ONLY
         
     | 
| 
       3 
3 
     | 
    
         
             
              require 'active_support/all'
         
     | 
| 
       4 
     | 
    
         
            -
              require ' 
     | 
| 
       5 
     | 
    
         
            -
               
     | 
| 
      
 4 
     | 
    
         
            +
              require 'json-schema'
         
     | 
| 
      
 5 
     | 
    
         
            +
              require_relative './circuitdata/file_comparer'
         
     | 
| 
      
 6 
     | 
    
         
            +
              require_relative './circuitdata/compatibility_checker'
         
     | 
| 
      
 7 
     | 
    
         
            +
              require_relative './circuitdata/dereferencer'
         
     | 
| 
      
 8 
     | 
    
         
            +
              require_relative './circuitdata/profile'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              SCHEMA_PATH = 'circuitdata/schema_files/v1/ottp_circuitdata_schema.json'
         
     | 
| 
      
 11 
     | 
    
         
            +
              SCHEMA_FULL_PATH = File.join(__dir__, SCHEMA_PATH)
         
     | 
| 
       6 
12 
     | 
    
         | 
| 
       7 
13 
     | 
    
         
             
              def self.get_data_summary(data)
         
     | 
| 
       8 
14 
     | 
    
         
             
                types = []
         
     | 
| 
         @@ -26,7 +32,6 @@ module Circuitdata 
     | 
|
| 
       26 
32 
     | 
    
         
             
              end
         
     | 
| 
       27 
33 
     | 
    
         | 
| 
       28 
34 
     | 
    
         
             
              def self.read_json(file)
         
     | 
| 
       29 
     | 
    
         
            -
                require 'json'
         
     | 
| 
       30 
35 
     | 
    
         
             
                error, message, data = false, nil, nil
         
     | 
| 
       31 
36 
     | 
    
         | 
| 
       32 
37 
     | 
    
         
             
                if file.is_a? Hash
         
     | 
| 
         @@ -51,13 +56,10 @@ module Circuitdata 
     | 
|
| 
       51 
56 
     | 
    
         
             
              end
         
     | 
| 
       52 
57 
     | 
    
         | 
| 
       53 
58 
     | 
    
         
             
              def self.validate(content)
         
     | 
| 
       54 
     | 
    
         
            -
                require 'json-schema'
         
     | 
| 
       55 
59 
     | 
    
         
             
                error, message, validations_errors = false, nil, {}
         
     | 
| 
       56 
     | 
    
         
            -
                schema = File.join(File.dirname(__FILE__), 'circuitdata/schema_files/v1/ottp_circuitdata_schema.json')
         
     | 
| 
       57 
     | 
    
         
            -
                # schema = 'http://schema.circuitdata.org/v1/ottp_circuitdata_schema.json'
         
     | 
| 
       58 
60 
     | 
    
         | 
| 
       59 
61 
     | 
    
         
             
                begin
         
     | 
| 
       60 
     | 
    
         
            -
                  validated = JSON::Validator.fully_validate( 
     | 
| 
      
 62 
     | 
    
         
            +
                  validated = JSON::Validator.fully_validate(SCHEMA_FULL_PATH, content, :errors_as_objects => true)
         
     | 
| 
       61 
63 
     | 
    
         
             
                rescue JSON::Schema::ReadFailed
         
     | 
| 
       62 
64 
     | 
    
         
             
                  error = true
         
     | 
| 
       63 
65 
     | 
    
         
             
                  message = "Could not read the validating schema"
         
     | 
| 
         @@ -83,6 +85,20 @@ module Circuitdata 
     | 
|
| 
       83 
85 
     | 
    
         
             
                return error, message, validations_errors
         
     | 
| 
       84 
86 
     | 
    
         
             
              end
         
     | 
| 
       85 
87 
     | 
    
         | 
| 
      
 88 
     | 
    
         
            +
              def self.schema
         
     | 
| 
      
 89 
     | 
    
         
            +
                JSON.parse(
         
     | 
| 
      
 90 
     | 
    
         
            +
                  File.read(SCHEMA_FULL_PATH),
         
     | 
| 
      
 91 
     | 
    
         
            +
                  symbolize_names: true
         
     | 
| 
      
 92 
     | 
    
         
            +
                )
         
     | 
| 
      
 93 
     | 
    
         
            +
              end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
              def self.dereferenced_schema
         
     | 
| 
      
 96 
     | 
    
         
            +
                Dereferencer.dereference(
         
     | 
| 
      
 97 
     | 
    
         
            +
                  schema,
         
     | 
| 
      
 98 
     | 
    
         
            +
                  File.dirname(Circuitdata::SCHEMA_FULL_PATH)
         
     | 
| 
      
 99 
     | 
    
         
            +
                )
         
     | 
| 
      
 100 
     | 
    
         
            +
              end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
       86 
102 
     | 
    
         
             
              def self.compare_files(file_hash, validate_origins=false)
         
     | 
| 
       87 
103 
     | 
    
         
             
                comparer = FileComparer.new(file_hash, validate_origins)
         
     | 
| 
       88 
104 
     | 
    
         
             
                comparer.compare
         
     | 
| 
         @@ -22,9 +22,12 @@ class Circuitdata::CompatibilityChecker 
     | 
|
| 
       22 
22 
     | 
    
         
             
                  @fh[:error], @fh[:message], @fh[:errors][:validation] = Circuitdata.validate(check_data)
         
     | 
| 
       23 
23 
     | 
    
         
             
                  return @fh if @fh[:error]
         
     | 
| 
       24 
24 
     | 
    
         
             
                  f2_types = Circuitdata.get_data_summary(check_data)[1]
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
       25 
26 
     | 
    
         
             
                  # read the schema
         
     | 
| 
       26 
27 
     | 
    
         
             
                  schema_path = File.join(File.dirname(__FILE__), 'schema_files/v1/ottp_circuitdata_skeleton_schema.json')
         
     | 
| 
       27 
     | 
    
         
            -
                   
     | 
| 
      
 28 
     | 
    
         
            +
                  schema = JSON.parse(File.read(schema_path), symbolize_names: true)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  deref_schema = Circuitdata::Dereferencer.dereference(schema, File.dirname(Circuitdata::SCHEMA_FULL_PATH))
         
     | 
| 
      
 30 
     | 
    
         
            +
                  restricted_schema = enforced_schema = capability_schema = deref_schema
         
     | 
| 
       28 
31 
     | 
    
         
             
                  # Compare the content
         
     | 
| 
       29 
32 
     | 
    
         
             
                  perform_comparison(product_data, check_data, restricted_schema, 'restricted') if f2_types.include? 'profile_restricted'
         
     | 
| 
       30 
33 
     | 
    
         
             
                  perform_comparison(product_data, check_data, enforced_schema, 'enforced') if f2_types.include? 'profile_enforced'
         
     | 
| 
         @@ -0,0 +1,75 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Circuitdata
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Dereferencer
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
                def self.dereference(schema, base_path)
         
     | 
| 
      
 5 
     | 
    
         
            +
                  d = new(base_path)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  d.start(schema)
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def initialize(base_path)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @base_path = base_path
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def start(schema)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  hash_iterator(schema)
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                private
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                attr_reader :base_path
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def read_file(file_path)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  full_path = File.expand_path(file_path, base_path)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  file = File.read(full_path)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  JSON.parse(file)
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                def get_ref(ref)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  file_path, pointer = ref.split('#')
         
     | 
| 
      
 29 
     | 
    
         
            +
                  data = read_file(file_path)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  pointer_parts = pointer.split('/').reject(&:blank?)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  result = data.dig(*pointer_parts)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  if result.nil?
         
     | 
| 
      
 33 
     | 
    
         
            +
                    fail "Unable to dereference ref=#{ref}"
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                  result
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                def hash_iterator(h)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  h = h.clone
         
     | 
| 
      
 41 
     | 
    
         
            +
                  h.each_pair do |k,v|
         
     | 
| 
      
 42 
     | 
    
         
            +
                    if v.is_a?(Hash)
         
     | 
| 
      
 43 
     | 
    
         
            +
                      res = hash_iterator(v)
         
     | 
| 
      
 44 
     | 
    
         
            +
                      if res[:"$ref"]
         
     | 
| 
      
 45 
     | 
    
         
            +
                        h[k] = res[:"$ref"]
         
     | 
| 
      
 46 
     | 
    
         
            +
                      else
         
     | 
| 
      
 47 
     | 
    
         
            +
                        h[k] = res
         
     | 
| 
      
 48 
     | 
    
         
            +
                      end
         
     | 
| 
      
 49 
     | 
    
         
            +
                    elsif v.is_a?(Array)
         
     | 
| 
      
 50 
     | 
    
         
            +
                      h[k] = array_iterator(v)
         
     | 
| 
      
 51 
     | 
    
         
            +
                    else
         
     | 
| 
      
 52 
     | 
    
         
            +
                      if k == :"$ref"
         
     | 
| 
      
 53 
     | 
    
         
            +
                        ref_schema = get_ref(v)
         
     | 
| 
      
 54 
     | 
    
         
            +
                        return hash_iterator(ref_schema)
         
     | 
| 
      
 55 
     | 
    
         
            +
                      else
         
     | 
| 
      
 56 
     | 
    
         
            +
                        h[k] = v
         
     | 
| 
      
 57 
     | 
    
         
            +
                      end
         
     | 
| 
      
 58 
     | 
    
         
            +
                    end
         
     | 
| 
      
 59 
     | 
    
         
            +
                  end
         
     | 
| 
      
 60 
     | 
    
         
            +
                  h
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                def array_iterator(arr)
         
     | 
| 
      
 64 
     | 
    
         
            +
                  arr.map do |v|
         
     | 
| 
      
 65 
     | 
    
         
            +
                    if v.is_a?(Hash)
         
     | 
| 
      
 66 
     | 
    
         
            +
                      hash_iterator(v)
         
     | 
| 
      
 67 
     | 
    
         
            +
                    elsif v.is_a?(Array)
         
     | 
| 
      
 68 
     | 
    
         
            +
                      array_iterator(arr)
         
     | 
| 
      
 69 
     | 
    
         
            +
                    else
         
     | 
| 
      
 70 
     | 
    
         
            +
                      v
         
     | 
| 
      
 71 
     | 
    
         
            +
                    end
         
     | 
| 
      
 72 
     | 
    
         
            +
                  end
         
     | 
| 
      
 73 
     | 
    
         
            +
                end
         
     | 
| 
      
 74 
     | 
    
         
            +
              end
         
     | 
| 
      
 75 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,80 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Circuitdata
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Profile
         
     | 
| 
      
 3 
     | 
    
         
            +
                def self.schema
         
     | 
| 
      
 4 
     | 
    
         
            +
                  schema = Circuitdata.dereferenced_schema
         
     | 
| 
      
 5 
     | 
    
         
            +
                  ottp = schema.dig(
         
     | 
| 
      
 6 
     | 
    
         
            +
                    :properties,
         
     | 
| 
      
 7 
     | 
    
         
            +
                    :open_trade_transfer_package,
         
     | 
| 
      
 8 
     | 
    
         
            +
                  )
         
     | 
| 
      
 9 
     | 
    
         
            +
                  ottp[:properties] = ottp[:properties].slice(:profiles)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  schema
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def self.questions
         
     | 
| 
      
 14 
     | 
    
         
            +
                  questions_for_type(:profiles, schema)
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                private
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                CATEGORY_PATH = [:properties, :printed_circuits_fabrication_data, :properties]
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def self.questions_for_type(type, schema)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  pointer_path = [
         
     | 
| 
      
 23 
     | 
    
         
            +
                    :properties,
         
     | 
| 
      
 24 
     | 
    
         
            +
                    :open_trade_transfer_package,
         
     | 
| 
      
 25 
     | 
    
         
            +
                    :properties,
         
     | 
| 
      
 26 
     | 
    
         
            +
                    type,
         
     | 
| 
      
 27 
     | 
    
         
            +
                    :properties
         
     | 
| 
      
 28 
     | 
    
         
            +
                  ]
         
     | 
| 
      
 29 
     | 
    
         
            +
                  types_schema = schema.dig(*pointer_path)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  result = []
         
     | 
| 
      
 31 
     | 
    
         
            +
                  types_schema.each do |question_type, type_schema|
         
     | 
| 
      
 32 
     | 
    
         
            +
                    categories_schema = type_schema.dig(*CATEGORY_PATH)
         
     | 
| 
      
 33 
     | 
    
         
            +
                    categories_schema.each do |category_id, category_schema|
         
     | 
| 
      
 34 
     | 
    
         
            +
                      next if category_id == :version
         
     | 
| 
      
 35 
     | 
    
         
            +
                      category = result.find {|cat| cat[:id] == category_id }
         
     | 
| 
      
 36 
     | 
    
         
            +
                      if category.nil?
         
     | 
| 
      
 37 
     | 
    
         
            +
                        category = {
         
     | 
| 
      
 38 
     | 
    
         
            +
                          id: category_id,
         
     | 
| 
      
 39 
     | 
    
         
            +
                          name: category_id.to_s.humanize,
         
     | 
| 
      
 40 
     | 
    
         
            +
                          questions: []
         
     | 
| 
      
 41 
     | 
    
         
            +
                        }
         
     | 
| 
      
 42 
     | 
    
         
            +
                        result << category
         
     | 
| 
      
 43 
     | 
    
         
            +
                      end
         
     | 
| 
      
 44 
     | 
    
         
            +
                      extract_questions_for_category(
         
     | 
| 
      
 45 
     | 
    
         
            +
                        question_type,
         
     | 
| 
      
 46 
     | 
    
         
            +
                        category,
         
     | 
| 
      
 47 
     | 
    
         
            +
                        category_schema,
         
     | 
| 
      
 48 
     | 
    
         
            +
                        pointer_path + [question_type] + CATEGORY_PATH + [category_id]
         
     | 
| 
      
 49 
     | 
    
         
            +
                      )
         
     | 
| 
      
 50 
     | 
    
         
            +
                    end
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
                  result
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                def self.extract_questions_for_category(question_type, category, category_schema, path)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  # Ignore question arrays for now.
         
     | 
| 
      
 57 
     | 
    
         
            +
                  return if category_schema[:type] == "array"
         
     | 
| 
      
 58 
     | 
    
         
            +
                  category_questions = category[:questions]
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                  category_schema[:properties].each do |question_code, descriptor|
         
     | 
| 
      
 61 
     | 
    
         
            +
                    question = category_questions.find {|question| question[:code] == question_code }
         
     | 
| 
      
 62 
     | 
    
         
            +
                    if question.nil?
         
     | 
| 
      
 63 
     | 
    
         
            +
                      question = {
         
     | 
| 
      
 64 
     | 
    
         
            +
                        code: question_code,
         
     | 
| 
      
 65 
     | 
    
         
            +
                        name: question_code.to_s.humanize
         
     | 
| 
      
 66 
     | 
    
         
            +
                      }
         
     | 
| 
      
 67 
     | 
    
         
            +
                      category_questions << question
         
     | 
| 
      
 68 
     | 
    
         
            +
                    end
         
     | 
| 
      
 69 
     | 
    
         
            +
                    question[question_type] = {
         
     | 
| 
      
 70 
     | 
    
         
            +
                      descriptor: descriptor,
         
     | 
| 
      
 71 
     | 
    
         
            +
                      path: json_pointer(path + [question_code])
         
     | 
| 
      
 72 
     | 
    
         
            +
                    }
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                def self.json_pointer(path_parts)
         
     | 
| 
      
 77 
     | 
    
         
            +
                  ([""] + path_parts - [:properties]).join('/')
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
              end
         
     | 
| 
      
 80 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,6 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            {
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            //  "id": "http://schema.circuitdata.org/v1/ottp_circuitdata_schema.json",
         
     | 
| 
      
 2 
     | 
    
         
            +
             "$schema": "http://json-schema.org/draft-04/schema#",
         
     | 
| 
       4 
3 
     | 
    
         
             
              "type": "object",
         
     | 
| 
       5 
4 
     | 
    
         
             
              "additionalProperties": false,
         
     | 
| 
       6 
5 
     | 
    
         
             
              "required": ["open_trade_transfer_package"],
         
     | 
| 
         @@ -857,7 +856,7 @@ 
     | 
|
| 
       857 
856 
     | 
    
         
             
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/mechanical/depth_routing_bottom"
         
     | 
| 
       858 
857 
     | 
    
         
             
                                    },
         
     | 
| 
       859 
858 
     | 
    
         
             
                                    "counterboring_top": {
         
     | 
| 
       860 
     | 
    
         
            -
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/mechanical/ 
     | 
| 
      
 859 
     | 
    
         
            +
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/mechanical/counterboring_top"
         
     | 
| 
       861 
860 
     | 
    
         
             
                                    },
         
     | 
| 
       862 
861 
     | 
    
         
             
                                    "counterboring_bottom": {
         
     | 
| 
       863 
862 
     | 
    
         
             
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/mechanical/counterboring_bottom"
         
     | 
| 
         @@ -1001,7 +1000,7 @@ 
     | 
|
| 
       1001 
1000 
     | 
    
         
             
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/nadcap"
         
     | 
| 
       1002 
1001 
     | 
    
         
             
                                    },
         
     | 
| 
       1003 
1002 
     | 
    
         
             
                                    "rw_en45545_2_2013": {
         
     | 
| 
       1004 
     | 
    
         
            -
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/ 
     | 
| 
      
 1003 
     | 
    
         
            +
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/rw_en45545_2_2013"
         
     | 
| 
       1005 
1004 
     | 
    
         
             
                                    },
         
     | 
| 
       1006 
1005 
     | 
    
         
             
                                    "rw_nf_f_16_101": {
         
     | 
| 
       1007 
1006 
     | 
    
         
             
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/rw_nf_f_16_101"
         
     | 
| 
         @@ -1018,8 +1017,8 @@ 
     | 
|
| 
       1018 
1017 
     | 
    
         
             
                                    "ipc_6010_compliance_level": {
         
     | 
| 
       1019 
1018 
     | 
    
         
             
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/ipc_6010_compliance_level"
         
     | 
| 
       1020 
1019 
     | 
    
         
             
                                    },
         
     | 
| 
       1021 
     | 
    
         
            -
                                    " 
     | 
| 
       1022 
     | 
    
         
            -
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/ 
     | 
| 
      
 1020 
     | 
    
         
            +
                                    "ipc_6010_copper_plating_thickness_level": {
         
     | 
| 
      
 1021 
     | 
    
         
            +
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/ipc_6010_copper_plating_thickness_level"
         
     | 
| 
       1023 
1022 
     | 
    
         
             
                                    },
         
     | 
| 
       1024 
1023 
     | 
    
         
             
                                    "ipc_6010_annular_ring_level": {
         
     | 
| 
       1025 
1024 
     | 
    
         
             
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/ipc_6010_annular_ring_level"
         
     | 
| 
         @@ -1588,7 +1587,7 @@ 
     | 
|
| 
       1588 
1587 
     | 
    
         
             
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/mechanical/depth_routing_bottom"
         
     | 
| 
       1589 
1588 
     | 
    
         
             
                                    },
         
     | 
| 
       1590 
1589 
     | 
    
         
             
                                    "counterboring_top": {
         
     | 
| 
       1591 
     | 
    
         
            -
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/mechanical/ 
     | 
| 
      
 1590 
     | 
    
         
            +
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/mechanical/counterboring_top"
         
     | 
| 
       1592 
1591 
     | 
    
         
             
                                    },
         
     | 
| 
       1593 
1592 
     | 
    
         
             
                                    "counterboring_bottom": {
         
     | 
| 
       1594 
1593 
     | 
    
         
             
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/mechanical/counterboring_bottom"
         
     | 
| 
         @@ -1687,7 +1686,7 @@ 
     | 
|
| 
       1687 
1686 
     | 
    
         
             
                                  "additionalProperties": false,
         
     | 
| 
       1688 
1687 
     | 
    
         
             
                                  "properties": {
         
     | 
| 
       1689 
1688 
     | 
    
         
             
                                    "ul": {
         
     | 
| 
       1690 
     | 
    
         
            -
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/ 
     | 
| 
      
 1689 
     | 
    
         
            +
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/ul"
         
     | 
| 
       1691 
1690 
     | 
    
         
             
                                    },
         
     | 
| 
       1692 
1691 
     | 
    
         
             
                                    "c_ul": {
         
     | 
| 
       1693 
1692 
     | 
    
         
             
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/c_ul"
         
     | 
| 
         @@ -1723,7 +1722,7 @@ 
     | 
|
| 
       1723 
1722 
     | 
    
         
             
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/nadcap"
         
     | 
| 
       1724 
1723 
     | 
    
         
             
                                    },
         
     | 
| 
       1725 
1724 
     | 
    
         
             
                                    "rw_en45545_2_2013": {
         
     | 
| 
       1726 
     | 
    
         
            -
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/ 
     | 
| 
      
 1725 
     | 
    
         
            +
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/rw_en45545_2_2013"
         
     | 
| 
       1727 
1726 
     | 
    
         
             
                                    },
         
     | 
| 
       1728 
1727 
     | 
    
         
             
                                    "rw_nf_f_16_101": {
         
     | 
| 
       1729 
1728 
     | 
    
         
             
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/rw_nf_f_16_101"
         
     | 
| 
         @@ -1740,8 +1739,8 @@ 
     | 
|
| 
       1740 
1739 
     | 
    
         
             
                                    "ipc_6010_compliance_level": {
         
     | 
| 
       1741 
1740 
     | 
    
         
             
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/ipc_6010_compliance_level"
         
     | 
| 
       1742 
1741 
     | 
    
         
             
                                    },
         
     | 
| 
       1743 
     | 
    
         
            -
                                    " 
     | 
| 
       1744 
     | 
    
         
            -
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/ 
     | 
| 
      
 1742 
     | 
    
         
            +
                                    "ipc_6010_copper_plating_thickness_level": {
         
     | 
| 
      
 1743 
     | 
    
         
            +
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/ipc_6010_copper_plating_thickness_level"
         
     | 
| 
       1745 
1744 
     | 
    
         
             
                                    },
         
     | 
| 
       1746 
1745 
     | 
    
         
             
                                    "ipc_6010_annular_ring_level": {
         
     | 
| 
       1747 
1746 
     | 
    
         
             
                                      "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/ipc_6010_annular_ring_level"
         
     | 
| 
         @@ -2900,7 +2899,7 @@ 
     | 
|
| 
       2900 
2899 
     | 
    
         
             
                                        {"$ref": "ottp_circuitdata_schema_definitions.json#/definitions/generics/string"}
         
     | 
| 
       2901 
2900 
     | 
    
         
             
                                      ]
         
     | 
| 
       2902 
2901 
     | 
    
         
             
                                    },
         
     | 
| 
       2903 
     | 
    
         
            -
                                    " 
     | 
| 
      
 2902 
     | 
    
         
            +
                                    "ipc_6010_copper_plating_thickness_level": {
         
     | 
| 
       2904 
2903 
     | 
    
         
             
                                      "anyOf": [
         
     | 
| 
       2905 
2904 
     | 
    
         
             
                                        {"$ref": "ottp_circuitdata_schema_definitions.json#/definitions/generics/range"},
         
     | 
| 
       2906 
2905 
     | 
    
         
             
                                        {"$ref": "ottp_circuitdata_schema_definitions.json#/definitions/generics/number"},
         
     | 
| 
         @@ -4130,7 +4129,7 @@ 
     | 
|
| 
       4130 
4129 
     | 
    
         
             
                                        {"$ref": "ottp_circuitdata_schema_definitions.json#/definitions/generics/string"}
         
     | 
| 
       4131 
4130 
     | 
    
         
             
                                      ]
         
     | 
| 
       4132 
4131 
     | 
    
         
             
                                    },
         
     | 
| 
       4133 
     | 
    
         
            -
                                    " 
     | 
| 
      
 4132 
     | 
    
         
            +
                                    "ipc_6010_copper_plating_thickness_level": {
         
     | 
| 
       4134 
4133 
     | 
    
         
             
                                      "anyOf": [
         
     | 
| 
       4135 
4134 
     | 
    
         
             
                                        {"$ref": "ottp_circuitdata_schema_definitions.json#/definitions/generics/range"},
         
     | 
| 
       4136 
4135 
     | 
    
         
             
                                        {"$ref": "ottp_circuitdata_schema_definitions.json#/definitions/generics/number"},
         
     | 
| 
         @@ -4999,7 +4998,7 @@ 
     | 
|
| 
       4999 
4998 
     | 
    
         
             
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/mechanical/depth_routing_bottom"
         
     | 
| 
       5000 
4999 
     | 
    
         
             
                                },
         
     | 
| 
       5001 
5000 
     | 
    
         
             
                                "counterboring_top": {
         
     | 
| 
       5002 
     | 
    
         
            -
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/mechanical/ 
     | 
| 
      
 5001 
     | 
    
         
            +
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/mechanical/counterboring_top"
         
     | 
| 
       5003 
5002 
     | 
    
         
             
                                },
         
     | 
| 
       5004 
5003 
     | 
    
         
             
                                "counterboring_bottom": {
         
     | 
| 
       5005 
5004 
     | 
    
         
             
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/mechanical/counterboring_bottom"
         
     | 
| 
         @@ -5038,7 +5037,7 @@ 
     | 
|
| 
       5038 
5037 
     | 
    
         
             
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/selective_plated_pads/present"
         
     | 
| 
       5039 
5038 
     | 
    
         
             
                                },
         
     | 
| 
       5040 
5039 
     | 
    
         
             
                                "layers": {
         
     | 
| 
       5041 
     | 
    
         
            -
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/ 
     | 
| 
      
 5040 
     | 
    
         
            +
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/selective_plated_pads/layers"
         
     | 
| 
       5042 
5041 
     | 
    
         
             
                                }
         
     | 
| 
       5043 
5042 
     | 
    
         
             
                              },
         
     | 
| 
       5044 
5043 
     | 
    
         
             
                              "aliases": "selective hard gold",
         
     | 
| 
         @@ -5107,7 +5106,7 @@ 
     | 
|
| 
       5107 
5106 
     | 
    
         
             
                              "additionalProperties": false,
         
     | 
| 
       5108 
5107 
     | 
    
         
             
                              "properties": {
         
     | 
| 
       5109 
5108 
     | 
    
         
             
                                "ul": {
         
     | 
| 
       5110 
     | 
    
         
            -
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/ 
     | 
| 
      
 5109 
     | 
    
         
            +
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/ul"
         
     | 
| 
       5111 
5110 
     | 
    
         
             
                                },
         
     | 
| 
       5112 
5111 
     | 
    
         
             
                                "c_ul": {
         
     | 
| 
       5113 
5112 
     | 
    
         
             
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/c_ul"
         
     | 
| 
         @@ -5143,7 +5142,7 @@ 
     | 
|
| 
       5143 
5142 
     | 
    
         
             
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/nadcap"
         
     | 
| 
       5144 
5143 
     | 
    
         
             
                                },
         
     | 
| 
       5145 
5144 
     | 
    
         
             
                                "rw_en45545_2_2013": {
         
     | 
| 
       5146 
     | 
    
         
            -
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/ 
     | 
| 
      
 5145 
     | 
    
         
            +
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/rw_en45545_2_2013"
         
     | 
| 
       5147 
5146 
     | 
    
         
             
                                },
         
     | 
| 
       5148 
5147 
     | 
    
         
             
                                "rw_nf_f_16_101": {
         
     | 
| 
       5149 
5148 
     | 
    
         
             
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/rw_nf_f_16_101"
         
     | 
| 
         @@ -5160,8 +5159,8 @@ 
     | 
|
| 
       5160 
5159 
     | 
    
         
             
                                "ipc_6010_compliance_level": {
         
     | 
| 
       5161 
5160 
     | 
    
         
             
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/ipc_6010_compliance_level"
         
     | 
| 
       5162 
5161 
     | 
    
         
             
                                },
         
     | 
| 
       5163 
     | 
    
         
            -
                                " 
     | 
| 
       5164 
     | 
    
         
            -
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/ 
     | 
| 
      
 5162 
     | 
    
         
            +
                                "ipc_6010_copper_plating_thickness_level": {
         
     | 
| 
      
 5163 
     | 
    
         
            +
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/ipc_6010_copper_plating_thickness_level"
         
     | 
| 
       5165 
5164 
     | 
    
         
             
                                },
         
     | 
| 
       5166 
5165 
     | 
    
         
             
                                "ipc_6010_annular_ring_level": {
         
     | 
| 
       5167 
5166 
     | 
    
         
             
                                  "$ref": "ottp_circuitdata_schema_definitions.json#/definitions/elements/standards/ipc_6010_annular_ring_level"
         
     | 
| 
         @@ -387,7 +387,7 @@ 
     | 
|
| 
       387 
387 
     | 
    
         
             
                    "accept_equivalent": {
         
     | 
| 
       388 
388 
     | 
    
         
             
                      "type": "boolean",
         
     | 
| 
       389 
389 
     | 
    
         
             
                      "uom": null,
         
     | 
| 
       390 
     | 
    
         
            -
                      "description": "If alternative to DuPont 
     | 
| 
      
 390 
     | 
    
         
            +
                      "description": "If alternative to DuPont™ Kapton® HN general-purpose film can be used"
         
     | 
| 
       391 
391 
     | 
    
         
             
                    },
         
     | 
| 
       392 
392 
     | 
    
         
             
                    "top": {
         
     | 
| 
       393 
393 
     | 
    
         
             
                      "type": "boolean",
         
     | 
| 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            {
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
      
 2 
     | 
    
         
            +
             "$schema": "http://json-schema.org/draft-04/schema#",
         
     | 
| 
       3 
3 
     | 
    
         
             
              "type": "object",
         
     | 
| 
       4 
4 
     | 
    
         
             
              "additionalProperties": false,
         
     | 
| 
       5 
5 
     | 
    
         
             
              "required": ["open_trade_transfer_package"],
         
     | 
| 
         @@ -12,8 +12,7 @@ 
     | 
|
| 
       12 
12 
     | 
    
         
             
                      "pattern": "^1.0$"
         
     | 
| 
       13 
13 
     | 
    
         
             
                    },
         
     | 
| 
       14 
14 
     | 
    
         
             
                    "information": {
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                      // "$ref": "circuitdata/schema_files/v1/ottp_schema_definitions.json#/definitions/information"
         
     | 
| 
      
 15 
     | 
    
         
            +
                       "$ref": "ottp_schema_definitions.json#/definitions/information"
         
     | 
| 
       17 
16 
     | 
    
         
             
                    },
         
     | 
| 
       18 
17 
     | 
    
         
             
                    "products": {
         
     | 
| 
       19 
18 
     | 
    
         
             
                      "type": "object",
         
     | 
    
        data/lib/circuitdata/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: circuitdata
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.6.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Andreas Lydersen
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2017- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-10-07 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: json-schema
         
     | 
| 
         @@ -24,6 +24,48 @@ dependencies: 
     | 
|
| 
       24 
24 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
26 
     | 
    
         
             
                    version: '2.8'
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: rake
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: '12.1'
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: '12.1'
         
     | 
| 
      
 41 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 42 
     | 
    
         
            +
              name: minitest
         
     | 
| 
      
 43 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 44 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 45 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 46 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 47 
     | 
    
         
            +
                    version: '5.10'
         
     | 
| 
      
 48 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 49 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 50 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 51 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 52 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 53 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 54 
     | 
    
         
            +
                    version: '5.10'
         
     | 
| 
      
 55 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 56 
     | 
    
         
            +
              name: activesupport
         
     | 
| 
      
 57 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 58 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 59 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 60 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 61 
     | 
    
         
            +
                    version: '4.2'
         
     | 
| 
      
 62 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 63 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 64 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 65 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 66 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 67 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 68 
     | 
    
         
            +
                    version: '4.2'
         
     | 
| 
       27 
69 
     | 
    
         
             
            description: This gem allows you to do basic test and comparison of JSON files agains
         
     | 
| 
       28 
70 
     | 
    
         
             
              the CircuitData JSON schema
         
     | 
| 
       29 
71 
     | 
    
         
             
            email:
         
     | 
| 
         @@ -38,7 +80,9 @@ files: 
     | 
|
| 
       38 
80 
     | 
    
         
             
            - lib/circuitdata.rb
         
     | 
| 
       39 
81 
     | 
    
         
             
            - lib/circuitdata/bk_comparer.rb
         
     | 
| 
       40 
82 
     | 
    
         
             
            - lib/circuitdata/compatibility_checker.rb
         
     | 
| 
      
 83 
     | 
    
         
            +
            - lib/circuitdata/dereferencer.rb
         
     | 
| 
       41 
84 
     | 
    
         
             
            - lib/circuitdata/file_comparer.rb
         
     | 
| 
      
 85 
     | 
    
         
            +
            - lib/circuitdata/profile.rb
         
     | 
| 
       42 
86 
     | 
    
         
             
            - lib/circuitdata/schema_files/v1/ottp_circuitdata_schema.json
         
     | 
| 
       43 
87 
     | 
    
         
             
            - lib/circuitdata/schema_files/v1/ottp_circuitdata_schema_definitions.json
         
     | 
| 
       44 
88 
     | 
    
         
             
            - lib/circuitdata/schema_files/v1/ottp_circuitdata_skeleton_schema.json
         
     | 
| 
         @@ -64,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       64 
108 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       65 
109 
     | 
    
         
             
            requirements: []
         
     | 
| 
       66 
110 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       67 
     | 
    
         
            -
            rubygems_version: 2.6. 
     | 
| 
      
 111 
     | 
    
         
            +
            rubygems_version: 2.6.13
         
     | 
| 
       68 
112 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       69 
113 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       70 
114 
     | 
    
         
             
            summary: This gem allows you to do basic test and comparison of JSON files agains
         
     |