u3d 1.0.12 → 1.0.13

Sign up to get free protection for your applications and to get access to all the features.
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