web-puc 0.4.0 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8dafbe39ec8bf7e214f0e33396b3c842b3aaaf25
4
- data.tar.gz: db6a8fd688f4bd70bb0f1bb63aaab5feb056c229
2
+ SHA256:
3
+ metadata.gz: 340505a85ca7da37714a19c89ee124f58b48f7da8c5c1490cb729cf6d1b56160
4
+ data.tar.gz: d7d7efa0a100905caf47476887be91184645e3e3c2f8f32c96f5887557ae9b76
5
5
  SHA512:
6
- metadata.gz: 7df86d59ddf67b66a579497927fd29b00909837f7f5aeb581d4f716d4b7fe950d50e2918a9ae0bf1cf0f566758ac7c411e7c7f5a3f5c4a3c115ca57fd44a80db
7
- data.tar.gz: df6ec4c08b020436b315bfe3c0d8ec4c10b1bdaf147291131483edfa26d15da12ba5ba371515c565ac4dce0bf2e44232bee0c34f6e126247887a343e609bb2f5
6
+ metadata.gz: 318dd140ae45e73a5f5d73d4a75c79670779b0a2cec426be23c9b1f875f023b631668e294e1025ab9a8388b559f9fd4bb47fa3be862a9095086c455b959c2baa
7
+ data.tar.gz: 33d9dae6e2ae85a954bb2b01dd403a6545ceb7e0a99a5f828f9bca8ccadc87538ff8b094a0c8c815319449a508ff356177a6a27fe724e4e5e872f8456f54a64a
data/bin/web-puc CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env ruby
2
- require 'web-puc'
2
+ require_relative '../lib/web-puc'
data/lib/web-puc.rb CHANGED
@@ -1,15 +1,24 @@
1
1
  #!/usr/bin/env ruby
2
- require 'rake'
3
- require 'stat'
2
+ require "ostruct"
3
+ require "optparse"
4
+ require "yaml"
5
+ require "structured-acceptance-test"
6
+ require "net/http"
4
7
  require 'shellwords'
5
- require_relative 'version'
8
+ #require "gemrake"
6
9
 
7
- class Optparse
10
+ DATA_STORE_FILENAME = File.expand_path('~/.web-puc-data.yml')
11
+ CACHE_EXPIRATION_PERIOD = 7*24*60*60
12
+
13
+ class LibraryNotImplementedException < Exception
14
+ end
8
15
 
16
+ class Optparse
9
17
  def self.parse(args)
10
18
  options = OpenStruct.new
11
19
  options.exclude = []
12
- options.update = false
20
+ options.libs = []
21
+ options.clear = false
13
22
  options.stat = false
14
23
 
15
24
  opt_parser = OptionParser.new do |opts|
@@ -19,11 +28,8 @@ class Optparse
19
28
  options.exclude = list
20
29
  end
21
30
 
22
- opts.on('-s', '--allow-supported', 'Allow supported versions even if not latest') do
23
- end
24
-
25
- opts.on('-u', '--update', 'Update web package database') do
26
- options.update = true
31
+ opts.on('-c', '--clear', 'Clear cached version data') do
32
+ options.clear = true
27
33
  end
28
34
 
29
35
  opts.on('--stat', 'Output in STAT format') do
@@ -35,30 +41,41 @@ class Optparse
35
41
  exit
36
42
  end
37
43
 
38
- opts.on_tail('-v', '--version', 'Show version') do
39
- puts "web-puc #{WebPuc::VERSION}"
40
- exit
44
+ opts.on('-l', '--libs GLOB', Array, 'libs to search') do |list|
45
+ options.libs = list
41
46
  end
47
+
48
+ # TODO:
49
+ #opts.on_tail('-v', '--version', 'Show version') do
50
+ # spec = Gem::Specification::load(File.expand_path('../web-puc.gemspec', __FILE__))
51
+ # puts "web-puc #{spec.version}"
52
+ # exit
53
+ #end
42
54
  end
43
55
 
44
56
  opt_parser.parse!(args)
45
57
  options
46
58
  end
59
+ end
47
60
 
61
+ def get_link(lib, version)
62
+ case lib
63
+ when 'twitter-bootstrap'
64
+ "//netdna.bootstrapcdn.com/bootstrap/#{version}/"
65
+ when 'font-awesome'
66
+ "//netdna.bootstrapcdn.com/font-awesome/#{version}/"
67
+ else
68
+ raise LibraryNotImplementedException
69
+ end
48
70
  end
49
71
 
50
72
  ARGV << '-h' if ARGV.empty?
51
73
 
52
74
  options = Optparse.parse(ARGV)
53
75
 
54
- if options.update
55
- FileUtils.rm_r Dir[File.expand_path File.dirname(__FILE__) + '/packages/*']
56
-
57
- Dir[File.expand_path File.dirname(__FILE__) + '/package-spiders/*.sh'].each { |file|
58
- puts "UPDATING #{file}"
59
- puts %x[ bash #{file} ]
60
- $stdout.flush
61
- }
76
+ if options.clear
77
+ File.delete(DATA_STORE_FILENAME) if File.exists? DATA_STORE_FILENAME
78
+ puts 'Cleared'
62
79
  exit
63
80
  end
64
81
 
@@ -75,11 +92,37 @@ cmd = "find #{files.join(' ')} -type f #{exclude_block}"
75
92
  files = %x[ #{cmd}].split("\n")
76
93
  abort 'command failed' unless $?.success?
77
94
 
78
- good_files = Dir[File.expand_path File.dirname(__FILE__) + '/packages/*.good']
79
- bad_files = good_files.map { |good_file| good_file[0, good_file.length - 'good'.length] + 'bad' }
95
+ libs_versions = Hash.new
96
+ if File.exists? DATA_STORE_FILENAME
97
+ libs_cached = YAML.load_file(DATA_STORE_FILENAME)
98
+ else
99
+ libs_cached = Hash.new
100
+ end
101
+
102
+ options.libs.each { |lib|
103
+ if !libs_cached.nil? && !libs_cached[lib].nil? && Time.at(libs_cached[lib]['expired']) < Time.now
104
+ libs_versions[lib] = libs_cached[lib]
105
+ else
106
+ # Fetch using net/http
107
+ response_text = Net::HTTP.get(URI("https://api.cdnjs.com/libraries/#{lib}?fields=assets"))
108
+ # response = JSON.parse HTTP.get("https://api.cdnjs.com/libraries/#{lib}?fields=assets").body
109
+ response = JSON.parse response_text
110
+ unless response['assets'].nil?
111
+ libs_versions[lib] = Hash.new
112
+ libs_versions[lib]['version'] = Array.new
113
+ libs_versions[lib]['expired'] = Time.now.to_i + CACHE_EXPIRATION_PERIOD
114
+ response['assets'].each_with_index { |asset, index|
115
+ # first version is a most actual
116
+ next if index == 0
117
+ libs_versions[lib]['version'].push asset['version']
118
+ }
119
+ end
120
+ end
121
+ }
122
+ File.write(DATA_STORE_FILENAME, libs_cached.merge(libs_versions).to_yaml)
80
123
 
81
124
  process = StatModule::Process.new('WebPuc')
82
- process.version = "#{WebPuc::VERSION}"
125
+ # TODO: process.version = ...
83
126
  process.description = 'Validate your web project uses the latest CSS & JS includes.'
84
127
  process.maintainer = 'William Entriken'
85
128
  process.email = 'github.com@phor.net'
@@ -87,29 +130,34 @@ process.website = 'https://github.com/fulldecent/web-puc'
87
130
  process.repeatability = 'Volatile'
88
131
  stat = StatModule::Stat.new(process)
89
132
 
133
+ stat.print_header if options.stat
90
134
  files.each { |file|
91
- bad_files.each { |bad_file|
92
- file = file.shellescape
93
- bad_file = bad_file.shellescape
94
-
95
- matches = %x[ grep -o -nh -F -f #{bad_file} #{file} 2>/dev/null].lines
96
- matches.each { |match|
97
- description = match[match.index(':') + 1, match.length]
98
- line = match[0, match.index(':')].to_i
99
- location = StatModule::Location.new(file)
100
- location.begin_line = line
101
- location.end_line = line
102
-
103
- finding = StatModule::Finding.new(true, description, 'Old version')
104
- finding.location = location
105
-
106
- stat.findings.push(finding)
135
+ file = file.shellescape
136
+ libs_versions.each { |lib, val|
137
+ val['version'].each { |v|
138
+
139
+ link = get_link(lib, v)
140
+ matches = %x[ grep -nh -F #{link} #{file} 2>/dev/null].lines
141
+ matches.each { |match|
142
+ description = match[match.index(':') + 1, match.length]
143
+ line = match[0, match.index(':')].to_i
144
+ location = StatModule::Location.new(file)
145
+ location.begin_line = line
146
+ location.end_line = line
147
+
148
+ finding = StatModule::Finding.new(true, description, 'Old version')
149
+ finding.location = location
150
+
151
+ stat.findings.push(finding)
152
+
153
+ stat.print_finding if options.stat
154
+ }
107
155
  }
108
156
  }
109
157
  }
110
158
 
111
159
  if options.stat
112
- puts stat.to_json
160
+ stat.print_footer
113
161
  else
114
162
  if stat.findings.length > 0
115
163
  stat.findings.each { |finding|
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: web-puc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Entriken
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-23 00:00:00.000000000 Z
11
+ date: 2022-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '12'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '12'
27
27
  - !ruby/object:Gem::Dependency
@@ -30,28 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.0.6
33
+ version: 0.0.7
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.0.6
40
+ version: 0.0.7
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec
42
+ name: http
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.5'
48
- type: :development
47
+ version: '5.1'
48
+ type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.5'
54
+ version: '5.1'
55
55
  description: Validate your web project uses the latest CSS & JS includes
56
56
  email: github.com@phor.net
57
57
  executables:
@@ -60,19 +60,12 @@ extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
62
  - bin/web-puc
63
- - lib/package-spiders/bootstrap-maxcdn.sh
64
- - lib/package-spiders/fontawesome-maxcdn.sh
65
- - lib/packages/bootstrap.bad
66
- - lib/packages/bootstrap.good
67
- - lib/packages/font-awesome.bad
68
- - lib/packages/font-awesome.good
69
- - lib/version.rb
70
63
  - lib/web-puc.rb
71
64
  homepage: https://github.com/fulldecent/web-puc
72
65
  licenses:
73
66
  - MIT
74
67
  metadata: {}
75
- post_install_message:
68
+ post_install_message:
76
69
  rdoc_options: []
77
70
  require_paths:
78
71
  - lib
@@ -87,9 +80,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
80
  - !ruby/object:Gem::Version
88
81
  version: '0'
89
82
  requirements: []
90
- rubyforge_project:
91
- rubygems_version: 2.6.11
92
- signing_key:
83
+ rubygems_version: 3.3.11
84
+ signing_key:
93
85
  specification_version: 4
94
86
  summary: Web Package Update Checker
95
87
  test_files: []
@@ -1,29 +0,0 @@
1
- #!/bin/bash
2
-
3
- echo "Creating package files for bootstrap"
4
-
5
- BASEDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
6
- BASEDIR="$(dirname "$BASEDIR")"
7
- GOODFILE=$BASEDIR/packages/bootstrap.good
8
- BADFILE=$BASEDIR/packages/bootstrap.bad
9
-
10
- # Clone or pull
11
- [ ! -d "$BASEDIR/package-spiders/maxcdn-bootstrap/.git" ] &&
12
- git clone https://github.com/MaxCDN/bootstrap-cdn.git "$BASEDIR/package-spiders/maxcdn-bootstrap" ||
13
- cd "$BASEDIR/package-spiders/maxcdn-bootstrap/" && git pull
14
-
15
- cd "$BASEDIR/package-spiders/maxcdn-bootstrap/public/twitter-bootstrap/"
16
- for VER in $(ls); do
17
- [ -L $VER ] && continue
18
- [ -f $VER ] && continue
19
- if [ "$(readlink latest)" = "$VER" ]
20
- then
21
- echo '//netdna.bootstrapcdn.com/bootstrap/'$VER'/css/bootstrap.min.css' > $GOODFILE
22
- else
23
- echo '//netdna.bootstrapcdn.com/bootstrap/'$VER'/css/bootstrap.min.css' >> $BADFILE
24
- echo "Bootstrap v$VER (http://getbootstrap.com)" >> $BADFILE
25
- fi
26
- echo '//netdna.bootstrapcdn.com/bootstrap/'$VER'/css/bootstrap.css' >> $BADFILE
27
- done
28
-
29
- sort -u -o $BADFILE $BADFILE
@@ -1,29 +0,0 @@
1
- #!/bin/bash
2
-
3
- echo "Creating package files for font-awesome"
4
-
5
- BASEDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
6
- BASEDIR="$(dirname "$BASEDIR")"
7
- GOODFILE=$BASEDIR/packages/font-awesome.good
8
- BADFILE=$BASEDIR/packages/font-awesome.bad
9
-
10
- # Clone or pull
11
- [ ! -d "$BASEDIR/package-spiders/maxcdn-bootstrap/.git" ] &&
12
- git clone https://github.com/MaxCDN/bootstrap-cdn.git "$BASEDIR/package-spiders/maxcdn-bootstrap" ||
13
- cd "$BASEDIR/package-spiders/maxcdn-bootstrap/" && git pull
14
-
15
- cd "$BASEDIR/package-spiders/maxcdn-bootstrap/public/font-awesome/"
16
- for VER in $(ls); do
17
- [ -L $VER ] && continue
18
- [ -f $VER ] && continue
19
- if [ "$(readlink latest)" = "$VER/" ]
20
- then
21
- echo '//netdna.bootstrapcdn.com/font-awesome/'$VER'/css/font-awesome.min.css' > $GOODFILE
22
- else
23
- echo '//netdna.bootstrapcdn.com/font-awesome/'$VER'/css/font-awesome.min.css' >> $BADFILE
24
- echo "Font Awesome $VER by @davegandy" >> $BADFILE
25
- fi
26
- echo '//netdna.bootstrapcdn.com/font-awesome/'$VER'/css/font-awesome.css' >> $BADFILE
27
- done
28
-
29
- sort -u -o $BADFILE $BADFILE
@@ -1,94 +0,0 @@
1
- Bootstrap v2.0.4 (http://getbootstrap.com)
2
- Bootstrap v2.1.0 (http://getbootstrap.com)
3
- Bootstrap v2.1.1 (http://getbootstrap.com)
4
- Bootstrap v2.2.0 (http://getbootstrap.com)
5
- Bootstrap v2.2.1 (http://getbootstrap.com)
6
- Bootstrap v2.2.2 (http://getbootstrap.com)
7
- Bootstrap v2.3.0 (http://getbootstrap.com)
8
- Bootstrap v2.3.1 (http://getbootstrap.com)
9
- Bootstrap v2.3.2 (http://getbootstrap.com)
10
- Bootstrap v3.0.0 (http://getbootstrap.com)
11
- Bootstrap v3.0.0-rc1 (http://getbootstrap.com)
12
- Bootstrap v3.0.0-rc2 (http://getbootstrap.com)
13
- Bootstrap v3.0.0-wip (http://getbootstrap.com)
14
- Bootstrap v3.0.1 (http://getbootstrap.com)
15
- Bootstrap v3.0.2 (http://getbootstrap.com)
16
- Bootstrap v3.0.3 (http://getbootstrap.com)
17
- Bootstrap v3.1.0 (http://getbootstrap.com)
18
- Bootstrap v3.1.1 (http://getbootstrap.com)
19
- Bootstrap v3.2.0 (http://getbootstrap.com)
20
- Bootstrap v3.3.0 (http://getbootstrap.com)
21
- Bootstrap v3.3.1 (http://getbootstrap.com)
22
- Bootstrap v3.3.2 (http://getbootstrap.com)
23
- Bootstrap v3.3.4 (http://getbootstrap.com)
24
- Bootstrap v3.3.5 (http://getbootstrap.com)
25
- Bootstrap v3.3.6 (http://getbootstrap.com)
26
- Bootstrap v4.0.0-alpha.2 (http://getbootstrap.com)
27
- Bootstrap v4.0.0-alpha.3 (http://getbootstrap.com)
28
- Bootstrap v4.0.0-alpha.4 (http://getbootstrap.com)
29
- Bootstrap v4.0.0-alpha.5 (http://getbootstrap.com)
30
- Bootstrap v4.0.0-alpha.6 (http://getbootstrap.com)
31
- Bootstrap v4.0.0-alpha (http://getbootstrap.com)
32
- //netdna.bootstrapcdn.com/bootstrap/2.0.4/css/bootstrap.css
33
- //netdna.bootstrapcdn.com/bootstrap/2.0.4/css/bootstrap.min.css
34
- //netdna.bootstrapcdn.com/bootstrap/2.1.0/css/bootstrap.css
35
- //netdna.bootstrapcdn.com/bootstrap/2.1.0/css/bootstrap.min.css
36
- //netdna.bootstrapcdn.com/bootstrap/2.1.1/css/bootstrap.css
37
- //netdna.bootstrapcdn.com/bootstrap/2.1.1/css/bootstrap.min.css
38
- //netdna.bootstrapcdn.com/bootstrap/2.2.0/css/bootstrap.css
39
- //netdna.bootstrapcdn.com/bootstrap/2.2.0/css/bootstrap.min.css
40
- //netdna.bootstrapcdn.com/bootstrap/2.2.1/css/bootstrap.css
41
- //netdna.bootstrapcdn.com/bootstrap/2.2.1/css/bootstrap.min.css
42
- //netdna.bootstrapcdn.com/bootstrap/2.2.2/css/bootstrap.css
43
- //netdna.bootstrapcdn.com/bootstrap/2.2.2/css/bootstrap.min.css
44
- //netdna.bootstrapcdn.com/bootstrap/2.3.0/css/bootstrap.css
45
- //netdna.bootstrapcdn.com/bootstrap/2.3.0/css/bootstrap.min.css
46
- //netdna.bootstrapcdn.com/bootstrap/2.3.1/css/bootstrap.css
47
- //netdna.bootstrapcdn.com/bootstrap/2.3.1/css/bootstrap.min.css
48
- //netdna.bootstrapcdn.com/bootstrap/2.3.2/css/bootstrap.css
49
- //netdna.bootstrapcdn.com/bootstrap/2.3.2/css/bootstrap.min.css
50
- //netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.css
51
- //netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css
52
- //netdna.bootstrapcdn.com/bootstrap/3.0.0-rc1/css/bootstrap.css
53
- //netdna.bootstrapcdn.com/bootstrap/3.0.0-rc1/css/bootstrap.min.css
54
- //netdna.bootstrapcdn.com/bootstrap/3.0.0-rc2/css/bootstrap.css
55
- //netdna.bootstrapcdn.com/bootstrap/3.0.0-rc2/css/bootstrap.min.css
56
- //netdna.bootstrapcdn.com/bootstrap/3.0.0-wip/css/bootstrap.css
57
- //netdna.bootstrapcdn.com/bootstrap/3.0.0-wip/css/bootstrap.min.css
58
- //netdna.bootstrapcdn.com/bootstrap/3.0.1/css/bootstrap.css
59
- //netdna.bootstrapcdn.com/bootstrap/3.0.1/css/bootstrap.min.css
60
- //netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.css
61
- //netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css
62
- //netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.css
63
- //netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css
64
- //netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.css
65
- //netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css
66
- //netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.css
67
- //netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css
68
- //netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.css
69
- //netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css
70
- //netdna.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.css
71
- //netdna.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css
72
- //netdna.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.css
73
- //netdna.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css
74
- //netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.css
75
- //netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css
76
- //netdna.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.css
77
- //netdna.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css
78
- //netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css
79
- //netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css
80
- //netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css
81
- //netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css
82
- //netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css
83
- //netdna.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.css
84
- //netdna.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css
85
- //netdna.bootstrapcdn.com/bootstrap/4.0.0-alpha.3/css/bootstrap.css
86
- //netdna.bootstrapcdn.com/bootstrap/4.0.0-alpha.3/css/bootstrap.min.css
87
- //netdna.bootstrapcdn.com/bootstrap/4.0.0-alpha.4/css/bootstrap.css
88
- //netdna.bootstrapcdn.com/bootstrap/4.0.0-alpha.4/css/bootstrap.min.css
89
- //netdna.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.css
90
- //netdna.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css
91
- //netdna.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.css
92
- //netdna.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css
93
- //netdna.bootstrapcdn.com/bootstrap/4.0.0-alpha/css/bootstrap.css
94
- //netdna.bootstrapcdn.com/bootstrap/4.0.0-alpha/css/bootstrap.min.css
@@ -1 +0,0 @@
1
- //netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css
@@ -1,61 +0,0 @@
1
- Font Awesome 2.0 by @davegandy
2
- Font Awesome 3.0.2 by @davegandy
3
- Font Awesome 3.0 by @davegandy
4
- Font Awesome 3.1.0 by @davegandy
5
- Font Awesome 3.1.1 by @davegandy
6
- Font Awesome 3.2.0 by @davegandy
7
- Font Awesome 3.2.1 by @davegandy
8
- Font Awesome 4.0.0 by @davegandy
9
- Font Awesome 4.0.1 by @davegandy
10
- Font Awesome 4.0.2 by @davegandy
11
- Font Awesome 4.0.3 by @davegandy
12
- Font Awesome 4.1.0 by @davegandy
13
- Font Awesome 4.2.0 by @davegandy
14
- Font Awesome 4.3.0 by @davegandy
15
- Font Awesome 4.4.0 by @davegandy
16
- Font Awesome 4.5.0 by @davegandy
17
- Font Awesome 4.6.0 by @davegandy
18
- Font Awesome 4.6.1 by @davegandy
19
- Font Awesome 4.6.2 by @davegandy
20
- Font Awesome 4.6.3 by @davegandy
21
- //netdna.bootstrapcdn.com/font-awesome/2.0/css/font-awesome.css
22
- //netdna.bootstrapcdn.com/font-awesome/2.0/css/font-awesome.min.css
23
- //netdna.bootstrapcdn.com/font-awesome/3.0.2/css/font-awesome.css
24
- //netdna.bootstrapcdn.com/font-awesome/3.0.2/css/font-awesome.min.css
25
- //netdna.bootstrapcdn.com/font-awesome/3.0/css/font-awesome.css
26
- //netdna.bootstrapcdn.com/font-awesome/3.0/css/font-awesome.min.css
27
- //netdna.bootstrapcdn.com/font-awesome/3.1.0/css/font-awesome.css
28
- //netdna.bootstrapcdn.com/font-awesome/3.1.0/css/font-awesome.min.css
29
- //netdna.bootstrapcdn.com/font-awesome/3.1.1/css/font-awesome.css
30
- //netdna.bootstrapcdn.com/font-awesome/3.1.1/css/font-awesome.min.css
31
- //netdna.bootstrapcdn.com/font-awesome/3.2.0/css/font-awesome.css
32
- //netdna.bootstrapcdn.com/font-awesome/3.2.0/css/font-awesome.min.css
33
- //netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css
34
- //netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.min.css
35
- //netdna.bootstrapcdn.com/font-awesome/4.0.0/css/font-awesome.css
36
- //netdna.bootstrapcdn.com/font-awesome/4.0.0/css/font-awesome.min.css
37
- //netdna.bootstrapcdn.com/font-awesome/4.0.1/css/font-awesome.css
38
- //netdna.bootstrapcdn.com/font-awesome/4.0.1/css/font-awesome.min.css
39
- //netdna.bootstrapcdn.com/font-awesome/4.0.2/css/font-awesome.css
40
- //netdna.bootstrapcdn.com/font-awesome/4.0.2/css/font-awesome.min.css
41
- //netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css
42
- //netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css
43
- //netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.css
44
- //netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css
45
- //netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.css
46
- //netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css
47
- //netdna.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.css
48
- //netdna.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css
49
- //netdna.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.css
50
- //netdna.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css
51
- //netdna.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.css
52
- //netdna.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css
53
- //netdna.bootstrapcdn.com/font-awesome/4.6.0/css/font-awesome.css
54
- //netdna.bootstrapcdn.com/font-awesome/4.6.0/css/font-awesome.min.css
55
- //netdna.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.css
56
- //netdna.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css
57
- //netdna.bootstrapcdn.com/font-awesome/4.6.2/css/font-awesome.css
58
- //netdna.bootstrapcdn.com/font-awesome/4.6.2/css/font-awesome.min.css
59
- //netdna.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.css
60
- //netdna.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css
61
- //netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.css
@@ -1 +0,0 @@
1
- //netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css
data/lib/version.rb DELETED
@@ -1,3 +0,0 @@
1
- module WebPuc
2
- VERSION = '0.4.0'
3
- end