| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| |
| require "qpid/spec" |
| |
| spec = Spec.load(File.new($*[0])) |
| |
| class Symbol |
| def <=>(sym) |
| to_s <=> sym.to_s |
| end |
| end |
| |
| def diff(classes) |
| sets = classes.map {|c| yield(c).to_set} |
| common = sets[0] |
| sets[1..-1].each {|s| |
| common = common & s |
| } |
| |
| sep = "\n " |
| |
| puts "Common:\n #{common.to_a.sort.join(sep)}" |
| classes.zip(sets).each {|c, s| |
| specific = (s - common).to_a.sort |
| puts "\n#{c.name}:\n #{specific.join(sep)}" |
| } |
| end |
| |
| classes = $*[1..-1].map {|c| |
| spec.classes[c] |
| } |
| |
| diff(classes) {|c| |
| result = [] |
| c.methods.each {|m| m.fields.each {|f| result << :"#{m.name}.#{f.name}"}} |
| result |
| } |
| |
| puts |
| |
| diff(classes) {|c| |
| c.fields.map {|f| f.name} |
| } |