u3d 1.0.12 → 1.0.13

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
  SHA1:
3
- metadata.gz: a0c1e2820005f0cd8619bbf7a31012dae404676a
4
- data.tar.gz: 296a26b08f4a9e31e77bf7e2eecc8fe949f042d9
3
+ metadata.gz: 921e48e10c0e312b264724db1e4e8e995580150c
4
+ data.tar.gz: 65c8c9f9452e8a0ee9d8828301a17bc6cdbe114d
5
5
  SHA512:
6
- metadata.gz: 56e9c29febfd62bf0ccb7a3e33966a7100638b5583a84e7ca10f0a2f6ea0418325338ec5b78db23d8498b8f5a1442102ef85e452fbaab0c9d3bc4b93927f6b4a
7
- data.tar.gz: b563408cdeade18fccaae5896c5d3f330a099a3d11534e672e3d41d8322c20c556a7e3ddecab4b86c0eecd60e7431ea02b20b3f8a45b1c1c2054628c6bfded61
6
+ metadata.gz: 420bae13d8ce41a64ee1b7cbef71e0083af60a6e31c0335ceae7f4fcbe42c74fd34cfe3bf535a49fc891dac7e12293db181e641b46003e79cc0c7db59eb5d76e
7
+ data.tar.gz: ca63925ef15a674149e5566f7afcc47b93e9c3782f22efe3e19febd2e8054100e9e5d44bd4c9ab3a5940651c87ec072099c63c5dc841507507314305d66e208f
@@ -1,4 +1,4 @@
1
- future-release=v1.0.12
1
+ future-release=v1.0.13
2
2
  since-tag=v0.9
3
3
  exclude_tags_regex=v0\.[0-8]\..*
4
4
  exclude-labels=nochangelog,question
data/.rubocop.yml CHANGED
@@ -11,6 +11,9 @@ AllCops:
11
11
  Exclude:
12
12
  - './fastlane-plugin-u3d/**/*'
13
13
 
14
+ # broken in 0.52.1
15
+ Layout/EmptyLinesAroundArguments:
16
+ Enabled: false
14
17
 
15
18
  Style/NumericLiteralPrefix:
16
19
  Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Change Log
2
2
 
3
+ ## [v1.0.13](https://github.com/DragonBox/u3d/tree/v1.0.13) (2018-01-09)
4
+ [Full Changelog](https://github.com/DragonBox/u3d/compare/v1.0.12...v1.0.13)
5
+
6
+ **Implemented enhancements:**
7
+
8
+ - u3d/install: allow to specify packages download directory [\#213](https://github.com/DragonBox/u3d/issues/213)
9
+ - u3d/available: fetch versions data from a central repository, speeding up identification of available releases [\#142](https://github.com/DragonBox/u3d/issues/142)
10
+ - u3d/available: introduce a central cache \(fixes \#142\) [\#217](https://github.com/DragonBox/u3d/pull/217) ([lacostej](https://github.com/lacostej))
11
+ - u3d/available: allow to match using regular expression [\#216](https://github.com/DragonBox/u3d/pull/216) ([lacostej](https://github.com/lacostej))
12
+ - u3d/install: allow to specify packages download directory using an environment variable [\#214](https://github.com/DragonBox/u3d/pull/214) ([niezbop](https://github.com/niezbop))
13
+ - u3d/prettify: remove Jenkins rules [\#211](https://github.com/DragonBox/u3d/pull/211) ([niezbop](https://github.com/niezbop))
14
+ - u3d/prettify: update ruleset with LICENSE SYSTEM rules [\#210](https://github.com/DragonBox/u3d/pull/210) ([niezbop](https://github.com/niezbop))
15
+
16
+ **Merged pull requests:**
17
+
18
+ - Rubocop 0.52.1 workaround. Fixed in rubocop master [\#218](https://github.com/DragonBox/u3d/pull/218) ([lacostej](https://github.com/lacostej))
19
+ - u3d/internals: a serie of cache related refactors [\#215](https://github.com/DragonBox/u3d/pull/215) ([lacostej](https://github.com/lacostej))
20
+ - Update to latest rubocop [\#212](https://github.com/DragonBox/u3d/pull/212) ([lacostej](https://github.com/lacostej))
21
+
3
22
  ## [v1.0.12](https://github.com/DragonBox/u3d/tree/v1.0.12) (2018-01-03)
4
23
  [Full Changelog](https://github.com/DragonBox/u3d/compare/v1.0.11...v1.0.12)
5
24
 
@@ -28,7 +47,6 @@
28
47
 
29
48
  **Merged pull requests:**
30
49
 
31
- - Preparing release for 1.0.11 [\#192](https://github.com/DragonBox/u3d/pull/192) ([lacostej](https://github.com/lacostej))
32
50
  - doc: explain CI setup with jenkins [\#191](https://github.com/DragonBox/u3d/pull/191) ([lacostej](https://github.com/lacostej))
33
51
  - u3d/run: fail with a proper message when opening a Unity4 project [\#187](https://github.com/DragonBox/u3d/pull/187) ([lacostej](https://github.com/lacostej))
34
52
 
@@ -9,3 +9,13 @@
9
9
  `rake release`
10
10
 
11
11
  `rake bump`
12
+
13
+ = release of the fastlane plugin
14
+
15
+ `cd fastlane-plugin-u3d`
16
+
17
+ bump the version in `lib/fastlane/plugin/u3d/version.rb`
18
+
19
+ `bundle exec rake release`
20
+
21
+ see https://docs.fastlane.tools/plugins/create-plugin/#rubygems
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- u3d (1.0.12)
4
+ u3d (1.0.13)
5
5
  colored (>= 1.2, < 2.0.0)
6
6
  commander (>= 4.4.0, < 5.0.0)
7
7
  file-tail (>= 1.2.0)
@@ -50,7 +50,7 @@ GEM
50
50
  rainbow (>= 2.1)
51
51
  rake (>= 10.0)
52
52
  retriable (~> 2.1)
53
- highline (1.7.8)
53
+ highline (1.7.10)
54
54
  i18n (0.8.6)
55
55
  inifile (3.0.0)
56
56
  json (2.1.0)
@@ -60,18 +60,17 @@ GEM
60
60
  multipart-post (2.0.0)
61
61
  octokit (4.7.0)
62
62
  sawyer (~> 0.8.0, >= 0.5.3)
63
- parallel (1.12.0)
64
- parser (2.4.0.0)
65
- ast (~> 2.2)
66
- plist (3.3.0)
63
+ parallel (1.12.1)
64
+ parser (2.4.0.2)
65
+ ast (~> 2.3)
66
+ plist (3.4.0)
67
67
  powerpack (0.1.1)
68
68
  pry (0.10.4)
69
69
  coderay (~> 1.1.0)
70
70
  method_source (~> 0.8.1)
71
71
  slop (~> 3.4)
72
72
  public_suffix (2.0.5)
73
- rainbow (2.2.2)
74
- rake
73
+ rainbow (3.0.0)
75
74
  rake (10.5.0)
76
75
  retriable (2.1.0)
77
76
  rspec (3.1.0)
@@ -89,14 +88,14 @@ GEM
89
88
  rspec_junit_formatter (0.2.3)
90
89
  builder (< 4)
91
90
  rspec-core (>= 2, < 4, != 2.12.0)
92
- rubocop (0.49.1)
91
+ rubocop (0.52.1)
93
92
  parallel (~> 1.10)
94
- parser (>= 2.3.3.1, < 3.0)
93
+ parser (>= 2.4.0.2, < 3.0)
95
94
  powerpack (~> 0.1)
96
- rainbow (>= 1.99.1, < 3.0)
95
+ rainbow (>= 2.2.2, < 4.0)
97
96
  ruby-progressbar (~> 1.7)
98
97
  unicode-display_width (~> 1.0, >= 1.0.1)
99
- ruby-progressbar (1.8.1)
98
+ ruby-progressbar (1.9.0)
100
99
  sawyer (0.8.1)
101
100
  addressable (>= 2.3.5, < 2.6)
102
101
  faraday (~> 0.8, < 1.0)
@@ -129,8 +128,8 @@ DEPENDENCIES
129
128
  rake (~> 10.0)
130
129
  rspec (~> 3.1.0)
131
130
  rspec_junit_formatter (~> 0.2.3)
132
- rubocop (~> 0.49.1)
131
+ rubocop (~> 0.52.1)
133
132
  u3d!
134
133
 
135
134
  BUNDLED WITH
136
- 1.16.0
135
+ 1.16.1
@@ -137,15 +137,63 @@
137
137
  }
138
138
  }
139
139
  },
140
- "JENKINS": {
140
+ "LICENSE": {
141
141
  "active": true,
142
142
  "silent": false,
143
- "comment": "Jenkins specific, used to catch build launchs via Jenkins",
144
- "phase_start_pattern": "Started by",
143
+ "comment": "Unity license system logic",
144
+ "phase_start_pattern": "LICENSE SYSTEM",
145
145
  "rules": {
146
- "start": {
146
+ "next_check": {
147
147
  "active": true,
148
- "start_pattern": "Started by"
148
+ "start_pattern": "LICENSE SYSTEM \\[.*\\] Next license update check is after (?<date>[\\d\\-]+)T(?<time>[\\d+\\:]+)",
149
+ "start_message": "Next update check after %{date} at %{time}"
150
+ },
151
+ "opening": {
152
+ "active": true,
153
+ "start_pattern": "LICENSE SYSTEM \\[.*\\] Opening (?<address>.*)$",
154
+ "start_message": "Opening %{address}",
155
+ "store_lines": false,
156
+ "end_pattern": "(?:\\[CEF\\]|LICENSE SYSTEM \\[.*\\] Received)",
157
+ "end_message": false
158
+ },
159
+ "received": {
160
+ "active": true,
161
+ "start_pattern": "LICENSE SYSTEM \\[.*\\] Received (?<address>.*)$",
162
+ "start_message": "Received %{address}",
163
+ "store_lines": false,
164
+ "end_pattern": "(?:\\[CEF\\]|LICENSE SYSTEM \\[.*\\] (?!Headers)|Cancelling)",
165
+ "end_message": false
166
+ },
167
+ "cef_undefined": {
168
+ "active": true,
169
+ "start_pattern": "\\[CEF\\] undefined in.*$",
170
+ "type": "warning"
171
+ },
172
+ "error": {
173
+ "active": true,
174
+ "start_pattern": "LICENSE SYSTEM \\[.*\\] (?<message>Error.*)",
175
+ "start_message": "%{message}",
176
+ "store_lines": true,
177
+ "end_pattern": "(?:^\\n|\\[CEF\\] undefined)",
178
+ "end_message": false,
179
+ "type": "error"
180
+ },
181
+ "timeout": {
182
+ "active": true,
183
+ "start_pattern": "Cancelling.*Timeout",
184
+ "start_message": "Timeout while trying to activate license. Please try again later or contact support@unity3d.com",
185
+ "type": "error"
186
+ },
187
+ "starting_activation": {
188
+ "active": true,
189
+ "start_pattern": "LICENSE SYSTEM \\[.*\\] Starting license activation with account (?<account>.*)$",
190
+ "start_message": "Starting license activation for account %{account}"
191
+ },
192
+ "successful_activation": {
193
+ "active": true,
194
+ "start_pattern": "LICENSE SYSTEM \\[.*\\] License activated successfully with user: (?<account>.*)$",
195
+ "start_message": "License activated for account %{account}",
196
+ "type": "success"
149
197
  }
150
198
  }
151
199
  },
@@ -22,6 +22,6 @@
22
22
 
23
23
  module Fastlane
24
24
  module U3d
25
- VERSION = "0.1.1"
25
+ VERSION = "0.1.2"
26
26
  end
27
27
  end
data/lib/u3d/cache.rb CHANGED
@@ -22,12 +22,15 @@
22
22
 
23
23
  require 'json'
24
24
  require 'time'
25
+ require 'u3d_core/core_ext/operating_system_symbol'
25
26
  require 'u3d/unity_versions'
26
27
  require 'u3d/utils'
27
28
 
28
29
  module U3d
29
30
  # Cache stores the informations regarding versions
30
31
  class Cache
32
+ using ::CoreExtensions::OperatingSystem
33
+
31
34
  # Path to the directory containing the cache for the different OS
32
35
  DEFAULT_LINUX_PATH = File.join(ENV['HOME'], '.u3d').freeze
33
36
  DEFAULT_MAC_PATH = File.join(ENV['HOME'], 'Library', 'Application Support', 'u3d').freeze
@@ -38,6 +41,8 @@ module U3d
38
41
  # Currently set to 24h
39
42
  CACHE_LIFE = 60 * 60 * 24
40
43
 
44
+ GLOBAL_CACHE_URL = 'https://dragonbox.github.io/unities/v1/versions.json'.freeze
45
+
41
46
  private
42
47
 
43
48
  attr_accessor :cache
@@ -51,9 +56,9 @@ module U3d
51
56
  @cache[key]
52
57
  end
53
58
 
54
- def initialize(path: nil, force_os: nil, force_refresh: false, offline: false)
59
+ def initialize(path: nil, force_os: nil, force_refresh: false, offline: false, central_cache: false)
55
60
  raise "Cache: cannot specify both offline and force_refresh" if offline && force_refresh
56
- @path = path || default_path
61
+ @path = path || Cache.default_os_path
57
62
  @cache = {}
58
63
  os = force_os || U3dCore::Helper.operating_system
59
64
  Utils.ensure_dir(@path)
@@ -64,7 +69,18 @@ module U3d
64
69
  need_update = false
65
70
  end
66
71
  @cache = data
67
- overwrite_cache(file_path, os) if need_update || force_refresh
72
+ overwrite_cache(file_path, os, central_cache: central_cache) if need_update || force_refresh
73
+ end
74
+
75
+ def self.default_os_path
76
+ case U3dCore::Helper.operating_system
77
+ when :linux
78
+ DEFAULT_LINUX_PATH
79
+ when :mac
80
+ DEFAULT_MAC_PATH
81
+ when :win
82
+ DEFAULT_WINDOWS_PATH
83
+ end
68
84
  end
69
85
 
70
86
  private #-------------------------------------------------------------------
@@ -87,39 +103,47 @@ module U3d
87
103
  UI.error 'Failed to open cache.json: ' + file_error.to_s
88
104
  need_update = true
89
105
  else
90
- need_update = data[os.id2name].nil?\
91
- || data[os.id2name]['lastupdate'].nil?\
92
- || (Time.now.to_i - data[os.id2name]['lastupdate'] > CACHE_LIFE)\
93
- || (data[os.id2name]['versions'] || []).empty?
106
+ need_update = os_data_need_update?(data, os)
94
107
  data[os.id2name] = nil if need_update
95
108
  end
96
109
  end
97
110
  return need_update, data
98
111
  end
99
112
 
113
+ def os_data_need_update?(data, os)
114
+ data[os.id2name].nil?\
115
+ || data[os.id2name]['lastupdate'].nil?\
116
+ || (Time.now.to_i - data[os.id2name]['lastupdate'] > CACHE_LIFE)\
117
+ || (data[os.id2name]['versions'] || []).empty?
118
+ end
119
+
100
120
  # Updates cache by retrieving versions with U3d::Downloader
101
- def overwrite_cache(file_path, os)
102
- platform = 'Windows' if os == :win
103
- platform = 'Mac OSX' if os == :mac
104
- platform = 'Linux' if os == :linux
105
- UI.important "Cache is out of date. Updating cache for #{platform}"
106
- @cache ||= {}
107
- @cache[os.id2name] = {}
108
- @cache[os.id2name]['lastupdate'] = Time.now.to_i
109
- @cache[os.id2name]['versions'] = UnityVersions.list_available(os: os)
121
+ def overwrite_cache(file_path, os, central_cache: false)
122
+ update_cache(os) unless central_cache && fetch_central_cache(os)
123
+
110
124
  File.delete(file_path) if File.file?(file_path)
111
125
  File.open(file_path, 'w') { |f| f.write(@cache.to_json) }
112
126
  end
113
127
 
114
- def default_path
115
- case U3dCore::Helper.operating_system
116
- when :linux
117
- DEFAULT_LINUX_PATH
118
- when :mac
119
- DEFAULT_MAC_PATH
120
- when :win
121
- DEFAULT_WINDOWS_PATH
122
- end
128
+ # Fetches central versions.json. Ignore it if it is too old
129
+ def fetch_central_cache(os)
130
+ UI.message("Fetching central 'versions.json' cache")
131
+ data = JSON.parse(Utils.get_ssl(GLOBAL_CACHE_URL))
132
+ need_update = os_data_need_update?(data, os)
133
+ @cache = data unless need_update
134
+ !need_update
135
+ rescue StandardError => e
136
+ UI.error("Failed fetching central versions.json. Manual fetch for platform #{os} #{e}")
137
+ false
138
+ end
139
+
140
+ def update_cache(os)
141
+ UI.important "Cache is out of date. Updating cache for #{os.human_name}"
142
+
143
+ @cache ||= {}
144
+ @cache[os.id2name] = {}
145
+ @cache[os.id2name]['lastupdate'] = Time.now.to_i
146
+ @cache[os.id2name]['versions'] = UnityVersions.list_available(os: os)
123
147
  end
124
148
  end
125
149
  end
data/lib/u3d/commands.rb CHANGED
@@ -20,6 +20,7 @@
20
20
  # SOFTWARE.
21
21
  ## --- END LICENSE BLOCK ---
22
22
 
23
+ require 'u3d_core/core_ext/hash'
23
24
  require 'u3d/compatibility'
24
25
  require 'u3d/unity_versions'
25
26
  require 'u3d/unity_version_definition'
@@ -38,6 +39,8 @@ module U3d
38
39
  # API for U3d, redirecting calls to class they concern
39
40
  # rubocop:disable ClassLength
40
41
  class Commands
42
+ using ::CoreExtensions::Extractable
43
+
41
44
  class << self
42
45
  def list_installed(options: {})
43
46
  list = Installer.create.installed
@@ -65,17 +68,15 @@ module U3d
65
68
  ver = options[:unity_version]
66
69
  os = valid_os_or_current(options[:operating_system])
67
70
  rl = options[:release_level]
68
- cache = Cache.new(force_os: os, force_refresh: options[:force])
69
71
 
70
- return UI.error "Version #{ver} is not in cache" if ver && cache[os.id2name]['versions'][ver].nil?
72
+ cache_versions = cache_versions(os, force_refresh: options[:force])
71
73
 
72
- versions = if ver
73
- { ver => cache[os.id2name]['versions'][ver] }
74
- else
75
- cache[os.id2name]['versions']
76
- end
74
+ if ver
75
+ cache_versions = cache_versions.extract(*cache_versions.keys.select { |k| Regexp.new(ver).match(k) })
76
+ return UI.error "Version #{ver} doesn't match any in cache" if cache_versions.empty?
77
+ end
77
78
 
78
- vcomparators = versions.keys.map { |k| UnityVersionComparator.new(k) }
79
+ vcomparators = cache_versions.keys.map { |k| UnityVersionComparator.new(k) }
79
80
  if rl
80
81
  letter = release_letter_mapping["latest_#{rl}".to_sym]
81
82
  UI.message "Filtering available versions with release level '#{rl}' [letter '#{letter}']"
@@ -84,28 +85,21 @@ module U3d
84
85
  sorted_keys = vcomparators.sort.map { |v| v.version.to_s }
85
86
 
86
87
  sorted_keys.each do |k|
87
- v = versions[k]
88
+ v = cache_versions[k]
88
89
  UI.message "Version #{k}: " + v.to_s.cyan.underline
89
90
  next unless options[:packages]
90
91
  inif = nil
91
92
  begin
92
- inif = U3d::INIparser.load_ini(k, versions, os: os)
93
- rescue => e
93
+ inif = U3d::INIparser.load_ini(k, cache_versions, os: os)
94
+ rescue StandardError => e
94
95
  UI.error "Could not load packages for this version (#{e})"
95
96
  else
96
97
  UI.message 'Packages:'
97
- inif.keys.each { |pack| UI.message " - #{pack}" }
98
+ inif.each_key { |pack| UI.message " - #{pack}" }
98
99
  end
99
100
  end
100
101
  end
101
102
 
102
- def cache_versions(os, offline: false)
103
- cache = Cache.new(force_os: os, offline: offline)
104
- cache_os = cache[os.id2name] || {}
105
- cache_versions = cache_os['versions'] || {}
106
- cache_versions
107
- end
108
-
109
103
  def install(args: [], options: {})
110
104
  version = specified_or_current_project_version(args[0])
111
105
 
@@ -139,9 +133,7 @@ module U3d
139
133
 
140
134
  unity = check_unity_presence(version: version)
141
135
 
142
- unless unity
143
- UI.user_error!('Unity version #{version} is not present and cannot be uninstalled')
144
- end
136
+ UI.user_error!("Unity version #{version} is not present and cannot be uninstalled") unless unity
145
137
 
146
138
  get_administrative_privileges(options)
147
139
 
@@ -163,14 +155,12 @@ module U3d
163
155
  runner = Runner.new
164
156
  args_pp = Runner.find_projectpath_in_args(run_args)
165
157
  pp = args_pp
166
- pp = Dir.pwd unless pp
158
+ pp ||= Dir.pwd
167
159
  up = UnityProject.new(pp)
168
160
 
169
161
  unless version # fall back in project default if we are on a Unity project
170
162
  version = up.editor_version if up.exist?
171
- unless version
172
- UI.user_error!('Not sure which version of Unity to run. Are you in a Unity5 or later project?')
173
- end
163
+ UI.user_error!('Not sure which version of Unity to run. Are you in a Unity5 or later project?') unless version
174
164
  end
175
165
 
176
166
  if up.exist? && args_pp.nil?
@@ -229,6 +219,13 @@ module U3d
229
219
 
230
220
  private
231
221
 
222
+ def cache_versions(os, offline: false, force_refresh: false)
223
+ cache = Cache.new(force_os: os, offline: offline, force_refresh: force_refresh, central_cache: true)
224
+ cache_os = cache[os.id2name] || {}
225
+ cache_versions = cache_os['versions'] || {}
226
+ cache_versions
227
+ end
228
+
232
229
  def verify_package_names(definition, packages)
233
230
  packages.each do |package|
234
231
  UI.user_error! "package '#{package}' doesn't exist" unless definition.available_package? package
@@ -74,7 +74,6 @@ module U3d
74
74
  c.summary = 'Run unity, and parses its output through u3d\'s log prettifier'
75
75
  c.description = %(
76
76
  #{c.summary}
77
-
78
77
  The default prettifier rules file is packaged with u3d (#{U3d::LogAnalyzer::RULES_PATH}).
79
78
  You may which to pass your own using the environment variable U3D_RULES_PATH.
80
79
 
@@ -108,12 +107,13 @@ Fore more information about how the rules work, see https://github.com/DragonBox
108
107
  c.option '-f', '--force', 'Force refresh list of available versions'
109
108
  c.option '-r', '--release_level STRING', String, "Checks for availability on specific release level [#{levels.join(', ')}]"
110
109
  c.option '-o', '--operating_system STRING', String, "Checks for availability on specific OS [#{oses.join(', ')}]"
111
- c.option '-u', '--unity_version STRING', String, 'Checks if specified version is available'
110
+ c.option '-u', '--unity_version STRING', String, 'Checks if specified version is available. Can be a regular expression'
112
111
  c.option '-p', '--packages', 'Lists available packages as well'
113
112
  c.example 'List all versions available, forcing a refresh of the available packages from Unity servers', 'u3d available -f'
114
113
  c.example 'List stable versions available', 'u3d available -r stable -p'
115
114
  c.example 'List all versions available for Linux platform', 'u3d available -o linux'
116
115
  c.example 'List packages available for Unity version 5.6.0f3', 'u3d available -u 5.6.0f3 -p'
116
+ c.example 'List packages available for Unity version containing the 5.6 string', 'u3d available -u \'5.6\' -p'
117
117
  c.description = 'List download-ready versions of Unity3d'
118
118
  c.action do |_args, options|
119
119
  options.default packages: false
@@ -126,13 +126,15 @@ Fore more information about how the rules work, see https://github.com/DragonBox
126
126
  c.summary = "Download (and/or) install Unity3D editor packages."
127
127
  c.description = %(
128
128
  #{c.summary}
129
-
130
129
  This command allows you to either:
131
130
  * download and install packages
132
131
  * download packages but not install them
133
132
  * install already downloaded packages
134
-
135
133
  Already installed packages are skipped if asked to be installed again (except for the 'Example' package).
134
+
135
+ The default download path is $HOME/Downloads/Unity_Packages/, but you may change that by specifying the environment variable U3D_DOWNLOAD_PATH.
136
+
137
+ E.g. U3D_DOWNLOAD_PATH=/some/path/you/want u3d install ...
136
138
  )
137
139
  c.option '--[no-]download', 'Perform or not downloading before installation. Downloads by default'
138
140
  c.option '--[no-]install', 'Perform or not installation after downloading. Installs by default'
@@ -167,9 +169,7 @@ Already installed packages are skipped if asked to be installed again (except fo
167
169
  c.summary = 'Installs Unity dependencies. [Linux only]'
168
170
  c.description = %(
169
171
  #{c.summary}
170
-
171
172
  Regarding the package manager: if dpkg is installed, u3d uses apt-get else if rpm is installed yum is used. If none of them is insalled, fails.
172
-
173
173
  Regarding the dependencies themselves: only dependencies for the editor are installed. WebGL, Android and Tizen require others that you will have to install manually.
174
174
  More on that: https://forum.unity3d.com/threads/unity-on-linux-release-notes-and-known-issues.350256/
175
175
  )
@@ -191,12 +191,9 @@ More on that: https://forum.unity3d.com/threads/unity-on-linux-release-notes-and
191
191
  c.summary = 'Prettify a saved logfile'
192
192
  c.description = %(
193
193
  #{c.summary}
194
-
195
194
  The default prettifier rules file is packaged with u3d (#{U3d::LogAnalyzer::RULES_PATH}).
196
195
  You may which to pass your own using the environment variable U3D_RULES_PATH.
197
-
198
196
  E.g. U3D_RULES_PATH=my_rules.json u3d prettify ...
199
-
200
197
  Fore more information about how the rules work, see https://github.com/DragonBox/u3d/blob/master/LOG_RULES.md
201
198
  )
202
199
  c.action do |args, _options|
@@ -34,6 +34,10 @@ module U3d
34
34
  UNITY_MODULE_FILE_REGEX = %r{\/([\w\-_\.\+]+\.(?:pkg|exe|zip|sh|deb))}
35
35
 
36
36
  class << self
37
+ def download_directory
38
+ File.expand_path(ENV['U3D_DOWNLOAD_PATH'] || File.join(DOWNLOAD_PATH, DOWNLOAD_DIRECTORY))
39
+ end
40
+
37
41
  # fetch modules and put them in local cache
38
42
  def fetch_modules(definition, packages: [], download: nil)
39
43
  if download
@@ -113,6 +117,7 @@ module U3d
113
117
 
114
118
  UI.header "Downloading #{package} version #{definition.version}"
115
119
  UI.message 'Downloading from ' + url.to_s.cyan.underline
120
+ UI.message 'Download will be found at ' + path
116
121
  download_package(path, url, size: definition.size_in_bytes(package))
117
122
 
118
123
  if validator.validate(package, path, definition)
@@ -134,7 +139,7 @@ module U3d
134
139
 
135
140
  class MacDownloader
136
141
  def destination_for(package, definition)
137
- dir = File.join(DOWNLOAD_PATH, DOWNLOAD_DIRECTORY, definition.version)
142
+ dir = File.join(Downloader.download_directory, definition.version)
138
143
  Utils.ensure_dir(dir)
139
144
  file_name = UNITY_MODULE_FILE_REGEX.match(definition[package]['url'])[1]
140
145
 
@@ -148,7 +153,7 @@ module U3d
148
153
 
149
154
  class LinuxDownloader
150
155
  def destination_for(package, definition)
151
- dir = File.join(DOWNLOAD_PATH, DOWNLOAD_DIRECTORY, definition.version)
156
+ dir = File.join(Downloader.download_directory, definition.version)
152
157
  Utils.ensure_dir(dir)
153
158
  file_name = UNITY_MODULE_FILE_REGEX.match(definition[package]['url'])[1]
154
159
 
@@ -162,7 +167,7 @@ module U3d
162
167
 
163
168
  class WindowsDownloader
164
169
  def destination_for(package, definition)
165
- dir = File.join(DOWNLOAD_PATH, DOWNLOAD_DIRECTORY, definition.version)
170
+ dir = File.join(Downloader.download_directory, definition.version)
166
171
  Utils.ensure_dir(dir)
167
172
  file_name = UNITY_MODULE_FILE_REGEX.match(definition[package]['url'])[1]
168
173
 
data/lib/u3d/iniparser.rb CHANGED
@@ -61,7 +61,7 @@ module U3d
61
61
  end
62
62
  begin
63
63
  result = IniFile.load(ini_path).to_h
64
- rescue => e
64
+ rescue StandardError => e
65
65
  raise "Could not parse INI data (#{e})"
66
66
  end
67
67
  result
data/lib/u3d/installer.rb CHANGED
@@ -31,8 +31,8 @@ module U3d
31
31
  DEFAULT_LINUX_INSTALL = '/opt/'.freeze
32
32
  DEFAULT_MAC_INSTALL = '/'.freeze
33
33
  DEFAULT_WINDOWS_INSTALL = 'C:/Program Files/'.freeze
34
- UNITY_DIR = "Unity_%s".freeze
35
- UNITY_DIR_LINUX = "unity-editor-%s".freeze
34
+ UNITY_DIR = "Unity_%<version>s".freeze
35
+ UNITY_DIR_LINUX = "unity-editor-%<version>s".freeze
36
36
 
37
37
  class Installer
38
38
  def self.create
@@ -88,7 +88,7 @@ module U3d
88
88
  U3dCore::CommandExecutor.execute(command: command, admin: true)
89
89
  UI.success "Successfully moved '#{source_path}' to '#{new_path}'"
90
90
  end
91
- rescue => e
91
+ rescue StandardError => e
92
92
  UI.error "Unable to move '#{source_path}' to '#{new_path}': #{e}"
93
93
  end
94
94
  end
@@ -97,7 +97,7 @@ module U3d
97
97
  def sanitize_install(unity, dry_run: false)
98
98
  source_path = unity.root_path
99
99
  parent = File.expand_path('..', source_path)
100
- new_path = File.join(parent, UNITY_DIR % unity.version)
100
+ new_path = File.join(parent, format(UNITY_DIR, version: unity.version))
101
101
 
102
102
  command = "mv #{source_path.shellescape} #{new_path.shellescape}"
103
103
 
@@ -130,7 +130,7 @@ module U3d
130
130
  if unity.nil?
131
131
  UI.verbose "No Unity install for version #{version} was found"
132
132
  U3dCore::CommandExecutor.execute(command: command, admin: true)
133
- destination_path = File.join(target_path, 'Applications', UNITY_DIR % version)
133
+ destination_path = File.join(target_path, 'Applications', format(UNITY_DIR, version: version))
134
134
  FileUtils.mv temp_path, destination_path
135
135
  else
136
136
  UI.verbose "Unity install for version #{version} found under #{unity.root_path}"
@@ -146,7 +146,7 @@ module U3d
146
146
  FileUtils.mv temp_path, path if move_to_temp
147
147
  end
148
148
  end
149
- rescue => e
149
+ rescue StandardError => e
150
150
  UI.error "Failed to install pkg at #{file_path}: #{e}"
151
151
  else
152
152
  UI.success "Successfully installed package from #{file_path}"
@@ -156,7 +156,7 @@ module U3d
156
156
  UI.verbose("Uninstalling Unity at '#{unity.root_path}'...")
157
157
  command = "rm -r #{unity.root_path.argescape}"
158
158
  U3dCore::CommandExecutor.execute(command: command, admin: true)
159
- rescue => e
159
+ rescue StandardError => e
160
160
  UI.error "Failed to uninstall unity at #{unity.path}: #{e}"
161
161
  else
162
162
  UI.success "Successfully uninstalled '#{unity.root_path}'"
@@ -195,7 +195,7 @@ module U3d
195
195
  def sanitize_install(unity, dry_run: false)
196
196
  source_path = File.expand_path(unity.root_path)
197
197
  parent = File.expand_path('..', source_path)
198
- new_path = File.join(parent, UNITY_DIR_LINUX % unity.version)
198
+ new_path = File.join(parent, format(UNITY_DIR_LINUX, version: unity.version))
199
199
 
200
200
  command = "mv #{source_path.shellescape} #{new_path.shellescape}"
201
201
 
@@ -233,14 +233,12 @@ module U3d
233
233
 
234
234
  if installation_path
235
235
  command = "cd #{installation_path.shellescape}; #{cmd}"
236
- unless File.directory? installation_path
237
- command = "mkdir -p #{installation_path.shellescape}; #{command}"
238
- end
236
+ command = "mkdir -p #{installation_path.shellescape}; #{command}" unless File.directory? installation_path
239
237
  U3dCore::CommandExecutor.execute(command: command, admin: true)
240
238
  else
241
239
  U3dCore::CommandExecutor.execute(command: cmd, admin: true)
242
240
  end
243
- rescue => e
241
+ rescue StandardError => e
244
242
  UI.error "Failed to install bash file at #{file}: #{e}"
245
243
  else
246
244
  UI.success 'Installation successful'
@@ -250,7 +248,7 @@ module U3d
250
248
  UI.verbose("Uninstalling Unity at '#{unity.root_path}'...")
251
249
  command = "rm -r #{unity.root_path}"
252
250
  U3dCore::CommandExecutor.execute(command: command, admin: true)
253
- rescue => e
251
+ rescue StandardError => e
254
252
  UI.error "Failed to uninstall unity at #{unity.path}: #{e}"
255
253
  else
256
254
  UI.success "Successfully uninstalled '#{unity.root_path}'"
@@ -279,7 +277,7 @@ module U3d
279
277
  def sanitize_install(unity, dry_run: false)
280
278
  source_path = File.expand_path(unity.root_path)
281
279
  parent = File.expand_path('..', source_path)
282
- new_path = File.join(parent, UNITY_DIR % unity.version)
280
+ new_path = File.join(parent, format(UNITY_DIR, version: unity.version))
283
281
 
284
282
  source_path.tr!('/', '\\')
285
283
  new_path.tr!('/', '\\')
@@ -297,7 +295,7 @@ module U3d
297
295
  def install(file_path, version, installation_path: nil, info: {})
298
296
  extension = File.extname(file_path)
299
297
  raise "Installation of #{extension} files is not supported on Windows" if extension != '.exe'
300
- path = installation_path || File.join(DEFAULT_WINDOWS_INSTALL, UNITY_DIR % version)
298
+ path = installation_path || File.join(DEFAULT_WINDOWS_INSTALL, format(UNITY_DIR, version: version))
301
299
  install_exe(
302
300
  file_path,
303
301
  installation_path: path,
@@ -321,7 +319,7 @@ module U3d
321
319
  end
322
320
  command ||= file_path.to_s
323
321
  U3dCore::CommandExecutor.execute(command: command, admin: true)
324
- rescue => e
322
+ rescue StandardError => e
325
323
  UI.error "Failed to install exe at #{file_path}: #{e}"
326
324
  else
327
325
  UI.success "Successfully installed #{info['title']}"
@@ -334,7 +332,7 @@ module U3d
334
332
  command = "#{uninstall_exe.argescape} /S"
335
333
  UI.message("Although the uninstall process completed, it takes a few seconds before the files are actually removed")
336
334
  U3dCore::CommandExecutor.execute(command: command, admin: true)
337
- rescue => e
335
+ rescue StandardError => e
338
336
  UI.error "Failed to uninstall unity at #{unity.path}: #{e}"
339
337
  else
340
338
  UI.success "Successfully uninstalled '#{unity.root_path}'"
@@ -184,9 +184,7 @@ module U3d
184
184
 
185
185
  if @active_phase
186
186
  apply_ruleset.call(@phases[@active_phase]['rules'], @active_phase)
187
- if @phases[@active_phase]['phase_end_pattern'] && @phases[@active_phase]['phase_end_pattern'] =~ line
188
- finish_phase
189
- end
187
+ finish_phase if @phases[@active_phase]['phase_end_pattern'] && @phases[@active_phase]['phase_end_pattern'] =~ line
190
188
  end
191
189
  apply_ruleset.call(@generic_rules, 'GENERAL')
192
190
  end
@@ -242,9 +240,7 @@ module U3d
242
240
  r['fetched_line_pattern'] = Regexp.new r['fetched_line_pattern'] if r['fetched_line_pattern']
243
241
  end
244
242
  r['type'] = 'important' if r['type'] == 'warning'
245
- if r['type'] && r['type'] != 'error' && r['type'] != 'important' && r['type'] != 'success'
246
- r['type'] = 'message'
247
- end
243
+ r['type'] = 'message' if r['type'] && r['type'] != 'error' && r['type'] != 'important' && r['type'] != 'success'
248
244
  r['type'] ||= 'message'
249
245
  r['ignore_lines'].map! { |pat| Regexp.new pat } if r['ignore_lines']
250
246
  true
@@ -103,7 +103,7 @@ module U3d
103
103
  tail_thread = Thread.new do
104
104
  begin
105
105
  pipe(log_file) { |line| output_callback.call(line) }
106
- rescue => e
106
+ rescue StandardError => e
107
107
  UI.error "Failure while trying to pipe #{log_file}: #{e.message}"
108
108
  e.backtrace.each { |l| UI.error " #{l}" }
109
109
  end
@@ -33,7 +33,7 @@ module U3d
33
33
  @url = cached_versions ? cached_versions[version] : nil
34
34
  begin
35
35
  @ini = INIparser.load_ini(version, cached_versions, os: os, offline: offline)
36
- rescue => e
36
+ rescue StandardError => e
37
37
  # FIXME: weird that we catch this here
38
38
  UI.error "Could not load INI file for version #{@version} on #{@os}: #{e}"
39
39
  @ini = nil
@@ -39,7 +39,7 @@ module U3d
39
39
  # URL for the beta releases list, they need to be accessed after
40
40
  UNITY_BETAS = 'https://unity3d.com/unity/beta/archive'.freeze
41
41
  # URL for a specific beta, takes into parameter a version string (%s)
42
- UNITY_BETA_URL = 'https://unity3d.com/unity/beta/unity%s'.freeze
42
+ UNITY_BETA_URL = 'https://unity3d.com/unity/beta/unity%<version>s'.freeze
43
43
 
44
44
  #####################################################
45
45
  # @!group REGEX: expressions to interpret data
@@ -88,7 +88,7 @@ module U3d
88
88
  hash = {}
89
89
  data = Utils.get_ssl(url)
90
90
  results = data.scan(UNITY_BETAVERSION_REGEX).uniq
91
- results.each { |beta| hash.merge!(fetch_version(UNITY_BETA_URL % beta[0], pattern)) }
91
+ results.each { |beta| hash.merge!(fetch_version(format(UNITY_BETA_URL, version: beta[0]), pattern)) }
92
92
  hash
93
93
  end
94
94
  end
data/lib/u3d/version.rb CHANGED
@@ -21,7 +21,7 @@
21
21
  ## --- END LICENSE BLOCK ---
22
22
 
23
23
  module U3d
24
- VERSION = '1.0.12'.freeze
24
+ VERSION = '1.0.13'.freeze
25
25
  DESCRIPTION = 'Provides numerous tools for installing, managing and running the Unity3D game engine from command line.'.freeze
26
26
  UNITY_VERSIONS_NOTE = "Unity3d uses the following version formatting: 0.0.0x0. The \'x\' can takes different values:\n"\
27
27
  "\t. 'f' are the main release candidates for Unity3d\n"\
@@ -101,7 +101,7 @@ module U3dCore
101
101
  end
102
102
  end
103
103
  raise "Exit status: #{status}".red if !status.nil? && status.nonzero?
104
- rescue => ex
104
+ rescue StandardError => ex
105
105
  # This could happen
106
106
  # * if the status is failed
107
107
  # * when the environment is wrong:
@@ -121,7 +121,7 @@ module U3dCore
121
121
  if Helper.windows?
122
122
  begin
123
123
  result = system('reg query HKU\\S-1-5-19', out: File::NULL, err: File::NULL)
124
- rescue
124
+ rescue StandardError
125
125
  result = false
126
126
  end
127
127
  else
@@ -130,7 +130,7 @@ module U3dCore
130
130
  result = system("sudo -k && echo #{credentials.password.shellescape} | sudo -S /usr/bin/whoami",
131
131
  out: File::NULL,
132
132
  err: File::NULL)
133
- rescue
133
+ rescue StandardError
134
134
  result = false
135
135
  end
136
136
  credentials.forget_credentials unless result # FIXME: why?
@@ -0,0 +1,30 @@
1
+ ## --- BEGIN LICENSE BLOCK ---
2
+ # Copyright (c) 2017-present WeWantToKnow AS
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in all
12
+ # copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ # SOFTWARE.
21
+ ## --- END LICENSE BLOCK ---
22
+ module CoreExtensions
23
+ module Extractable
24
+ refine Hash do
25
+ def extract(*keys)
26
+ select { |k, _v| keys.include?(k) }
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,33 @@
1
+ ## --- BEGIN LICENSE BLOCK ---
2
+ # Copyright (c) 2017-present WeWantToKnow AS
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in all
12
+ # copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ # SOFTWARE.
21
+ ## --- END LICENSE BLOCK ---
22
+ module CoreExtensions
23
+ module OperatingSystem
24
+ refine Symbol do
25
+ def human_name
26
+ return 'Windows' if self == :win
27
+ return 'Mac OSX' if self == :mac
28
+ return 'Linux' if self == :linux
29
+ raise "Not a known operating system symbol #{self}"
30
+ end
31
+ end
32
+ end
33
+ end
@@ -27,12 +27,12 @@
27
27
  require 'colored'
28
28
 
29
29
  class String
30
- Colored::COLORS.keys.each do |color|
30
+ Colored::COLORS.keys.each_key do |color|
31
31
  define_method(color) do
32
32
  self # do nothing with the string, but return it
33
33
  end
34
34
  end
35
- Colored::EXTRAS.keys.each do |extra|
35
+ Colored::EXTRAS.keys.each_key do |extra|
36
36
  define_method(extra) do
37
37
  self # do nothing with the string, but return it
38
38
  end
@@ -63,13 +63,11 @@ module U3dCore
63
63
  if U3dCore::Globals.log_timestamps?
64
64
  timestamp = ENV["U3D_UI_TIMESTAMP"]
65
65
  # default timestamp if none specified
66
- unless timestamp
67
- timestamp = if U3dCore::Globals.verbose?
66
+ timestamp ||= if U3dCore::Globals.verbose?
68
67
  '%Y-%m-%d %H:%M:%S.%2N'
69
68
  else
70
69
  '%H:%M:%S'
71
70
  end
72
- end
73
71
  end
74
72
  # hide has last word
75
73
  timestamp = nil if ENV["U3D_HIDE_TIMESTAMP"]
data/u3d.gemspec CHANGED
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  lib = File.expand_path('../lib', __FILE__)
4
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
3
  require 'u3d/version'
@@ -25,20 +23,20 @@ Gem::Specification.new do |spec|
25
23
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
24
  spec.require_paths = ["lib"]
27
25
 
28
- spec.add_dependency 'commander', '>= 4.4.0', '< 5.0.0' # CLI parser
29
- spec.add_dependency 'security', '= 0.1.3' # macOS Keychain manager, a dead project, no updates expected
30
26
  spec.add_dependency 'colored', '>= 1.2', '< 2.0.0' # terminal
31
- spec.add_dependency 'plist', '>= 3.1.0', '< 4.0.0' # Generate the Xcode config plist file
32
- spec.add_dependency 'inifile', '>= 3.0.0', '< 4.0.0' # Parses INI files
33
- spec.add_dependency 'filesize', '>= 0.1.1' # File sizes prettifier
27
+ spec.add_dependency 'commander', '>= 4.4.0', '< 5.0.0' # CLI parser
34
28
  spec.add_dependency 'file-tail', '>= 1.2.0'
29
+ spec.add_dependency 'filesize', '>= 0.1.1' # File sizes prettifier
30
+ spec.add_dependency 'inifile', '>= 3.0.0', '< 4.0.0' # Parses INI files
31
+ spec.add_dependency 'plist', '>= 3.1.0', '< 4.0.0' # Generate the Xcode config plist file
32
+ spec.add_dependency 'security', '= 0.1.3' # macOS Keychain manager, a dead project, no updates expected
35
33
  # Development only
36
34
  spec.add_development_dependency "bundler", "~> 1.13"
35
+ spec.add_development_dependency "coveralls"
36
+ spec.add_development_dependency "github_changelog_generator"
37
+ spec.add_development_dependency "pry"
37
38
  spec.add_development_dependency "rake", "~> 10.0"
38
39
  spec.add_development_dependency "rspec", "~> 3.1.0"
39
40
  spec.add_development_dependency 'rspec_junit_formatter', '~> 0.2.3'
40
- spec.add_development_dependency "pry"
41
- spec.add_development_dependency "coveralls"
42
- spec.add_development_dependency "github_changelog_generator"
43
- spec.add_development_dependency 'rubocop', '~> 0.49.1'
41
+ spec.add_development_dependency 'rubocop', '~> 0.52.1'
44
42
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: u3d
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.12
4
+ version: 1.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jerome Lacoste
@@ -9,82 +9,76 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2018-01-03 00:00:00.000000000 Z
12
+ date: 2018-01-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: commander
15
+ name: colored
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 4.4.0
20
+ version: '1.2'
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
- version: 5.0.0
23
+ version: 2.0.0
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
28
  - - ">="
29
29
  - !ruby/object:Gem::Version
30
- version: 4.4.0
30
+ version: '1.2'
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: 5.0.0
33
+ version: 2.0.0
34
34
  - !ruby/object:Gem::Dependency
35
- name: security
35
+ name: commander
36
36
  requirement: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 0.1.3
40
+ version: 4.4.0
41
+ - - "<"
42
+ - !ruby/object:Gem::Version
43
+ version: 5.0.0
41
44
  type: :runtime
42
45
  prerelease: false
43
46
  version_requirements: !ruby/object:Gem::Requirement
44
47
  requirements:
45
- - - '='
48
+ - - ">="
46
49
  - !ruby/object:Gem::Version
47
- version: 0.1.3
50
+ version: 4.4.0
51
+ - - "<"
52
+ - !ruby/object:Gem::Version
53
+ version: 5.0.0
48
54
  - !ruby/object:Gem::Dependency
49
- name: colored
55
+ name: file-tail
50
56
  requirement: !ruby/object:Gem::Requirement
51
57
  requirements:
52
58
  - - ">="
53
59
  - !ruby/object:Gem::Version
54
- version: '1.2'
55
- - - "<"
56
- - !ruby/object:Gem::Version
57
- version: 2.0.0
60
+ version: 1.2.0
58
61
  type: :runtime
59
62
  prerelease: false
60
63
  version_requirements: !ruby/object:Gem::Requirement
61
64
  requirements:
62
65
  - - ">="
63
66
  - !ruby/object:Gem::Version
64
- version: '1.2'
65
- - - "<"
66
- - !ruby/object:Gem::Version
67
- version: 2.0.0
67
+ version: 1.2.0
68
68
  - !ruby/object:Gem::Dependency
69
- name: plist
69
+ name: filesize
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: 3.1.0
75
- - - "<"
76
- - !ruby/object:Gem::Version
77
- version: 4.0.0
74
+ version: 0.1.1
78
75
  type: :runtime
79
76
  prerelease: false
80
77
  version_requirements: !ruby/object:Gem::Requirement
81
78
  requirements:
82
79
  - - ">="
83
80
  - !ruby/object:Gem::Version
84
- version: 3.1.0
85
- - - "<"
86
- - !ruby/object:Gem::Version
87
- version: 4.0.0
81
+ version: 0.1.1
88
82
  - !ruby/object:Gem::Dependency
89
83
  name: inifile
90
84
  requirement: !ruby/object:Gem::Requirement
@@ -106,33 +100,39 @@ dependencies:
106
100
  - !ruby/object:Gem::Version
107
101
  version: 4.0.0
108
102
  - !ruby/object:Gem::Dependency
109
- name: filesize
103
+ name: plist
110
104
  requirement: !ruby/object:Gem::Requirement
111
105
  requirements:
112
106
  - - ">="
113
107
  - !ruby/object:Gem::Version
114
- version: 0.1.1
108
+ version: 3.1.0
109
+ - - "<"
110
+ - !ruby/object:Gem::Version
111
+ version: 4.0.0
115
112
  type: :runtime
116
113
  prerelease: false
117
114
  version_requirements: !ruby/object:Gem::Requirement
118
115
  requirements:
119
116
  - - ">="
120
117
  - !ruby/object:Gem::Version
121
- version: 0.1.1
118
+ version: 3.1.0
119
+ - - "<"
120
+ - !ruby/object:Gem::Version
121
+ version: 4.0.0
122
122
  - !ruby/object:Gem::Dependency
123
- name: file-tail
123
+ name: security
124
124
  requirement: !ruby/object:Gem::Requirement
125
125
  requirements:
126
- - - ">="
126
+ - - '='
127
127
  - !ruby/object:Gem::Version
128
- version: 1.2.0
128
+ version: 0.1.3
129
129
  type: :runtime
130
130
  prerelease: false
131
131
  version_requirements: !ruby/object:Gem::Requirement
132
132
  requirements:
133
- - - ">="
133
+ - - '='
134
134
  - !ruby/object:Gem::Version
135
- version: 1.2.0
135
+ version: 0.1.3
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: bundler
138
138
  requirement: !ruby/object:Gem::Requirement
@@ -148,103 +148,103 @@ dependencies:
148
148
  - !ruby/object:Gem::Version
149
149
  version: '1.13'
150
150
  - !ruby/object:Gem::Dependency
151
- name: rake
151
+ name: coveralls
152
152
  requirement: !ruby/object:Gem::Requirement
153
153
  requirements:
154
- - - "~>"
154
+ - - ">="
155
155
  - !ruby/object:Gem::Version
156
- version: '10.0'
156
+ version: '0'
157
157
  type: :development
158
158
  prerelease: false
159
159
  version_requirements: !ruby/object:Gem::Requirement
160
160
  requirements:
161
- - - "~>"
161
+ - - ">="
162
162
  - !ruby/object:Gem::Version
163
- version: '10.0'
163
+ version: '0'
164
164
  - !ruby/object:Gem::Dependency
165
- name: rspec
165
+ name: github_changelog_generator
166
166
  requirement: !ruby/object:Gem::Requirement
167
167
  requirements:
168
- - - "~>"
168
+ - - ">="
169
169
  - !ruby/object:Gem::Version
170
- version: 3.1.0
170
+ version: '0'
171
171
  type: :development
172
172
  prerelease: false
173
173
  version_requirements: !ruby/object:Gem::Requirement
174
174
  requirements:
175
- - - "~>"
175
+ - - ">="
176
176
  - !ruby/object:Gem::Version
177
- version: 3.1.0
177
+ version: '0'
178
178
  - !ruby/object:Gem::Dependency
179
- name: rspec_junit_formatter
179
+ name: pry
180
180
  requirement: !ruby/object:Gem::Requirement
181
181
  requirements:
182
- - - "~>"
182
+ - - ">="
183
183
  - !ruby/object:Gem::Version
184
- version: 0.2.3
184
+ version: '0'
185
185
  type: :development
186
186
  prerelease: false
187
187
  version_requirements: !ruby/object:Gem::Requirement
188
188
  requirements:
189
- - - "~>"
189
+ - - ">="
190
190
  - !ruby/object:Gem::Version
191
- version: 0.2.3
191
+ version: '0'
192
192
  - !ruby/object:Gem::Dependency
193
- name: pry
193
+ name: rake
194
194
  requirement: !ruby/object:Gem::Requirement
195
195
  requirements:
196
- - - ">="
196
+ - - "~>"
197
197
  - !ruby/object:Gem::Version
198
- version: '0'
198
+ version: '10.0'
199
199
  type: :development
200
200
  prerelease: false
201
201
  version_requirements: !ruby/object:Gem::Requirement
202
202
  requirements:
203
- - - ">="
203
+ - - "~>"
204
204
  - !ruby/object:Gem::Version
205
- version: '0'
205
+ version: '10.0'
206
206
  - !ruby/object:Gem::Dependency
207
- name: coveralls
207
+ name: rspec
208
208
  requirement: !ruby/object:Gem::Requirement
209
209
  requirements:
210
- - - ">="
210
+ - - "~>"
211
211
  - !ruby/object:Gem::Version
212
- version: '0'
212
+ version: 3.1.0
213
213
  type: :development
214
214
  prerelease: false
215
215
  version_requirements: !ruby/object:Gem::Requirement
216
216
  requirements:
217
- - - ">="
217
+ - - "~>"
218
218
  - !ruby/object:Gem::Version
219
- version: '0'
219
+ version: 3.1.0
220
220
  - !ruby/object:Gem::Dependency
221
- name: github_changelog_generator
221
+ name: rspec_junit_formatter
222
222
  requirement: !ruby/object:Gem::Requirement
223
223
  requirements:
224
- - - ">="
224
+ - - "~>"
225
225
  - !ruby/object:Gem::Version
226
- version: '0'
226
+ version: 0.2.3
227
227
  type: :development
228
228
  prerelease: false
229
229
  version_requirements: !ruby/object:Gem::Requirement
230
230
  requirements:
231
- - - ">="
231
+ - - "~>"
232
232
  - !ruby/object:Gem::Version
233
- version: '0'
233
+ version: 0.2.3
234
234
  - !ruby/object:Gem::Dependency
235
235
  name: rubocop
236
236
  requirement: !ruby/object:Gem::Requirement
237
237
  requirements:
238
238
  - - "~>"
239
239
  - !ruby/object:Gem::Version
240
- version: 0.49.1
240
+ version: 0.52.1
241
241
  type: :development
242
242
  prerelease: false
243
243
  version_requirements: !ruby/object:Gem::Requirement
244
244
  requirements:
245
245
  - - "~>"
246
246
  - !ruby/object:Gem::Version
247
- version: 0.49.1
247
+ version: 0.52.1
248
248
  description: Provides numerous tools for installing, managing and running the Unity3D
249
249
  game engine from command line.
250
250
  email: jerome@wewanttoknow.com
@@ -389,6 +389,8 @@ files:
389
389
  - lib/u3d_core.rb
390
390
  - lib/u3d_core/command_executor.rb
391
391
  - lib/u3d_core/command_runner.rb
392
+ - lib/u3d_core/core_ext/hash.rb
393
+ - lib/u3d_core/core_ext/operating_system_symbol.rb
392
394
  - lib/u3d_core/core_ext/string.rb
393
395
  - lib/u3d_core/credentials.rb
394
396
  - lib/u3d_core/globals.rb