%YAML 1.2
--- |
  # -*- ruby -*-
  # encoding: utf-8
  $LOAD_PATH.push File.expand_path('../src/ruby/lib', __FILE__)
  require 'grpc/version'

  Gem::Specification.new do |s|
    s.name          = 'grpc'
    s.version       = GRPC::VERSION
    s.authors       = ['gRPC Authors']
    s.email         = 'temiola@google.com'
    s.homepage      = 'https://github.com/google/grpc/tree/master/src/ruby'
    s.summary       = 'GRPC system in Ruby'
    s.description   = 'Send RPCs from Ruby using GRPC'
    s.license       = 'BSD-3-Clause'

    s.required_ruby_version = '>= 2.0.0'

    s.files = %w( Makefile .yardopts )
    s.files += %w( etc/roots.pem )
    s.files += Dir.glob('src/ruby/bin/**/*')
    s.files += Dir.glob('src/ruby/ext/**/*')
    s.files += Dir.glob('src/ruby/lib/**/*')
    s.files += Dir.glob('src/ruby/pb/**/*')
    s.files += Dir.glob('include/grpc/**/*')
    s.test_files = Dir.glob('src/ruby/spec/**/*')
    s.bindir = 'src/ruby/bin'
    ${'%'}w(math noproto).each do |b|
      s.executables += ["#{b}_client.rb", "#{b}_server.rb"]
    end
    s.executables += %w(grpc_ruby_interop_client grpc_ruby_interop_server)
    s.require_paths = %w( src/ruby/bin src/ruby/lib src/ruby/pb )
    s.platform      = Gem::Platform::RUBY

    s.add_dependency 'google-protobuf', '~> 3.0.0.alpha.5.0.3'
    s.add_dependency 'googleauth',      '~> 0.5.1'

    s.add_development_dependency 'bundler',            '~> 1.9'
    s.add_development_dependency 'logging',            '~> 2.0'
    s.add_development_dependency 'simplecov',          '~> 0.9'
    s.add_development_dependency 'rake',               '~> 10.4'
    s.add_development_dependency 'rake-compiler',      '~> 0.9'
    s.add_development_dependency 'rake-compiler-dock', '~> 0.5.1'
    s.add_development_dependency 'rspec',              '~> 3.2'
    s.add_development_dependency 'rubocop',            '~> 0.30.0'
    s.add_development_dependency 'signet',             '~> 0.7.0'

    s.extensions = %w(src/ruby/ext/grpc/extconf.rb)

    % for lib in libs:
    % if lib.name in ruby_gem.get('deps', []):
    % for file in lib.get('public_headers', []) + lib.headers + lib.src:
    s.files += %w( ${file} )
    % endfor
    % endif
    % endfor
  end
