Class: PProf::OutputFormatter

Inherits:
Object
  • Object
show all
Defined in:
lib/pprof/output_formatter.rb

Overview

A helper tool to pretty-print Provisioning Profile informations

Defined Under Namespace

Classes: ASCIITable

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(output = $stdout) ⇒ OutputFormatter

Initialize a new OutputFormatter



11
12
13
# File 'lib/pprof/output_formatter.rb', line 11

def initialize(output = $stdout)
  @output = output
end

Class Method Details

.match_aps_env(actual, expected) ⇒ Object



165
166
167
168
169
# File 'lib/pprof/output_formatter.rb', line 165

def self.match_aps_env(actual, expected)
  return false if actual.nil?      # false if no Push entitlements
  return true if expected === true # true if Push present but we don't filter on specific env
  return actual =~ expected        # true if Push present and we filter on specific env
end

Instance Method Details

Prints the filtered list of Provisioning Profiles

Convenience method. Calls self.print_list with a filter block build from a filter hash



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/pprof/output_formatter.rb', line 89

def print_filtered_list(dir = PProf::ProvisioningProfile::DEFAULT_DIR, filters = {}, list_options = { :mode => :table })
  filter_func = lambda do |p|
    (filters[:name].nil? || p.name =~ filters[:name]) &&
    (filters[:appid_name].nil? || p.app_id_name =~ filters[:appid_name]) &&
    (filters[:appid].nil? || p.entitlements.app_id =~ filters[:appid]) &&
    (filters[:uuid].nil? || p.uuid =~ filters[:uuid]) &&
    (filters[:team].nil? || p.team_name =~ filters[:team] || p.team_ids.any? { |id| id =~ filters[:team] }) &&
    (filters[:exp].nil? || (p.expiration_date < DateTime.now) == filters[:exp]) &&
    (filters[:has_devices].nil? || !(p.provisioned_devices || []).empty? == filters[:has_devices]) &&
    (filters[:all_devices].nil? || p.provisions_all_devices == filters[:all_devices]) &&
    (filters[:aps_env].nil? || match_aps_env(p.entitlements.aps_environment, filters[:aps_env])) &&
    true
  end

  case list_options[:mode]
  when :table
    print_table(dir, &filter_func)
  else
    print_list(dir, list_options, &filter_func)
  end
end

Prints the description of a Provisioning Profile



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/pprof/output_formatter.rb', line 48

def print_info(profile, options = nil)
  options ||= { :info => true }
  if options[:info]
    keys = [:name, :uuid, :app_id_name, :app_id_prefix, :creation_date, :expiration_date, :ttl, :team_ids, :team_name]
    keys.each do |key|
      @output.puts "- #{key.to_s}: #{profile.send(key.to_sym)}"
    end
    @output.puts "- Entitlements:"
    @output.puts profile.entitlements.to_s.split("\n").map { |line| "   #{line}" }
  end

  if options[:info] || options[:certs] 
    @output.puts "- #{profile.developer_certificates.count} Developer Certificates"
    profile.developer_certificates.each { |cert| @output.puts "   - #{cert.subject}" } if options[:certs]
  end
  if options[:info] || options[:devices]
    @output.puts "- #{(profile.provisioned_devices || []).count} Provisioned Devices"
    profile.provisioned_devices.each { |udid| @output.puts "   - #{udid}" } if options[:devices]
    @output.puts "- Provision all devices: #{profile.provisions_all_devices.inspect}"
  end
end

Prints the filtered list of UUIDs or Paths only

Yields:

  • each provisioning provile for filtering/validation The block is given ProvisioningProfile object and should return true to display the row, false to filter it out



153
154
155
156
157
158
159
160
161
# File 'lib/pprof/output_formatter.rb', line 153

def print_list(dir = PProf::ProvisioningProfile::DEFAULT_DIR, options)
  Dir[dir + '/*.mobileprovision'].each do |file|
    p = PProf::ProvisioningProfile.new(file)
    next if block_given? && !yield(p)

    @output.print options[:mode] == :uuid ? p.uuid.chomp : file.chomp
    @output.print options[:zero] ? "\0" : "\n"
  end
end

Prints the filtered list as a table

Yields:

  • each provisioning provile for filtering/validation The block is given ProvisioningProfile object and should return true to display the row, false to filter it out



121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/pprof/output_formatter.rb', line 121

def print_table(dir = PProf::ProvisioningProfile::DEFAULT_DIR)
  count = 0

  table = PProf::OutputFormatter::ASCIITable.new(36, 60, 45, 25, 2, 10)
  @output.puts table.separator
  @output.puts table.row('UUID', 'Name', 'AppID', 'Expiration Date', ' ', 'Team Name')
  @output.puts table.separator

  Dir[dir + '/*.mobileprovision'].each do |file|
    p = PProf::ProvisioningProfile.new(file)
    
    next if block_given? && !yield(p)

    state = DateTime.now < p.expiration_date ? "\u{2705}" : "\u{274c}" # 2705=checkmark, 274C=red X
    @output.puts table.row(p.uuid, p.name, p.entitlements.app_id, p.expiration_date.to_time, state, p.team_name)
    count += 1
  end

  @output.puts table.separator
  @output.puts "#{count} Provisioning Profiles found."
end