fastlane-plugin-plist_surgeon 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8ad895e4ca5bf5d4b9b107162370108a9934b46c20bf03a2cefb41566d112ded
4
- data.tar.gz: 4c9466eed0aa430c4edd96abc41a933687143d9c27d399eb59d6185f728ce552
3
+ metadata.gz: 8a4c842111d0642840d28e07781a460e50c2391ece4591051efea52033861617
4
+ data.tar.gz: f6065508091457bee57180beb14181b688771f0f16c6198fa9723226c001b3d2
5
5
  SHA512:
6
- metadata.gz: 3f6d75e9aadf55313612e1d1f46b144a0359567998d4d5f472fd665eab0f1e1d5e98b076beee4560b68c87a33f04ab849f2411d2300f44dd14f99951b506da8a
7
- data.tar.gz: 686e4efcabdf5350f26724fdc5b407f171b7e764c1fdbd223c0f92f8da9f7c054b6fac7a0a8b2a0c87205c9dfdc2d4e14833edc9e69fc8925c481eed3177840c
6
+ metadata.gz: d94f7e8ac67bfa10333845e5dc07694dd741c1f22f5d8729218d52517a3e4cee8cd9a00a2c7fb106f760db685f350fbc0418958ff8a802ca6397c02b21548f17
7
+ data.tar.gz: 3e14d8221bf389634e6352d5be9a257eeeabf8d9aa7b318f901844840eb3f1f60899fc90d7e3e138818c930763b57593e958ac8cdcf223839324c6a38b802d32
@@ -17,28 +17,67 @@ module Fastlane
17
17
  set_value(plist, key, value)
18
18
  plist_content = plist.to_plist
19
19
  File.write(path, plist_content)
20
- plist
20
+ "#{File.basename(path)} saved with #{key} change."
21
21
  end
22
22
 
23
23
  def self.set_value(plist, key, value)
24
+ value = parse_json_if_needed(value)
25
+
26
+ if plist.kind_of?(Hash) && plist.key?(key)
27
+ plist[key] = value
28
+ elsif key.include?('.')
29
+ set_nested_value(plist, key, value)
30
+ else
31
+ set_direct_value(plist, key, value)
32
+ end
33
+ end
34
+
35
+ def self.set_direct_value(plist, key, value)
36
+ if plist.kind_of?(Array)
37
+ plist[key.to_i] = value
38
+ else
39
+ plist[key] = value
40
+ end
41
+ end
42
+
43
+ def self.parse_json_if_needed(value)
24
44
  if value.kind_of?(String) && value.start_with?('{', '[')
25
45
  begin
26
46
  require 'json'
27
- value = JSON.parse(value)
47
+ return JSON.parse(value)
28
48
  rescue JSON::ParserError
29
49
  # Not JSON, keep as string
30
50
  end
31
51
  end
52
+ value
53
+ end
32
54
 
33
- if key.include?('.')
34
- set_nested_value(plist, key, value)
55
+ def self.set_nested_value(plist, key, value)
56
+ # Attempt to find if any prefix of the key exists as a literal key
57
+ parts = key.split('.')
58
+ prefix_key = find_prefix_key(plist, parts)
59
+
60
+ if prefix_key
61
+ prefix, remainder = prefix_key
62
+ set_value(plist[prefix], remainder, value)
35
63
  else
36
- plist[key] = value
64
+ set_deep_nested_value(plist, parts, value)
37
65
  end
38
66
  end
39
67
 
40
- def self.set_nested_value(plist, key, value)
41
- keys = key.split('.')
68
+ def self.find_prefix_key(plist, parts)
69
+ return nil unless plist.kind_of?(Hash)
70
+
71
+ (parts.size - 1).downto(1) do |i|
72
+ prefix = parts[0...i].join('.')
73
+ if plist.key?(prefix)
74
+ return [prefix, parts[i..-1].join('.')]
75
+ end
76
+ end
77
+ nil
78
+ end
79
+
80
+ def self.set_deep_nested_value(plist, keys, value)
42
81
  last_key = keys.pop
43
82
  current = plist
44
83
  keys.each do |k|
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module PlistSurgeon
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-plist_surgeon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sourcetoad