cocoapods-localsource 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e4f7b313a055db81b9c6e7a82e687d71c31cecaa
4
+ data.tar.gz: 13a4a99017168063e6cc8b8f502e49fdc79bb886
5
+ SHA512:
6
+ metadata.gz: 13514103adbd09eb5920cfd562de15e2776c25b568c8f088aa76966ff30c01d0f44b9af97eee30b16d70ae441f3414019aed2377809a787688c97d9bfca16a7d
7
+ data.tar.gz: c1a0a7bd9d2f303a51eb6773949939715c2b3c3d160039adc0f538b6aa59777c765ed7bfbe55d0954b78fbe98b4cca48ae6fe96c88a2ad443e618783db05a8ad
@@ -0,0 +1,82 @@
1
+ require 'cocoapods-core'
2
+
3
+ module Pod
4
+ class Podfile
5
+ module DSL
6
+ def local_source(*paths)
7
+ paths.each do |path|
8
+ LocalModuleManager.addLocalPath(path)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ class LocalModuleManager
16
+ @@all_modules = {}
17
+ @@resolved_modules = {}
18
+
19
+ def self.all_modules
20
+ @@all_modules
21
+ end
22
+
23
+ def self.set_resolved(name)
24
+ @@resolved_modules[name] = true
25
+ end
26
+
27
+ def self.resolved?(name)
28
+ @@resolved_modules.key?(name)
29
+ end
30
+
31
+ def self.addLocalPath(path)
32
+ dependencies = findLocalModules(path)
33
+
34
+ dependencies.each do |key, value|
35
+ existingModule = @@all_modules[value.name]
36
+ raise "Duplicate local module definition for #{value.name} at #{path}. Already defined here: #{existingModule.module_podspec_path}" unless existingModule.nil?
37
+ @@all_modules[key] = value
38
+ end
39
+ end
40
+
41
+ def self.local?(name)
42
+ !@@all_modules[name].nil?
43
+ end
44
+
45
+ def self.findLocalModules(path)
46
+ modules = {}
47
+ Dir.chdir(path) do
48
+ podspec_paths = Dir["*/*.podspec"]
49
+
50
+ podspec_paths.each do |p|
51
+ pathComponents = p.split("/")
52
+ moduleName = pathComponents[1].split(".podspec")[0]
53
+ foundModule = LocalModule.new(path, pathComponents[0], moduleName)
54
+
55
+ modules[moduleName] = foundModule
56
+ end
57
+ end
58
+
59
+ return modules
60
+ end
61
+ end
62
+
63
+
64
+ class LocalModule
65
+ def initialize(modulesPath, root, name)
66
+ @modules_path = modulesPath
67
+ @root = root
68
+ @name = name
69
+ end
70
+
71
+ attr_reader :modules_path
72
+ attr_reader :root
73
+ attr_reader :name
74
+
75
+ def module_path
76
+ "#{@modules_path}/#{@root}"
77
+ end
78
+
79
+ def module_podspec_path
80
+ "#{@modules_path}/#{@root}/#{@name}.podspec"
81
+ end
82
+ end
@@ -0,0 +1,78 @@
1
+ require 'cocoapods'
2
+ require 'cocoapods-core'
3
+ require_relative 'LocalModuleManager'
4
+
5
+ module Pod
6
+ class Dependency
7
+ alias_method :real_initialize, :initialize
8
+ def initialize(name = nil, *requirements)
9
+ # adds requirement hash if it's not present
10
+ requirements << {} unless requirements.last.is_a?(Hash)
11
+
12
+ pathComponents = name.split("/")
13
+ baseName = pathComponents[0]
14
+
15
+ if LocalModuleManager.all_modules[baseName].present?
16
+ localModule = LocalModuleManager.all_modules[baseName]
17
+ # remove version requirement, if local
18
+ requirements = requirements[1..-1] unless requirements.first.is_a?(Hash)
19
+ # add path to local dependency
20
+ requirements.last[:path] = localModule.module_path
21
+ end
22
+
23
+ real_initialize(name, *requirements)
24
+ end
25
+ end
26
+ end
27
+
28
+ module Pod
29
+ class Installer
30
+ class Analyzer
31
+ def allDependenciesFor(name, localModules = LocalModuleManager.all_modules)
32
+ if LocalModuleManager.resolved?(name)
33
+ # if the local dependency has already been resolved, we don't need to resolve the dependencies again.
34
+ return []
35
+ end
36
+
37
+ pathComponents = name.split("/")
38
+ baseName = pathComponents[0]
39
+ importingSubspec = pathComponents.length > 1
40
+
41
+ localModule = localModules[baseName]
42
+
43
+ podspec = nil
44
+ # Position in the modules directory to generate the subspecs correctly
45
+ Dir.chdir(localModule.module_path) do
46
+ podspec = eval File.read("#{baseName}.podspec")
47
+ end
48
+
49
+ # Use the subspec if we're importing it
50
+ if importingSubspec
51
+ podspec = podspec.subspec_by_name(name)
52
+ end
53
+
54
+ # Get all local dependencies of the spec/subspec
55
+ allDependencies = podspec.all_dependencies.select { |d| LocalModuleManager.local?(d.name) }
56
+
57
+ # Get other dependencies recursively
58
+ allDependencies.each do |dependency|
59
+ allDependencies += allDependenciesFor(dependency.name, localModules)
60
+ end
61
+
62
+ LocalModuleManager.set_resolved(name)
63
+ return allDependencies.uniq
64
+ end
65
+
66
+ alias_method :real_dependencies_to_fetch, :dependencies_to_fetch
67
+ def dependencies_to_fetch(podfile_state)
68
+ real_dependencies_to_fetch(podfile_state)
69
+
70
+ resolvedLocalDependencies = @deps_to_fetch.map do |key, value|
71
+ allDependenciesFor(key.name)
72
+ end.flatten.uniq
73
+
74
+ @deps_to_fetch = (@deps_to_fetch | resolvedLocalDependencies).uniq
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,2 @@
1
+ require_relative './cocoapods-localsource/LocalModuleManager'
2
+ require_relative './cocoapods-localsource/PodSwizzle'
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cocoapods-localsource
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Peter
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-03-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cocoapods-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: cocoapods
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: A simple hello world gem
42
+ email: daniel.peter@me.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/cocoapods-localsource.rb
48
+ - lib/cocoapods-localsource/LocalModuleManager.rb
49
+ - lib/cocoapods-localsource/PodSwizzle.rb
50
+ homepage: http://rubygems.org/gems/cocoapods-localsource
51
+ licenses:
52
+ - MIT
53
+ metadata:
54
+ source_code_uri: https://github.com/ohitsdaniel/cocoapods-localsource
55
+ post_install_message:
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ requirements: []
70
+ rubyforge_project:
71
+ rubygems_version: 2.5.2.3
72
+ signing_key:
73
+ specification_version: 4
74
+ summary: Allows including local podspec dependencies withouth the need of an externally
75
+ hosted source
76
+ test_files: []