fastlane 2.79.0.beta.20180123010002 → 2.79.0.beta.20180124010003

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: 599a6a8994d426abd49eb843006e6a06b79cbf6b
4
- data.tar.gz: f758d58fdcc9e4e32fd6d7263792ce01dee2ef72
3
+ metadata.gz: 579b61a800e044e85c68ad8e8f2e530f0b134c0a
4
+ data.tar.gz: fc82399a894d4d8f3cb0bbe8c56a7dc6991e251e
5
5
  SHA512:
6
- metadata.gz: 3eac737ce72a2ba7f316f532095d481495747a740d39438b1d988ff873008313d5f4e906dc86135f32f77a28fb5f9ac5a7bf5a5e3449feedb9daa2f929a69fe5
7
- data.tar.gz: 6529b844211fc5ba6e1d9bda4b90eb807e14463b1fd53d8ed1bbf3ab41d80f904160462a761cc361695429e8f8875931dc0352cf7aeaadb790f893d4e61a792d
6
+ metadata.gz: d8629c6772657921a0f464128416520994af79754ba2c79d6fb1fd79382149971c37bb4c7a6593f44070cc124138a60dbf9ee7c0b126069d906e02c11ee3890c
7
+ data.tar.gz: a8a726bd15f676bba4a319d6804377958bc78162a76ff909baf7f32e8d6af29891f06c4ee5368b60a59c0666985b90064a522efa422ef13a2b4d3b823e26e72c
@@ -12,7 +12,7 @@ module Fastlane
12
12
  page = 1
13
13
  plugins = []
14
14
  loop do
15
- url = "https://rubygems.org/api/v1/search.json?query=#{PluginManager.plugin_prefix}#{search_query}&page=#{page}"
15
+ url = "https://rubygems.org/api/v1/search.json?query=#{PluginManager.plugin_prefix}&page=#{page}"
16
16
  FastlaneCore::UI.verbose("RubyGems API Request: #{url}")
17
17
  results = JSON.parse(open(url).read)
18
18
  break if results.count == 0
@@ -25,7 +25,7 @@ module Fastlane
25
25
 
26
26
  return plugins if search_query.to_s.length == 0
27
27
  plugins.keep_if do |current|
28
- current.full_name.include?(search_query)
28
+ current.full_name.include?(search_query) or current.info.include?(search_query)
29
29
  end
30
30
 
31
31
  return plugins
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.79.0.beta.20180123010002'.freeze
2
+ VERSION = '2.79.0.beta.20180124010003'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '0.49.1'.freeze
@@ -24,7 +24,7 @@ module FastlaneCore
24
24
  # Since we don't want to access FastlaneCore from spaceship
25
25
  # this method is duplicated in spaceship/client.rb
26
26
  def self.fastlane_user_dir
27
- path = File.expand_path(File.join("~", ".fastlane"))
27
+ path = File.expand_path(File.join(Dir.home, ".fastlane"))
28
28
  FileUtils.mkdir_p(path) unless File.directory?(path)
29
29
  return path
30
30
  end
@@ -220,11 +220,10 @@ module Frameit
220
220
 
221
221
  def resize_text(text)
222
222
  width = text.width
223
- ratio = (width + (keyword_padding + horizontal_frame_padding) * 2) / image.width.to_f
223
+ ratio = width / (image.width.to_f - horizontal_frame_padding * 2)
224
224
  if ratio > 1.0
225
225
  # too large - resizing now
226
- smaller = (1.0 / ratio)
227
- text.resize("#{(smaller * text.width).round}x")
226
+ text.resize("#{((1.0 / ratio) * text.width).round}x")
228
227
  end
229
228
  end
230
229
 
@@ -233,16 +232,12 @@ module Frameit
233
232
  resize_text(title)
234
233
  resize_text(keyword)
235
234
 
236
- title_width = title.width
237
- keyword_width = keyword.width
238
-
239
- vertical_padding = vertical_frame_padding
235
+ vertical_padding = vertical_frame_padding # assign padding to variable
240
236
  keyword_top_space = vertical_padding
241
-
242
- spacing_between_title_and_keyword = (title.height / 2)
237
+ spacing_between_title_and_keyword = (actual_font_size / 2)
243
238
  title_top_space = vertical_padding + keyword.height + spacing_between_title_and_keyword
244
- title_left_space = (background.width / 2.0 - title_width / 2.0).round
245
- keyword_left_space = (background.width / 2.0 - keyword_width / 2.0).round
239
+ title_left_space = (background.width / 2.0 - title.width / 2.0).round
240
+ keyword_left_space = (background.width / 2.0 - keyword.width / 2.0).round
246
241
 
247
242
  self.space_to_device += title.height + keyword.height + spacing_between_title_and_keyword + vertical_padding
248
243
  title_below_image = fetch_config['title_below_image']
@@ -252,8 +247,7 @@ module Frameit
252
247
  c.geometry("+#{keyword_left_space}+#{keyword_top_space}") unless title_below_image
253
248
  c.geometry("+#{keyword_left_space}+#{background.height - space_to_device + keyword_top_space}") if title_below_image
254
249
  end
255
- # Then, put the title on top of the screenshot next to the keyword
256
- # Then, put the title above/below of the screenshot next to the keyword
250
+ # Place the title below the keyword
257
251
  background = background.composite(title, "png") do |c|
258
252
  c.compose("Over")
259
253
  c.geometry("+#{title_left_space}+#{title_top_space}") unless title_below_image
@@ -263,7 +257,7 @@ module Frameit
263
257
  end
264
258
 
265
259
  def put_title_into_background(background, stack_title)
266
- text_images = build_text_images(image.width - 2 * horizontal_frame_padding, image.height - 2 * vertical_frame_padding)
260
+ text_images = build_text_images(image.width - 2 * horizontal_frame_padding, image.height - 2 * vertical_frame_padding, stack_title)
267
261
 
268
262
  keyword = text_images[:keyword]
269
263
  title = text_images[:title]
@@ -277,24 +271,26 @@ module Frameit
277
271
  sum_width = title.width
278
272
  sum_width += keyword.width + keyword_padding if keyword
279
273
 
280
- # Resize the 2 labels if necessary
281
- smaller = 1.0 # default
282
- ratio = (sum_width + (keyword_padding + horizontal_frame_padding) * 2) / image.width.to_f
283
- if ratio > 1.0
284
- # too large - resizing now
285
- smaller = (1.0 / ratio)
274
+ title_below_image = fetch_config['title_below_image']
286
275
 
287
- UI.verbose("Text for image #{self.screenshot.path} is quite long, reducing font size by #{(ratio - 1.0).round(2)}")
276
+ # Resize the 2 labels if they exceed the available space either horizontally or vertically:
277
+ image_scale_factor = 1.0 # default
278
+ ratio_horizontal = sum_width / (image.width.to_f - horizontal_frame_padding * 2) # The fraction of the text images compared to the left and right padding
279
+ ratio_vertical = title.height.to_f / actual_font_size # The fraction of the actual height of the images compared to the available space
280
+ if ratio_horizontal > 1.0 || ratio_vertical > 1.0
281
+ # If either is too large, resize with the maximum ratio:
282
+ image_scale_factor = (1.0 / [ratio_horizontal, ratio_vertical].max)
288
283
 
289
- title.resize("#{(smaller * title.width).round}x")
290
- keyword.resize("#{(smaller * keyword.width).round}x") if keyword
291
- sum_width *= smaller
284
+ UI.verbose("Text for image #{self.screenshot.path} is quite long, reducing font size by #{(100 * (1.0 - image_scale_factor)).round(1)}%")
285
+
286
+ title.resize("#{(image_scale_factor * title.width).round}x")
287
+ keyword.resize("#{(image_scale_factor * keyword.width).round}x") if keyword
288
+ sum_width *= image_scale_factor
292
289
  end
293
290
 
294
- vertical_padding = vertical_frame_padding
291
+ vertical_padding = vertical_frame_padding # assign padding to variable
295
292
  top_space = vertical_padding + (actual_font_size - title.height) / 2
296
293
  left_space = (background.width / 2.0 - sum_width / 2.0).round
297
- title_below_image = fetch_config['title_below_image']
298
294
 
299
295
  self.space_to_device += actual_font_size + vertical_padding
300
296
 
@@ -306,7 +302,7 @@ module Frameit
306
302
  c.geometry("+#{left_space}+#{background.height - space_to_device + top_space}") if title_below_image
307
303
  end
308
304
 
309
- left_space += keyword.width + (keyword_padding * smaller)
305
+ left_space += keyword.width + (keyword_padding * image_scale_factor)
310
306
  end
311
307
 
312
308
  # Then, put the title on top of the screenshot next to the keyword
@@ -320,6 +316,7 @@ module Frameit
320
316
 
321
317
  def actual_font_size
322
318
  font_scale_factor = fetch_config['font_scale_factor'] || 0.1
319
+ UI.user_error!("Parameter 'font_scale_factor' can not be 0. Please provide a value larger than 0.0 (default = 0.1).") if font_scale_factor == 0.0
323
320
  [@image.width * font_scale_factor].max.round
324
321
  end
325
322
 
@@ -329,7 +326,7 @@ module Frameit
329
326
  end
330
327
 
331
328
  # This will build up to 2 individual images with the title and optional keyword, which will then be added to the real image
332
- def build_text_images(max_width, max_height)
329
+ def build_text_images(max_width, max_height, stack_title)
333
330
  words = [:keyword, :title].keep_if { |a| fetch_text(a) } # optional keyword/title
334
331
  results = {}
335
332
  trim_boxes = {}
@@ -367,7 +364,7 @@ module Frameit
367
364
 
368
365
  results[key] = text_image
369
366
 
370
- # Natively trimming the image with .trim will result in the loss of the common baseline between the text in all images.
367
+ # Natively trimming the image with .trim will result in the loss of the common baseline between the text in all images when side-by-side (e.g. stack_title is false).
371
368
  # Hence retrieve the calculated trim bounding box without actually trimming:
372
369
  calculated_trim_box = text_image.identify do |b|
373
370
  b.format("%@") # CALCULATED: trim bounding box (without actually trimming), see: http://www.imagemagick.org/script/escape.php
@@ -381,7 +378,7 @@ module Frameit
381
378
  top_vertical_trim_offset = trim_box.offset_y
382
379
  end
383
380
 
384
- # Get the maximum bottom offset of the trimbox, this is the top offset + height:
381
+ # Get the maximum bottom offset of the trim box, this is the top offset + height:
385
382
  if (trim_box.offset_y + trim_box.height) > bottom_vertical_trim_offset
386
383
  bottom_vertical_trim_offset = trim_box.offset_y + trim_box.height
387
384
  end
@@ -390,31 +387,34 @@ module Frameit
390
387
  trim_boxes[key] = trim_box
391
388
  end
392
389
 
393
- # Crop images based on top_vertical_trim_offset and bottom_vertical_trim_offset to maintain text baseline:
390
+ # Crop text images:
394
391
  words.each do |key|
395
392
  # Get matching trim box:
396
393
  trim_box = trim_boxes[key]
397
394
 
398
- # Determine the trim area by maintaining the same vertical top offset based on the smallest value from all trim boxes (top_vertical_trim_offset).
399
- # When the vertical top offset is larger than the smallest vertical top offset, the trim box needs to be adjusted:
400
- if trim_box.offset_y > top_vertical_trim_offset
401
- # Increase the height of the trim box with the difference in vertical top offset:
402
- trim_box.height += trim_box.offset_y - top_vertical_trim_offset
403
- # Change the vertical top offset to match that of the others:
404
- trim_box.offset_y = top_vertical_trim_offset
405
-
406
- UI.verbose("Trim box for key \"#{key}\" is adjusted to align top: #{trim_box}\n")
407
- end
395
+ # For side-by-side text images (e.g. stack_title is false) adjust the trim box based on top_vertical_trim_offset and bottom_vertical_trim_offset to maintain the text baseline:
396
+ unless stack_title
397
+ # Determine the trim area by maintaining the same vertical top offset based on the smallest value from all trim boxes (top_vertical_trim_offset).
398
+ # When the vertical top offset is larger than the smallest vertical top offset, the trim box needs to be adjusted:
399
+ if trim_box.offset_y > top_vertical_trim_offset
400
+ # Increase the height of the trim box with the difference in vertical top offset:
401
+ trim_box.height += trim_box.offset_y - top_vertical_trim_offset
402
+ # Change the vertical top offset to match that of the others:
403
+ trim_box.offset_y = top_vertical_trim_offset
404
+
405
+ UI.verbose("Trim box for key \"#{key}\" is adjusted to align top: #{trim_box}\n")
406
+ end
408
407
 
409
- # Check if the height needs to be adjusted to reach the bottom offset:
410
- if (trim_box.offset_y + trim_box.height) < bottom_vertical_trim_offset
411
- # Set the height of the trim box to the difference between vertical bottom and top offset:
412
- trim_box.height = bottom_vertical_trim_offset - trim_box.offset_y
408
+ # Check if the height needs to be adjusted to reach the bottom offset:
409
+ if (trim_box.offset_y + trim_box.height) < bottom_vertical_trim_offset
410
+ # Set the height of the trim box to the difference between vertical bottom and top offset:
411
+ trim_box.height = bottom_vertical_trim_offset - trim_box.offset_y
413
412
 
414
- UI.verbose("Trim box for key \"#{key}\" is adjusted to align bottom: #{trim_box}\n")
413
+ UI.verbose("Trim box for key \"#{key}\" is adjusted to align bottom: #{trim_box}\n")
414
+ end
415
415
  end
416
416
 
417
- # Crop image with adjusted trim box parameters in MiniMagick string format:
417
+ # Crop image with (adjusted) trim box parameters in MiniMagick string format:
418
418
  results[key].crop(trim_box.string_format)
419
419
  end
420
420
 
@@ -88,10 +88,10 @@ module Frameit
88
88
  orientation = block.call(filename)
89
89
  valid = [:landscape_left, :landscape_right, :portrait, nil]
90
90
  UI.user_error("orientation_block must return #{valid[0..-2].join(', ')} or nil") unless valid.include?(orientation)
91
-
92
- puts("Forced orientation: #{orientation}")
93
91
  end
94
92
 
93
+ puts("Forced orientation: #{orientation}") unless orientation.nil?
94
+
95
95
  return orientation unless orientation.nil?
96
96
  return :portrait if self.orientation_name == Orientation::PORTRAIT
97
97
  return :landscape_right # Default landscape orientation
@@ -6,7 +6,8 @@ module PEM
6
6
  attr_accessor :config
7
7
  end
8
8
 
9
- TMP_FOLDER = "/tmp/PEM/"
9
+ tmp_dir = Dir.tmpdir
10
+ TMP_FOLDER = "#{tmp_dir}/fastlane/PEM/"
10
11
  FileUtils.mkdir_p(TMP_FOLDER)
11
12
 
12
13
  ENV['FASTLANE_TEAM_ID'] ||= ENV["PEM_TEAM_ID"]
@@ -243,7 +243,7 @@ module Spaceship
243
243
  klass.new(attrs)
244
244
  end
245
245
 
246
- # @param mac [Bool] Fetches Mac certificates if true. (Ignored if callsed from a subclass)
246
+ # @param mac [Bool] Fetches Mac certificates if true. (Ignored if called from a subclass)
247
247
  # @return (Array) Returns all certificates of this account.
248
248
  # If this is called from a subclass of Certificate, this will
249
249
  # only include certificates matching the current type.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.79.0.beta.20180123010002
4
+ version: 2.79.0.beta.20180124010003
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Holtz
@@ -25,7 +25,7 @@ authors:
25
25
  autorequire:
26
26
  bindir: bin
27
27
  cert_chain: []
28
- date: 2018-01-23 00:00:00.000000000 Z
28
+ date: 2018-01-24 00:00:00.000000000 Z
29
29
  dependencies:
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: slack-notifier
@@ -1613,24 +1613,24 @@ metadata:
1613
1613
  post_install_message:
1614
1614
  rdoc_options: []
1615
1615
  require_paths:
1616
- - supply/lib
1617
- - screengrab/lib
1618
- - match/lib
1619
- - precheck/lib
1620
- - sigh/lib
1621
- - produce/lib
1622
1616
  - scan/lib
1617
+ - spaceship/lib
1623
1618
  - gym/lib
1624
- - snapshot/lib
1625
- - frameit/lib
1626
- - fastlane/lib
1627
- - cert/lib
1619
+ - precheck/lib
1620
+ - produce/lib
1628
1621
  - pilot/lib
1629
- - spaceship/lib
1622
+ - fastlane/lib
1623
+ - supply/lib
1630
1624
  - credentials_manager/lib
1625
+ - pem/lib
1631
1626
  - deliver/lib
1627
+ - screengrab/lib
1628
+ - frameit/lib
1629
+ - match/lib
1632
1630
  - fastlane_core/lib
1633
- - pem/lib
1631
+ - sigh/lib
1632
+ - snapshot/lib
1633
+ - cert/lib
1634
1634
  required_ruby_version: !ruby/object:Gem::Requirement
1635
1635
  requirements:
1636
1636
  - - ">="