html_package 0.0.1

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.
data/bin/hip ADDED
@@ -0,0 +1,4 @@
1
+ #! /usr/bin/env ruby
2
+ require "html_package/cli"
3
+
4
+ HTMLPackage::CLI.start
@@ -0,0 +1,15 @@
1
+ require "thor"
2
+ require "html_package"
3
+ module HTMLPackage
4
+ class CLI < Thor
5
+ map "-i" => :install
6
+
7
+ desc "install", "installs a package"
8
+ method_option "file", type: "string", required: true, banner: "(path or url to package file)"
9
+ method_option "out", type: "string", required: true, banner: "(path to dir to install to)"
10
+ def install
11
+ package = HTMLPackage::Package.open options[:file]
12
+ HTMLPackage::Loader.new(package, options[:out]).load
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,37 @@
1
+ require "pathname"
2
+
3
+ module HTMLPackage
4
+ class Loader
5
+
6
+ def initialize(package, out_dir)
7
+ @package = package
8
+ @out_dir = Pathname.new(out_dir).expand_path
9
+ end
10
+
11
+ def load
12
+ threads = @package.all_files.map do |uri|
13
+ puts "loading: #{uri.blue}"
14
+ Thread.new do
15
+ begin
16
+ content = open(uri).read
17
+ outfile = @out_dir + Pathname.new(uri).basename
18
+
19
+ begin
20
+ File.open(outfile, "r") { |file| file.write content }
21
+ rescue Exception => e
22
+ puts "failed: File.write #{outfile.to_s.red}"
23
+ puts " #{e.class.name.bold} #{e.message.red.bold}"
24
+ puts
25
+ end
26
+ rescue OpenURI::HTTPError => e
27
+ puts "failed: GET #{uri.red}"
28
+ puts " #{e.class.name.bold} #{e.message.red.bold}"
29
+ puts
30
+ end
31
+
32
+ end
33
+ end
34
+ threads.map(&:join)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,69 @@
1
+ require "open-uri"
2
+ require "nokogiri"
3
+ require "colored"
4
+
5
+ module HTMLPackage
6
+ class Package
7
+ JAVASCRIPT = "text/javascript"
8
+ PACKAGE = "text/package+html"
9
+ SPADE = "text/spade+javascript"
10
+
11
+ PACKAGES = "[type='#{PACKAGE}']"
12
+ SCRIPTS = "[type='#{JAVASCRIPT}']"
13
+ SPADES = "[type='#{SPADE}']"
14
+
15
+ SELF = "[rel=self]"
16
+ DEPENDENCY = "[rel=dependency]"
17
+
18
+ def self.open(uri, resource_type=SPADES)
19
+ puts "opening package: #{uri.green}"
20
+ new Nokogiri::HTML(Kernel.open uri), resource_type
21
+ rescue OpenURI::HTTPError => e
22
+ puts "failed: GET #{uri.red}"
23
+ puts " #{e.class.name.bold} #{e.message.red.bold}"
24
+ puts
25
+ end
26
+
27
+ def initialize(document, resource_type)
28
+ @document = document
29
+ @resource_type = resource_type
30
+ end
31
+
32
+ def own_files
33
+ links(SELF, @resource_type).map{|link| link[:href]}
34
+ end
35
+
36
+ def dependency_packages
37
+ @dependency_packages ||= begin
38
+ links(DEPENDENCY, PACKAGES).map do |package_link|
39
+ href = package_link[:href]
40
+ puts "dependency: #{href.blue}"
41
+ HTMLPackage::Package.open(href, @resource_type)
42
+ end
43
+ end.compact
44
+ end
45
+
46
+ def dependency_files
47
+ links = []
48
+ links += direct_links = links(DEPENDENCY, @resource_type).map{|link| link[:href]}
49
+
50
+ dependency_packages.each do |package|
51
+ links += package.all_files
52
+ end
53
+
54
+ links
55
+ end
56
+
57
+ def all_files
58
+ @all_files ||= ( own_files + dependency_files ).uniq
59
+ end
60
+
61
+ def links(*properties)
62
+ find ["link"].concat(properties).join
63
+ end
64
+
65
+ def find(selector)
66
+ @document.css(selector)
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,5 @@
1
+ module HTMLPackage
2
+ require "html_package/package"
3
+ require "html_package/loader"
4
+ end
5
+
metadata ADDED
@@ -0,0 +1,52 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: html_package
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Collin Miller
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-30 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: Uses a special text/package+html content type to load packages of javascript
15
+ files.
16
+ email:
17
+ - collintmiller@gmail.com
18
+ executables:
19
+ - hip
20
+ extensions: []
21
+ extra_rdoc_files: []
22
+ files:
23
+ - bin/hip
24
+ - lib/html_package/cli.rb
25
+ - lib/html_package/loader.rb
26
+ - lib/html_package/package.rb
27
+ - lib/html_package.rb
28
+ homepage: http://github.com/collintmiller/html_package
29
+ licenses: []
30
+ post_install_message:
31
+ rdoc_options: []
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.3.6
46
+ requirements: []
47
+ rubyforge_project:
48
+ rubygems_version: 1.8.10
49
+ signing_key:
50
+ specification_version: 3
51
+ summary: A package loader that reads html files.
52
+ test_files: []