skippy 0.3.0.a → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c11b52fc9b368e0ba14ead9d714d5e194c312c03056ad27fedbbab607a443fc6
4
- data.tar.gz: ecae267dae0b85c7b5a6d024a0bbc85472e8e92bd3f652349acde9bc7bad7612
3
+ metadata.gz: 8911df6fd31addc62c4bc4756eb46f715eaf70ea2d2bcfb32175f104dad78f82
4
+ data.tar.gz: dbb042f7ed689a8d1a01589b4f11479014da36861e1cf578453a75eab14028b0
5
5
  SHA512:
6
- metadata.gz: 0c691c52f0cd4cf7ef73754a89f07c127301bd097b602957ca6fed8020bd43a82cc0ac025e1a3dc9eaa5ebe125ff46bc95f5b2b9d037638359b56c6d7d4ca758
7
- data.tar.gz: a46e8182a2389a99041fabf6dd224a0faa0239118136f005556f93ca22ca44e1860e667769640547f5bc9051834bc00f8134c7e27b18f7b3fbad4889015e5e5a
6
+ metadata.gz: fda57b8e19f1a22ab2ad207bd938df1a5f9ba158400d5126572dc518130f48614cd30082aa4b4ac800fd33aa7c38fd32c712dfd4c7c5aac36432bc21762c0b6d
7
+ data.tar.gz: e43b4802ac2f2b0c2a60e5b8da927e9cb19cdcaee74d38c021422ebb571a7395363184f6828eccd23c66055ba2d078e8f30162849543a02d081cfcd05df853a5
data/README.md CHANGED
@@ -14,7 +14,8 @@ Some of the main goals are:
14
14
  - [ ] Add/Remove/Update user templates
15
15
  - [ ] Automate common tasks
16
16
  - [ ] Packaging the extension
17
- - [ ] Start SketchUp in debug mode
17
+ - [x] Launch SketchUp
18
+ - [x] Launch SketchUp in debug mode
18
19
  - [x] Easy interface to add per-project custom commands/tasks
19
20
  - [x] Library dependency management
20
21
  - [x] Pull in third-party modules into extension namespace
@@ -201,6 +202,30 @@ For more examples, refer to:
201
202
  * [github.com/thomthom/tt-lib](https://github.com/thomthom/tt-lib)
202
203
  * [github.com/thomthom/skippy-test-lib](https://github.com/thomthom/skippy-test-lib)
203
204
 
205
+ ### Launching SketchUp
206
+
207
+ Skippy will attempt to locate your SketchUp installations and offer commands to launch them.
208
+
209
+ These commands provides a cross platform way of launching SketchUp which can be useful in build scripts or IDE automation tasks.
210
+
211
+ (**Note:** Currently Skippy assumes that SketchUp is installed to its default installation directory.)
212
+
213
+ `skippy sketchup:list` will display a list of all known SketchUp versions on the system.
214
+
215
+ ![](https://github.com/thomthom/skippy/wiki/images/skippy-sketchup-list.png)
216
+
217
+ To launch one, use `skippy sketchup:launch VERSION`, for instance:
218
+
219
+ ```
220
+ skippy sketchup:launch 2018
221
+ ```
222
+
223
+ You can also launch SketchUp in debug mode if the [SketchUp Ruby Debugger library](https://github.com/SketchUp/sketchup-ruby-debugger) is installed.
224
+
225
+ ```
226
+ skippy sketchup:debug 2018
227
+ ```
228
+
204
229
  ## Development
205
230
 
206
231
  After checking out the repository, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -0,0 +1,61 @@
1
+ require 'json'
2
+ require 'stringio'
3
+
4
+ require 'skippy/error'
5
+ require 'skippy/os'
6
+
7
+ class Sketchup < Skippy::Command
8
+
9
+ include Thor::Actions
10
+
11
+ option :port, :type => :numeric, :default => 7000
12
+ desc 'debug VERSION', 'Start SketchUp with Ruby Debugger'
13
+ def debug(version)
14
+ app = find_sketchup(version)
15
+ unless app.can_debug
16
+ raise Skippy::Error, "Debug library not installed for Sketchup #{version}"
17
+ end
18
+ arguments = ['-rdebug', %("ide port=#{options.port}")]
19
+ Skippy.os.launch_app(app.executable, *arguments)
20
+ end
21
+
22
+ desc 'launch VERSION', 'Start SketchUp'
23
+ def launch(version)
24
+ app = find_sketchup(version)
25
+ Skippy.os.launch_app(app.executable)
26
+ end
27
+
28
+ desc 'list', 'List all known SketchUp versions'
29
+ def list
30
+ say shell.set_color('Known SketchUp versions:', :yellow, true)
31
+ Skippy.os.sketchup_apps.each { |sketchup|
32
+ version = sketchup.version.to_s.ljust(4)
33
+ sketchup_name = "SketchUp #{version}"
34
+ bitness = sketchup.is64bit ? '64bit' : '32bit'
35
+ debug = sketchup.can_debug ? '(debugger)' : ''
36
+ # TODO(thomthom): Use print_table ?
37
+ output = StringIO.new
38
+ output.write ' '
39
+ output.write shell.set_color(sketchup_name, :green, false)
40
+ output.write ' '
41
+ output.write bitness
42
+ output.write ' '
43
+ output.write shell.set_color(debug, :yellow, false)
44
+ say output.string
45
+ }
46
+ end
47
+ default_command(:list)
48
+
49
+ private
50
+
51
+ # @param [Integer] version
52
+ # @return [Skippy::SketchUpApp, nil]
53
+ def find_sketchup(version)
54
+ app = Skippy.os.sketchup_apps.find { |sketchup|
55
+ sketchup.version == version.to_i
56
+ }
57
+ raise Skippy::Error, "SketchUp #{version} not found." if app.nil?
58
+ app
59
+ end
60
+
61
+ end
@@ -0,0 +1,17 @@
1
+ module Skippy
2
+
3
+ if RUBY_PLATFORM =~ /darwin/
4
+ require 'skippy/os/mac'
5
+ OS = Skippy::OSMac
6
+ else
7
+ require 'skippy/os/win'
8
+ OS = Skippy::OSWin
9
+ end
10
+
11
+ @os = OS.new
12
+
13
+ def self.os
14
+ @os
15
+ end
16
+
17
+ end
@@ -0,0 +1,26 @@
1
+ class Skippy::OSCommon
2
+
3
+ # @param [String] command
4
+ def execute_command(command)
5
+ # Something with a Thor application like skippy get the 'RUBYLIB'
6
+ # environment set which prevents SketchUp from finding its StdLib
7
+ # directories. (At least under Windows.) This relates to child processes
8
+ # inheriting the environment variables of its parent.
9
+ # To work around this we unset RUBYLIB before launching SketchUp. This
10
+ # doesn't affect skippy as it's about to exit as soon as SketchUp starts
11
+ # any way.
12
+ ENV['RUBYLIB'] = nil if ENV['RUBYLIB']
13
+ id = spawn(command)
14
+ Process.detach(id)
15
+ end
16
+
17
+ # @param [String] path
18
+ def launch_app(path, *args)
19
+ raise NotImplementedError
20
+ end
21
+
22
+ def sketchup_apps
23
+ raise NotImplementedError
24
+ end
25
+
26
+ end
@@ -0,0 +1,32 @@
1
+ require 'skippy/os/common'
2
+ require 'skippy/sketchup/app'
3
+
4
+ class Skippy::OSMac < Skippy::OSCommon
5
+
6
+ # @param [String] executable_path
7
+ def launch_app(executable_path, *args)
8
+ command = %(open -a "#{executable_path}")
9
+ unless args.empty?
10
+ command << " --args #{args.join(' ')}"
11
+ end
12
+ execute_command(command)
13
+ end
14
+
15
+ def sketchup_apps
16
+ apps = []
17
+ pattern = '/Applications/SketchUp */'
18
+ Dir.glob(pattern) { |path|
19
+ app = File.join(path, 'SketchUp.app')
20
+ debug_lib = File.join(app, 'Contents/Frameworks/SURubyDebugger.dylib')
21
+ version = File.basename(path).match(/[0-9.]+$/)[0].to_i
22
+ apps << Skippy::SketchUpApp.from_hash(
23
+ executable: app,
24
+ version: version,
25
+ can_debug: File.exist?(debug_lib),
26
+ is64bit: version > 2015,
27
+ )
28
+ }
29
+ apps.sort_by(&:version)
30
+ end
31
+
32
+ end
@@ -0,0 +1,56 @@
1
+ require 'skippy/os/common'
2
+ require 'skippy/sketchup/app'
3
+
4
+ class Skippy::OSWin < Skippy::OSCommon
5
+
6
+ # Note: This is not a good indication to 32bit bs 64bit. It's a naive
7
+ # assumption that will fail when SketchUp is installed to a
8
+ # non-standard location.
9
+ SYSTEM_32BIT = ENV['ProgramFiles(x86)'].nil? && ENV['ProgramW6432'].nil?
10
+ SYSTEM_64BIT = !SYSTEM_32BIT
11
+
12
+ PROGRAM_FILES_64BIT = File.expand_path(ENV['ProgramW6432'])
13
+
14
+ # @param [String] executable_path
15
+ def launch_app(executable_path, *args)
16
+ command = %("#{executable_path}")
17
+ unless args.empty?
18
+ command << " #{args.join(' ')}"
19
+ end
20
+ execute_command(command)
21
+ end
22
+
23
+ def sketchup_apps
24
+ # TODO(thomthom): Find by registry information.
25
+ apps = []
26
+ program_files_paths.each { |program_files|
27
+ pattern = "#{program_files}/{@Last Software,Google,SketchUp}/*SketchUp *"
28
+ Dir.glob(pattern) { |path|
29
+ exe = File.join(path, 'SketchUp.exe')
30
+ debug_dll = File.join(path, 'SURubyDebugger.dll')
31
+ version = File.basename(path).match(/[0-9.]+$/)[0].to_i
32
+ apps << Skippy::SketchUpApp.from_hash(
33
+ executable: exe,
34
+ version: version,
35
+ can_debug: File.exist?(debug_dll),
36
+ is64bit: SYSTEM_64BIT && path.start_with?("#{PROGRAM_FILES_64BIT}/"),
37
+ )
38
+ }
39
+ }
40
+ apps.sort_by(&:version)
41
+ end
42
+
43
+ private
44
+
45
+ def program_files_paths
46
+ paths = []
47
+ if SYSTEM_64BIT
48
+ paths << File.expand_path(ENV['ProgramFiles(x86)'])
49
+ paths << File.expand_path(ENV['ProgramW6432'])
50
+ else
51
+ paths << File.expand_path(ENV['ProgramFiles'])
52
+ end
53
+ paths
54
+ end
55
+
56
+ end
@@ -0,0 +1,11 @@
1
+ module Skippy
2
+
3
+ SketchUpApp = Struct.new(:executable, :version, :can_debug, :is64bit) do
4
+
5
+ def self.from_hash(hash)
6
+ new(*hash.values_at(*members))
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -1,5 +1,5 @@
1
1
  module Skippy
2
2
 
3
- VERSION = '0.3.0.a'.freeze
3
+ VERSION = '0.4.0.a'.freeze
4
4
 
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skippy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0.a
4
+ version: 0.4.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-12-19 00:00:00.000000000 Z
11
+ date: 2017-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git
@@ -159,6 +159,7 @@ files:
159
159
  - app/commands/install.rb
160
160
  - app/commands/lib.rb
161
161
  - app/commands/new.rb
162
+ - app/commands/sketchup.rb
162
163
  - app/commands/template.rb
163
164
  - app/resources/commands/example.rb
164
165
  - app/templates/standard/%ext_name%.rb.tt
@@ -226,7 +227,12 @@ files:
226
227
  - lib/skippy/library_manager.rb
227
228
  - lib/skippy/module_manager.rb
228
229
  - lib/skippy/namespace.rb
230
+ - lib/skippy/os.rb
231
+ - lib/skippy/os/common.rb
232
+ - lib/skippy/os/mac.rb
233
+ - lib/skippy/os/win.rb
229
234
  - lib/skippy/project.rb
235
+ - lib/skippy/sketchup/app.rb
230
236
  - lib/skippy/version.rb
231
237
  - skippy.gemspec
232
238
  homepage: https://github.com/thomthom/skippy