snapshot 0.2.4 → 0.3.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
  SHA1:
3
- metadata.gz: 5fb8551c6c185df8ccba72657f78aed84d5970fc
4
- data.tar.gz: 80bac1bdfc3f0d1f0a682267f781a32416b7a94a
3
+ metadata.gz: 61213c3f96c8204607fbf018d40e57c4c4499a7a
4
+ data.tar.gz: 82488176f7d6e23c45392d2fd424da1929605ee3
5
5
  SHA512:
6
- metadata.gz: bab34e72bc1436f0d5ff95e0acfa78518b87101d9ceed42308233741539de56aa01a0f93614772400ed3d88344ffb7f62ad5cc42ab98e4916eeb892cf66c4215
7
- data.tar.gz: 53ee98138bc60617066898664f37f26a5a252c7ffc635ec826fa54d177249944e4509372a2e7d6e02fcc250ea7d9a8440dbeb9274a77f6996596c22b2c9203c3
6
+ metadata.gz: f02b63a85ef1840d80ca11f0498aae358e6b94b86d5df05a2800b293dda4f38124388a203343ef3f523b4dfc608847da547b8a0a1437baae559319e1f8d2b084
7
+ data.tar.gz: c5ecae81b1c0f848b3605436b95e58718b74e5b23798aad679feafa99d832f393fffecd4b9a0518c3cb5635235acd5a8a31077464bb1825b6c1ef1f010d1e680
data/README.md CHANGED
@@ -167,12 +167,14 @@ To not be asked which scheme to use, just set it like this:
167
167
  ```ruby
168
168
  scheme "Name"
169
169
  ```
170
+ You can also use the environment variable ```SNAPSHOT_SCHEME```.
170
171
 
171
172
  ### Screenshots output path
172
173
  All generated screenshots will be stored in the given path.
173
174
  ```ruby
174
175
  screenshots_path './screenshots'
175
176
  ```
177
+ You can also use the environment variable ```SNAPSHOT_SCREENSHOTS_PATH```.
176
178
 
177
179
  ### Project Path
178
180
  By default, ```snapshot``` will look for your project in the current directory. If it is located somewhere else, pass your custom path:
@@ -198,6 +200,37 @@ If for some reason, the default build command does not work for your project, yo
198
200
 
199
201
  **Make sure** you are setting the output path to ```/tmp/snapshot```.
200
202
 
203
+ ```ruby
204
+ build_command "xcodebuild DSTROOT='/tmp/snapshot' OBJROOT='/tmp/snapshot' SYMROOT='/tmp/snapshot' ... "
205
+ ```
206
+
207
+ ### Custom callbacks to prepare your app
208
+ Run your own script when ```snapshot``` switches the simulator type or the language.
209
+ This can be used to
210
+ - Logout the user
211
+ - Reset all user defaults
212
+ - Pre-fill the database
213
+
214
+ To run a shell script, just use ```system('./script.sh')```.
215
+ ```ruby
216
+ setup_for_device_change do |device|
217
+ puts "Preparing device: #{device}"
218
+ end
219
+
220
+ setup_for_language_change do |lang, device|
221
+ puts "Running #{lang} on #{device}"
222
+ system("./popuplateDatabase.sh")
223
+ end
224
+
225
+ teardown_language do |lang, device|
226
+ puts "Finished with #{lang} on #{device}"
227
+ end
228
+
229
+ teardown_device do |device|
230
+ puts "Cleaning device #{device}"
231
+ system("./cleanup.sh")
232
+ end
233
+ ```
201
234
 
202
235
  # Tips
203
236
  ## Available language codes
@@ -30,4 +30,25 @@ screenshots_path "./screenshots"
30
30
  # ios_version '8.1'
31
31
 
32
32
  # The path, on which the HTML file should be exported to
33
- # html_path './screenshots.html'
33
+ # html_path './screenshots.html'
34
+
35
+
36
+ # Custom Callbacks
37
+
38
+ # setup_for_device_change do |device|
39
+ # puts "Preparing device: #{device}"
40
+ # end
41
+
42
+ # setup_for_language_change do |lang, device|
43
+ # puts "Running #{lang} on #{device}"
44
+ # system("./popuplateDatabase.sh")
45
+ # end
46
+
47
+ # teardown_language do |lang, device|
48
+ # puts "Finished with #{lang} on #{device}"
49
+ # end
50
+
51
+ # teardown_device do |device|
52
+ # puts "Cleaning device #{device}"
53
+ # system("./cleanup.sh")
54
+ # end
@@ -1,10 +1,14 @@
1
1
  function wait_for_loading_indicator_to_be_finished()
2
2
  {
3
3
  re = UIATarget.localTarget().frontMostApp().statusBar().elements()[2].rect()
4
- while (re['size']['width'] == 10 && re['size']['height'] == 20) {
4
+ re2 = UIATarget.localTarget().frontMostApp().statusBar().elements()[3].rect()
5
+ while ((re['size']['width'] == 10 && re['size']['height'] == 20) ||
6
+ (re2['size']['width'] == 10 && re2['size']['height'] == 20))
7
+ {
5
8
  UIALogger.logMessage("Loading indicator is visible... waiting")
6
9
  UIATarget.localTarget().delay(1)
7
10
  re = UIATarget.localTarget().frontMostApp().statusBar().elements()[2].rect()
11
+ re2 = UIATarget.localTarget().frontMostApp().statusBar().elements()[3].rect()
8
12
  }
9
13
  }
10
14
 
@@ -14,14 +18,16 @@ function captureLocalizedScreenshot(name) {
14
18
  var target = UIATarget.localTarget();
15
19
  var model = target.model();
16
20
  var rect = target.rect();
21
+
22
+ var theSize = (rect.size.width > rect.size.height) ? rect.size.width.toFixed() : rect.size.height.toFixed();
17
23
 
18
24
  if (model.match(/iPhone/))
19
25
  {
20
- if (rect.size.height > 667) {
26
+ if (theSize > 667) {
21
27
  model = "iPhone6Plus";
22
- } else if (rect.size.height == 667) {
28
+ } else if (theSize == 667) {
23
29
  model = "iPhone6";
24
- } else if (rect.size.height == 568){
30
+ } else if (theSize == 568){
25
31
  model = "iPhone5";
26
32
  } else {
27
33
  model = "iPhone4";
@@ -40,4 +46,4 @@ function captureLocalizedScreenshot(name) {
40
46
 
41
47
  var parts = [language, model, orientation, name];
42
48
  target.captureScreenWithName(parts.join("-"));
43
- }
49
+ }
@@ -4,6 +4,7 @@ module Snapshot
4
4
  self.check_xcode_select
5
5
  self.check_simulators
6
6
  self.check_xctool
7
+ self.check_for_automation_subfolder
7
8
  end
8
9
 
9
10
  def self.check_xcode_select
@@ -41,5 +42,11 @@ module Snapshot
41
42
  Helper.log.error '#############################################################'
42
43
  end
43
44
  end
45
+
46
+ def self.check_for_automation_subfolder
47
+ if File.directory?"./Automation" or File.exists?"./Automation"
48
+ raise "Seems like you have an 'Automation' folder in the current directory. You need to delete/rename it!".red
49
+ end
50
+ end
44
51
  end
45
52
  end
@@ -16,16 +16,23 @@ module Snapshot
16
16
  counter = 0
17
17
  errors = []
18
18
  SnapshotConfig.shared_instance.devices.each do |device|
19
+
20
+ SnapshotConfig.shared_instance.blocks[:setup_for_device_change].call(device) # Callback
21
+
19
22
  SnapshotConfig.shared_instance.languages.each do |language|
23
+ SnapshotConfig.shared_instance.blocks[:setup_for_language_change].call(language, device) # Callback
20
24
 
21
25
  begin
22
26
  errors.concat(run_tests(device, language))
23
27
  counter += copy_screenshots(language)
24
- rescue Exception => ex
28
+ rescue SystemExit, Interrupt => ex
29
+ raise ex # system interrupted exception (Strg + C)
30
+ rescue StandardError => ex
25
31
  Helper.log.error(ex)
26
32
  end
27
-
33
+ SnapshotConfig.shared_instance.blocks[:teardown_language].call(language, device) # Callback
28
34
  end
35
+ SnapshotConfig.shared_instance.blocks[:teardown_device].call(device) # Callback
29
36
  end
30
37
 
31
38
  ReportsGenerator.new.generate
@@ -3,6 +3,7 @@ module Snapshot
3
3
  class ScreenshotFlatten
4
4
  # @param (String) The path in which the screenshots are located in
5
5
  def run(path)
6
+ Helper.log.info "Going to remove the alpha channel from generated png files"
6
7
  if image_magick_installed?
7
8
  flatten(path)
8
9
  else
@@ -13,9 +14,11 @@ module Snapshot
13
14
  end
14
15
 
15
16
  def flatten(path)
16
- Dir.glob([path, '**/*.png'].join('/')).each do |file|
17
+ Dir.glob([path, '/**/*.png'].join('/')).each do |file|
18
+ Helper.log.info "Removing alpha channel from '#{file}'"
17
19
  `convert -flatten '#{file}' -alpha off -alpha remove '#{file}'`
18
20
  end
21
+ Helper.log.info "Finished removing the alpha channel."
19
22
  end
20
23
 
21
24
  def image_magick_installed?
@@ -31,6 +31,9 @@ module Snapshot
31
31
  # @return (String) The build command, wich should build the app to '/tmp/snapshot'
32
32
  attr_accessor :build_command
33
33
 
34
+ # @return (Hash) All the blocks, which are called on specific actions
35
+ attr_accessor :blocks
36
+
34
37
 
35
38
  # A shared singleton
36
39
  def self.shared_instance
@@ -46,6 +49,8 @@ module Snapshot
46
49
  else
47
50
  Helper.log.error "Could not find './Snapfile'. It is recommended to create a file using 'snapshot init' into the current directory. Using the defaults now."
48
51
  end
52
+
53
+ load_env
49
54
  end
50
55
 
51
56
  def set_defaults
@@ -69,6 +74,20 @@ module Snapshot
69
74
  self.project_path ||= (Dir.glob("./*.xcodeproj").first rescue nil)
70
75
 
71
76
  self.html_path = './screenshots.html'
77
+
78
+ empty = Proc.new {}
79
+ self.blocks = {
80
+ setup_for_device_change: empty,
81
+ teardown_device: empty,
82
+ setup_for_language_change: empty,
83
+ teardown_language: empty
84
+ }
85
+ end
86
+
87
+ def load_env
88
+ # Load environment variables
89
+ self.manual_scheme = ENV["SNAPSHOT_SCHEME"] if ENV["SNAPSHOT_SCHEME"]
90
+ self.screenshots_path = ENV["SNAPSHOT_SCREENSHOTS_PATH"] if ENV["SNAPSHOT_SCREENSHOTS_PATH"]
72
91
  end
73
92
 
74
93
  # Getters
@@ -16,7 +16,11 @@ module Snapshot
16
16
  end
17
17
 
18
18
  def method_missing(method_sym, *arguments, &block)
19
- value = arguments.first || (block.call if block_given?)
19
+ if ["setup", "teardown"].any?{|a| method_sym.to_s.include?a }
20
+ value = nil # this is a block
21
+ else
22
+ value = arguments.first || (block.call if block_given?) # this is either a block or a value
23
+ end
20
24
 
21
25
  case method_sym
22
26
  when :devices
@@ -51,6 +55,11 @@ module Snapshot
51
55
  else
52
56
  raise "The given project_path '#{value}' could not be found. Make sure to include the extension as well.".red
53
57
  end
58
+
59
+ # Blocks
60
+ when :setup_for_device_change, :teardown_device, :setup_for_language_change, :teardown_language
61
+ raise "#{method_sym} needs to have a block provided." unless block_given?
62
+ @config.blocks[method_sym] = block
54
63
  else
55
64
  Helper.log.error "Unknown method #{method_sym}"
56
65
  end
@@ -1,3 +1,3 @@
1
1
  module Snapshot
2
- VERSION = "0.2.4"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,167 +1,167 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snapshot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-14 00:00:00.000000000 Z
11
+ date: 2014-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: highline
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.6.21
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.6.21
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: colored
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: commander
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 4.2.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: 4.2.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: fastimage
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ~>
74
74
  - !ruby/object:Gem::Version
75
75
  version: 1.6.3
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: 1.6.3
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bundler
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - '>='
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - '>='
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ~>
116
116
  - !ruby/object:Gem::Version
117
117
  version: 3.1.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - "~>"
122
+ - - ~>
123
123
  - !ruby/object:Gem::Version
124
124
  version: 3.1.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: pry
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
129
+ - - '>='
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ">="
136
+ - - '>='
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: yard
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - "~>"
143
+ - - ~>
144
144
  - !ruby/object:Gem::Version
145
145
  version: 0.8.7.4
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - "~>"
150
+ - - ~>
151
151
  - !ruby/object:Gem::Version
152
152
  version: 0.8.7.4
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: codeclimate-test-reporter
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - ">="
157
+ - - '>='
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - ">="
164
+ - - '>='
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  description: Take the pain out of taking iOS app screenshots.
@@ -202,12 +202,12 @@ require_paths:
202
202
  - lib
203
203
  required_ruby_version: !ruby/object:Gem::Requirement
204
204
  requirements:
205
- - - ">="
205
+ - - '>='
206
206
  - !ruby/object:Gem::Version
207
207
  version: 2.0.0
208
208
  required_rubygems_version: !ruby/object:Gem::Requirement
209
209
  requirements:
210
- - - ">="
210
+ - - '>='
211
211
  - !ruby/object:Gem::Version
212
212
  version: '0'
213
213
  requirements: []