Sha256: e031718a8c6280eca938b40848f207ef7052b5bb0d5b938daf7f051c592e2d7d

Contents?: true

Size: 1.24 KB

Versions: 63

Compression:

Stored size: 1.24 KB

Contents

require 'thor'
require 'net/http'
require 'graphiti'

Thor::Base.shell = Thor::Shell::Color

module Graphiti
  class CLI < Thor
    desc 'schema_check OLD_SCHEMA NEW_SCHEMA', 'Diff 2 schemas for backwards incompatibilities. Pass file path or URL. If your app relies on JSON Web Tokens, you can set GRAPHITI_TOKEN for authentication'
    def schema_check(old, new)
      old = schema_for(old)
      new = schema_for(new)

      errors = Graphiti::SchemaDiff.new(old, new).compare
      if errors.any?
        say(set_color("Backwards incompatibilties found!\n", :red, :bold))
        errors.each { |e| say(set_color(e, :yellow)) }
        exit(1)
      else
        say(set_color("No incompatibilities found!", :green))
        exit(0)
      end
    end

    private

    def schema_for(input)
      if input.starts_with?('http')
        JSON.parse(fetch_remote_schema(input))
      else
        JSON.parse(File.read(input))
      end
    end

    def fetch_remote_schema(path)
      uri = URI(path)
      http = Net::HTTP.new(uri.host, uri.port)
      http.use_ssl = true if uri.scheme == 'https'
      req = Net::HTTP::Get.new(uri)
      req['Authorization'] = "Token token=\"#{ENV['GRAPHITI_TOKEN']}\""
      res = http.request(req)
      res.body
    end
  end
end

Version data entries

63 entries across 63 versions & 1 rubygems

Version Path
graphiti-1.0.rc.21 lib/graphiti/cli.rb
graphiti-1.0.rc.19 lib/graphiti/cli.rb
graphiti-1.0.rc.18 lib/graphiti/cli.rb
graphiti-1.0.rc.17 lib/graphiti/cli.rb
graphiti-1.0.rc.16 lib/graphiti/cli.rb
graphiti-1.0.rc.15 lib/graphiti/cli.rb
graphiti-1.0.rc.14 lib/graphiti/cli.rb
graphiti-1.0.rc.12 lib/graphiti/cli.rb
graphiti-1.0.rc.11 lib/graphiti/cli.rb
graphiti-1.0.rc.10 lib/graphiti/cli.rb
graphiti-1.0.rc.9 lib/graphiti/cli.rb
graphiti-1.0.rc.8 lib/graphiti/cli.rb
graphiti-1.0.rc.7 lib/graphiti/cli.rb
graphiti-1.0.rc.6 lib/graphiti/cli.rb
graphiti-1.0.rc.5 lib/graphiti/cli.rb
graphiti-1.0.rc.4 lib/graphiti/cli.rb
graphiti-1.0.rc.3 lib/graphiti/cli.rb
graphiti-1.0.rc.2 lib/graphiti/cli.rb
graphiti-1.0.rc.1 lib/graphiti/cli.rb
graphiti-1.0.beta.23 lib/graphiti/cli.rb