mdq 0.4.1 → 0.5.1

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: 84a0f2929127bcd9631e862124b937660ab2f8e578d93213d08c792ae49a029a
4
- data.tar.gz: b9c0cb1eb1eb10f74614a52c2fb8bbc3fc8be3b13cbfb213c21bb870a75b8a21
3
+ metadata.gz: ffd9decc1cff5cdd2d83e9d557fb65e558cc7db704f24e34efbf089a1c1be89d
4
+ data.tar.gz: 3b3a2c97b8af6ebe54297d49e814d2bbcf53601d0fbad2f8e991c3fc25056811
5
5
  SHA512:
6
- metadata.gz: 190b46a81fd4e4a7bf02439bdbd93e3399e75335db6bfbbd6cf9567e36ccb2656db6aba030a08320ad8e38527ce207db2b1c6790650e244ee99c8d785ef69518
7
- data.tar.gz: be7aef474231155add2e325570eaaa0d6f2e31acfcb53afb0cb9a75ba8c3a5470481a7779066601940142857a52f6614f7ca95120c5898364af2981ceca18ed0
6
+ metadata.gz: 35687cc7cca8dc18abaf3610231cd4300cf5307c0c9189b355429c29578da092e5f80bfdb90248a57869bc2c8d6a831edce9673983c0e5b37c2869c896f3f9a3
7
+ data.tar.gz: 0e111a1d93f79fbc738b3535637add1825f1a39c202ca04e27e8f2c67e5caa5c05f740bf10310c6180a37773ec9fbe81963fbd58bb749f352679bc8b39741fd3
data/README.base.md CHANGED
@@ -31,23 +31,28 @@ $ mdq list
31
31
  [
32
32
  {
33
33
  "id": 1,
34
- "udid": "XXXXX",
35
- "serial_number": "XXXXX",
36
- "name": "Pixel Tablet",
34
+ "udid": "ANDROID_UDID",
35
+ "serial_number": "ANDROID_UDID",
36
+ "name": "Pixel 7",
37
37
  "authorized": true,
38
38
  "platform": "Android",
39
39
  "marketing_name": null,
40
- "model": "Pixel Tablet",
40
+ "model": "Pixel 7",
41
41
  "build_version": "16",
42
- "build_id": "BP22.250325.012",
43
- "battery_level": 89,
44
- "total_capacity": 115855444,
45
- "free_capacity": 101137652
46
- },
47
- {
42
+ "build_id": "BP31.250502.008",
43
+ "battery_level": 88,
44
+ "total_disk": 115249236000,
45
+ "used_disk": 18835692000,
46
+ "available_disk": 96413544000,
47
+ "capacity": 16,
48
+ "human_readable_total_disk": "107.33 GB",
49
+ "human_readable_used_disk": "17.54 GB",
50
+ "human_readable_available_disk": "89.79 GB"
51
+ },
52
+ {
48
53
  "id": 2,
49
- "udid": "XXXXX",
50
- "serial_number": "XXXXX",
54
+ "udid": "APPLE_UDID",
55
+ "serial_number": "XXX",
51
56
  "name": "iPhone 16 Pro",
52
57
  "authorized": true,
53
58
  "platform": "iOS",
@@ -56,8 +61,13 @@ $ mdq list
56
61
  "build_version": "18.4.1",
57
62
  "build_id": "22E252",
58
63
  "battery_level": null,
59
- "total_capacity": null,
60
- "free_capacity": null
64
+ "total_disk": 128000000000,
65
+ "used_disk": null,
66
+ "available_disk": null,
67
+ "capacity": null,
68
+ "human_readable_total_disk": "119.21 GB",
69
+ "human_readable_used_disk": null,
70
+ "human_readable_available_disk": null
61
71
  }
62
72
  ]
63
73
  ```
@@ -67,10 +77,10 @@ You can filter using SQL.
67
77
  ```
68
78
  $ mdq list -q="select * from devices where platform='iOS'"
69
79
  [
70
- {
80
+ {
71
81
  "id": 1,
72
- "udid": "XXXXX",
73
- "serial_number": "XXXXX",
82
+ "udid": "APPLE_UDID",
83
+ "serial_number": "XXX",
74
84
  "name": "iPhone 16 Pro",
75
85
  "authorized": true,
76
86
  "platform": "iOS",
@@ -79,8 +89,13 @@ $ mdq list -q="select * from devices where platform='iOS'"
79
89
  "build_version": "18.4.1",
80
90
  "build_id": "22E252",
81
91
  "battery_level": null,
82
- "total_capacity": null,
83
- "free_capacity": null
92
+ "total_disk": 128000000000,
93
+ "used_disk": null,
94
+ "available_disk": null,
95
+ "capacity": null,
96
+ "human_readable_total_disk": "119.21 GB",
97
+ "human_readable_used_disk": null,
98
+ "human_readable_available_disk": null
84
99
  }
85
100
  ]
86
101
  ```
@@ -129,9 +144,13 @@ Details of the devices table.
129
144
  | build_version | ro.build.version.release | deviceProperties.osVersionNumber |
130
145
  | build_id | ro.build.id | deviceProperties.osBuildUpdate |
131
146
  | battery_level | battery | Always "null" |
132
- | total_capacity | df | hardwareProperties.internalStorageCapacity |
133
- | free_capacity | df | Always "null" |
134
-
147
+ | total_disk | df | hardwareProperties.internalStorageCapacity |
148
+ | available_disk | df | Always "null" |
149
+ | used_disk | total_disk - total_disk | Always "null" |
150
+ | capacity | (used_disk / total_disk) * 100 | Always "null" |
151
+ | human_readable_total_disk | total_disk | total_disk |
152
+ | human_readable_available_disk | available_disk | Always "null" |
153
+ | human_readable_used_disk | used_disk | Always "null" |
135
154
 
136
155
  Details of the apps table.
137
156
  Apple Devices displays the apps installed with Xcode.
data/README.ja.md CHANGED
@@ -26,23 +26,28 @@ $ mdq list
26
26
  [
27
27
  {
28
28
  "id": 1,
29
- "udid": "XXXXX",
30
- "serial_number": "XXXXX",
31
- "name": "Pixel Tablet",
29
+ "udid": "ANDROID_UDID",
30
+ "serial_number": "ANDROID_UDID",
31
+ "name": "Pixel 7",
32
32
  "authorized": true,
33
33
  "platform": "Android",
34
34
  "marketing_name": null,
35
- "model": "Pixel Tablet",
35
+ "model": "Pixel 7",
36
36
  "build_version": "16",
37
- "build_id": "BP22.250325.012",
38
- "battery_level": 89,
39
- "total_capacity": 115855444,
40
- "free_capacity": 101137652
41
- },
42
- {
37
+ "build_id": "BP31.250502.008",
38
+ "battery_level": 88,
39
+ "total_disk": 115249236000,
40
+ "used_disk": 18835692000,
41
+ "available_disk": 96413544000,
42
+ "capacity": 16,
43
+ "human_readable_total_disk": "107.33 GB",
44
+ "human_readable_used_disk": "17.54 GB",
45
+ "human_readable_available_disk": "89.79 GB"
46
+ },
47
+ {
43
48
  "id": 2,
44
- "udid": "XXXXX",
45
- "serial_number": "XXXXX",
49
+ "udid": "APPLE_UDID",
50
+ "serial_number": "XXX",
46
51
  "name": "iPhone 16 Pro",
47
52
  "authorized": true,
48
53
  "platform": "iOS",
@@ -51,8 +56,13 @@ $ mdq list
51
56
  "build_version": "18.4.1",
52
57
  "build_id": "22E252",
53
58
  "battery_level": null,
54
- "total_capacity": null,
55
- "free_capacity": null
59
+ "total_disk": 128000000000,
60
+ "used_disk": null,
61
+ "available_disk": null,
62
+ "capacity": null,
63
+ "human_readable_total_disk": "119.21 GB",
64
+ "human_readable_used_disk": null,
65
+ "human_readable_available_disk": null
56
66
  }
57
67
  ]
58
68
  ```
@@ -62,10 +72,10 @@ You can filter using SQL.
62
72
  ```
63
73
  $ mdq list -q="select * from devices where platform='iOS'"
64
74
  [
65
- {
75
+ {
66
76
  "id": 1,
67
- "udid": "XXXXX",
68
- "serial_number": "XXXXX",
77
+ "udid": "APPLE_UDID",
78
+ "serial_number": "XXX",
69
79
  "name": "iPhone 16 Pro",
70
80
  "authorized": true,
71
81
  "platform": "iOS",
@@ -74,8 +84,13 @@ $ mdq list -q="select * from devices where platform='iOS'"
74
84
  "build_version": "18.4.1",
75
85
  "build_id": "22E252",
76
86
  "battery_level": null,
77
- "total_capacity": null,
78
- "free_capacity": null
87
+ "total_disk": 128000000000,
88
+ "used_disk": null,
89
+ "available_disk": null,
90
+ "capacity": null,
91
+ "human_readable_total_disk": "119.21 GB",
92
+ "human_readable_used_disk": null,
93
+ "human_readable_available_disk": null
79
94
  }
80
95
  ]
81
96
  ```
@@ -124,9 +139,13 @@ Details of the devices table.
124
139
  | build_version | ro.build.version.release | deviceProperties.osVersionNumber |
125
140
  | build_id | ro.build.id | deviceProperties.osBuildUpdate |
126
141
  | battery_level | battery | Always "null" |
127
- | total_capacity | df | hardwareProperties.internalStorageCapacity |
128
- | free_capacity | df | Always "null" |
129
-
142
+ | total_disk | df | hardwareProperties.internalStorageCapacity |
143
+ | available_disk | df | Always "null" |
144
+ | used_disk | total_disk - total_disk | Always "null" |
145
+ | capacity | (used_disk / total_disk) * 100 | Always "null" |
146
+ | human_readable_total_disk | total_disk | total_disk |
147
+ | human_readable_available_disk | available_disk | Always "null" |
148
+ | human_readable_used_disk | used_disk | Always "null" |
130
149
 
131
150
  Details of the apps table.
132
151
  Apple Devices displays the apps installed with Xcode.
data/README.md CHANGED
@@ -26,23 +26,28 @@ $ mdq list
26
26
  [
27
27
  {
28
28
  "id": 1,
29
- "udid": "XXXXX",
30
- "serial_number": "XXXXX",
31
- "name": "Pixel Tablet",
29
+ "udid": "ANDROID_UDID",
30
+ "serial_number": "ANDROID_UDID",
31
+ "name": "Pixel 7",
32
32
  "authorized": true,
33
33
  "platform": "Android",
34
34
  "marketing_name": null,
35
- "model": "Pixel Tablet",
35
+ "model": "Pixel 7",
36
36
  "build_version": "16",
37
- "build_id": "BP22.250325.012",
38
- "battery_level": 89,
39
- "total_capacity": 115855444,
40
- "free_capacity": 101137652
41
- },
42
- {
37
+ "build_id": "BP31.250502.008",
38
+ "battery_level": 88,
39
+ "total_disk": 115249236000,
40
+ "used_disk": 18835692000,
41
+ "available_disk": 96413544000,
42
+ "capacity": 16,
43
+ "human_readable_total_disk": "107.33 GB",
44
+ "human_readable_used_disk": "17.54 GB",
45
+ "human_readable_available_disk": "89.79 GB"
46
+ },
47
+ {
43
48
  "id": 2,
44
- "udid": "XXXXX",
45
- "serial_number": "XXXXX",
49
+ "udid": "APPLE_UDID",
50
+ "serial_number": "XXX",
46
51
  "name": "iPhone 16 Pro",
47
52
  "authorized": true,
48
53
  "platform": "iOS",
@@ -51,8 +56,13 @@ $ mdq list
51
56
  "build_version": "18.4.1",
52
57
  "build_id": "22E252",
53
58
  "battery_level": null,
54
- "total_capacity": null,
55
- "free_capacity": null
59
+ "total_disk": 128000000000,
60
+ "used_disk": null,
61
+ "available_disk": null,
62
+ "capacity": null,
63
+ "human_readable_total_disk": "119.21 GB",
64
+ "human_readable_used_disk": null,
65
+ "human_readable_available_disk": null
56
66
  }
57
67
  ]
58
68
  ```
@@ -62,10 +72,10 @@ You can filter using SQL.
62
72
  ```
63
73
  $ mdq list -q="select * from devices where platform='iOS'"
64
74
  [
65
- {
75
+ {
66
76
  "id": 1,
67
- "udid": "XXXXX",
68
- "serial_number": "XXXXX",
77
+ "udid": "APPLE_UDID",
78
+ "serial_number": "XXX",
69
79
  "name": "iPhone 16 Pro",
70
80
  "authorized": true,
71
81
  "platform": "iOS",
@@ -74,8 +84,13 @@ $ mdq list -q="select * from devices where platform='iOS'"
74
84
  "build_version": "18.4.1",
75
85
  "build_id": "22E252",
76
86
  "battery_level": null,
77
- "total_capacity": null,
78
- "free_capacity": null
87
+ "total_disk": 128000000000,
88
+ "used_disk": null,
89
+ "available_disk": null,
90
+ "capacity": null,
91
+ "human_readable_total_disk": "119.21 GB",
92
+ "human_readable_used_disk": null,
93
+ "human_readable_available_disk": null
79
94
  }
80
95
  ]
81
96
  ```
@@ -124,9 +139,13 @@ Details of the devices table.
124
139
  | build_version | ro.build.version.release | deviceProperties.osVersionNumber |
125
140
  | build_id | ro.build.id | deviceProperties.osBuildUpdate |
126
141
  | battery_level | battery | Always "null" |
127
- | total_capacity | df | hardwareProperties.internalStorageCapacity |
128
- | free_capacity | df | Always "null" |
129
-
142
+ | total_disk | df | hardwareProperties.internalStorageCapacity |
143
+ | available_disk | df | Always "null" |
144
+ | used_disk | total_disk - total_disk | Always "null" |
145
+ | capacity | (used_disk / total_disk) * 100 | Always "null" |
146
+ | human_readable_total_disk | total_disk | total_disk |
147
+ | human_readable_available_disk | available_disk | Always "null" |
148
+ | human_readable_used_disk | used_disk | Always "null" |
130
149
 
131
150
  Details of the apps table.
132
151
  Apple Devices displays the apps installed with Xcode.
data/lib/mdq/check.rb CHANGED
@@ -7,18 +7,22 @@ module Mdq
7
7
  # Check
8
8
  class Check
9
9
  def initialize
10
+ ob = Mdq::OutputBuilder.new
11
+
10
12
  db = Mdq::DB.new
11
- show_message('adb', db.android_discoverable?)
12
- show_message('Xcode', db.apple_discoverable?)
13
+ ob.add(show_message('adb', db.android_discoverable?))
14
+ ob.add(show_message('Xcode', db.apple_discoverable?))
15
+
16
+ ob.print
13
17
  end
14
18
 
15
19
  private
16
20
 
17
21
  def show_message(name, discoverable)
18
22
  if discoverable
19
- puts "# #{name} is installed."
23
+ { result: "#{name} is installed." }
20
24
  else
21
- puts "# #{name} is not installed."
25
+ { result: "#{name} is not installed." }
22
26
  end
23
27
  end
24
28
  end
data/lib/mdq/db.rb CHANGED
@@ -27,9 +27,8 @@ module Mdq
27
27
 
28
28
  begin
29
29
  ActiveRecord::Base.connection.execute(sql)
30
- rescue StandardError
31
- warn 'SQL Syntax Error.'
32
- exit
30
+ rescue StandardError => e
31
+ { result: e }
33
32
  end
34
33
  else
35
34
  Device.all
@@ -46,7 +45,7 @@ module Mdq
46
45
  adb_command("pull #{file} #{output}", udid)
47
46
  adb_command("adb shell rm #{file}")
48
47
 
49
- puts "# Screenshot of #{udid} to #{output}"
48
+ { command: 'cap', udid: udid, result: nil }
50
49
  end
51
50
 
52
51
  # Appをインストールする
@@ -54,10 +53,7 @@ module Mdq
54
53
  output, = adb_command("install #{input}", udid) if is_android && input.end_with?('.apk')
55
54
  output, = apple_command("device install app #{input}", udid) if !is_android && input.end_with?('.ipa')
56
55
 
57
- return unless output
58
-
59
- puts "# Install #{input} to #{udid}"
60
- puts output
56
+ { command: 'install', udid: udid, result: output }
61
57
  end
62
58
 
63
59
  # Appをアンインストールする
@@ -68,10 +64,7 @@ module Mdq
68
64
  output, = apple_command("device uninstall app #{input}", udid)
69
65
  end
70
66
 
71
- return unless output
72
-
73
- puts "# Uninstall #{input} from #{udid}"
74
- puts output
67
+ { command: 'uninstall', udid: udid, result: output }
75
68
  end
76
69
  end
77
70
  end
data/lib/mdq/discovery.rb CHANGED
@@ -53,7 +53,7 @@ module Mdq
53
53
  end
54
54
 
55
55
  # Androidデバイス一覧を取得する
56
- def android_discover
56
+ def android_discover # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
57
57
  output, = adb_command('devices -l')
58
58
  return if output.nil?
59
59
 
@@ -71,8 +71,9 @@ module Mdq
71
71
  build_id, = adb_command('shell getprop ro.build.id', udid)
72
72
  name, = adb_command('shell settings get global device_name', udid)
73
73
  battery_level = nil
74
- total_capacity = nil
75
- free_capacity = nil
74
+ total_disk = nil
75
+ available_disk = nil
76
+ used_disk = nil
76
77
 
77
78
  # バッテリー
78
79
  lines1, = adb_command('shell dumpsys battery', udid)
@@ -86,10 +87,11 @@ module Mdq
86
87
  next if index2.zero?
87
88
 
88
89
  columns = line2.split
89
- unless columns[5].index('/data').nil?
90
- total_capacity = columns[1]
91
- free_capacity = columns[3]
92
- end
90
+ next if columns[5].index('/data').nil?
91
+
92
+ total_disk = columns[1].to_f * 1000
93
+ available_disk = columns[3].to_f * 1000
94
+ used_disk = total_disk - available_disk
93
95
  end
94
96
 
95
97
  Device.create({
@@ -101,8 +103,13 @@ module Mdq
101
103
  build_version: build_version.strip,
102
104
  build_id: build_id.strip,
103
105
  battery_level: battery_level,
104
- total_capacity: total_capacity,
105
- free_capacity: free_capacity,
106
+ total_disk: total_disk,
107
+ available_disk: available_disk,
108
+ used_disk: used_disk,
109
+ capacity: (used_disk / total_disk) * 100,
110
+ human_readable_total_disk: number_to_human_size(total_disk),
111
+ human_readable_available_disk: number_to_human_size(available_disk),
112
+ human_readable_used_disk: number_to_human_size(used_disk),
106
113
  platform: 'Android'
107
114
  })
108
115
 
@@ -128,6 +135,7 @@ module Mdq
128
135
  result = JSON.parse(f.read)
129
136
  result['result']['devices'].each do |device|
130
137
  udid = device['hardwareProperties']['udid']
138
+ total_disk = device['hardwareProperties']['internalStorageCapacity']
131
139
  Device.create({
132
140
  udid: udid,
133
141
  serial_number: device['hardwareProperties']['serialNumber'],
@@ -138,7 +146,8 @@ module Mdq
138
146
  model: device['hardwareProperties']['productType'],
139
147
  build_version: device['deviceProperties']['osVersionNumber'],
140
148
  build_id: device['deviceProperties']['osBuildUpdate'],
141
- total_capacity: device['hardwareProperties']['internalStorageCapacity']
149
+ total_disk: total_disk,
150
+ human_readable_total_disk: number_to_human_size(total_disk)
142
151
  })
143
152
  end
144
153
 
@@ -179,12 +188,28 @@ module Mdq
179
188
  File.delete(file)
180
189
  end
181
190
 
191
+ # DBのリセット
182
192
  def reset
183
193
  Device.destroy_all
184
194
  App.destroy_all
185
195
  ActiveRecord::Base.connection.execute("delete from sqlite_sequence where name='devices'")
186
196
  ActiveRecord::Base.connection.execute("delete from sqlite_sequence where name='apps'")
187
197
  end
198
+
199
+ def number_to_human_size(size)
200
+ return nil if size.nil?
201
+
202
+ units = [' B', ' KB', ' MB', ' GB', ' TB']
203
+
204
+ i = 0
205
+ k = 1000.0
206
+ while size > k
207
+ size /= k
208
+ i += 1
209
+ end
210
+
211
+ "#{(size * 100).round / 100.0}#{units[i]}"
212
+ end
188
213
  end
189
214
  end
190
215
 
@@ -207,8 +232,13 @@ ActiveRecord::Migration.create_table :devices do |t|
207
232
  t.string :build_version
208
233
  t.string :build_id
209
234
  t.integer :battery_level
210
- t.integer :total_capacity
211
- t.integer :free_capacity
235
+ t.integer :total_disk
236
+ t.integer :used_disk
237
+ t.integer :available_disk
238
+ t.integer :capacity
239
+ t.string :human_readable_total_disk
240
+ t.string :human_readable_used_disk
241
+ t.string :human_readable_available_disk
212
242
  end
213
243
 
214
244
  ActiveRecord::Migration.create_table :apps do |t|
data/lib/mdq/list.rb CHANGED
@@ -20,17 +20,21 @@ module Mdq
20
20
  end
21
21
  end
22
22
 
23
+ ob = Mdq::OutputBuilder.new
24
+
23
25
  models.each do |device|
24
26
  model = Device.find_by(udid: device.udid)
25
27
  udid = model.udid
26
28
  is_android = model.android?
27
29
 
28
- db.device_screencap(options[:cap], udid, is_android) if options[:cap]
29
- db.app_install(options[:install], udid, is_android) if options[:install]
30
- db.app_uninstall(options[:uninstall], udid, is_android) if options[:uninstall]
30
+ ob.add(db.device_screencap(options[:cap], udid, is_android)) if options[:cap]
31
+ ob.add(db.app_install(options[:install], udid, is_android)) if options[:install]
32
+ ob.add(db.app_uninstall(options[:uninstall], udid, is_android)) if options[:uninstall]
31
33
  rescue StandardError
32
34
  # none
33
35
  end
36
+
37
+ ob.print
34
38
  end
35
39
  end
36
40
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mdq'
4
+
5
+ # Mdq
6
+ module Mdq
7
+ # OutputBuilder
8
+ class OutputBuilder
9
+ def initialize
10
+ @result = []
11
+ end
12
+
13
+ def clear
14
+ @result = []
15
+ end
16
+
17
+ def add(new_result)
18
+ @result << new_result
19
+ end
20
+
21
+ def print
22
+ return if @result == []
23
+
24
+ puts JSON.pretty_generate(@result.as_json)
25
+ end
26
+ end
27
+ end
data/lib/mdq/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mdq
4
- VERSION = '0.4.1'
4
+ VERSION = '0.5.1'
5
5
  end
data/lib/mdq.rb CHANGED
@@ -4,6 +4,7 @@ require_relative 'mdq/version'
4
4
  require 'mdq/cli'
5
5
  require 'mdq/check'
6
6
  require 'mdq/list'
7
+ require 'mdq/output_builder'
7
8
  require 'mdq/discovery'
8
9
  require 'mdq/db'
9
10
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mdq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - arthur87
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-05-24 00:00:00.000000000 Z
11
+ date: 2025-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -90,6 +90,7 @@ files:
90
90
  - lib/mdq/db.rb
91
91
  - lib/mdq/discovery.rb
92
92
  - lib/mdq/list.rb
93
+ - lib/mdq/output_builder.rb
93
94
  - lib/mdq/version.rb
94
95
  homepage: https://github.com/arthur87/mdq
95
96
  licenses: