yujinakayama/rubygems-xcodeproj_generator

View on GitHub
lib/rubygems/xcodeproj_generator/xcode.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'rubygems/xcodeproj_generator/abstract_ruby_header_provider'

module Rubygems
  module XcodeprojGenerator
    class Xcode < AbstractRubyHeaderProvider
      DEFAULT_ROOT_PATH = '/Applications/Xcode.app'.freeze
      OSX_SDKS_PATH = 'Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs'.freeze
      RUBY_INCLUDE_PATH_PATTERN =
        'System/Library/Frameworks/Ruby.framework/Versions/*/usr/include/*'.freeze

      def initialize(root_path = nil)
        root_path ||= DEFAULT_ROOT_PATH
        super(root_path)
      end

      private

      def base_ruby_header_path
        return nil unless latest_osx_sdk
        find_path(root_path, OSX_SDKS_PATH, latest_osx_sdk, RUBY_INCLUDE_PATH_PATTERN)
      end

      def latest_osx_sdk
        osx_sdks.sort_by do |sdk|
          version = sdk.match(/\d+\.\d+/).to_s
          Gem::Version.new(version)
        end.last
      end

      def osx_sdks
        return [] unless available?

        sdks_dir = File.join(root_path, OSX_SDKS_PATH)
        return [] unless Dir.exist?(sdks_dir)

        Dir.chdir(sdks_dir) do
          Dir['*']
        end
      end
    end
  end
end