cocoapods-whitelist 0.0.11 → 0.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ac35a09134957238dfebe24132c80aa456c46bd4fe0b30e4a8615b210321b614
4
- data.tar.gz: ee7d647d915058f1da78c3d86ae95781a0423e98a87b4f43e005c9d37d418c7d
3
+ metadata.gz: 4723e3d52ded2d24e5ea0fd987f13c26e50e75f4b4f3d8e3c331bf3f0917e7d9
4
+ data.tar.gz: 3cc1e0c08620d6d500299acfae29328e9a4230438073ea5d9b64defd3eea9b72
5
5
  SHA512:
6
- metadata.gz: 6773f81644aa4b7dfa24c61bac7b4e86a6902a6d6a41d3aa3e05940418bd4cf860437836c577047237f2e4fdb69bd4c82b89f02da84376b6255402605a980888
7
- data.tar.gz: 3bffec4b9f7e462532a99fd5dfc1908a6376f21c8dbf2fcb2959c719432034878b29a68230b169bcc3f4d7785151172aca5b0536d68b33cbc414d8b522917b5b
6
+ metadata.gz: f45764d3004aecd106e8003e4999dbb31636092376d093aecb0e68d0a6de19c7aa75372d43113b1f17147ceeb541af70f34647c7141c5efc319eae3f3418669d
7
+ data.tar.gz: e8791f4a18accaef77551c5c864c923b2aecdd18072c9703716fff7c3668637d7f47b983b1c5db6aec96e165bda72adbc20e823f5a37fc7d5f9dc1508cd8dd25
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 0.1.0
2
+ - Dependency Confusion validation implementation
3
+
1
4
  ## 0.0.11
2
5
  - Enhancing dependencies linter by checking not only name but also version
3
6
  - Enabling CI
data/Gemfile.lock CHANGED
@@ -6,25 +6,29 @@ PATH
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- CFPropertyList (3.0.0)
10
- activesupport (4.2.11.1)
11
- i18n (~> 0.7)
9
+ CFPropertyList (3.0.3)
10
+ activesupport (5.2.4.5)
11
+ concurrent-ruby (~> 1.0, >= 1.0.2)
12
+ i18n (>= 0.7, < 2)
12
13
  minitest (~> 5.1)
13
- thread_safe (~> 0.3, >= 0.3.4)
14
14
  tzinfo (~> 1.1)
15
+ addressable (2.7.0)
16
+ public_suffix (>= 2.0.2, < 5.0)
17
+ algoliasearch (1.27.5)
18
+ httpclient (~> 2.8, >= 2.8.3)
19
+ json (>= 1.5.1)
15
20
  atomos (0.1.3)
16
21
  bacon (1.2.0)
17
- claide (1.0.2)
18
- cocoapods (1.7.3)
19
- activesupport (>= 4.0.2, < 5)
22
+ claide (1.0.3)
23
+ cocoapods (1.10.1)
24
+ addressable (~> 2.6)
20
25
  claide (>= 1.0.2, < 2.0)
21
- cocoapods-core (= 1.7.3)
26
+ cocoapods-core (= 1.10.1)
22
27
  cocoapods-deintegrate (>= 1.0.3, < 2.0)
23
- cocoapods-downloader (>= 1.2.2, < 2.0)
28
+ cocoapods-downloader (>= 1.4.0, < 2.0)
24
29
  cocoapods-plugins (>= 1.0.0, < 2.0)
25
30
  cocoapods-search (>= 1.0.0, < 2.0)
26
- cocoapods-stats (>= 1.0.0, < 2.0)
27
- cocoapods-trunk (>= 1.3.1, < 2.0)
31
+ cocoapods-trunk (>= 1.4.0, < 2.0)
28
32
  cocoapods-try (>= 1.1.0, < 2.0)
29
33
  colored2 (~> 3.1)
30
34
  escape (~> 0.0.4)
@@ -33,52 +37,63 @@ GEM
33
37
  molinillo (~> 0.6.6)
34
38
  nap (~> 1.0)
35
39
  ruby-macho (~> 1.4)
36
- xcodeproj (>= 1.10.0, < 2.0)
37
- cocoapods-core (1.7.3)
38
- activesupport (>= 4.0.2, < 6)
40
+ xcodeproj (>= 1.19.0, < 2.0)
41
+ cocoapods-core (1.10.1)
42
+ activesupport (> 5.0, < 6)
43
+ addressable (~> 2.6)
44
+ algoliasearch (~> 1.0)
45
+ concurrent-ruby (~> 1.1)
39
46
  fuzzy_match (~> 2.0.4)
40
47
  nap (~> 1.0)
48
+ netrc (~> 0.11)
49
+ public_suffix
50
+ typhoeus (~> 1.0)
41
51
  cocoapods-deintegrate (1.0.4)
42
- cocoapods-downloader (1.2.2)
52
+ cocoapods-downloader (1.4.0)
43
53
  cocoapods-plugins (1.0.0)
44
54
  nap
45
55
  cocoapods-search (1.0.0)
46
- cocoapods-stats (1.1.0)
47
- cocoapods-trunk (1.3.1)
56
+ cocoapods-trunk (1.5.0)
48
57
  nap (>= 0.8, < 2.0)
49
58
  netrc (~> 0.11)
50
- cocoapods-try (1.1.0)
59
+ cocoapods-try (1.2.0)
51
60
  colored2 (3.1.2)
52
- concurrent-ruby (1.1.5)
61
+ concurrent-ruby (1.1.8)
53
62
  escape (0.0.4)
63
+ ethon (0.12.0)
64
+ ffi (>= 1.3.0)
65
+ ffi (1.14.2)
54
66
  fourflusher (2.3.1)
55
67
  fuzzy_match (2.0.4)
56
68
  gh_inspector (1.1.3)
57
- i18n (0.9.5)
69
+ httpclient (2.8.3)
70
+ i18n (1.8.9)
58
71
  concurrent-ruby (~> 1.0)
59
- metaclass (0.0.4)
60
- minitest (5.11.3)
61
- mocha (1.9.0)
62
- metaclass (~> 0.0.1)
72
+ json (2.5.1)
73
+ minitest (5.14.4)
74
+ mocha (1.12.0)
63
75
  mocha-on-bacon (0.2.3)
64
76
  mocha (>= 0.13.0)
65
77
  molinillo (0.6.6)
66
- nanaimo (0.2.6)
78
+ nanaimo (0.3.0)
67
79
  nap (1.1.0)
68
80
  netrc (0.11.0)
69
81
  prettybacon (0.0.2)
70
82
  bacon (~> 1.2)
71
- rake (12.3.2)
83
+ public_suffix (4.0.6)
84
+ rake (12.3.3)
72
85
  ruby-macho (1.4.0)
73
86
  thread_safe (0.3.6)
74
- tzinfo (1.2.5)
87
+ typhoeus (1.4.0)
88
+ ethon (>= 0.9.0)
89
+ tzinfo (1.2.9)
75
90
  thread_safe (~> 0.1)
76
- xcodeproj (1.10.0)
91
+ xcodeproj (1.19.0)
77
92
  CFPropertyList (>= 2.3.3, < 4.0)
78
93
  atomos (~> 0.1.3)
79
94
  claide (>= 1.0.2, < 2.0)
80
95
  colored2 (~> 3.1)
81
- nanaimo (~> 0.2.6)
96
+ nanaimo (~> 0.3.0)
82
97
 
83
98
  PLATFORMS
84
99
  ruby
@@ -0,0 +1,46 @@
1
+ require 'singleton'
2
+ require 'cocoapods-whitelist/model/allowed_dependency'
3
+
4
+ class WhitelistResolver
5
+ include Singleton
6
+ attr_accessor :whitelist
7
+ attr_accessor :whitelist_loaded
8
+ attr_accessor :whitelist_url
9
+
10
+ def config
11
+ @whitelist ||= []
12
+ end
13
+
14
+ def initialize()
15
+ @whitelist_url = DEFAULT_WHITELIST_URL
16
+ load_whitelist()
17
+ end
18
+
19
+ def get_whitelist(whitelist_url = DEFAULT_WHITELIST_URL)
20
+ @whitelist_loaded = @whitelist_url == whitelist_url
21
+ @whitelist_url = whitelist_url
22
+
23
+ load_whitelist() unless @whitelist_loaded
24
+ return @whitelist
25
+ end
26
+
27
+ def load_whitelist
28
+ begin
29
+ open(@whitelist_url) { |io|
30
+ buffer = io.read
31
+ @whitelist = parse_whitelist(buffer)
32
+ @whitelist_loaded = true
33
+ }
34
+ rescue OpenURI::HTTPError => e
35
+ status = e.io.status.join(' ')
36
+ raise "Failed to fetch whitelist from '#{@whitelist_url}'.\n Error: #{status}"
37
+ end
38
+ end
39
+
40
+ def parse_whitelist(raw_whitelist)
41
+ json = JSON.parse(raw_whitelist)
42
+ return json["whitelist"].map { |dependencyJson|
43
+ AllowedDependency.new(dependencyJson["name"], dependencyJson["version"], dependencyJson["expire"], dependencyJson["source"], dependencyJson["target"])
44
+ }
45
+ end
46
+ end
@@ -1,27 +1,9 @@
1
1
  require 'open-uri'
2
+ require_relative '../client/whitelist_resolver'
2
3
 
3
- DEFAULT_WHITELIST_URL = "https://raw.githubusercontent.com/mercadolibre/mobile-dependencies_whitelist/master/ios-whitelist.json"
4
4
  POD_NAME_REGEX = /^([^\/]+)(?:\/.*)*$/
5
5
  POD_BASE_REGEX_POSITION = 0
6
-
7
- class AllowedDependency
8
- attr_accessor :name
9
- attr_accessor :version
10
- attr_accessor :expire
11
- def initialize(name, version, expire)
12
- @name = name
13
- @version = version
14
- @expire = expire
15
- end
16
-
17
- def expire?
18
- if @expire != nil
19
- expire = DateTime.parse(@expire,"%Y-%m-%d")
20
- return expire < DateTime.now
21
- end
22
- return false
23
- end
24
- end
6
+ DEFAULT_WHITELIST_URL = "https://raw.githubusercontent.com/mercadolibre/mobile-dependencies_whitelist/master/ios-whitelist.json"
25
7
 
26
8
  module Pod
27
9
  class Command
@@ -59,7 +41,7 @@ module Pod
59
41
 
60
42
  def run
61
43
  prepare_outfile
62
- whitelist = get_whitelist
44
+ whitelist = WhitelistResolver.instance.get_whitelist(@whitelist_url)
63
45
  specifications = get_podspec_specifications
64
46
 
65
47
  if specifications.empty?
@@ -102,7 +84,7 @@ module Pod
102
84
  end
103
85
 
104
86
  allowedDependency = whitelist.select { |item|
105
- name.start_with?(item.name.match(POD_NAME_REGEX).captures[POD_BASE_REGEX_POSITION]) && (!item.version || versions.grep(/#{item.version}/).any?)
87
+ name.start_with?(item.name.match(POD_NAME_REGEX).captures[POD_BASE_REGEX_POSITION]) && (!item.version || versions.grep(/#{item.version}/).any?) && (item.target == 'production')
106
88
  }
107
89
 
108
90
  # Checks if any of the allowed dependencies are expired, if so, fail with error
@@ -135,25 +117,6 @@ module Pod
135
117
  end
136
118
  end
137
119
 
138
- def get_whitelist
139
- begin
140
- open(@whitelist_url) { |io|
141
- buffer = io.read
142
- parse_whitelist(buffer)
143
- }
144
- rescue OpenURI::HTTPError => e
145
- status = e.io.status.join(' ')
146
- raise "Failed to fetch whitelist from '#{@whitelist_url}'.\n Error: #{status}"
147
- end
148
- end
149
-
150
- def parse_whitelist(raw_whitelist)
151
- json = JSON.parse(raw_whitelist)
152
- return json["whitelist"].map { |dependencyJson|
153
- AllowedDependency.new(dependencyJson["name"], dependencyJson["version"], dependencyJson["expire"])
154
- }
155
- end
156
-
157
120
  def get_podspec_specifications
158
121
  if @pospec_path
159
122
  return [Pod::Specification.from_file(@pospec_path)]
@@ -1,3 +1,3 @@
1
1
  module CocoapodsWhitelist
2
- VERSION = "0.0.11"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1 @@
1
+ require 'cocoapods-whitelist/hook/resolver'
@@ -0,0 +1,23 @@
1
+ require_relative '../validator/source_validator'
2
+ require_relative '../model/sources'
3
+
4
+ module Pod
5
+ class Resolver
6
+ alias original_search_for search_for
7
+ ## Filter specifications
8
+ def search_for(dependency)
9
+ specifications = original_search_for(dependency)
10
+
11
+ validator = SourceValidator.new(get_sources())
12
+ filtered = validator.filter_dependency(dependency.root_name, specifications)
13
+
14
+ if filtered.empty? && specifications.first ## If you have a dependency problem, then no specification is returned from :search_for
15
+ Pod::UI.puts "Dependency #{dependency.root_name} comes from source #{specifications.first.spec_source.url} is NOT allowed".red
16
+ Pod::UI.puts "If you thing this is a mistake, please check the whitelist".red
17
+ raise Informative.new()
18
+ end
19
+
20
+ specifications
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ class AllowedDependency
2
+ attr_accessor :name
3
+ attr_accessor :version
4
+ attr_accessor :expire
5
+ attr_accessor :source
6
+ attr_accessor :target
7
+
8
+ def initialize(name, version, expire, source, target)
9
+ @name = name
10
+ @version = version
11
+ @expire = expire
12
+ @source = source
13
+ @target = target
14
+ end
15
+
16
+ def expire?
17
+ if @expire != nil
18
+ expire = DateTime.parse(@expire,"%Y-%m-%d")
19
+ return expire < DateTime.now
20
+ end
21
+ return false
22
+ end
23
+ end
@@ -0,0 +1,6 @@
1
+ def get_sources
2
+ {
3
+ "public" => "https://cdn.cocoapods.org/",
4
+ "private" => "git@github.com:mercadolibre/mobile-ios_specs.git"
5
+ }
6
+ end
@@ -0,0 +1,52 @@
1
+ require_relative '../client/whitelist_resolver'
2
+ require 'singleton'
3
+
4
+ class SourceValidator
5
+ attr_accessor :sources
6
+ def initialize(sources)
7
+ @sources = sources
8
+ end
9
+
10
+ def filter_dependency(pod, specifications)
11
+ ## Avoid checking the same pod many times
12
+ return [specifications.first] if DependencyCounter.instance.is_checked(pod) && !specifications.empty?
13
+
14
+ filtered = specifications.select { |spec| spec_is_valid(pod, spec) }
15
+
16
+ return filtered
17
+ end
18
+
19
+ def spec_is_valid(pod, spec)
20
+
21
+ # Allow external dependencies (using :git or :path), which create a local podspec
22
+ return true if !spec.defined_in_file.nil? && spec.defined_in_file.to_s.include?('/Pods/Local Podspecs')
23
+
24
+ # Allow every dependency that comes from our private specs sources
25
+ return true if spec.spec_source.url == @sources["private"]
26
+
27
+ whitelist = WhitelistResolver.instance.get_whitelist
28
+ whitelist.each { |dependency|
29
+ next unless dependency.name == pod
30
+ return true unless spec.spec_source.url != @sources[dependency.source]
31
+ }
32
+ return false
33
+ end
34
+
35
+ end
36
+
37
+ class DependencyCounter
38
+ include Singleton
39
+ attr_accessor :dependencies_checked
40
+
41
+ def initialize()
42
+ @dependencies_checked ||= []
43
+ end
44
+
45
+ def is_checked(podname)
46
+ included = @dependencies_checked.include? podname
47
+ @dependencies_checked.push(podname) unless included
48
+
49
+ return included
50
+ end
51
+
52
+ end
@@ -1,4 +1,5 @@
1
1
  require 'cocoapods-whitelist/command'
2
+ require 'cocoapods-whitelist/hook'
2
3
 
3
4
  module Whitelist
4
5
  Pod::HooksManager.register('cocoapods-whitelist', :pre_install) do |context, options|
@@ -2,25 +2,37 @@
2
2
  "whitelist": [
3
3
  {
4
4
  "name": "MeliSDK",
5
- "version": "^~>5.[0-9]+$"
5
+ "version": "^~>5.[0-9]+$",
6
+ "target": "production"
6
7
  },
7
8
  {
8
9
  "name": "MLRecommendations",
9
- "version": null
10
+ "version": null,
11
+ "target": "production"
10
12
  },
11
13
  {
12
14
  "expire": "2100-11-15",
13
15
  "name": "MLBilling",
14
- "version": null
16
+ "version": null,
17
+ "target": "production"
15
18
  },
16
19
  {
17
20
  "expire": "2016-11-15",
18
21
  "name": "MLOnDemandResources",
19
- "version": "^~>5.[0-9]+$"
22
+ "version": "^~>5.[0-9]+$",
23
+ "source": "public",
24
+ "target": "production"
25
+ },
26
+ {
27
+ "name": "MLMyPod",
28
+ "version": "^~>1.[0-9]+$",
29
+ "source": "public",
30
+ "target": "production"
20
31
  },
21
32
  {
22
33
  "name": "MLMyDependency",
23
- "version": "1.0.0|2.0.0"
34
+ "version": "1.0.0|2.0.0",
35
+ "target": "production"
24
36
  }
25
37
  ]
26
38
  }
@@ -0,0 +1,13 @@
1
+ Pod::Spec.new do |s|
2
+ s.name = "MLMyPod"
3
+ s.version = "1.17.0"
4
+ s.summary = "Componente de search"
5
+ s.homepage = "http://www.mercadolibre.com.ar"
6
+ s.license = "none"
7
+ s.author = { "Mobile team" => "mobile@mercadolibre.com" }
8
+ s.platform = :ios, "7.0"
9
+ s.source = { :git => "git@github.com:mercadolibre/search-ios.git", :tag => s.version.to_s }
10
+ s.requires_arc = true
11
+
12
+ end
13
+
@@ -0,0 +1,95 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ describe SourceValidator do
4
+ describe 'functionality' do
5
+ it 'external dependency that is not on the whitelist should not be valid' do
6
+
7
+ sources = {
8
+ "public" => "https://cdn.cocoapods.org/",
9
+ "private" => "git@github.com:mercadolibre/mobile-ios_specs.git"
10
+ }
11
+
12
+ stub_url = stub(:url => 'https://cdn.cocoapods.org/')
13
+ spec_mock = mock()
14
+ spec_mock.stubs(:spec_source).returns(stub_url)
15
+ spec_mock.stubs(:defined_in_file).returns(nil?)
16
+
17
+ validator = SourceValidator.new(sources)
18
+ filtered = validator.filter_dependency('MyExternalPod', [spec_mock])
19
+
20
+ filtered.should.empty?
21
+
22
+ end
23
+
24
+ it 'external dependency that is on the whitelist should be valid' do
25
+
26
+ sources = {
27
+ "public" => "https://cdn.cocoapods.org/",
28
+ "private" => "git@github.com:mercadolibre/mobile-ios_specs.git"
29
+ }
30
+
31
+ stub_url = stub(:url => 'https://cdn.cocoapods.org/')
32
+ spec_mock = mock()
33
+ spec_mock.stubs(:spec_source).returns(stub_url)
34
+ spec_mock.stubs(:defined_in_file).returns(nil?)
35
+
36
+ validator = SourceValidator.new(sources)
37
+ filtered = validator.filter_dependency('RxSwift', [spec_mock])
38
+
39
+ filtered.size.should.equal 1
40
+
41
+ end
42
+
43
+ it 'internal dependency that comes from private source should be valid' do
44
+ sources = {
45
+ "public" => "https://cdn.cocoapods.org/",
46
+ "private" => "git@github.com:mercadolibre/mobile-ios_specs.git"
47
+ }
48
+
49
+ stub_url = stub(:url => 'git@github.com:mercadolibre/mobile-ios_specs.git')
50
+ spec_mock = mock()
51
+ spec_mock.stubs(:spec_source).returns(stub_url)
52
+ spec_mock.stubs(:defined_in_file).returns(nil?)
53
+
54
+ validator = SourceValidator.new(sources)
55
+ filtered = validator.filter_dependency('MLMyPod', [spec_mock])
56
+
57
+ filtered.size.should.equal 1
58
+
59
+ end
60
+
61
+ it 'internal dependency that comes from unknown source should not be valid' do
62
+ sources = {
63
+ "public" => "https://cdn.cocoapods.org/",
64
+ "private" => "git@github.com:mercadolibre/mobile-ios_specs.git"
65
+ }
66
+
67
+ stub_url = stub(:url => 'https://cdn.malicious.source.org/')
68
+ spec_mock = mock()
69
+ spec_mock.stubs(:spec_source).returns(stub_url)
70
+ spec_mock.stubs(:defined_in_file).returns(nil?)
71
+
72
+ validator = SourceValidator.new(sources)
73
+ filtered = validator.filter_dependency('MLOnDemandResources', [spec_mock])
74
+
75
+ filtered.should.empty?
76
+ end
77
+
78
+ it 'development pods should be valid' do
79
+ sources = {
80
+ "public" => "https://cdn.cocoapods.org/",
81
+ "private" => "git@github.com:mercadolibre/mobile-ios_specs.git"
82
+ }
83
+
84
+ stub_url = stub(:url => '')
85
+ spec_mock = mock()
86
+ spec_mock.stubs(:spec_source).returns(stub_url)
87
+ spec_mock.stubs(:defined_in_file).returns('./Users/Pods/Local Podspecs/MLMyDevelopmentPod.podspec')
88
+
89
+ validator = SourceValidator.new(sources)
90
+ filtered = validator.filter_dependency('MLMyDevelopmentPod', [spec_mock])
91
+
92
+ filtered.size.should.equal 1
93
+ end
94
+ end
95
+ end
data/spec/spec_helper.rb CHANGED
@@ -10,7 +10,7 @@ require 'pretty_bacon'
10
10
  require 'pathname'
11
11
  require 'cocoapods'
12
12
 
13
- Mocha::Configuration.prevent(:stubbing_non_existent_method)
13
+ Mocha.configure { |c| c.stubbing_non_existent_method = :prevent }
14
14
 
15
15
  require 'cocoapods_plugin'
16
16
 
@@ -0,0 +1,22 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ describe WhitelistResolver do
4
+ describe 'functionality' do
5
+ it 'whitelist should be loaded from an specific url' do
6
+ whitelist = WhitelistResolver.instance.get_whitelist(WHITELIST_FILE)
7
+ whitelist.size.should.equal 6
8
+ end
9
+
10
+ it 'if not URL is specified, whitelist comes from default URL' do
11
+ whitelist = WhitelistResolver.instance.get_whitelist
12
+ whitelist.should.not.empty?
13
+ end
14
+
15
+ it 'whitelist should not be loaded twice' do
16
+ WhitelistResolver.instance.get_whitelist(WHITELIST_FILE)
17
+ loaded = WhitelistResolver.instance.whitelist_loaded
18
+
19
+ loaded.should.be.true
20
+ end
21
+ end
22
+ end
@@ -8,12 +8,6 @@ module Pod
8
8
  it 'registers itself' do
9
9
  Command.parse(%w{ whitelist }).should.be.instance_of Command::Whitelist
10
10
  end
11
-
12
- it 'parse whitelist json' do
13
- command = Command.parse(['whitelist', "--config=#{WHITELIST_FILE}"])
14
- dependencies = command.get_whitelist
15
- dependencies.size.should.equal 5
16
- end
17
11
  end
18
12
 
19
13
  describe 'validations' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-whitelist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mobile Team
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-22 00:00:00.000000000 Z
11
+ date: 2021-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -55,9 +55,15 @@ files:
55
55
  - Rakefile
56
56
  - cocoapods-whitelist.gemspec
57
57
  - lib/cocoapods-whitelist.rb
58
+ - lib/cocoapods-whitelist/client/whitelist_resolver.rb
58
59
  - lib/cocoapods-whitelist/command.rb
59
60
  - lib/cocoapods-whitelist/command/whitelist.rb
60
61
  - lib/cocoapods-whitelist/gem_version.rb
62
+ - lib/cocoapods-whitelist/hook.rb
63
+ - lib/cocoapods-whitelist/hook/resolver.rb
64
+ - lib/cocoapods-whitelist/model/allowed_dependency.rb
65
+ - lib/cocoapods-whitelist/model/sources.rb
66
+ - lib/cocoapods-whitelist/validator/source_validator.rb
61
67
  - lib/cocoapods_plugin.rb
62
68
  - spec/mocks/bad_name.podspec
63
69
  - spec/mocks/free_version.podspec
@@ -65,6 +71,7 @@ files:
65
71
  - spec/mocks/not_allowed.podspec
66
72
  - spec/mocks/whitelist.json
67
73
  - spec/mocks/whitelist_with_expired_dependencies.json
74
+ - spec/mocks/whitelisted_podname.podspec
68
75
  - spec/mocks/with_allowed_in_subspec.podspec
69
76
  - spec/mocks/with_allowed_subspec.podspec
70
77
  - spec/mocks/with_expired_dependencies.podspec
@@ -80,13 +87,15 @@ files:
80
87
  - spec/mocks/with_whitelisted_dependency_fixed_versions_variable.podspec
81
88
  - spec/mocks/without_dependencies.podspec
82
89
  - spec/mocks/without_version.podspec
90
+ - spec/source_validator_spec.rb
83
91
  - spec/spec_helper.rb
92
+ - spec/whitelist_resolver_spec.rb
84
93
  - spec/whitelist_spec.rb
85
94
  homepage: https://github.com/mercadolibre/mobile-cocoapods_whitelist
86
95
  licenses:
87
96
  - MIT
88
97
  metadata: {}
89
- post_install_message:
98
+ post_install_message:
90
99
  rdoc_options: []
91
100
  require_paths:
92
101
  - lib
@@ -101,9 +110,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
110
  - !ruby/object:Gem::Version
102
111
  version: '0'
103
112
  requirements: []
104
- rubyforge_project:
105
- rubygems_version: 2.7.8
106
- signing_key:
113
+ rubygems_version: 3.0.9
114
+ signing_key:
107
115
  specification_version: 4
108
116
  summary: A longer description of cocoapods-whitelist.
109
117
  test_files:
@@ -113,6 +121,7 @@ test_files:
113
121
  - spec/mocks/not_allowed.podspec
114
122
  - spec/mocks/whitelist.json
115
123
  - spec/mocks/whitelist_with_expired_dependencies.json
124
+ - spec/mocks/whitelisted_podname.podspec
116
125
  - spec/mocks/with_allowed_in_subspec.podspec
117
126
  - spec/mocks/with_allowed_subspec.podspec
118
127
  - spec/mocks/with_expired_dependencies.podspec
@@ -128,5 +137,7 @@ test_files:
128
137
  - spec/mocks/with_whitelisted_dependency_fixed_versions_variable.podspec
129
138
  - spec/mocks/without_dependencies.podspec
130
139
  - spec/mocks/without_version.podspec
140
+ - spec/source_validator_spec.rb
131
141
  - spec/spec_helper.rb
142
+ - spec/whitelist_resolver_spec.rb
132
143
  - spec/whitelist_spec.rb