skippy 0.2.0.a → 0.3.0.a

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.
Files changed (75) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.gitmodules +3 -0
  4. data/.idea/.rakeTasks +6 -6
  5. data/.idea/codeStyleSettings.xml +8 -8
  6. data/.idea/encodings.xml +5 -5
  7. data/.idea/inspectionProfiles/Project_Default.xml +7 -7
  8. data/.idea/misc.xml +3 -3
  9. data/.idea/modules.xml +7 -7
  10. data/.idea/skippy.iml +89 -82
  11. data/.idea/vcs.xml +5 -5
  12. data/.rubocop.yml +93 -0
  13. data/.rubocop_todo.yml +24 -0
  14. data/.vscode/launch.json +51 -61
  15. data/.vscode/settings.json +41 -2
  16. data/.vscode/tasks.json +16 -16
  17. data/Gemfile +11 -2
  18. data/README.md +194 -15
  19. data/Rakefile +1 -1
  20. data/app/boot.rb +1 -1
  21. data/app/commands/install.rb +41 -0
  22. data/app/commands/lib.rb +42 -2
  23. data/app/commands/new.rb +22 -8
  24. data/app/commands/template.rb +2 -2
  25. data/bin/rubocop +17 -0
  26. data/bin/ruby-parse +17 -0
  27. data/bin/ruby-rewrite +17 -0
  28. data/debug/skippy.bat +2 -0
  29. data/fixtures/my_lib/{src → modules}/command.rb +0 -0
  30. data/fixtures/my_lib/{src → modules}/geometry.rb +0 -0
  31. data/fixtures/my_lib/modules/gl.rb +4 -0
  32. data/fixtures/my_lib/modules/gl/container.rb +8 -0
  33. data/fixtures/my_lib/modules/gl/control.rb +6 -0
  34. data/fixtures/my_lib/modules/gl/nested/nested.rb +8 -0
  35. data/fixtures/my_lib/{src → modules}/tool.rb +0 -0
  36. data/fixtures/my_lib/skippy.json +1 -1
  37. data/fixtures/my_project/skippy.json +2 -1
  38. data/fixtures/my_project/src/hello_world.rb +2 -2
  39. data/fixtures/my_project/src/hello_world/extension.json +9 -9
  40. data/fixtures/project_with_lib/.skippy/libs/my-lib/modules/command.rb +4 -0
  41. data/fixtures/project_with_lib/.skippy/libs/my-lib/modules/gl.rb +4 -0
  42. data/fixtures/project_with_lib/.skippy/libs/my-lib/modules/gl/container.rb +8 -0
  43. data/fixtures/project_with_lib/.skippy/libs/my-lib/modules/gl/control.rb +6 -0
  44. data/fixtures/project_with_lib/.skippy/libs/my-lib/skippy.json +5 -0
  45. data/fixtures/project_with_lib/.skippy/libs/my-other-lib/modules/something.rb +4 -0
  46. data/fixtures/project_with_lib/.skippy/libs/my-other-lib/skippy.json +5 -0
  47. data/fixtures/project_with_lib/skippy.json +25 -0
  48. data/fixtures/project_with_lib/skippy/commands/example.rb +14 -0
  49. data/fixtures/project_with_lib/src/hello_world.rb +47 -0
  50. data/fixtures/project_with_lib/src/hello_world/extension.json +10 -0
  51. data/fixtures/project_with_lib/src/hello_world/main.rb +21 -0
  52. data/fixtures/project_with_lib/src/hello_world/vendor/my-lib/command.rb +4 -0
  53. data/fixtures/project_with_lib/src/hello_world/vendor/my-other-lib/something.rb +4 -0
  54. data/lib/skippy.rb +2 -0
  55. data/lib/skippy/app.rb +2 -2
  56. data/lib/skippy/cli.rb +41 -20
  57. data/lib/skippy/command.rb +2 -4
  58. data/lib/skippy/config.rb +27 -22
  59. data/lib/skippy/config_accessors.rb +12 -12
  60. data/lib/skippy/group.rb +1 -3
  61. data/lib/skippy/helpers/file.rb +3 -3
  62. data/lib/skippy/installer.rb +49 -0
  63. data/lib/skippy/installer/git.rb +115 -0
  64. data/lib/skippy/installer/local.rb +19 -0
  65. data/lib/skippy/lib_module.rb +16 -16
  66. data/lib/skippy/lib_source.rb +139 -0
  67. data/lib/skippy/library.rb +50 -10
  68. data/lib/skippy/library_manager.rb +116 -18
  69. data/lib/skippy/module_manager.rb +104 -26
  70. data/lib/skippy/namespace.rb +17 -1
  71. data/lib/skippy/project.rb +34 -4
  72. data/lib/skippy/version.rb +3 -1
  73. data/skippy.gemspec +10 -5
  74. metadata +85 -29
  75. data/cSpell.json +0 -18
@@ -1,5 +1,7 @@
1
+ require 'fileutils'
1
2
  require 'json'
2
3
  require 'pathname'
4
+ require 'set'
3
5
 
4
6
  require 'skippy/helpers/file'
5
7
  require 'skippy/lib_module'
@@ -16,17 +18,12 @@ class Skippy::ModuleManager
16
18
  def initialize(project)
17
19
  raise TypeError, 'expected a Project' unless project.is_a?(Skippy::Project)
18
20
  @project = project
21
+ @modules = SortedSet.new(discover_modules)
19
22
  end
20
23
 
21
24
  # @yield [Skippy::LibModule]
22
25
  def each
23
- directories(path).each { |library_path|
24
- library_path.each_child { |module_file|
25
- next unless module_file.file?
26
- next unless module_file.extname == '.rb'
27
- yield Skippy::LibModule.new(module_file)
28
- }
29
- }
26
+ @modules.each { |lib_module| yield lib_module }
30
27
  self
31
28
  end
32
29
 
@@ -37,33 +34,52 @@ class Skippy::ModuleManager
37
34
  # @param [String] module_name
38
35
  # @return [Skippy::LibModule, nil]
39
36
  def find_module(module_name)
40
- find { |lib_module| lib_module.name == module_name }
37
+ find { |lib_module| lib_module.name.casecmp(module_name).zero? }
41
38
  end
42
39
 
43
40
  # @param [Skippy::LibModule, String] lib_module
44
41
  def installed?(lib_module)
45
- module_name = lib_module.is_a?(Skippy::LibModule) ? lib_module.name : lib_module
46
- project = Skippy::Project.current
47
- project && project.config.get(:modules, []).any? { |mod| mod == module_name }
42
+ module_name = lib_module.name
43
+ modules = project && project.config.get(:modules, [])
44
+ modules.any? { |mod| mod.casecmp(module_name).zero? }
48
45
  end
49
46
 
50
47
  # @param [String] module_name
51
48
  # @return [Skippy::LibModule]
52
49
  def use(module_name)
53
50
  raise Skippy::Project::ProjectNotSavedError unless project.exist?
54
-
55
- lib_module = project.libraries.find_module(module_name)
56
- raise Skippy::LibModule::ModuleNotFoundError,
57
- "module '#{module_name}' not found" if lib_module.nil?
51
+ lib_module = project.libraries.find_module_or_fail(module_name)
58
52
 
59
53
  source = lib_module.path
60
- target = path.join(lib_module.library.name, lib_module.path.basename)
54
+ target = vendor_path.join(lib_module.library.name, lib_module.path.basename)
55
+
56
+ copy_module(lib_module, source, target)
57
+ @modules << lib_module
58
+
59
+ lib_module
60
+ end
61
+
62
+ # @param [Skippy::Library]
63
+ # @return [Array<Skippy::LibModule>]
64
+ def update(library)
65
+ raise Skippy::Project::ProjectNotSavedError unless project.exist?
66
+ installed = select { |mod| mod.library.name.casecmp(library.name).zero? }
67
+ installed.each { |mod| use(mod.name) }
68
+ installed
69
+ end
61
70
 
62
- copy_module(source, target)
71
+ # @param [String] module_name
72
+ # @return [Skippy::LibModule]
73
+ def remove(module_name)
74
+ raise Skippy::Project::ProjectNotSavedError unless project.exist?
75
+ lib_module = project.libraries.find_module_or_fail(module_name)
63
76
 
64
- project.config.push(:modules, lib_module.to_s)
77
+ target = vendor_path.join(lib_module.library.name, lib_module.path.basename)
78
+ support = vendor_path.join(lib_module.library.name, lib_module.basename)
79
+ target.delete if target.exist?
80
+ support.rmtree if support.directory?
65
81
 
66
- project.save
82
+ @modules.delete_if { |mod| mod.name.casecmp(lib_module.name).zero? }
67
83
 
68
84
  lib_module
69
85
  end
@@ -72,22 +88,70 @@ class Skippy::ModuleManager
72
88
  def length
73
89
  to_a.length
74
90
  end
75
- alias :size :length
91
+ alias size length
76
92
 
77
93
  # @return [Pathname]
78
- def path
79
- project.path.join('src', project.namespace.to_underscore, 'vendor')
94
+ def vendor_path
95
+ project.extension_source.join(project.basename, 'vendor')
80
96
  end
81
97
 
82
98
  private
83
99
 
100
+ # @return [Array<Skippy::LibModule>]
101
+ def discover_modules
102
+ modules = []
103
+ project.libraries.each { |library|
104
+ library_vendor_path = vendor_path.join(library.name)
105
+ next unless library_vendor_path.directory?
106
+ library_vendor_path.each_child { |module_file|
107
+ next unless module_file.file?
108
+ next unless module_file.extname.casecmp('.rb').zero?
109
+ modules << Skippy::LibModule.new(library, module_file)
110
+ }
111
+ }
112
+ modules
113
+ end
114
+
115
+ # @param [Skippy::LibModule] lib_module
116
+ # @param [Pathname, String] source
117
+ # @param [Pathname, String] target
118
+ def copy_module(lib_module, source, target)
119
+ # Copy the main library file.
120
+ copy_file(lib_module, source, target)
121
+ # Copy optional support folder.
122
+ basename = source.basename('.*')
123
+ source_support_folder = source.parent.join(basename)
124
+ return unless source_support_folder.directory?
125
+ target_support_folder = target.parent.join(basename)
126
+ copy_directory(lib_module, source_support_folder, target_support_folder)
127
+ end
128
+
129
+ # @param [Skippy::LibModule] lib_module
84
130
  # @param [Pathname, String] source
85
131
  # @param [Pathname, String] target
86
- def copy_module(source, target)
132
+ def copy_directory(lib_module, source_path, target_path)
133
+ Dir.glob("#{source_path}/**/*") { |filename|
134
+ source = Pathname.new(filename)
135
+ next unless source.file?
136
+ relative_path = source.relative_path_from(source_path)
137
+ target = target_path.join(relative_path)
138
+ copy_file(lib_module, source, target)
139
+ }
140
+ end
141
+
142
+ # @param [Skippy::LibModule] lib_module
143
+ # @param [Pathname, String] source
144
+ # @param [Pathname, String] target
145
+ def copy_file(lib_module, source, target)
87
146
  FileUtils.mkdir_p(target.parent)
88
- content = File.read(source)
89
- transform_module(content)
90
- File.write(target, content)
147
+ if source.extname.casecmp('.rb').zero?
148
+ content = File.read(source)
149
+ transform_require(lib_module, content)
150
+ transform_module(content)
151
+ File.write(target, content)
152
+ else
153
+ File.copy(source, target)
154
+ end
91
155
  end
92
156
 
93
157
  # Transform the module content with `SkippyLib` placeholder replaced with
@@ -100,4 +164,18 @@ class Skippy::ModuleManager
100
164
  content
101
165
  end
102
166
 
167
+ LIB_REQUIRE_PATTERN = %r{(\brequire ["'])(modules)(/[^"']*["'])}
168
+
169
+ # Transform the require statements to the target destination.
170
+ #
171
+ # @param [Skippy::LibModule] lib_module
172
+ # @param [String] content
173
+ # @return [String]
174
+ def transform_require(lib_module, content)
175
+ relative_path = vendor_path.relative_path_from(project.extension_source)
176
+ target_path = relative_path.join(lib_module.library.name)
177
+ content.gsub!(LIB_REQUIRE_PATTERN, "\\1#{target_path}\\3")
178
+ content
179
+ end
180
+
103
181
  end
@@ -13,6 +13,22 @@ class Skippy::Namespace
13
13
  to_a.last
14
14
  end
15
15
 
16
+ # Creates a compact string from the namespace. First part composed of the
17
+ # capitals from the first part followed by the last item of the namespace.
18
+ #
19
+ # The prefix will always have at least two characters.
20
+ #
21
+ # If the namespace isn't nested it will just return the namespace string.
22
+ #
23
+ # @return [String]
24
+ def short_name
25
+ items = to_a
26
+ return to_s unless items.size > 1
27
+ initials = items.first.scan(/[[:upper:]]/)
28
+ prefix = initials.size > 1 ? initials.join : items.first[0, 2]
29
+ "#{prefix}_#{items.last}"
30
+ end
31
+
16
32
  def open
17
33
  @open ||= to_a.map { |part| "module #{part}" }.join("\n")
18
34
  end
@@ -38,7 +54,7 @@ class Skippy::Namespace
38
54
  end
39
55
 
40
56
  def to_underscore
41
- basename_words(basename).map { |word| word.downcase }.join('_')
57
+ basename_words(basename).map(&:downcase).join('_')
42
58
  end
43
59
 
44
60
  private
@@ -34,8 +34,8 @@ class Skippy::Project
34
34
 
35
35
  # @return [Skippy::Project]
36
36
  def self.current_or_fail
37
- project = self.current
38
- raise ProjectNotFoundError unless project.exist?
37
+ project = current
38
+ raise ProjectNotFoundError, project.filename unless project.exist?
39
39
  project
40
40
  end
41
41
 
@@ -52,12 +52,24 @@ class Skippy::Project
52
52
  @modules = Skippy::ModuleManager.new(self)
53
53
  end
54
54
 
55
+ # The basename for the extension's root and support folder.
56
+ #
57
+ # @return [String]
58
+ def basename
59
+ @config.get(:basename, namespace.short_name)
60
+ end
61
+
62
+ # @param [String] basename
63
+ def basename=(basename)
64
+ @config.set(:basename, basename)
65
+ end
66
+
55
67
  # @yield [filename]
56
68
  # @yieldparam [String] filename the path to custom Skippy command
57
- def command_files(&block)
69
+ def command_files
58
70
  files_pattern = File.join(path, 'skippy', '**', '*.rb')
59
71
  Dir.glob(files_pattern) { |filename|
60
- block.call(filename)
72
+ yield filename
61
73
  }
62
74
  end
63
75
 
@@ -80,9 +92,21 @@ class Skippy::Project
80
92
 
81
93
  # Commits the project to disk.
82
94
  def save
95
+ @config.set(:libraries, libraries.map(&:to_h))
96
+ @config.set(:modules, modules.map(&:name))
83
97
  @config.save_as(filename)
84
98
  end
85
99
 
100
+ # @return [Pathname]
101
+ def extension_source
102
+ path.join('src')
103
+ end
104
+
105
+ # @return [Array<String>]
106
+ def sources
107
+ @config.get(:sources, defaults[:sources])
108
+ end
109
+
86
110
  # @return [String]
87
111
  def to_json
88
112
  JSON.pretty_generate(@config)
@@ -90,14 +114,20 @@ class Skippy::Project
90
114
 
91
115
  private
92
116
 
117
+ # @return [Hash]
93
118
  def defaults
94
119
  {
95
120
  name: 'Untitled',
96
121
  description: '',
97
122
  namespace: Skippy::Namespace.new('Untitled'),
123
+ basename: Skippy::Namespace.new('Untitled').short_name,
98
124
  author: 'Unknown',
99
125
  copyright: "Copyright (c) #{Time.now.year}",
100
126
  license: 'None',
127
+ sources: %w(
128
+ github.com
129
+ bitbucket.org
130
+ ),
101
131
  }
102
132
  end
103
133
 
@@ -1,3 +1,5 @@
1
1
  module Skippy
2
- VERSION = '0.2.0.a'.freeze
2
+
3
+ VERSION = '0.3.0.a'.freeze
4
+
3
5
  end
data/skippy.gemspec CHANGED
@@ -1,4 +1,5 @@
1
- # coding: utf-8
1
+ # rubocop:disable all
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'skippy/version'
@@ -23,11 +24,15 @@ Gem::Specification.new do |spec|
23
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
25
  spec.require_paths = ['lib']
25
26
 
27
+ spec.add_dependency 'git', '~> 1.3'
28
+ spec.add_dependency 'naturally', '~> 2.1'
29
+ spec.add_dependency 'thor', '~> 0.19'
30
+
26
31
  spec.add_development_dependency 'bundler', '~> 1.13'
27
32
  spec.add_development_dependency 'rake', '~> 10.0'
28
33
  spec.add_development_dependency 'minitest', '~> 5.0'
29
- spec.add_development_dependency 'cucumber'
30
- spec.add_development_dependency 'aruba'
31
-
32
- spec.add_dependency 'thor'
34
+ # TODO(thomthom): Need to lock to 2.3 because 2.4 fails with the custom
35
+ # aruba build.
36
+ spec.add_development_dependency 'cucumber', '~> 2.3.0'
37
+ spec.add_development_dependency 'aruba', '~> 0.14.1'
33
38
  end
metadata CHANGED
@@ -1,15 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skippy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0.a
4
+ version: 0.3.0.a
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Thomassen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-01-27 00:00:00.000000000 Z
11
+ date: 2017-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: git
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: naturally
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: thor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.19'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.19'
13
55
  - !ruby/object:Gem::Dependency
14
56
  name: bundler
15
57
  requirement: !ruby/object:Gem::Requirement
@@ -56,44 +98,30 @@ dependencies:
56
98
  name: cucumber
57
99
  requirement: !ruby/object:Gem::Requirement
58
100
  requirements:
59
- - - ">="
101
+ - - "~>"
60
102
  - !ruby/object:Gem::Version
61
- version: '0'
103
+ version: 2.3.0
62
104
  type: :development
63
105
  prerelease: false
64
106
  version_requirements: !ruby/object:Gem::Requirement
65
107
  requirements:
66
- - - ">="
108
+ - - "~>"
67
109
  - !ruby/object:Gem::Version
68
- version: '0'
110
+ version: 2.3.0
69
111
  - !ruby/object:Gem::Dependency
70
112
  name: aruba
71
113
  requirement: !ruby/object:Gem::Requirement
72
114
  requirements:
73
- - - ">="
115
+ - - "~>"
74
116
  - !ruby/object:Gem::Version
75
- version: '0'
117
+ version: 0.14.1
76
118
  type: :development
77
119
  prerelease: false
78
120
  version_requirements: !ruby/object:Gem::Requirement
79
121
  requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: thor
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
122
+ - - "~>"
95
123
  - !ruby/object:Gem::Version
96
- version: '0'
124
+ version: 0.14.1
97
125
  description: Automate common tasks for SketchUp extension development, including managing
98
126
  library dependencies.
99
127
  email:
@@ -105,6 +133,7 @@ extra_rdoc_files: []
105
133
  files:
106
134
  - ".editorconfig"
107
135
  - ".gitignore"
136
+ - ".gitmodules"
108
137
  - ".idea/.rakeTasks"
109
138
  - ".idea/codeStyleSettings.xml"
110
139
  - ".idea/encodings.xml"
@@ -115,6 +144,8 @@ files:
115
144
  - ".idea/runConfigurations/test__skippy.xml"
116
145
  - ".idea/skippy.iml"
117
146
  - ".idea/vcs.xml"
147
+ - ".rubocop.yml"
148
+ - ".rubocop_todo.yml"
118
149
  - ".vscode/launch.json"
119
150
  - ".vscode/settings.json"
120
151
  - ".vscode/tasks.json"
@@ -125,6 +156,7 @@ files:
125
156
  - Skippy.sublime-project
126
157
  - app/boot.rb
127
158
  - app/commands/debug.rb
159
+ - app/commands/install.rb
128
160
  - app/commands/lib.rb
129
161
  - app/commands/new.rb
130
162
  - app/commands/template.rb
@@ -141,21 +173,41 @@ files:
141
173
  - bin/htmldiff
142
174
  - bin/ldiff
143
175
  - bin/rake
176
+ - bin/rubocop
177
+ - bin/ruby-parse
178
+ - bin/ruby-rewrite
144
179
  - bin/setup
145
180
  - bin/skippy
146
181
  - bin/thor
147
- - cSpell.json
148
182
  - debug/skippy.bat
149
183
  - exe/skippy
184
+ - fixtures/my_lib/modules/command.rb
185
+ - fixtures/my_lib/modules/geometry.rb
186
+ - fixtures/my_lib/modules/gl.rb
187
+ - fixtures/my_lib/modules/gl/container.rb
188
+ - fixtures/my_lib/modules/gl/control.rb
189
+ - fixtures/my_lib/modules/gl/nested/nested.rb
190
+ - fixtures/my_lib/modules/tool.rb
150
191
  - fixtures/my_lib/skippy.json
151
- - fixtures/my_lib/src/command.rb
152
- - fixtures/my_lib/src/geometry.rb
153
- - fixtures/my_lib/src/tool.rb
154
192
  - fixtures/my_project/skippy.json
155
193
  - fixtures/my_project/skippy/commands/example.rb
156
194
  - fixtures/my_project/src/hello_world.rb
157
195
  - fixtures/my_project/src/hello_world/extension.json
158
196
  - fixtures/my_project/src/hello_world/main.rb
197
+ - fixtures/project_with_lib/.skippy/libs/my-lib/modules/command.rb
198
+ - fixtures/project_with_lib/.skippy/libs/my-lib/modules/gl.rb
199
+ - fixtures/project_with_lib/.skippy/libs/my-lib/modules/gl/container.rb
200
+ - fixtures/project_with_lib/.skippy/libs/my-lib/modules/gl/control.rb
201
+ - fixtures/project_with_lib/.skippy/libs/my-lib/skippy.json
202
+ - fixtures/project_with_lib/.skippy/libs/my-other-lib/modules/something.rb
203
+ - fixtures/project_with_lib/.skippy/libs/my-other-lib/skippy.json
204
+ - fixtures/project_with_lib/skippy.json
205
+ - fixtures/project_with_lib/skippy/commands/example.rb
206
+ - fixtures/project_with_lib/src/hello_world.rb
207
+ - fixtures/project_with_lib/src/hello_world/extension.json
208
+ - fixtures/project_with_lib/src/hello_world/main.rb
209
+ - fixtures/project_with_lib/src/hello_world/vendor/my-lib/command.rb
210
+ - fixtures/project_with_lib/src/hello_world/vendor/my-other-lib/something.rb
159
211
  - lib/skippy.rb
160
212
  - lib/skippy/app.rb
161
213
  - lib/skippy/cli.rb
@@ -165,7 +217,11 @@ files:
165
217
  - lib/skippy/error.rb
166
218
  - lib/skippy/group.rb
167
219
  - lib/skippy/helpers/file.rb
220
+ - lib/skippy/installer.rb
221
+ - lib/skippy/installer/git.rb
222
+ - lib/skippy/installer/local.rb
168
223
  - lib/skippy/lib_module.rb
224
+ - lib/skippy/lib_source.rb
169
225
  - lib/skippy/library.rb
170
226
  - lib/skippy/library_manager.rb
171
227
  - lib/skippy/module_manager.rb
@@ -193,7 +249,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
249
  version: 1.3.1
194
250
  requirements: []
195
251
  rubyforge_project:
196
- rubygems_version: 2.5.2
252
+ rubygems_version: 2.7.3
197
253
  signing_key:
198
254
  specification_version: 4
199
255
  summary: CLI development tool for SketchUp extensions.