headdesk 0.8.0 → 0.9.0

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: eac86940351195bdcb6a319a72aef571a3c81a440845332a15463a32fc231296
4
- data.tar.gz: 0a278770a0fdf1d24992a3cd77607c86bcfb203583d27f59741f6c1c30fb61e8
3
+ metadata.gz: e812c6195d207316fbcb2e365a7ad4828d12667586ffec08c40d9a61f0c92714
4
+ data.tar.gz: 817934245dfea92c9b7b05f961272c9286031d18e9861170fe042ca39d5e50ab
5
5
  SHA512:
6
- metadata.gz: 84b726485e45f94c5e573e2fcfc930cb1808e2952ff284f40004fa49eaa281c967671e22ff744fc8e6b78abb5b20e6637967556d97d01d773e01d789106790ca
7
- data.tar.gz: dfce5a6b0aff10c0b4287b066b8751eb95cb56eeef8ba8264ae89246cbaab4ba5489e877cbdb68f3c63e70bc05ba3ca259405e6f25a32e0b5406fb45a4999e94
6
+ metadata.gz: 74b4a8e37fa5a3003158611c50cf66687af8f6444c945524beec638baebb2f2e1a1779b61b4602a6325cf6ce31a1d9346e72665cbf6d87a6a725ac3ae9682c70
7
+ data.tar.gz: 4a9e4b8a17c9fe03e9aa98d9b2a0cba3f3dd67a80157ee153e85256a9e5f8ff91688801c845d86e01ccc85900705c056fb1166711e18da6b36e44ab8e1580b22
data/Gemfile.lock CHANGED
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- headdesk (0.8.0)
4
+ headdesk (0.9.0)
5
5
  awesome_print (~> 1.8)
6
6
  nokogiri (~> 1.10)
7
+ oily_png (~> 1.2)
7
8
  thor (~> 0.20)
8
9
 
9
10
  GEM
@@ -15,6 +16,7 @@ GEM
15
16
  descendants_tracker (~> 0.0.4)
16
17
  ice_nine (~> 0.11.0)
17
18
  thread_safe (~> 0.3, >= 0.3.1)
19
+ chunky_png (1.3.11)
18
20
  codeclimate-engine-rb (0.4.1)
19
21
  virtus (~> 1.0)
20
22
  coercible (1.0.0)
@@ -29,6 +31,8 @@ GEM
29
31
  mini_portile2 (2.4.0)
30
32
  nokogiri (1.10.1)
31
33
  mini_portile2 (~> 2.4.0)
34
+ oily_png (1.2.1)
35
+ chunky_png (~> 1.3.7)
32
36
  parallel (1.12.1)
33
37
  parser (2.5.3.0)
34
38
  ast (~> 2.4.0)
@@ -1,6 +1,13 @@
1
1
  # teak/api21_icon
2
2
  Ensures that the APK contains a notification icon for both Android 5+ (API 21+) as well as pre-Android 5, and that these are different icons.
3
3
 
4
+ Also verifies following files have the specified image dimensions:
5
+ * drawable-mdpi/[icon_v21].png 24x24
6
+ * drawable-hdpi/[icon_v21].png 36x36
7
+ * drawable-xhdpi/[icon_v21].png 48x48
8
+ * drawable-xxhdpi/[icon_v21].png 72x72
9
+ * drawable-xxxhdpi/[icon_v21].png 96x96
10
+
4
11
  ## Will Skip If
5
12
  * The Teak SDK is not present.
6
13
 
@@ -8,6 +15,12 @@ Ensures that the APK contains a notification icon for both Android 5+ (API 21+)
8
15
  * There is no drawable resource for `io_teak_small_notification_icon`.
9
16
  * There is no v21 drawable resource for `io_teak_small_notification_icon`
10
17
  * The drawable resources point to the same image.
18
+ * The v21 drawable resources do not exist, or are the incorrect size
19
+ * `drawable-mdpi/[icon_v21].png` does not exist, or is not 24x24
20
+ * `drawable-hdpi/[icon_v21].png` does not exist, or is not 36x36
21
+ * `drawable-xhdpi/[icon_v21].png` does not exist, or is not 48x48
22
+ * `drawable-xxhdpi/[icon_v21].png` does not exist, or is not 72x72
23
+ * `drawable-xxxhdpi/[icon_v21].png` does not exist, or is not 96x96
11
24
 
12
25
  ## Exports
13
26
  The values for `io_teak_small_notification_icon` for less than v21, and v21+.
data/headdesk.gemspec CHANGED
@@ -40,5 +40,6 @@ Gem::Specification.new do |spec|
40
40
 
41
41
  spec.add_dependency 'awesome_print', '~> 1.8'
42
42
  spec.add_dependency 'nokogiri', '~> 1.10'
43
+ spec.add_dependency 'oily_png', '~> 1.2'
43
44
  spec.add_dependency 'thor', '~> 0.20'
44
45
  end
@@ -16,6 +16,14 @@ module Headdesk
16
16
  XmlCollection.new(@path, 'values', modifiers)
17
17
  end
18
18
 
19
+ def file?(file_name)
20
+ File.exist? path_for(file_name)
21
+ end
22
+
23
+ def path_for(file_name)
24
+ "#{@path}/#{file_name.sub(%r{^\/}, '')}"
25
+ end
26
+
19
27
  #
20
28
  # Collection of XML values for specific locale/api/etc
21
29
  #
data/lib/headdesk/apk.rb CHANGED
@@ -64,8 +64,9 @@ module Headdesk
64
64
  min_sdk_version >= gt_eq
65
65
  end
66
66
 
67
+ # :reek:NilCheck
67
68
  def class?(decl)
68
- find_class(decl) != false
69
+ !find_class(decl).nil?
69
70
  end
70
71
 
71
72
  def find_class(decl)
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'oily_png'
4
+
3
5
  module Headdesk
4
6
  module Checks
5
7
  module Teak
@@ -24,10 +26,21 @@ module Headdesk
24
26
  export icon: icon, icon_v21: icon_v21
25
27
 
26
28
  describe "APK contains a drawable for 'io_teak_small_notification_icon'"
27
- fail_check unless: -> { icon && icon_v21 }
29
+ fail_check if: -> { icon.nil? || icon_v21.nil? }
28
30
 
29
31
  describe "'io_teak_small_notification_icon' for v21 is different from < v21"
30
32
  fail_check unless: -> { icon != icon_v21 }
33
+
34
+ resolutions = [['drawable-mdpi', 24], ['drawable-hdpi', 36], ['drawable-xhdpi', 48],
35
+ ['drawable-xxhdpi', 72], ['drawable-xxxhdpi', 96]]
36
+ resolutions.each do |rname, size|
37
+ resource_file = icon_v21.sub('@drawable', "res/#{rname}") + '.png'
38
+ fail_check unless: -> { apk.resources.file?(resource_file) }
39
+
40
+ describe "'#{resource_file}' is #{size}x#{size}"
41
+ image = ChunkyPNG::Image.from_file(apk.resources.path_for(resource_file))
42
+ fail_check unless: -> { size == image.width && size == image.height }
43
+ end
31
44
  end
32
45
  end
33
46
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Headdesk
4
+ #
5
+ # Descriptions for APK methods
6
+ #
7
+ # :reek:RepeatedConditional
8
+ class APKResourcesDescriber
9
+ def initialize(mode_unless)
10
+ @unless = mode_unless
11
+ end
12
+
13
+ def file?(file_name)
14
+ "APK #{@unless ? 'contains' : 'does not contain'} resource file '#{file_name}'"
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'headdesk/descriptionator/resources'
4
+
3
5
  module Headdesk
4
6
  #
5
7
  # Descriptions for APK methods
@@ -21,6 +23,10 @@ module Headdesk
21
23
  def min_sdk(gt_eq)
22
24
  "APK requires #{@unless ? 'at least' : 'less than'} API #{gt_eq}"
23
25
  end
26
+
27
+ def resources
28
+ @resources ||= APKResourcesDescriber.new(@unless)
29
+ end
24
30
  end
25
31
 
26
32
  #
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Headdesk
4
4
  APKTOOL_VERSION = '2.3.4'
5
- VERSION = '0.8.0'
5
+ VERSION = '0.9.0'
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: headdesk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pat Wilson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-16 00:00:00.000000000 Z
11
+ date: 2019-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.10'
97
+ - !ruby/object:Gem::Dependency
98
+ name: oily_png
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.2'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.2'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: thor
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -156,6 +170,7 @@ files:
156
170
  - lib/headdesk/cli.rb
157
171
  - lib/headdesk/data/facebook_sdk_versions.yaml
158
172
  - lib/headdesk/descriptionator.rb
173
+ - lib/headdesk/descriptionator/resources.rb
159
174
  - lib/headdesk/report.rb
160
175
  - lib/headdesk/version.rb
161
176
  homepage: https://github.com/GoCarrot/headdesk