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.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/README.md +44 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/rake +16 -0
- data/bin/setup +7 -0
- data/exe/snapit +23 -0
- data/lib/snapit.rb +21 -0
- data/lib/snapit/engine.rb +44 -0
- data/lib/snapit/script.rb +22 -0
- data/lib/snapit/storage.rb +28 -0
- data/lib/snapit/version.rb +3 -0
- data/snapit.gemspec +35 -0
- metadata +131 -0
checksums.yaml
ADDED
|
@@ -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
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
|
@@ -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).
|
data/Rakefile
ADDED
data/bin/console
ADDED
|
@@ -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
|
data/bin/rake
ADDED
|
@@ -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')
|
data/bin/setup
ADDED
data/exe/snapit
ADDED
|
@@ -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)
|
data/lib/snapit.rb
ADDED
|
@@ -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
|
data/snapit.gemspec
ADDED
|
@@ -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: []
|