cocoapods-repo-sq 0.0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- 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,55 @@
|
|
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 list` command, which lists the
|
27
|
+
# Square SDK repositories currently registered on the user's cocoapods
|
28
|
+
# local repositories store.
|
29
|
+
class List < RepoSq
|
30
|
+
self.summary = 'List configured Square SDK repositories'
|
31
|
+
|
32
|
+
self.description = <<-DESC
|
33
|
+
List all Square SDK repositories added to your local Cocoapod's sources registry.
|
34
|
+
DESC
|
35
|
+
|
36
|
+
# Lists all Square SDK repositories registered on the current user
|
37
|
+
# {CocoapodsRepoSq::RepositoryStore}.
|
38
|
+
def run
|
39
|
+
repositories = repository_store.list
|
40
|
+
|
41
|
+
repositories.each do |repository|
|
42
|
+
UI.title "Square SDK repository: #{repository.name}" do
|
43
|
+
UI.puts " - URL: #{repository.url}"
|
44
|
+
UI.puts " - Path: #{repository.path}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
UI.puts "\n"
|
48
|
+
|
49
|
+
n = repositories.length
|
50
|
+
UI.puts "#{n} #{n != 1 ? 'repositories' : 'repository'}".green
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,61 @@
|
|
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 remove` command, which removes
|
27
|
+
# the targeted Square SDK repository from the user's cocoapods local
|
28
|
+
# repositories store.
|
29
|
+
class Remove < RepoSq
|
30
|
+
self.summary = 'Remove a Square SDK repository'
|
31
|
+
|
32
|
+
self.description = <<-DESC
|
33
|
+
Removes the Square SDK repository for your application `NAME`.
|
34
|
+
DESC
|
35
|
+
|
36
|
+
self.arguments = [
|
37
|
+
CLAide::Argument.new('NAME', true),
|
38
|
+
]
|
39
|
+
|
40
|
+
def initialize(argv)
|
41
|
+
@name = argv.shift_argument
|
42
|
+
super
|
43
|
+
end
|
44
|
+
|
45
|
+
# Validates that the required argument `NAME` is present.
|
46
|
+
def validate!
|
47
|
+
super
|
48
|
+
help! '`NAME` is required.' unless @name
|
49
|
+
end
|
50
|
+
|
51
|
+
# Removes a Square SDK repository from the current user
|
52
|
+
# {CocoapodsRepoSq::RepositoryStore}.
|
53
|
+
def run
|
54
|
+
UI.section("Removing Square SDK repository `#{@name}`") do
|
55
|
+
repository_store.remove(@name)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,62 @@
|
|
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 remove` command, which updates
|
27
|
+
# the targeted Square SDK repository on the user's cocoapods local
|
28
|
+
# repositories store.
|
29
|
+
class Update < RepoSq
|
30
|
+
self.summary = 'Update Square SDK repository specs'
|
31
|
+
|
32
|
+
self.description = <<-DESC
|
33
|
+
Updates Square SDK repository for your application `NAME`.
|
34
|
+
DESC
|
35
|
+
|
36
|
+
self.arguments = [
|
37
|
+
CLAide::Argument.new('NAME', true),
|
38
|
+
]
|
39
|
+
|
40
|
+
def initialize(argv)
|
41
|
+
@name = argv.shift_argument
|
42
|
+
super
|
43
|
+
end
|
44
|
+
|
45
|
+
# Validates that the required argument `NAME` is present.
|
46
|
+
def validate!
|
47
|
+
super
|
48
|
+
help! '`NAME` is required.' unless @name
|
49
|
+
end
|
50
|
+
|
51
|
+
# Updates the podspecs of Square SDK repository on the current user
|
52
|
+
# {CocoapodsRepoSq::RepositoryStore}.
|
53
|
+
def run
|
54
|
+
UI.section("Updating Square SDK repository `#{@name}`") do
|
55
|
+
repository = repository_store.get(@name)
|
56
|
+
repository.update_specs
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
#
|
3
|
+
# Copyright 2018 Square Inc.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
require 'pod/command/repo_sq/add'
|
18
|
+
require 'pod/command/repo_sq/list'
|
19
|
+
require 'pod/command/repo_sq/remove'
|
20
|
+
require 'pod/command/repo_sq/update'
|
21
|
+
|
22
|
+
module Pod
|
23
|
+
class Command
|
24
|
+
# Subclass of Pod::Command to provide `pod repo-sq` command to manage Square SDK repositories
|
25
|
+
#
|
26
|
+
class RepoSq < Command
|
27
|
+
self.abstract_command = true
|
28
|
+
|
29
|
+
self.summary = 'Manage Square SDK repositories'
|
30
|
+
self.default_subcommand = 'list'
|
31
|
+
|
32
|
+
private
|
33
|
+
def repository_store
|
34
|
+
@repository_store ||= CocoapodsRepoSq::RepositoryStore.default
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
#
|
3
|
+
# Copyright 2018 Square Inc.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
require 'simplecov'
|
18
|
+
SimpleCov.start
|
19
|
+
|
20
|
+
require 'pathname'
|
21
|
+
ROOT = Pathname.new(File.expand_path('../../', __FILE__))
|
22
|
+
$:.unshift((ROOT + 'lib').to_s)
|
23
|
+
$:.unshift((ROOT + 'spec').to_s)
|
24
|
+
|
25
|
+
require 'bundler/setup'
|
26
|
+
require 'bacon'
|
27
|
+
require 'mocha-on-bacon'
|
28
|
+
require 'pretty_bacon'
|
29
|
+
require 'cocoapods'
|
30
|
+
|
31
|
+
Mocha::Configuration.prevent(:stubbing_non_existent_method)
|
32
|
+
|
33
|
+
require 'cocoapods_plugin'
|
34
|
+
|
35
|
+
TEST_REPOS_PATH = File.expand_path(File.join(File.dirname(__FILE__), 'test-repos'))
|
36
|
+
CocoapodsRepoSq::RepositoryStore.class_eval do
|
37
|
+
@default = new(TEST_REPOS_PATH)
|
38
|
+
end
|
39
|
+
|
40
|
+
#-----------------------------------------------------------------------------#
|
41
|
+
|
42
|
+
module Pod
|
43
|
+
|
44
|
+
# Disable the wrapping so the output is deterministic in the tests.
|
45
|
+
#
|
46
|
+
UI.disable_wrap = true
|
47
|
+
|
48
|
+
# Redirects the messages to an internal store.
|
49
|
+
#
|
50
|
+
module UI
|
51
|
+
@output = []
|
52
|
+
@warnings = []
|
53
|
+
|
54
|
+
class << self
|
55
|
+
attr_accessor :output
|
56
|
+
attr_accessor :warnings
|
57
|
+
|
58
|
+
def puts(message = '')
|
59
|
+
@output << "#{message}\n"
|
60
|
+
end
|
61
|
+
|
62
|
+
def warn(message = '', actions = [])
|
63
|
+
@warnings << "#{message}\n"
|
64
|
+
end
|
65
|
+
|
66
|
+
def print(message)
|
67
|
+
@output << message
|
68
|
+
end
|
69
|
+
|
70
|
+
def reset
|
71
|
+
self.title_level = 0
|
72
|
+
self.output.clear
|
73
|
+
self.warnings.clear
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
#-----------------------------------------------------------------------------#
|
80
|
+
|
@@ -0,0 +1,108 @@
|
|
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
|
+
describe 'Plugin Hook' do
|
23
|
+
before do
|
24
|
+
CocoapodsRepoSq::Repository.current = nil
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'registration' do
|
28
|
+
it 'should register plugin as a :source_provider' do
|
29
|
+
Pod::HooksManager.registrations.should.include(:source_provider)
|
30
|
+
Pod::HooksManager.registrations[:source_provider][0].plugin_name.should.equal('cocoapods-repo-sq')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe 'installation' do
|
35
|
+
before { @block = Pod::HooksManager.registrations[:source_provider][0].block }
|
36
|
+
|
37
|
+
it 'should fail when `repository` is not provided' do
|
38
|
+
lambda { @block.call(nil, {}) }.
|
39
|
+
should.raise(Pod::Informative).
|
40
|
+
message.should.match /repository is needed for `cocoapods-repo-sq`/
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should fail when a repository does not exist for `repository`' do
|
44
|
+
lambda { @block.call(nil, { 'repository' => 'non-existant' }) }.
|
45
|
+
should.raise(Pod::Informative).
|
46
|
+
message.should.match /Square SDK repository `non-existant` does not exist/
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should set the current repository and configure a CocoapodsRepoSq::Source' do
|
50
|
+
context = mock('context')
|
51
|
+
context.expects(:add_source)
|
52
|
+
|
53
|
+
CocoapodsRepoSq::Repository.current.should.be.nil?
|
54
|
+
@block.call(context, { 'repository' => 'repo-1' })
|
55
|
+
CocoapodsRepoSq::Repository.current.should.not.be.nil?
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should update repository specs when running `pod update`' do
|
59
|
+
repository_name = 'repo-1'
|
60
|
+
repository = mock('repository')
|
61
|
+
repository.expects(:update_specs)
|
62
|
+
repository.expects(:path).returns('/path')
|
63
|
+
store = CocoapodsRepoSq::RepositoryStore.default
|
64
|
+
store.expects(:exists?).with(repository_name).returns(true)
|
65
|
+
store.expects(:get).with(repository_name).returns(repository)
|
66
|
+
context = mock('context')
|
67
|
+
context.expects(:add_source)
|
68
|
+
ARGV = ['update']
|
69
|
+
|
70
|
+
CocoapodsRepoSq::Repository.current.should.be.nil?
|
71
|
+
@block.call(context, { 'repository' => repository_name })
|
72
|
+
CocoapodsRepoSq::Repository.current.should.not.be.nil?
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'should update repository specs when running `pod install --repo-update`' do
|
76
|
+
repository_name = 'repo-1'
|
77
|
+
repository = mock('repository')
|
78
|
+
repository.expects(:update_specs)
|
79
|
+
repository.expects(:path).returns('/path')
|
80
|
+
store = CocoapodsRepoSq::RepositoryStore.default
|
81
|
+
store.expects(:exists?).with(repository_name).returns(true)
|
82
|
+
store.expects(:get).with(repository_name).returns(repository)
|
83
|
+
context = mock('context')
|
84
|
+
context.expects(:add_source)
|
85
|
+
ARGV = ['install', '--repo-update']
|
86
|
+
|
87
|
+
CocoapodsRepoSq::Repository.current.should.be.nil?
|
88
|
+
@block.call(context, { 'repository' => repository_name })
|
89
|
+
CocoapodsRepoSq::Repository.current.should.not.be.nil?
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should not update repository specs when running `pod update --no-repo-update`' do
|
93
|
+
repository_name = 'repo-1'
|
94
|
+
repository = mock('repository')
|
95
|
+
repository.expects(:path).returns('/path')
|
96
|
+
store = CocoapodsRepoSq::RepositoryStore.default
|
97
|
+
store.expects(:exists?).with(repository_name).returns(true)
|
98
|
+
store.expects(:get).with(repository_name).returns(repository)
|
99
|
+
context = mock('context')
|
100
|
+
context.expects(:add_source)
|
101
|
+
ARGV = ['--no-repo-update', '--verbose', 'update']
|
102
|
+
|
103
|
+
CocoapodsRepoSq::Repository.current.should.be.nil?
|
104
|
+
@block.call(context, { 'repository' => repository_name })
|
105
|
+
CocoapodsRepoSq::Repository.current.should.not.be.nil?
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,57 @@
|
|
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 CocoapodsRepoSq
|
23
|
+
describe Downloader do
|
24
|
+
before do
|
25
|
+
store = RepositoryStore.default
|
26
|
+
@repository = store.get('repo-1')
|
27
|
+
Repository.current = store.get('repo-2')
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'registers Square in the list of downloaders' do
|
31
|
+
Pod::Downloader.downloader_class_by_key.should.include :square
|
32
|
+
Pod::Downloader.downloader_class_by_key[:square].should.equal Downloader
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should download a file from the provided repository' do
|
36
|
+
dest_path = File.join(File.dirname(__FILE__))
|
37
|
+
downloader = Downloader.new(dest_path, "specs-resource.zip", :repository => @repository)
|
38
|
+
|
39
|
+
output_file = Pathname(File.join(dest_path, 'file.zip'))
|
40
|
+
downloader.expects(:curl!).with('-u', "app-1:pass-1", '-f', '-L', '-o', output_file, 'http://app-1.com/specs-resource.zip', '--create-dirs', '--netrc-optional')
|
41
|
+
downloader.expects(:unzip!).with(output_file, '-d', Pathname(dest_path))
|
42
|
+
|
43
|
+
downloader.download
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should download a file from the current repository when none if provided' do
|
47
|
+
dest_path = File.join(File.dirname(__FILE__))
|
48
|
+
downloader = Downloader.new(dest_path, "specs-resource.zip", {})
|
49
|
+
|
50
|
+
output_file = Pathname(File.join(dest_path, 'file.zip'))
|
51
|
+
downloader.expects(:curl!).with('-u', "app-2:pass-2", '-f', '-L', '-o', output_file, 'http://app-2.com/specs-resource.zip', '--create-dirs', '--netrc-optional')
|
52
|
+
downloader.expects(:unzip!).with(output_file, '-d', Pathname(dest_path))
|
53
|
+
|
54
|
+
downloader.download
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,57 @@
|
|
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 CocoapodsRepoSq
|
23
|
+
describe Repository do
|
24
|
+
before do
|
25
|
+
@name = 'repo-1'
|
26
|
+
@username = 'app-1'
|
27
|
+
@password = 'pass-1'
|
28
|
+
@url = 'http://app-1.com'
|
29
|
+
@path = '/path/to/repo'
|
30
|
+
@repository = Repository.new(@name, @username, @password, @url, @path)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should initialize the repository with provided settings' do
|
34
|
+
@repository.name.should.equal(@name)
|
35
|
+
@repository.username.should.equal(@username)
|
36
|
+
@repository.password.should.equal(@password)
|
37
|
+
@repository.url.should.equal(@url)
|
38
|
+
@repository.path.should.equal(@path)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should download specifications when calling update_specs' do
|
42
|
+
downloader = mock('downloader')
|
43
|
+
downloader.expects(:download)
|
44
|
+
|
45
|
+
new_specs_path = File.join(@path, 'Specs.new')
|
46
|
+
specs_path = File.join(@path, 'Specs')
|
47
|
+
CocoapodsRepoSq::Downloader.expects(:new).with(new_specs_path, "specs.zip", :repository => @repository).returns(downloader)
|
48
|
+
|
49
|
+
FileUtils.expects(:rm_rf).with(new_specs_path)
|
50
|
+
FileUtils.expects(:rm).with(File.join(new_specs_path, "file.zip"))
|
51
|
+
FileUtils.expects(:rm_rf).with(specs_path)
|
52
|
+
FileUtils.expects(:mv).with(new_specs_path, specs_path)
|
53
|
+
|
54
|
+
@repository.update_specs
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,124 @@
|
|
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 CocoapodsRepoSq
|
23
|
+
describe RepositoryStore do
|
24
|
+
describe 'initialize' do
|
25
|
+
it 'should use Cocoapods home directory when nothing is passed' do
|
26
|
+
expected_path = File.join(Pod::Config.instance.home_dir, 'repo-sq')
|
27
|
+
store = RepositoryStore.new
|
28
|
+
|
29
|
+
store.instance_eval('@path').should.equal expected_path
|
30
|
+
Dir.exists?(expected_path).should.be.true?
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should allow customizing the base repository path' do
|
34
|
+
expected_path = File.join(File.dirname(__FILE__), 'repo-sq')
|
35
|
+
store = RepositoryStore.new(expected_path)
|
36
|
+
|
37
|
+
store.instance_eval('@path').should.equal expected_path
|
38
|
+
Dir.exists?(expected_path).should.be.true?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'instance methods' do
|
43
|
+
before do
|
44
|
+
@store = CocoapodsRepoSq::RepositoryStore.default
|
45
|
+
@base_path = @store.instance_eval('@path')
|
46
|
+
end
|
47
|
+
|
48
|
+
describe 'exists?' do
|
49
|
+
it 'checks for the existence of the settings file' do
|
50
|
+
name = 'repo-1'
|
51
|
+
File.expects(:exists?).with(File.join(@base_path, name, '.settings.yml')).returns(true)
|
52
|
+
@store.exists?(name).should.be.true?
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'list' do
|
57
|
+
it 'lists all existing repositories' do
|
58
|
+
repositories = @store.list
|
59
|
+
repositories.count.should.equal 2
|
60
|
+
repositories.each{ |r| r.should.be.instance_of Repository }
|
61
|
+
repositories.map(&:name).sort.should.equal ['repo-1', 'repo-2']
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe 'get' do
|
66
|
+
it 'returns nil when repository does not exist' do
|
67
|
+
repository = @store.get('repo-3')
|
68
|
+
repository.should.be.nil?
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'returns a valid repository object when repository exists' do
|
72
|
+
repository = @store.get('repo-1')
|
73
|
+
repository.should.be.instance_of Repository
|
74
|
+
repository.name.should.equal 'repo-1'
|
75
|
+
repository.username.should.equal 'app-1'
|
76
|
+
repository.password.should.equal 'pass-1'
|
77
|
+
repository.url.should.equal 'http://app-1.com/'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe 'register' do
|
82
|
+
it 'raises an exception when the repository already exists' do
|
83
|
+
lambda{ @store.register('repo-1', 'app-1', 'pass-1', 'url-1') }.
|
84
|
+
should.raise(Pod::Informative).
|
85
|
+
message.should.match /Square SDK repository `repo-1` is already configured/
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'cleans repository path if it fails to register' do
|
89
|
+
error = StandardError.new('error')
|
90
|
+
@store.expects(:store_settings!).raises(error)
|
91
|
+
@store.expects(:remove).with('repo-4')
|
92
|
+
|
93
|
+
lambda{ @store.register('repo-4', 'app-4', 'pass-4', 'url-4') }.
|
94
|
+
should.raise(StandardError)
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'creates settings file and returns repository when successfully adding it' do
|
98
|
+
repository = @store.register('repo-4', 'app-4', 'pass-4', 'url-4')
|
99
|
+
repository.name.should.equal 'repo-4'
|
100
|
+
repository.username.should.equal 'app-4'
|
101
|
+
repository.password.should.equal 'pass-4'
|
102
|
+
repository.url.should.equal 'url-4'
|
103
|
+
File.exists?(File.join(@base_path, 'repo-4', '.settings.yml')).should.be.true?
|
104
|
+
@store.remove('repo-4').should.be.true?
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe 'remove' do
|
109
|
+
it 'returns false when no repository is removed' do
|
110
|
+
@store.remove('repo-7').should.be.false?
|
111
|
+
Dir.exists?(File.join(@base_path, 'repo-3')).should.be.false?
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'creates settings file and returns repository when successfully adding it' do
|
115
|
+
@store.register('repo-4', 'app-4', 'pass-4', 'url-4')
|
116
|
+
File.exists?(File.join(@base_path, 'repo-4', '.settings.yml')).should.be.true?
|
117
|
+
|
118
|
+
@store.remove('repo-4').should.be.true?
|
119
|
+
Dir.exists?(File.join(@base_path, 'repo-4')).should.be.false?
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|