getbox 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/Gemfile +4 -0
- data/README.md +9 -0
- data/Rakefile +1 -0
- data/exe/getbox +8 -0
- data/getbox.gemspec +27 -0
- data/lib/getbox/version.rb +3 -0
- data/lib/getbox.rb +94 -0
- metadata +123 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 570cd38740240d890ffdda814c6da3160beb1e89
|
4
|
+
data.tar.gz: 9260b50d4f7d557ed41bf7d775ad215d74898705
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 04aa1f5d0a1d86b79330f4d9dff7b6ad70347ccf4afda654c955219850fb4f916cbf12e91751aa42b0a75b9c91ce4bbde7414805192c795f3b23637be7e72bd7
|
7
|
+
data.tar.gz: 14f2ea9224139273927160c37252d5e136d796098e4005d08253b8196dbccb1b2f4cc050be4bf7dec14909aeeb28d433467a0f022c0fc25a1ca748542a554f66
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# Getbox
|
2
|
+
|
3
|
+
## Installation
|
4
|
+
|
5
|
+
getbox requires the [edge version](https://github.com/thoughtbot/capybara-webkit) of capybara-webkit. It's in the Gemfile, but not supported by the `.gemspec`. Use Bundler.
|
6
|
+
|
7
|
+
## Usage
|
8
|
+
|
9
|
+
After checking out the repo, run `bundle` to install dependencies. Then, run `exe/getbox` for an interactive prompt that will take you through exporting your gists.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/exe/getbox
ADDED
data/getbox.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'getbox/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "getbox"
|
8
|
+
spec.version = Getbox::VERSION
|
9
|
+
spec.authors = ["Andrew Monks"]
|
10
|
+
spec.email = ["a@monks.co"]
|
11
|
+
|
12
|
+
spec.summary = %q{Scrape your Gistbox page to export your label data.}
|
13
|
+
spec.homepage = "http://github.com/amonks/getbox"
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
16
|
+
spec.bindir = "exe"
|
17
|
+
# spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
|
+
spec.executables = ['getbox']
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.9"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
|
24
|
+
spec.add_runtime_dependency "capybara"
|
25
|
+
spec.add_runtime_dependency "capybara-webkit"
|
26
|
+
spec.add_runtime_dependency "nokogiri"
|
27
|
+
end
|
data/lib/getbox.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'getbox/version'
|
2
|
+
require 'nokogiri'
|
3
|
+
require 'capybara/dsl'
|
4
|
+
require 'capybara-webkit'
|
5
|
+
require 'open-uri'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
|
9
|
+
module Getbox
|
10
|
+
include Capybara::DSL
|
11
|
+
|
12
|
+
Capybara.default_driver = :webkit
|
13
|
+
Capybara.app_host = "http://app.gistboxapp.com"
|
14
|
+
Capybara.run_server = false
|
15
|
+
|
16
|
+
def getGistsFromPrompt()
|
17
|
+
puts "What's your github username?"
|
18
|
+
username = gets.chomp
|
19
|
+
puts "How about your password, eh??"
|
20
|
+
password = gets.chomp
|
21
|
+
|
22
|
+
puts "Where should I save your gists?"
|
23
|
+
file = gets.chomp
|
24
|
+
|
25
|
+
gists = getGistsFromSite(username, password)
|
26
|
+
|
27
|
+
puts "Saving #{gists.length} gists to #{Dir.pwd}/#{file}"
|
28
|
+
writeToFile(gists, file)
|
29
|
+
end
|
30
|
+
|
31
|
+
def getGistsFromSite(username, password)
|
32
|
+
whitelist_urls
|
33
|
+
|
34
|
+
puts "visiting app.gistboxapp.com"
|
35
|
+
visit '/'
|
36
|
+
click_on "Login"
|
37
|
+
puts "filling out github login form"
|
38
|
+
within("#login") do
|
39
|
+
fill_in("login", :with => username)
|
40
|
+
fill_in("password", :with => password)
|
41
|
+
click_on "Sign in"
|
42
|
+
end
|
43
|
+
puts "gathering gists"
|
44
|
+
getGistsFromHtml(page.html)
|
45
|
+
end
|
46
|
+
|
47
|
+
def getGistsFromFile(file)
|
48
|
+
f = File.open(file)
|
49
|
+
getGistsFromHtml(f)
|
50
|
+
end
|
51
|
+
|
52
|
+
def getGistsFromHtml(html)
|
53
|
+
doc = Nokogiri::HTML(html)
|
54
|
+
|
55
|
+
gists = []
|
56
|
+
|
57
|
+
doc.css('div.split-gist').each do |gist|
|
58
|
+
data = {}
|
59
|
+
|
60
|
+
id = gist.attribute('data-id').value
|
61
|
+
data[:url] = "https://gist.github.com/#{id}"
|
62
|
+
|
63
|
+
data[:title] = gist.css('div.gist-name').inner_text
|
64
|
+
|
65
|
+
data[:timestamp] = gist.css('span.gist-created-updated').inner_text
|
66
|
+
|
67
|
+
description = gist.css('div.gist-description').inner_text.strip
|
68
|
+
description = nil if description == 'No Description'
|
69
|
+
data[:description] = description
|
70
|
+
|
71
|
+
labels = []
|
72
|
+
gist.css('span.gist-label').each {|label| labels.push label.inner_text}
|
73
|
+
data[:labels] = labels
|
74
|
+
|
75
|
+
gists.push data
|
76
|
+
end
|
77
|
+
|
78
|
+
gists
|
79
|
+
end
|
80
|
+
|
81
|
+
def writeToFile(object, file)
|
82
|
+
json = JSON.pretty_generate(object)
|
83
|
+
File.open(file, 'w') { |file| file.write(json) }
|
84
|
+
end
|
85
|
+
|
86
|
+
def whitelist_urls()
|
87
|
+
page.driver.block_unknown_urls
|
88
|
+
urls = [
|
89
|
+
'app.gistboxapp.com',
|
90
|
+
'github.com',
|
91
|
+
]
|
92
|
+
urls.each { |url| page.driver.allow_url(url) }
|
93
|
+
end
|
94
|
+
end
|
metadata
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: getbox
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrew Monks
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.9'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.9'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: capybara
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
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: capybara-webkit
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: nokogiri
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description:
|
84
|
+
email:
|
85
|
+
- a@monks.co
|
86
|
+
executables:
|
87
|
+
- getbox
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- ".gitignore"
|
92
|
+
- Gemfile
|
93
|
+
- README.md
|
94
|
+
- Rakefile
|
95
|
+
- exe/getbox
|
96
|
+
- getbox.gemspec
|
97
|
+
- lib/getbox.rb
|
98
|
+
- lib/getbox/version.rb
|
99
|
+
homepage: http://github.com/amonks/getbox
|
100
|
+
licenses: []
|
101
|
+
metadata: {}
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options: []
|
104
|
+
require_paths:
|
105
|
+
- lib
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
requirements: []
|
117
|
+
rubyforge_project:
|
118
|
+
rubygems_version: 2.2.2
|
119
|
+
signing_key:
|
120
|
+
specification_version: 4
|
121
|
+
summary: Scrape your Gistbox page to export your label data.
|
122
|
+
test_files: []
|
123
|
+
has_rdoc:
|