cocoapods-repo-sq 0.0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/.travis.yml +13 -0
- data/CHANGES.md +0 -0
- data/CONTRIBUTING.md +4 -0
- data/Gemfile +12 -0
- data/LICENSE.txt +202 -0
- data/README.md +84 -0
- data/Rakefile +34 -0
- data/cocoapods-repo-sq.gemspec +45 -0
- data/doc/CocoapodsRepoSq/Downloader/Extensions.html +225 -0
- data/doc/CocoapodsRepoSq/Downloader.html +352 -0
- data/doc/CocoapodsRepoSq/DownloaderExtensions.html +227 -0
- data/doc/CocoapodsRepoSq/Repository.html +970 -0
- data/doc/CocoapodsRepoSq/RepositoryStore.html +962 -0
- data/doc/CocoapodsRepoSq/Source.html +342 -0
- data/doc/CocoapodsRepoSq/SquareExtensions.html +227 -0
- data/doc/CocoapodsRepoSq.html +149 -0
- data/doc/Pod/Command/RepoSq/Add.html +436 -0
- data/doc/Pod/Command/RepoSq/List.html +256 -0
- data/doc/Pod/Command/RepoSq/Remove.html +378 -0
- data/doc/Pod/Command/RepoSq/Update.html +380 -0
- data/doc/Pod/Command/RepoSq.html +157 -0
- data/doc/Pod/Command.html +137 -0
- data/doc/Pod/Downloader/Square.html +334 -0
- data/doc/Pod/Downloader/SquareExtensions.html +218 -0
- data/doc/Pod/Downloader.html +105 -0
- data/doc/Pod/SquareSource.html +416 -0
- data/doc/Pod.html +146 -0
- data/doc/_index.html +256 -0
- data/doc/class_list.html +51 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +58 -0
- data/doc/css/style.css +499 -0
- data/doc/file.README.html +132 -0
- data/doc/file_list.html +56 -0
- data/doc/frames.html +17 -0
- data/doc/index.html +132 -0
- data/doc/js/app.js +248 -0
- data/doc/js/full_list.js +216 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +291 -0
- data/doc/top-level-namespace.html +110 -0
- data/lib/cocoapods_plugin.rb +49 -0
- data/lib/cocoapods_repo_sq/downloader.rb +86 -0
- data/lib/cocoapods_repo_sq/repository.rb +109 -0
- data/lib/cocoapods_repo_sq/repository_store.rb +170 -0
- data/lib/cocoapods_repo_sq/source.rb +42 -0
- data/lib/cocoapods_repo_sq.rb +26 -0
- data/lib/pod/command/repo_sq/add.rb +87 -0
- data/lib/pod/command/repo_sq/list.rb +55 -0
- data/lib/pod/command/repo_sq/remove.rb +61 -0
- data/lib/pod/command/repo_sq/update.rb +62 -0
- data/lib/pod/command/repo_sq.rb +38 -0
- data/spec/spec_helper.rb +80 -0
- data/spec/test-repos/repo-1/.settings.yml +4 -0
- data/spec/test-repos/repo-2/.settings.yml +4 -0
- data/spec/unit/cocoapods_plugin_spec.rb +108 -0
- data/spec/unit/cocoapods_repo_sq/downloader_spec.rb +57 -0
- data/spec/unit/cocoapods_repo_sq/repository_spec.rb +57 -0
- data/spec/unit/cocoapods_repo_sq/repository_store_spec.rb +124 -0
- data/spec/unit/cocoapods_repo_sq/source_spec.rb +35 -0
- data/spec/unit/pod/command/add_spec.rb +73 -0
- data/spec/unit/pod/command/list_spec.rb +70 -0
- data/spec/unit/pod/command/remove_spec.rb +47 -0
- data/spec/unit/pod/command/update_spec.rb +49 -0
- metadata +184 -0
@@ -0,0 +1,110 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<title>
|
7
|
+
Top Level Namespace
|
8
|
+
|
9
|
+
— Documentation by YARD 0.9.12
|
10
|
+
|
11
|
+
</title>
|
12
|
+
|
13
|
+
<link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
|
14
|
+
|
15
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
|
16
|
+
|
17
|
+
<script type="text/javascript" charset="utf-8">
|
18
|
+
pathId = "";
|
19
|
+
relpath = '';
|
20
|
+
</script>
|
21
|
+
|
22
|
+
|
23
|
+
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
24
|
+
|
25
|
+
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
|
26
|
+
|
27
|
+
|
28
|
+
</head>
|
29
|
+
<body>
|
30
|
+
<div class="nav_wrap">
|
31
|
+
<iframe id="nav" src="class_list.html?1"></iframe>
|
32
|
+
<div id="resizer"></div>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<div id="main" tabindex="-1">
|
36
|
+
<div id="header">
|
37
|
+
<div id="menu">
|
38
|
+
|
39
|
+
<a href="_index.html">Index</a> »
|
40
|
+
|
41
|
+
|
42
|
+
<span class="title">Top Level Namespace</span>
|
43
|
+
|
44
|
+
</div>
|
45
|
+
|
46
|
+
<div id="search">
|
47
|
+
|
48
|
+
<a class="full_list_link" id="class_list_link"
|
49
|
+
href="class_list.html">
|
50
|
+
|
51
|
+
<svg width="24" height="24">
|
52
|
+
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
|
53
|
+
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
|
54
|
+
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
|
55
|
+
</svg>
|
56
|
+
</a>
|
57
|
+
|
58
|
+
</div>
|
59
|
+
<div class="clear"></div>
|
60
|
+
</div>
|
61
|
+
|
62
|
+
<div id="content"><h1>Top Level Namespace
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
</h1>
|
67
|
+
<div class="box_info">
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
</div>
|
80
|
+
|
81
|
+
<h2>Defined Under Namespace</h2>
|
82
|
+
<p class="children">
|
83
|
+
|
84
|
+
|
85
|
+
<strong class="modules">Modules:</strong> <span class='object_link'><a href="CocoapodsRepoSq.html" title="CocoapodsRepoSq (module)">CocoapodsRepoSq</a></span>, <span class='object_link'><a href="Pod.html" title="Pod (module)">Pod</a></span>
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
</p>
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
</div>
|
101
|
+
|
102
|
+
<div id="footer">
|
103
|
+
Generated on Fri Apr 27 10:49:52 2018 by
|
104
|
+
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
105
|
+
0.9.12 (ruby-2.4.0).
|
106
|
+
</div>
|
107
|
+
|
108
|
+
</div>
|
109
|
+
</body>
|
110
|
+
</html>
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# This source file is part of the cocoapods-repo-sq plugin under the Apache 2.0
|
4
|
+
# license:
|
5
|
+
#
|
6
|
+
# Copyright 2018 Square Inc.
|
7
|
+
#
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
# you may not use this file except in compliance with the License.
|
10
|
+
# You may obtain a copy of the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
# =============================================================================
|
21
|
+
|
22
|
+
# plugin main source files
|
23
|
+
require 'cocoapods_repo_sq/repository_store'
|
24
|
+
require 'cocoapods_repo_sq/repository'
|
25
|
+
require 'cocoapods_repo_sq/source'
|
26
|
+
require 'cocoapods_repo_sq/downloader'
|
27
|
+
|
28
|
+
# plugin repo-sq command line support
|
29
|
+
require 'pod/command/repo_sq'
|
30
|
+
|
31
|
+
Pod::HooksManager.register('cocoapods-repo-sq', :source_provider) do |context, options|
|
32
|
+
name = options.fetch('repository', nil)
|
33
|
+
raise Pod::Informative, "repository is needed for `cocoapods-repo-sq``" unless name
|
34
|
+
|
35
|
+
repository_store = CocoapodsRepoSq::RepositoryStore.default
|
36
|
+
unless repository_store.exists?(name)
|
37
|
+
raise Pod::Informative, "Square SDK repository `#{name}` does not exist"
|
38
|
+
end
|
39
|
+
|
40
|
+
repository = repository_store.get(name)
|
41
|
+
CocoapodsRepoSq::Repository.current = repository
|
42
|
+
|
43
|
+
# update specs when `pod update` is being ran
|
44
|
+
if ARGV.include?('--repo-update') ||
|
45
|
+
(ARGV.include?('update') && !ARGV.include?('--no-repo-update'))
|
46
|
+
repository.update_specs
|
47
|
+
end
|
48
|
+
context.add_source(CocoapodsRepoSq::Source.new(repository))
|
49
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# This source file is part of the cocoapods-repo-sq plugin under the Apache 2.0
|
4
|
+
# license:
|
5
|
+
#
|
6
|
+
# Copyright 2018 Square Inc.
|
7
|
+
#
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
# you may not use this file except in compliance with the License.
|
10
|
+
# You may obtain a copy of the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
# =============================================================================
|
21
|
+
|
22
|
+
# Main namespace for cocoapods-repo-sq plugin
|
23
|
+
module CocoapodsRepoSq
|
24
|
+
# Implemenents a {https://github.com/CocoaPods/cocoapods-downloader
|
25
|
+
# downloader strategy} to support downloading files from a Square SDK
|
26
|
+
# repository server over the HTTPS protocol with
|
27
|
+
# {https://tools.ietf.org/html/rfc7617 Basic HTTP Authentication RFC7617}
|
28
|
+
class Downloader < ::Pod::Downloader::Http
|
29
|
+
# Helper module used to override the {::Pod::Downloader::downloader_class_by_key} method to
|
30
|
+
# include a `:square` key pointing to {Downloader}. This allows square to be
|
31
|
+
# defined as the protocol for downloading Pods on the
|
32
|
+
# {https://guides.cocoapods.org/syntax/podspec.html#source
|
33
|
+
# podfile source setting}
|
34
|
+
module Extensions
|
35
|
+
# Map of downloaded classes supported by Cocoapods available to the
|
36
|
+
# {https://guides.cocoapods.org/syntax/podspec.html#source podfile source
|
37
|
+
# setting}. Square is included to add support for Square SDK repository
|
38
|
+
# hosted podspecs and pods.
|
39
|
+
#
|
40
|
+
# @return [Hash{Symbol=>Class}]
|
41
|
+
# a map where the key is a symbol used in the podspec source
|
42
|
+
# setting such as `:http`, `:git`, `:square` and the class is the one
|
43
|
+
# responsible for implementing a particular download strategy
|
44
|
+
def downloader_class_by_key
|
45
|
+
super.merge(:square => Downloader)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Options accepted by this dowmloader strategy.
|
50
|
+
# The base class already supports `:flatten`, `:type`, `:sha256`, `:sha1`.
|
51
|
+
# {Downloader} supports passing a `:repository` option to indicate which
|
52
|
+
# Square SDK repository to download files from. If none is provided, it
|
53
|
+
# will try to use the current repository. See {Repository#current}
|
54
|
+
#
|
55
|
+
# @return [Array<Symbol>]
|
56
|
+
# a list of accepted options
|
57
|
+
def self.options
|
58
|
+
super + [:repository]
|
59
|
+
end
|
60
|
+
|
61
|
+
# Square SDK repository to be used by this downloader.
|
62
|
+
# It can be passed as an option when initializing this class or also taken
|
63
|
+
# from the current repository. See {Repository#current}
|
64
|
+
#
|
65
|
+
# @return [CocoapodsRepoSq::Repository]
|
66
|
+
# a Square SDK repository
|
67
|
+
def repository
|
68
|
+
@repository ||= options.fetch(:repository) { Repository.current }
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
def download_file(full_filename)
|
73
|
+
auth = "#{repository.username}:#{repository.password}"
|
74
|
+
download_url = File.join(repository.url, url)
|
75
|
+
curl! '-u', auth, '-f', '-L', '-o', full_filename, download_url, '--create-dirs', '--netrc-optional'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
Pod::Downloader.class_eval do
|
81
|
+
class << self
|
82
|
+
# override `downloader_class_by_key` method. See documentation on the
|
83
|
+
# prepended class
|
84
|
+
prepend ::CocoapodsRepoSq::Downloader::Extensions
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# This source file is part of the cocoapods-repo-sq plugin under the Apache 2.0
|
4
|
+
# license:
|
5
|
+
#
|
6
|
+
# Copyright 2018 Square Inc.
|
7
|
+
#
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
# you may not use this file except in compliance with the License.
|
10
|
+
# You may obtain a copy of the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
# =============================================================================
|
21
|
+
|
22
|
+
# Main namespace for cocoapods-repo-sq plugin
|
23
|
+
module CocoapodsRepoSq
|
24
|
+
# Class that represents the credentials needed to access a Square SDK
|
25
|
+
# repository of {https://guides.cocoapods.org/syntax/podspec.html podspecs}
|
26
|
+
# for a given Square Application. Responsible for downloading a copy of the
|
27
|
+
# repository from Square servers and cache it on the local filesystem.
|
28
|
+
class Repository
|
29
|
+
class << self
|
30
|
+
# Square SDK repository set by the plugin initialization on the
|
31
|
+
# {https://guides.cocoapods.org/syntax/podfile.html#plugin Podfile}.
|
32
|
+
# This setting is used by the {Downloader} class to know which repository
|
33
|
+
# to download files from in the context of a `pod install` or `pod update`
|
34
|
+
# command call. When a podspec indicates a Square source it does not have
|
35
|
+
# a Square SDK repository reference to provide to the Downloader class so
|
36
|
+
# this global setting is used instead.
|
37
|
+
#
|
38
|
+
# @return [CocoapodsRepoSq::Repository]
|
39
|
+
# current Square SDK repository
|
40
|
+
attr_accessor :current
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [String]
|
44
|
+
# nickname under which a Square SDK repository was registered on the
|
45
|
+
# {RepositoryStore}.
|
46
|
+
attr_reader :name
|
47
|
+
|
48
|
+
# @return [String]
|
49
|
+
# server user name used to access a specific Square SDK repository.
|
50
|
+
attr_reader :username
|
51
|
+
|
52
|
+
# @return [String]
|
53
|
+
# server password used to access a specific Square SDK repository.
|
54
|
+
attr_reader :password
|
55
|
+
|
56
|
+
# @return [String]
|
57
|
+
# Square SDK repositories server url.
|
58
|
+
attr_reader :url
|
59
|
+
|
60
|
+
# @return [String]
|
61
|
+
# local filesystem path where this repository cache of podspecs is stored.
|
62
|
+
attr_reader :path
|
63
|
+
|
64
|
+
# @param name [String]
|
65
|
+
# nickname under which a Square SDK repository was registered on the
|
66
|
+
# {RepositoryStore}.
|
67
|
+
#
|
68
|
+
# @param username [String]
|
69
|
+
# server user name used to access a specific Square SDK repository.
|
70
|
+
#
|
71
|
+
# @param password [String]
|
72
|
+
# server password used to access a specific Square SDK repository.
|
73
|
+
#
|
74
|
+
# @param url [String]
|
75
|
+
# Square SDK repositories server url.
|
76
|
+
#
|
77
|
+
# @param path [String]
|
78
|
+
# local filesystem path where this repository cache of podspecs is stored.
|
79
|
+
def initialize(name, username, password, url, path)
|
80
|
+
@name = name
|
81
|
+
@username = username
|
82
|
+
@url = url
|
83
|
+
@password = password
|
84
|
+
@path = path
|
85
|
+
end
|
86
|
+
|
87
|
+
# Updates the local copy of the podspecs from the Square SDK repository
|
88
|
+
def update_specs
|
89
|
+
# download new specs to a temp directory
|
90
|
+
new_specs_path = get_temporary_path
|
91
|
+
downloader = Downloader.new(new_specs_path, "specs.zip", :repository => self)
|
92
|
+
downloader.download
|
93
|
+
|
94
|
+
# perform cleanup
|
95
|
+
specs_path = File.join(@path, 'Specs')
|
96
|
+
FileUtils.rm(File.join(new_specs_path, "file.zip"))
|
97
|
+
FileUtils.rm_rf(specs_path)
|
98
|
+
FileUtils.mv(new_specs_path, specs_path)
|
99
|
+
nil
|
100
|
+
end
|
101
|
+
|
102
|
+
private
|
103
|
+
def get_temporary_path
|
104
|
+
temp_path = File.join(@path, 'Specs.new')
|
105
|
+
FileUtils.rm_rf(temp_path)
|
106
|
+
temp_path
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,170 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# This source file is part of the cocoapods-repo-sq plugin under the Apache 2.0
|
4
|
+
# license:
|
5
|
+
#
|
6
|
+
# Copyright 2018 Square Inc.
|
7
|
+
#
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
# you may not use this file except in compliance with the License.
|
10
|
+
# You may obtain a copy of the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
# =============================================================================
|
21
|
+
require 'yaml'
|
22
|
+
|
23
|
+
# Main namespace for cocoapods-repo-sq plugin
|
24
|
+
module CocoapodsRepoSq
|
25
|
+
# Class responsible for managing user configured Square SDK repositories.
|
26
|
+
# Repository settings and a local copy of the podspecs are stored on the
|
27
|
+
# filesystem inside Cocoapods' home directory.
|
28
|
+
class RepositoryStore
|
29
|
+
# Default store located in Cocoapods's home directory.
|
30
|
+
# Used by the plugin to look for registered repositories or by the `repo-sq`
|
31
|
+
# commands to manage registered repositories.
|
32
|
+
#
|
33
|
+
# @return [RepositoryStore]
|
34
|
+
# the default RepositoryStore
|
35
|
+
def self.default
|
36
|
+
@default ||= new
|
37
|
+
end
|
38
|
+
|
39
|
+
# @param path [String]
|
40
|
+
# the path where all Square SDK repositories will be stored. If no path
|
41
|
+
# is provided a default `$COCOAPODS_HOME/repo-sq` will be used
|
42
|
+
def initialize(path = nil)
|
43
|
+
path ||= File.join(Pod::Config.instance.home_dir, 'repo-sq')
|
44
|
+
@path = ensure_path(path)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Indicates if a Square SDK repository has been added to the store
|
48
|
+
#
|
49
|
+
# @param name [String]
|
50
|
+
# the Square SDK repository name to look for
|
51
|
+
#
|
52
|
+
# @return [Boolean]
|
53
|
+
# `true` if the targeted Square SDK repository is configured in this
|
54
|
+
# repository store, otherwise `false`.
|
55
|
+
def exists?(name)
|
56
|
+
File.exists?(settings_path(name))
|
57
|
+
end
|
58
|
+
|
59
|
+
# Returns all repositories currently configured in the store as a list of
|
60
|
+
# {Repository} objects
|
61
|
+
#
|
62
|
+
# @return [Array<Repository>]
|
63
|
+
# the list of all Square SDK repositories
|
64
|
+
def list
|
65
|
+
Dir[File.join(@path, '*')].map do |dir|
|
66
|
+
name = File.basename(dir)
|
67
|
+
get(name)
|
68
|
+
end.compact
|
69
|
+
end
|
70
|
+
|
71
|
+
# Returns a {Repository} instance if a Square SDK repository exists in the
|
72
|
+
# store with the given name
|
73
|
+
#
|
74
|
+
# @param name [String]
|
75
|
+
# the Square SDK repository name to look for
|
76
|
+
#
|
77
|
+
# @return [Repository]
|
78
|
+
# a Square SDK repository
|
79
|
+
def get(name)
|
80
|
+
return unless exists?(name)
|
81
|
+
|
82
|
+
settings = load_settings!(name)
|
83
|
+
Repository.new(
|
84
|
+
settings[:name],
|
85
|
+
settings[:username],
|
86
|
+
settings[:password],
|
87
|
+
settings[:url],
|
88
|
+
repository_path(name)
|
89
|
+
)
|
90
|
+
end
|
91
|
+
|
92
|
+
# Registers a Square SDK repository on the local store
|
93
|
+
#
|
94
|
+
# @param name [String]
|
95
|
+
# the Square SDK repository name.
|
96
|
+
#
|
97
|
+
# @param username [String]
|
98
|
+
# the Square SDK repository username.
|
99
|
+
#
|
100
|
+
# @param password [String]
|
101
|
+
# the Square SDK repository password.
|
102
|
+
#
|
103
|
+
# @param url [String]
|
104
|
+
# the Square SDK repositories server URL.
|
105
|
+
#
|
106
|
+
# @return [Repository]
|
107
|
+
# a Square SDK repository
|
108
|
+
#
|
109
|
+
# @raise [Pod::Informative]
|
110
|
+
# if the repository has already been configured
|
111
|
+
def register(name, username, password, url)
|
112
|
+
if exists?(name)
|
113
|
+
message = "Square SDK repository `#{name}` is already configured"
|
114
|
+
raise Pod::Informative, message
|
115
|
+
end
|
116
|
+
|
117
|
+
begin
|
118
|
+
store_settings!(name, username, password, url)
|
119
|
+
Repository.new(name, username, password, url, repository_path(name))
|
120
|
+
rescue => error
|
121
|
+
remove(name)
|
122
|
+
raise error
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
# Removes a Square SDK repository from the local store
|
127
|
+
#
|
128
|
+
# @param name [String]
|
129
|
+
# the name of the Square SDK Repository to be removed.
|
130
|
+
#
|
131
|
+
# @return [Boolean]
|
132
|
+
# `true` if the targeted Square SDK repository was removed from the store,
|
133
|
+
# otherwise `false`.
|
134
|
+
def remove(name)
|
135
|
+
path = repository_path(name)
|
136
|
+
File.exists?(path) && FileUtils.rm_rf(path) && true
|
137
|
+
end
|
138
|
+
|
139
|
+
private
|
140
|
+
def load_settings!(name)
|
141
|
+
YAML.load_file(settings_path(name))
|
142
|
+
end
|
143
|
+
|
144
|
+
def store_settings!(name, username, password, url)
|
145
|
+
settings = {
|
146
|
+
name: name,
|
147
|
+
username: username,
|
148
|
+
password: password,
|
149
|
+
url: url
|
150
|
+
}
|
151
|
+
|
152
|
+
settings_filename = settings_path(name)
|
153
|
+
ensure_path(File.dirname(settings_filename))
|
154
|
+
File.open(settings_filename, 'w') { |f| YAML.dump(settings, f) }
|
155
|
+
end
|
156
|
+
|
157
|
+
def ensure_path(path)
|
158
|
+
FileUtils.mkpath(path)
|
159
|
+
path
|
160
|
+
end
|
161
|
+
|
162
|
+
def repository_path(name)
|
163
|
+
File.join(@path, name)
|
164
|
+
end
|
165
|
+
|
166
|
+
def settings_path(name)
|
167
|
+
File.join(repository_path(name), '.settings.yml')
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# This source file is part of the cocoapods-repo-sq plugin under the Apache 2.0
|
4
|
+
# license:
|
5
|
+
#
|
6
|
+
# Copyright 2018 Square Inc.
|
7
|
+
#
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
# you may not use this file except in compliance with the License.
|
10
|
+
# You may obtain a copy of the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
# =============================================================================
|
21
|
+
|
22
|
+
# Main namespace for cocoapods-repo-sq plugin
|
23
|
+
module CocoapodsRepoSq
|
24
|
+
# Class responsible of managing a collection of podspecs and pods hosted at a
|
25
|
+
# Square SDK repository. Files are accessed via HTTPS with
|
26
|
+
# {https://tools.ietf.org/html/rfc7617 Basic HTTP Authentication RFC7617}
|
27
|
+
class Source < ::Pod::Source
|
28
|
+
# @return [Repository]
|
29
|
+
# an object representing a Square SDK repository
|
30
|
+
#
|
31
|
+
attr_reader :repository
|
32
|
+
|
33
|
+
# @param repository [Repository]
|
34
|
+
# an object representing a Square SDK repository where this source will
|
35
|
+
# get podspecs from.
|
36
|
+
#
|
37
|
+
def initialize(repository)
|
38
|
+
@repository = repository
|
39
|
+
super(repository.path)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# This source file is part of the cocoapods-repo-sq plugin under the Apache 2.0
|
4
|
+
# license:
|
5
|
+
#
|
6
|
+
# Copyright 2018 Square Inc.
|
7
|
+
#
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
# you may not use this file except in compliance with the License.
|
10
|
+
# You may obtain a copy of the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
# =============================================================================
|
21
|
+
|
22
|
+
# Main namespace for cocoapods-repo-sq plugin
|
23
|
+
module CocoapodsRepoSq
|
24
|
+
# Plugin version
|
25
|
+
VERSION = '0.0.1'.freeze
|
26
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# This source file is part of the cocoapods-repo-sq plugin under the Apache 2.0
|
4
|
+
# license:
|
5
|
+
#
|
6
|
+
# Copyright 2018 Square Inc.
|
7
|
+
#
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
# you may not use this file except in compliance with the License.
|
10
|
+
# You may obtain a copy of the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
# =============================================================================
|
21
|
+
|
22
|
+
module Pod
|
23
|
+
class Command
|
24
|
+
class RepoSq < Command
|
25
|
+
# Subclass of {RepoSq}
|
26
|
+
# Provides support for the `pod repo-sq add` which adds a Square SDK
|
27
|
+
# repository to the user's cocoapods local repositories store.
|
28
|
+
class Add < RepoSq
|
29
|
+
# Default Square SDK repositories server URL.
|
30
|
+
# This URL can be customized by providing a fourth undocumented
|
31
|
+
# parameter to this command but not intended for public use.
|
32
|
+
#
|
33
|
+
# @return [String]
|
34
|
+
# default Square SDK repositories server URL.
|
35
|
+
DEFAULT_URL = 'https://sdk.squareup.com/ios'
|
36
|
+
|
37
|
+
self.summary = 'Add a Square SDK repository'
|
38
|
+
|
39
|
+
self.description = <<-DESC
|
40
|
+
Add a Square SDK repository for your application to your local Cocoapod's
|
41
|
+
sources registry. The remote can later be referred to by `NAME`.
|
42
|
+
DESC
|
43
|
+
|
44
|
+
self.arguments = [
|
45
|
+
CLAide::Argument.new('NAME', true),
|
46
|
+
CLAide::Argument.new('USERNAME', true),
|
47
|
+
CLAide::Argument.new('PASSWORD', true),
|
48
|
+
]
|
49
|
+
|
50
|
+
def initialize(argv)
|
51
|
+
@name = argv.shift_argument
|
52
|
+
@username = argv.shift_argument
|
53
|
+
@password = argv.shift_argument
|
54
|
+
@url = argv.shift_argument || DEFAULT_URL
|
55
|
+
super
|
56
|
+
end
|
57
|
+
|
58
|
+
# Validates that all required arguments are present: `NAME`, `USERNAME`
|
59
|
+
# and `PASSWORD`
|
60
|
+
def validate!
|
61
|
+
super
|
62
|
+
unless @name && @username && @password
|
63
|
+
help! 'Adding a Square SDK repository needs a `NAME`, `USERNAME` and a `PASSWORD`.'
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Registers a Square SDK repository on the current user
|
68
|
+
# {CocoapodsRepoSq::RepositoryStore}.
|
69
|
+
# It checks that the user name and password are valid and that the
|
70
|
+
# repository exists on the Square server.
|
71
|
+
def run
|
72
|
+
section = "Adding Square SDK repository `#{@name}`"
|
73
|
+
UI.section(section) do
|
74
|
+
repository = repository_store.register(@name, @username, @password, @url)
|
75
|
+
begin
|
76
|
+
repository.update_specs
|
77
|
+
rescue => e
|
78
|
+
repository_store.remove(@name)
|
79
|
+
raise Informative, "Could not add `#{@name}`.\n" \
|
80
|
+
"#{e.class.name}: #{e.message}"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|