Module: HMap::Utils
- Defined in:
- lib/cocoapods-hmap-prebuilt/hmap_utils.rb
Overview
A collection of utility functions used throughout cocoapods-hmap-prebuilt.
Constant Summary collapse
- HEADER_EXTENSIONS =
Pod::Sandbox::FileAccessor::HEADER_EXTENSIONS
Class Method Summary collapse
- .change_xcconfig_header_search_path(xcconfig, hmap_h, use_headermap: true, save_origin: true) ⇒ Object
- .clean_build_setting_to_xcconfig(path, build_setting) ⇒ Object
- .clean_target_build_setting(targets, build_setting) ⇒ Object
- .hash_set_value(hash, *args) ⇒ Object
- .index_of_range(num, range) ⇒ Object
- .magic?(magic) ⇒ Boolean
- .next_power_of_two(num) ⇒ Object
- .power_of_two?(num) ⇒ Boolean
- .safe_encode(string, target_encoding) ⇒ Object
- .save_build_setting_to_xcconfig(path, value, build_setting, save_origin: true) {|xc| ... } ⇒ Object
- .specialize_format(format, swapped) ⇒ Object
- .string_downcase_hash(str) ⇒ Object
- .swapped_magic?(magic, version) ⇒ Boolean
- .target_xcconfig_path(targets) ⇒ Object
- .update_changed_file(path, contents) ⇒ Object
Class Method Details
.change_xcconfig_header_search_path(xcconfig, hmap_h, use_headermap: true, save_origin: true) ⇒ Object
92 93 94 95 96 97 98 99 100 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 92 def self.change_xcconfig_header_search_path(xcconfig, hmap_h, use_headermap: true, save_origin: true) hmap_header_serach_paths = hmap_h.inject('') do |sum, hmap_n| hmap_pod_root_path = "${PODS_ROOT}/Headers/#{HMAP_DIR_NAME}/#{hmap_n}" sum + "\"#{hmap_pod_root_path}\" " end save_build_setting_to_xcconfig(xcconfig, hmap_header_serach_paths, HEAD_SEARCH_PATHS, save_origin: save_origin) do |xc| xc.attributes['USE_HEADERMAP'] = 'NO' unless use_headermap end end |
.clean_build_setting_to_xcconfig(path, build_setting) ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 121 def self.clean_build_setting_to_xcconfig(path, build_setting) xc = Xcodeproj::Config.new(path) save_origin_build_setting = "SAVE_#{build_setting}" hmap_build_setting = "HMAP_PREBUILT_#{build_setting}" return if xc.attributes[hmap_build_setting].nil? xc.attributes[build_setting] = xc.attributes[save_origin_build_setting] xc.attributes.delete(save_origin_build_setting) xc.attributes.delete(hmap_build_setting) xc.attributes['USE_HEADERMAP'] = 'YES' xc.attributes.delete(build_setting) if xc.attributes[build_setting].nil? xc.save_as(path) puts "\t -xcconfig path: #{path} clean finish." end |
.clean_target_build_setting(targets, build_setting) ⇒ Object
74 75 76 77 78 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 74 def self.clean_target_build_setting(targets, build_setting) target_xcconfig_path(targets) do |xc| clean_build_setting_to_xcconfig(xc, build_setting) end end |
.hash_set_value(hash, *args) ⇒ Object
27 28 29 30 31 32 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 27 def self.hash_set_value(hash, *args) args.each do |arg| hash.merge(arg) end hash end |
.index_of_range(num, range) ⇒ Object
8 9 10 11 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 8 def self.index_of_range(num, range) num &= range - 1 num end |
.magic?(magic) ⇒ Boolean
60 61 62 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 60 def self.magic?(magic) magic.eql?(HEADER_CONST[:HMAP_SWAPPED_MAGIC]) || magic.eql?(HEADER_CONST[:HMAP_HEADER_MAGIC_NUMBER]) end |
.next_power_of_two(num) ⇒ Object
17 18 19 20 21 22 23 24 25 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 17 def self.next_power_of_two(num) num |= (num >> 1) num |= (num >> 2) num |= (num >> 4) num |= (num >> 8) num |= (num >> 16) num |= (num >> 32) num + 1 end |
.power_of_two?(num) ⇒ Boolean
13 14 15 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 13 def self.power_of_two?(num) num != 0 && (num & (num - 1)).zero? end |
.safe_encode(string, target_encoding) ⇒ Object
64 65 66 67 68 69 70 71 72 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 64 def self.safe_encode(string, target_encoding) string.encode(target_encoding) rescue Encoding::InvalidByteSequenceError string.force_encoding(target_encoding) rescue Encoding::UndefinedConversionError string.encode(target_encoding, fallback: lambda { |c| c.force_encoding(target_encoding) }) end |
.save_build_setting_to_xcconfig(path, value, build_setting, save_origin: true) {|xc| ... } ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 102 def self.save_build_setting_to_xcconfig(path, value, build_setting, save_origin: true) xc = Xcodeproj::Config.new(path) save_origin_build_setting = "SAVE_#{build_setting}" hmap_build_setting = "HMAP_PREBUILT_#{build_setting}" origin_build_setting = xc.attributes[build_setting] if !origin_build_setting.nil? && !origin_build_setting.include?(hmap_build_setting) xc.attributes[save_origin_build_setting] = origin_build_setting end save_origin_build_setting_value = xc.attributes[save_origin_build_setting] value = "#{value} ${#{save_origin_build_setting}}" if save_origin && !save_origin_build_setting_value.nil? xc.attributes[hmap_build_setting] = value xc.attributes[build_setting] = "${#{hmap_build_setting}}" yield(xc) if block_given? xc.save_as(path) end |
.specialize_format(format, swapped) ⇒ Object
34 35 36 37 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 34 def self.specialize_format(format, swapped) modifier = swapped ? '<' : '>' format.tr('=', modifier) end |
.string_downcase_hash(str) ⇒ Object
39 40 41 42 43 44 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 39 def self.string_downcase_hash(str) str.downcase.bytes.inject(0) do |sum, value| sum += value * 13 sum end end |
.swapped_magic?(magic, version) ⇒ Boolean
56 57 58 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 56 def self.swapped_magic?(magic, version) magic.eql?(HEADER_CONST[:HMAP_SWAPPED_MAGIC]) && version.eql?(HEADER_CONST[:HMAP_SWAPPED_VERSION]) end |
.target_xcconfig_path(targets) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 80 def self.target_xcconfig_path(targets) targets.each do |target| raise ClassIncludedError.new(target.class, Pod::Target) unless target.is_a?(Pod::Target) config_h = Pod::Target.instance_method(:build_settings).bind(target).call config_h.each_key do |configuration_name| xcconfig = target.xcconfig_path(configuration_name) yield(xcconfig) if block_given? end end end |
.update_changed_file(path, contents) ⇒ Object
46 47 48 49 50 51 52 53 54 |
# File 'lib/cocoapods-hmap-prebuilt/hmap_utils.rb', line 46 def self.update_changed_file(path, contents) if path.exist? content_stream = StringIO.new(contents) identical = File.open(path, 'rb') { |f| FileUtils.compare_stream(f, content_stream) } return if identical end path.dirname.mkpath File.open(path, 'w') { |f| f.write(contents) } end |