Class: Pilot::TesterManager
- Defined in:
- lib/pilot/tester_manager.rb
Instance Attribute Summary
Attributes inherited from Manager
Instance Method Summary collapse
- #add_tester(options) ⇒ Object
-
#describe_tester(tester) ⇒ Object
Print out all the details of a specific tester.
- #find_tester(options) ⇒ Object
-
#list(all_testers, title, headings) ⇒ Object
Requires a block that accepts a tester and returns an array of tester column values.
- #list_by_app(all_testers, title) ⇒ Object
- #list_global(all_testers, title) ⇒ Object
- #list_testers(options) ⇒ Object
-
#list_testers_by_app(app_filter) ⇒ Object
private.
- #list_testers_global ⇒ Object
- #remove_tester(options) ⇒ Object
Methods inherited from Manager
#app, #fetch_app_id, #fetch_app_identifier, #fetch_app_platform, #login, #start
Instance Method Details
#add_tester(options) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/pilot/tester_manager.rb', line 7 def add_tester() start() if config[:groups] groups = Spaceship::Tunes::Tester::External.groups selected_groups = [] config[:groups].each do |group| group_id = groups.find { |k, v| v == group || k == group } raise "Group '#{group}' not found for #{config[:email]}" unless group_id selected_groups.push(group_id[0]) end config[:groups] = selected_groups end begin tester = Spaceship::Tunes::Tester::Internal.find(config[:email]) tester ||= Spaceship::Tunes::Tester::External.find(config[:email]) if tester UI.success("Existing tester #{tester.email}") else tester = Spaceship::Tunes::Tester::External.create!(email: config[:email], first_name: config[:first_name], last_name: config[:last_name], groups: config[:groups]) UI.success("Successfully invited tester: #{tester.email}") end app_filter = (config[:apple_id] || config[:app_identifier]) if app_filter begin app = Spaceship::Application.find(app_filter) UI.user_error!("Couldn't find app with '#{app_filter}'") unless app tester.add_to_app!(app.apple_id) UI.success("Successfully added tester to app #{app_filter}") rescue => ex UI.error("Could not add #{tester.email} to app: #{ex}") raise ex end end rescue => ex UI.error("Could not create tester #{config[:email]}") raise ex end end |
#describe_tester(tester) ⇒ Object
Print out all the details of a specific tester
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/pilot/tester_manager.rb', line 173 def describe_tester(tester) return unless tester rows = [] rows << ["First name", tester.first_name] rows << ["Last name", tester.last_name] rows << ["Email", tester.email] if tester.groups.length > 0 rows << ["Groups", tester.groups_list] end if tester.latest_install_date rows << ["Latest Version", tester.full_version] rows << ["Latest Install Date", tester.pretty_install_date] end if tester.devices.length == 0 rows << ["Devices", "No devices"] else rows << ["#{tester.devices.count} Devices", ""] tester.devices.each do |device| current = "\u2022 #{device['model']}, iOS #{device['osVersion']}" if rows.last[1].length == 0 rows.last[1] = current else rows << ["", current] end end end puts Terminal::Table.new( title: tester.email.green, rows: rows ) end |
#find_tester(options) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/pilot/tester_manager.rb', line 53 def find_tester() start() tester = Spaceship::Tunes::Tester::Internal.find(config[:email]) tester ||= Spaceship::Tunes::Tester::External.find(config[:email]) UI.user_error!("Tester #{config[:email]} not found") unless tester describe_tester(tester) return tester end |
#list(all_testers, title, headings) ⇒ Object
Requires a block that accepts a tester and returns an array of tester column values
164 165 166 167 168 169 170 |
# File 'lib/pilot/tester_manager.rb', line 164 def list(all_testers, title, headings) puts Terminal::Table.new( title: title.green, headings: headings, rows: all_testers.map { |tester| yield tester } ) end |
#list_by_app(all_testers, title) ⇒ Object
149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/pilot/tester_manager.rb', line 149 def list_by_app(all_testers, title) headers = ["First", "Last", "Email", "Groups"] list(all_testers, title, headers) do |tester| [ tester.first_name, tester.last_name, tester.email, tester.groups_list # Testers returned by the query made in the context of an app do not contain # the devices, version, or install date information ] end end |
#list_global(all_testers, title) ⇒ Object
134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/pilot/tester_manager.rb', line 134 def list_global(all_testers, title) headers = ["First", "Last", "Email", "Groups", "Devices", "Latest Version", "Latest Install Date"] list(all_testers, title, headers) do |tester| [ tester.first_name, tester.last_name, tester.email, tester.groups_list, tester.devices.count, tester.full_version, tester.pretty_install_date ] end end |
#list_testers(options) ⇒ Object
92 93 94 95 96 97 98 99 100 101 |
# File 'lib/pilot/tester_manager.rb', line 92 def list_testers() start() app_filter = (config[:apple_id] || config[:app_identifier]) if app_filter list_testers_by_app(app_filter) else list_testers_global end end |
#list_testers_by_app(app_filter) ⇒ Object
private
105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/pilot/tester_manager.rb', line 105 def list_testers_by_app(app_filter) app = Spaceship::Application.find(app_filter) UI.user_error!("Couldn't find app with '#{app_filter}'") unless app int_testers = Spaceship::Tunes::Tester::Internal.all_by_app(app.apple_id) ext_testers = Spaceship::Tunes::Tester::External.all_by_app(app.apple_id) list_by_app(int_testers, "Internal Testers") puts "" list_by_app(ext_testers, "External Testers") end |
#list_testers_global ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/pilot/tester_manager.rb', line 117 def list_testers_global begin int_testers = Spaceship::Tunes::Tester::Internal.all ext_testers = Spaceship::Tunes::Tester::External.all rescue => ex if ex.to_s.include?("Forbidden") UI.user_error!("You don't have the permission to list the testers of your whole team. Please provide an app identifier to list all testers of a specific application.") else raise ex end end list_global(int_testers, "Internal Testers") puts "" list_global(ext_testers, "External Testers") end |
#remove_tester(options) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/pilot/tester_manager.rb', line 65 def remove_tester() start() tester = Spaceship::Tunes::Tester::External.find(config[:email]) tester ||= Spaceship::Tunes::Tester::Internal.find(config[:email]) if tester app_filter = (config[:apple_id] || config[:app_identifier]) if app_filter begin app = Spaceship::Application.find(app_filter) UI.user_error!("Couldn't find app with '#{app_filter}'") unless app tester.remove_from_app!(app.apple_id) UI.success("Successfully removed tester #{tester.email} from app #{app_filter}") rescue => ex UI.error("Could not remove #{tester.email} from app: #{ex}") raise ex end else tester.delete! UI.success("Successfully removed tester #{tester.email}") end else UI.error("Tester not found: #{config[:email]}") end end |