snapit 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f764224d1ae326746f906ac0362563a455bf546b
4
+ data.tar.gz: b62d948004fd7d7d6dd7a99f65bb9a3054a030cc
5
+ SHA512:
6
+ metadata.gz: 13e85af68008bff1c3b98d2d15fe84a5e7076946d2714c06fe173eae3a04ae7c735af76c8374f35ae60a6d39c47b82f432c4256d79b14848d5397fb40b33c606
7
+ data.tar.gz: a37e90086c05e1d400be422666596bf1b0c08e87d3dcf5031ed70e43265106c03d9f5ef92e5721752290e17cdf2b409fb4950d8612f8283ad97d9b26853252ec
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in checkit.gemspec
4
+ gemspec
@@ -0,0 +1,44 @@
1
+ # snapit
2
+
3
+ Need a quick way to automatically take screenshots? Well then this tool is for you. This early version will allow you to take screenshots named in a particular fashion so you can upload them tools like [InVision](http://www.invisionapp.com/).
4
+
5
+ ## usage
6
+
7
+ ```bash
8
+ gem install snapit
9
+ ```
10
+
11
+ This tool used `*.yml` files to automatically load up and take screenshots for you. So let's assume you have the following script:
12
+
13
+ ```example_script.yml
14
+ name: 'My Personal Site'
15
+ urls:
16
+ - homepage: "http://markhay.es/"
17
+ - about: "http://markhay.es/about"
18
+ ```
19
+
20
+ You can then run it like so:
21
+
22
+ ```bash
23
+ snapit capture example_script.yml
24
+ ```
25
+
26
+ And you'll get a series of screenshots like so:
27
+
28
+ ```bash
29
+ .
30
+ ├── example_script.yml
31
+ └── snapit_captures
32
+ └── My_Personal_Site
33
+ ├── about.png
34
+ └── homepage.png
35
+ ```
36
+
37
+ ## todo
38
+
39
+ - [ ] Integrate with tools like InVision
40
+ - [ ] Take screenshots at certain time intervals
41
+
42
+ ## license
43
+
44
+ snapit is released under the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1,10 @@
1
+ require "rspec/core/rake_task"
2
+ require "bundler/gem_tasks"
3
+
4
+ # Default directory to look in is `/specs`
5
+ # Run with `rake spec`
6
+ RSpec::Core::RakeTask.new(:spec) do |task|
7
+ task.rspec_opts = ['--color']
8
+ end
9
+
10
+ task :default => :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "snapit"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rake' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rake', 'rake')
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "snapit"
5
+ require "thor"
6
+
7
+ class SnapitCLI < Thor
8
+ desc "hello", "hello name"
9
+ def hello
10
+ puts "hello mark"
11
+ end
12
+
13
+ desc "capture", "capture SCRIPT_PATH"
14
+ def capture(script_path)
15
+ root_path = Pathname.new(File.absolute_path("."))
16
+ asset_path = Pathname.new(File.absolute_path(script_path))
17
+ storage = Snapit::Storage.new(root_path)
18
+ Snapit.run!(asset_path, storage)
19
+ say_status "DONE", "Results added to #{storage.output_path.to_s}"
20
+ end
21
+ end
22
+
23
+ SnapitCLI.start(ARGV)
@@ -0,0 +1,21 @@
1
+ require "snapit/version"
2
+ require "snapit/storage"
3
+ require "snapit/script"
4
+ require "snapit/engine"
5
+
6
+ module Snapit
7
+ def self.run!(path, storage)
8
+ res = []
9
+ script = Snapit::Script.new(path, storage)
10
+ Snapit::Engine.run(script.storage) do |driver|
11
+ script.urls.each do |obj|
12
+ obj.keys.each do |key|
13
+ name = key
14
+ url = obj[key]
15
+ res << {path: driver.capture!(url, name)}
16
+ end
17
+ end
18
+ end
19
+ res
20
+ end
21
+ end
@@ -0,0 +1,44 @@
1
+ require "selenium-webdriver"
2
+
3
+ module Snapit
4
+ class Engine
5
+ attr_reader :storage
6
+ attr_reader :width
7
+
8
+ def initialize(storage, width)
9
+ @storage = storage
10
+ @width = width
11
+ end
12
+
13
+ def self.run(storage, width = 1280)
14
+ begin
15
+ engine = new(storage, width)
16
+ yield engine
17
+ ensure
18
+ engine.stop!
19
+ end
20
+ end
21
+
22
+ def output_path
23
+
24
+ end
25
+
26
+ def capture!(url, name_or_idx)
27
+ driver.get(url)
28
+ driver.save_screenshot("#{storage.output_path.join(name_or_idx)}.png")
29
+ end
30
+
31
+ def stop!
32
+ driver.quit
33
+ end
34
+
35
+ private
36
+
37
+ def driver
38
+ return @driver if @driver
39
+ @driver = Selenium::WebDriver.for :firefox
40
+ @driver.manage.window.resize_to(width, 3000)
41
+ @driver
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,22 @@
1
+ require "yaml"
2
+
3
+ module Snapit
4
+ class Script
5
+ attr_reader :script
6
+ attr_reader :storage
7
+
8
+ def initialize(path, storage)
9
+ @script = YAML.load_file(path)
10
+ storage.set_script_name!(self.name)
11
+ @storage = storage
12
+ end
13
+
14
+ def name
15
+ @script["name"]
16
+ end
17
+
18
+ def urls
19
+ @script["urls"]
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,28 @@
1
+ require "pathname"
2
+ require "fileutils"
3
+
4
+ module Snapit
5
+ class Storage
6
+ attr_reader :path
7
+
8
+ def initialize(root_path)
9
+ @path = root_path.join("snapit_captures")
10
+ FileUtils.mkdir_p(path) unless Dir.exists?(path)
11
+ end
12
+
13
+ def set_script_name!(name)
14
+ @script_name = name
15
+ @script_name = @script_name.gsub(/[^0-9a-z ]/i, '').gsub(/ /i, '_')
16
+ end
17
+
18
+ def script_name
19
+ @script_name || "default"
20
+ end
21
+
22
+ def output_path
23
+ p = path.join(script_name)
24
+ FileUtils.mkdir_p(p) unless Dir.exists?(p)
25
+ p
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ module Snapit
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'snapit/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "snapit"
8
+ spec.version = Snapit::VERSION
9
+ spec.authors = ["Mark Hayes"]
10
+ spec.email = ["me@markhay.es"]
11
+
12
+ spec.summary = %q{Automate your screen captures}
13
+ spec.description = %q{A simple way to take screenshots over and over again}
14
+ spec.licenses = ['MIT']
15
+ spec.homepage = "https://github.com/mhayes/snapit"
16
+
17
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
18
+ # delete this section to allow pushing this gem to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
21
+ else
22
+ raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
23
+ end
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
+ spec.bindir = "exe"
27
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ["lib"]
29
+
30
+ spec.add_dependency "selenium-webdriver", "~> 2.46.2"
31
+ spec.add_dependency "thor", "~> 0.19.1"
32
+ spec.add_development_dependency "rspec"
33
+ spec.add_development_dependency "bundler", "~> 1.9"
34
+ spec.add_development_dependency "rake", "~> 10.0"
35
+ end
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: snapit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mark Hayes
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-06-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: selenium-webdriver
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.46.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.46.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.19.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.19.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ description: A simple way to take screenshots over and over again
84
+ email:
85
+ - me@markhay.es
86
+ executables:
87
+ - snapit
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - ".travis.yml"
93
+ - Gemfile
94
+ - README.md
95
+ - Rakefile
96
+ - bin/console
97
+ - bin/rake
98
+ - bin/setup
99
+ - exe/snapit
100
+ - lib/snapit.rb
101
+ - lib/snapit/engine.rb
102
+ - lib/snapit/script.rb
103
+ - lib/snapit/storage.rb
104
+ - lib/snapit/version.rb
105
+ - snapit.gemspec
106
+ homepage: https://github.com/mhayes/snapit
107
+ licenses:
108
+ - MIT
109
+ metadata:
110
+ allowed_push_host: https://rubygems.org
111
+ post_install_message:
112
+ rdoc_options: []
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ requirements: []
126
+ rubyforge_project:
127
+ rubygems_version: 2.4.5
128
+ signing_key:
129
+ specification_version: 4
130
+ summary: Automate your screen captures
131
+ test_files: []