lib/lhj/config.rb in lhj-tools-0.1.2 vs lib/lhj/config.rb in lhj-tools-0.1.3
- old
+ new
@@ -1,355 +1,15 @@
-
module Lhj
- # Stores the global configuration of CocoaPods.
- #
+ # config
class Config
- # The default settings for the configuration.
- #
- # Users can specify custom settings in `~/.cocoapods/config.yaml`.
- # An example of the contents of this file might look like:
- #
- # ---
- # skip_repo_update: true
- # new_version_message: false
- #
- DEFAULTS = {
- :verbose => false,
- :silent => false,
- :skip_download_cache => !ENV['COCOAPODS_SKIP_CACHE'].nil?,
-
- :new_version_message => ENV['COCOAPODS_SKIP_UPDATE_MESSAGE'].nil?,
-
- :cache_root => Pathname.new(Dir.home) + 'Library/Caches/CocoaPods',
- }
-
- # Applies the given changes to the config for the duration of the given
- # block.
- #
- # @param [Hash<#to_sym,Object>] changes
- # the changes to merge temporarily with the current config
- #
- # @yield [] is called while the changes are applied
- #
- def with_changes(changes)
- old = {}
- changes.keys.each do |key|
- key = key.to_sym
- old[key] = send(key) if respond_to?(key)
- end
- configure_with(changes)
- yield if block_given?
- ensure
- configure_with(old)
- end
-
- public
-
- #-------------------------------------------------------------------------#
-
- # @!group UI
-
- # @return [Boolean] Whether CocoaPods should provide detailed output about the
- # performed actions.
- #
- attr_accessor :verbose
- alias_method :verbose?, :verbose
-
- # @return [Boolean] Whether CocoaPods should produce not output.
- #
- attr_accessor :silent
- alias_method :silent?, :silent
-
- # @return [Boolean] Whether CocoaPods is allowed to run as root.
- #
- attr_accessor :allow_root
- alias_method :allow_root?, :allow_root
-
- # @return [Boolean] Whether a message should be printed when a new version of
- # CocoaPods is available.
- #
- attr_accessor :new_version_message
- alias_method :new_version_message?, :new_version_message
-
- #-------------------------------------------------------------------------#
-
- # @!group Installation
-
- # @return [Boolean] Whether the installer should skip the download cache.
- #
- attr_accessor :skip_download_cache
- alias_method :skip_download_cache?, :skip_download_cache
-
- public
-
- #-------------------------------------------------------------------------#
-
- # @!group Cache
-
- # @return [Pathname] The directory where CocoaPods should cache remote data
- # and other expensive to compute information.
- #
- attr_accessor :cache_root
-
- def cache_root
- @cache_root.mkpath unless @cache_root.exist?
- @cache_root
- end
-
- public
-
- #-------------------------------------------------------------------------#
-
- # @!group Initialization
-
- def initialize(use_user_settings = true)
- configure_with(DEFAULTS)
-
- unless ENV['CP_HOME_DIR'].nil?
- @cache_root = home_dir + 'cache'
- end
-
- if use_user_settings && user_settings_file.exist?
- require 'yaml'
- user_settings = YAML.load_file(user_settings_file)
- configure_with(user_settings)
- end
-
- unless ENV['CP_CACHE_DIR'].nil?
- @cache_root = Pathname.new(ENV['CP_CACHE_DIR']).expand_path
- end
- end
-
- def verbose
- @verbose && !silent
- end
-
- public
-
- #-------------------------------------------------------------------------#
-
- # @!group Paths
-
- # @return [Pathname] the directory where repos, templates and configuration
- # files are stored.
- #
def home_dir
- @home_dir ||= Pathname.new(ENV['CP_HOME_DIR'] || '~/.lhj').expand_path
+ @home_dir ||= Pathname.new('~/.lhj').expand_path
end
- # @return [Pathname] the directory where the CocoaPods sources are stored.
- #
- def repos_dir
- @repos_dir ||= Pathname.new(ENV['CP_REPOS_DIR'] || (home_dir + 'repos')).expand_path
- end
-
- attr_writer :repos_dir
-
- # @return [Source::Manager] the source manager for the spec repos in `repos_dir`
- #
- def sources_manager
- return @sources_manager if @sources_manager && @sources_manager.repos_dir == repos_dir
- @sources_manager = Source::Manager.new(repos_dir)
- end
-
- # @return [Pathname] the directory where the CocoaPods templates are stored.
- #
- def templates_dir
- @templates_dir ||= Pathname.new(ENV['CP_TEMPLATES_DIR'] || (home_dir + 'templates')).expand_path
- end
-
- # @return [Pathname] the root of the CocoaPods installation where the
- # Podfile is located.
- #
- def installation_root
- @installation_root ||= begin
- current_dir = Pathname.new(Dir.pwd.unicode_normalize(:nfkc))
- current_path = current_dir
- until current_path.root?
- if podfile_path_in_dir(current_path)
- installation_root = current_path
- unless current_path == current_dir
- UI.puts("[in #{current_path}]")
- end
- break
- else
- current_path = current_path.parent
- end
- end
- installation_root || current_dir
- end
- end
-
- attr_writer :installation_root
- alias_method :project_root, :installation_root
-
- # @return [Pathname] The root of the sandbox.
- #
- def sandbox_root
- @sandbox_root ||= installation_root + 'Pods'
- end
-
- attr_writer :sandbox_root
- alias_method :project_pods_root, :sandbox_root
-
- # @return [Sandbox] The sandbox of the current project.
- #
- def sandbox
- @sandbox ||= Sandbox.new(sandbox_root)
- end
-
- # @return [Podfile] The Podfile to use for the current execution.
- # @return [Nil] If no Podfile is available.
- #
- def podfile
- @podfile ||= Podfile.from_file(podfile_path) if podfile_path
- end
- attr_writer :podfile
-
- # @return [Lockfile] The Lockfile to use for the current execution.
- # @return [Nil] If no Lockfile is available.
- #
- def lockfile
- @lockfile ||= Lockfile.from_file(lockfile_path) if lockfile_path
- end
-
- # Returns the path of the Podfile.
- #
- # @note The Podfile can be named either `CocoaPods.podfile.yaml`,
- # `CocoaPods.podfile` or `Podfile`. The first two are preferred as
- # they allow to specify an OS X UTI.
- #
- # @return [Pathname]
- # @return [Nil]
- #
- def podfile_path
- @podfile_path ||= podfile_path_in_dir(installation_root)
- end
-
- # Returns the path of the Lockfile.
- #
- # @note The Lockfile is named `Podfile.lock`.
- #
- def lockfile_path
- @lockfile_path ||= installation_root + 'Podfile.lock'
- end
-
- # Returns the path of the default Podfile pods.
- #
- # @note The file is expected to be named Podfile.default
- #
- # @return [Pathname]
- #
- def default_podfile_path
- @default_podfile_path ||= templates_dir + 'Podfile.default'
- end
-
- # Returns the path of the default Podfile test pods.
- #
- # @note The file is expected to be named Podfile.test
- #
- # @return [Pathname]
- #
- def default_test_podfile_path
- @default_test_podfile_path ||= templates_dir + 'Podfile.test'
- end
-
- # @return [Pathname] The file to use to cache the search data.
- #
- def search_index_file
- cache_root + 'search_index.json'
- end
-
- private
-
- #-------------------------------------------------------------------------#
-
- # @!group Private helpers
-
- # @return [Pathname] The path of the file which contains the user settings.
- #
- def user_settings_file
- home_dir + 'config.yaml'
- end
-
- # Sets the values of the attributes with the given hash.
- #
- # @param [Hash{String,Symbol => Object}] values_by_key
- # The values of the attributes grouped by key.
- #
- # @return [void]
- #
- def configure_with(values_by_key)
- return unless values_by_key
- values_by_key.each do |key, value|
- if key.to_sym == :cache_root
- value = Pathname.new(value).expand_path
- end
- instance_variable_set("@#{key}", value)
- end
- end
-
- # @return [Array<String>] The filenames that the Podfile can have ordered
- # by priority.
- #
- PODFILE_NAMES = [
- 'CocoaPods.podfile.yaml',
- 'CocoaPods.podfile',
- 'Podfile',
- 'Podfile.rb',
- ].freeze
-
- public
-
- # Returns the path of the Podfile in the given dir if any exists.
- #
- # @param [Pathname] dir
- # The directory where to look for the Podfile.
- #
- # @return [Pathname] The path of the Podfile.
- # @return [Nil] If not Podfile was found in the given dir
- #
- def podfile_path_in_dir(dir)
- PODFILE_NAMES.each do |filename|
- candidate = dir + filename
- if candidate.file?
- return candidate
- end
- end
- nil
- end
-
- # Excludes the given dir from Time Machine backups.
- #
- # @param [Pathname] dir
- # The directory to exclude from Time Machine backups.
- #
- # @return [void]
- #
- def exclude_from_backup(dir)
- return if Gem.win_platform?
- system('tmutil', 'addexclusion', dir.to_s, %i(out err) => File::NULL)
- end
-
- public
-
- #-------------------------------------------------------------------------#
-
- # @!group Singleton
-
- # @return [Config] the current config instance creating one if needed.
- #
def self.instance
@instance ||= new
end
- # Sets the current config instance. If set to nil the config will be
- # recreated when needed.
- #
- # @param [Config, Nil] the instance.
- #
- # @return [void]
- #
class << self
attr_writer :instance
end
# Provides support for accessing the configuration instance in other