isa 1.0.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/isa/session.rb +92 -0
  3. metadata +58 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a2dd9cec4133a47fe5de7f2984c395bf243c1dda
4
+ data.tar.gz: 77dfaac88e20c4dc3e1fb6a2b0b6bc59929cd863
5
+ SHA512:
6
+ metadata.gz: 66294a07f2763f98e26564526784c5e53743bba47ade3f84358fb1006a0ee895ae6c852e5bc110e35dcbfd51198dece63fa92b19b9665bfd7fc259b7f8401f05
7
+ data.tar.gz: 037fbe778cab6a129cdff77ae8beee24f6b6815283792567dc164b367e4c33e5075ed4604f71a3ce1594908188550c581ad1f21d5ca14b71d08907b70d0ac1c3
@@ -0,0 +1,92 @@
1
+ require 'rmagick'
2
+ require 'fileutils'
3
+
4
+ module ISA
5
+
6
+ # Main class for managing the capture sessions
7
+ class Session
8
+
9
+ attr_accessor :name, :tmp_dir, :dir, :code, :images, :checkpoint, :last_capture
10
+
11
+ # Initialize a capture session
12
+ # Takes a number of args:
13
+ # * session (optional) -- name for the capture session
14
+ # * dir (optional) -- directory to save the screenshots
15
+ # * capture (required) -- lambda for performing a screenshot
16
+ # The lambda should take a single argument filename:
17
+ # take_screenshot = ->(filename) {
18
+ # code_to_perform_screenshot( :save_to => filename )
19
+ # }
20
+ def initialize( args )
21
+ @name = args[:session] || Time.now.to_i
22
+ @code = args[:capture] or raise 'Need to provide a lambda to the constructor'
23
+ @tmp_dir = "/tmp/isa/#{@name}"
24
+ @dir = args[:dir] || @tmp_dir
25
+
26
+ FileUtils.mkdir_p(@dir)
27
+ FileUtils.mkdir_p(@tmp_dir)
28
+
29
+ File.directory?(@dir) or raise "Couldn't create session directory for screen grabs"
30
+
31
+ @images = Magick::ImageList.new
32
+ end
33
+
34
+ # Perform a screenshot capture
35
+ def capture(checkpoint = nil)
36
+
37
+ if checkpoint
38
+ @checkpoint = checkpoint
39
+ end
40
+
41
+ filename = (@checkpoint ? @checkpoint.to_s + '-' : '') + Time.now.to_i.to_s + '.png'
42
+
43
+ file = "#{tmp_dir}/#{filename}"
44
+
45
+ capture_time = Time.now
46
+ code.call(file)
47
+
48
+ File.exist? file or raise "Couldn't capture screenshot"
49
+
50
+ image = Magick::ImageList.new(file).first
51
+
52
+ if @last_capture
53
+ delay = (capture_time - @last_capture).to_i
54
+ images.last.delay = delay
55
+ end
56
+ @last_capture = capture_time
57
+
58
+ images << image
59
+ image
60
+ end
61
+
62
+ # Performs a capture and diffs it with the last image
63
+ def diff
64
+ if images.count == 0
65
+ self.capture
66
+ end
67
+
68
+ last = images.last
69
+ current = self.capture
70
+
71
+ last.difference(current)[0].to_i
72
+ end
73
+
74
+ # Finalize the capture session, and create an animated gif
75
+ # of the capture session
76
+ def end(filename = nil)
77
+ if !filename
78
+ filename = "#{@dir}/#{@name}.gif"
79
+ else
80
+ filename = "#{@dir}/#{@filename}"
81
+ end
82
+ images.ticks_per_second = 2
83
+ puts "Writing to #{filename}"
84
+ width = 750
85
+ height = 750
86
+ images.each {|i| i.resize_to_fit!(width, height) }
87
+ images.write(filename)
88
+ end
89
+
90
+ end
91
+
92
+ end
metadata ADDED
@@ -0,0 +1,58 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: isa
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - David Buckhurst
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rmagick
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Analysis tool for investigating screenshots taken over a session
28
+ email: david.buckhurst@bbc.co.uk
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/isa/session.rb
34
+ homepage: https://github.com/bbc-test/isa
35
+ licenses:
36
+ - MIT
37
+ metadata: {}
38
+ post_install_message:
39
+ rdoc_options: []
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ requirements: []
53
+ rubyforge_project:
54
+ rubygems_version: 2.2.2
55
+ signing_key:
56
+ specification_version: 4
57
+ summary: Image Session Analyzer
58
+ test_files: []