old_style 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/parse_dir.rb ADDED
@@ -0,0 +1,92 @@
1
+ require 'css_parser'
2
+ require 'load_dir'
3
+ require 'format'
4
+ require 'html_parser'
5
+
6
+ class ParseDir < LoadDir
7
+ include Format
8
+ include HtmlParser
9
+ include CssParser
10
+
11
+ attr_accessor :css, :html
12
+
13
+ def initialize(args)
14
+ super(args)
15
+ @css = {}
16
+ @html = {}
17
+ self.segregate
18
+ self.parse_css
19
+ end
20
+
21
+ def css?(file)
22
+ true if /\.css\S*\z/.match(file)
23
+ end
24
+
25
+ def html?(file)
26
+ true if/\.html\S*\z/.match(file)
27
+ end
28
+
29
+ def segregate
30
+ self.files.each do |file, path|
31
+ if self.css?(file)
32
+ self.css[file] = path
33
+ elsif self.html?(file)
34
+ self.html[file] = path
35
+ end
36
+ end
37
+ end
38
+
39
+ def parse_css
40
+ hash = {}
41
+ self.css.each do |file, path|
42
+ parser = CssParser::Parser.new
43
+ parser.load_file!(file, path, :all)
44
+ parser.each_selector(:all) do |selector, dec, spec|
45
+ unless /(^\/|\$|@|\d|:hover)/.match(selector)
46
+ hash[selector] = dec
47
+ end
48
+ end
49
+ end
50
+ hash
51
+ end
52
+
53
+ def found hash=self.parse_css
54
+ tmp = {}
55
+ self.html.each do |file|
56
+ hash.each do |sel, des|
57
+ if sel.match("#")
58
+ tmp[sel] = des if id_exists?(sel, file.last) == true
59
+ elsif sel.match(/^\./)
60
+ tmp[sel] = des if class_exists?(sel, file.last) == true
61
+ elsif sel.match(/^\w/)
62
+ tmp[sel] = des if parent_exists?(sel, file.last) == true
63
+ end
64
+ end
65
+ end
66
+ tmp
67
+ end
68
+
69
+ def empty
70
+ hash = {}
71
+ all = self.parse_css.inject([]) {|a, k| a << k}
72
+ found_css = self.found.inject([]) {|a, k| a << k}
73
+ empty_css = all - found_css
74
+ empty_css.each {|arr| hash[arr.first] = arr.last}
75
+ hash
76
+ end
77
+
78
+ def success?
79
+ if self.write_index
80
+ ParseDir.success_message
81
+ else
82
+ ParseDir.failure_message
83
+ end
84
+ end
85
+
86
+ def self.success_message
87
+ puts Time.now.strftime("%B %d %Y %r")
88
+ puts "Your report was generated at #{Dir.pwd}/old_style/index/html"
89
+ true
90
+ end
91
+
92
+ end
@@ -0,0 +1,131 @@
1
+
2
+ li {list-style: none;}
3
+
4
+ a {text-decoration: none;
5
+ }
6
+
7
+ body {background-color: #efefef;
8
+ margin: 0 0 0 0;
9
+ }
10
+
11
+ #header{height: 50px;
12
+ width: 100%;
13
+ background-color: #3EA4ED;
14
+ font-family: "HelveticaNeue-Light",
15
+ }
16
+
17
+ #main-heading {padding: 20px 0 20px 5%;
18
+ font-size: 20px;
19
+ color: #B2D4ED;
20
+ }
21
+
22
+ #content {padding: 30px 5% 5% 5%;
23
+ line-height: 1.4;
24
+ font-family: "HelveticaNeue-Light",
25
+ "Helvetica Neue Light",
26
+ "Helvetica Neue",
27
+ "Helvetica Helvetica",
28
+ "Helvetica",
29
+ "Arial",
30
+ "Lucida Grande",
31
+ "sans-serif";
32
+ font-weight 300;
33
+ }
34
+
35
+ #dir-heading {border-bottom: 1px solid #cccaca;}
36
+
37
+ #looked-in {width:100%;
38
+ padding-bottom: 50px;
39
+ }
40
+
41
+ #looked-css {width: 200px;
42
+ float: left;
43
+ border-right: 2px solid #cccaca;
44
+ padding-right: 10px;
45
+ }
46
+
47
+ #css-heading {border-bottom: 1px solid #cccaca;
48
+ font-size: 20px;
49
+ font-weight: bold;
50
+
51
+ }
52
+
53
+ #html-heading {border-bottom: 1px solid #cccaca;
54
+ font-size: 20px;
55
+ font-weight: bold;
56
+ }
57
+ #looked-html {width: 200px;
58
+ float: left;
59
+ padding-left: 10px;
60
+ }
61
+
62
+ #css-file:hover {color: blue;}
63
+ #html-file:hover {color: blue;}
64
+
65
+ #found-wrapper{padding: 30px 0 30px 0;
66
+ width: 100%;
67
+ float: left;
68
+ color: green;
69
+ }
70
+
71
+ #found-title-wrapper {border-bottom: 1px solid #cccaca;}
72
+
73
+
74
+ #found-css {padding-right: 10px;
75
+ display: inline;
76
+ font-weight: bold;
77
+ font-size: 20px;
78
+
79
+ }
80
+ #good-percent {display: inline;
81
+ color: black;
82
+ }
83
+
84
+ #found-style-wrapper {padding-top:10px;}
85
+
86
+ #empty-wrapper {color: red;
87
+ float: left;
88
+ width: 100%;
89
+ }
90
+
91
+ #empty-title-wrapper {border-bottom: 1px solid #cccaca;
92
+
93
+ }
94
+
95
+ #empty-css {padding-right: 10px;
96
+ display: inline;
97
+ font-weight: bold;
98
+ font-size: 20px;
99
+
100
+ }
101
+
102
+ #bad-percent {display: inline;
103
+ color: black;
104
+ }
105
+
106
+ #empty-style-wrapper {padding: 10px 0 40px 0;}
107
+
108
+
109
+ #style {color: green;}
110
+
111
+ #footer {width: 100%;
112
+ float: left;
113
+ height: 200px;
114
+ background-color: #ADB3B8;
115
+ padding-top: 50px;
116
+ line-height: 1.4;
117
+ font-family: "HelveticaNeue-Light";
118
+
119
+ }
120
+
121
+ #footer-info {padding: 0 0 0 5%;
122
+ font-size: 20px;
123
+ }
124
+
125
+
126
+ #footer-caption {color: #efefef;}
127
+
128
+ #issues-link:hover {color: blue;}
129
+
130
+
131
+
@@ -0,0 +1,5 @@
1
+ <div id='header'><li id='main-heading'>
2
+ 1 Controller evaluated </li></div><body><head><link rel='stylesheet' type='text/css' href=/Users/hayduke19us/my_gems/old_style/old_style/index.css></head><div id='content'><div id='directories'><h2 id='dir-heading'>["fake"]</h2></div><h4>2 css files compared to
3
+ 2 html files
4
+ </h4><div id='looked-in'><div id='looked-css'><div id='css-heading'>Css</div><li><a id='css-file' href=/Users/hayduke19us/my_gems/old_style/app/assets/stylesheets/fake3.css.scss>fake3.css.scss<a></li><li><a id='css-file' href=/Users/hayduke19us/my_gems/old_style/app/assets/stylesheets/fake4.css>fake4.css<a></li></div><div id='looked-html'><div id='html-heading'>Html</div><li><a id='html-file' href=/Users/hayduke19us/my_gems/old_style/app/views/fake/fake.html.erb>fake.html.erb<a></li><li><a id='html-file' href=/Users/hayduke19us/my_gems/old_style/app/views/fake/fake2.html>fake2.html<a></li></div></div><div id='found-wrapper'><div id='found-title-wrapper'><li id='found-css'>Good</li><li id='good-percent'> 57.14%</li></div><div id='found-style-wrapper'><li id='style'>#franny {padding: 100%;}</li><li id='style'>#salinger {color: blue;}</li><li id='style'>#test-id {border: 1px solid #efefef;}</li><li id='style'>div.well {}</li></div></div><div id='empty-wrapper'><div id='empty-title-wrapper'><h4 id='empty-css'>Bad</h4><li id='bad-percent'> 42.85%</li></div><div id='empty-style-wrapper'><li id='empty_style'>#find {color: blue;}</li><li id='empty_style'>.franny {padding: 50%;}</li><li id='empty_style'>.zooey {width: 5px;}</li></div></div></div></body><div id='footer'><div id='footer-info'><li id='footer-caption'>If you find any issues please let me know
5
+ at </li><a id ='issues-link' href = 'https://github.com/hayduke19us/old_style/issues?state=open'>old_style's issues page on github<a></div></div>
data/old_style.gemspec ADDED
@@ -0,0 +1,83 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: old_style 1.4.1 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "old_style"
9
+ s.version = "1.4.1"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.authors = ["hayduke19us"]
13
+ s.date = "2014-02-11"
14
+ s.description = "Rails helper. Finds the irrelevent styles in your \n stylesheet and generates a html report to keep you informed."
15
+ s.email = "hayduke19us@gmail.com"
16
+ s.executables = ["old_style"]
17
+ s.extra_rdoc_files = [
18
+ "LICENSE.txt",
19
+ "README.md"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "LICENSE.txt",
26
+ "README.md",
27
+ "Rakefile",
28
+ "VERSION",
29
+ "app/assets/stylesheets/fake3.css.scss",
30
+ "app/assets/stylesheets/fake4.css",
31
+ "app/views/fake/fake.html.erb",
32
+ "app/views/fake/fake2.html",
33
+ "base.css",
34
+ "bin/old_style",
35
+ "lib/format.rb",
36
+ "lib/html_parser.rb",
37
+ "lib/load_dir.rb",
38
+ "lib/old_style.rb",
39
+ "lib/parse_dir.rb",
40
+ "old_style.gemspec",
41
+ "old_style/index.css",
42
+ "old_style/index.html",
43
+ "test/helper.rb",
44
+ "test/test_format.rb",
45
+ "test/test_html_parser.rb",
46
+ "test/test_load_dir.rb",
47
+ "test/test_old_style.rb",
48
+ "test/test_parse_dir.rb"
49
+ ]
50
+ s.homepage = "http://github.com/hayduke19us/old_style"
51
+ s.licenses = ["MIT"]
52
+ s.require_paths = ["lib"]
53
+ s.rubygems_version = "2.1.11"
54
+ s.summary = "Get rid of those old css styles"
55
+
56
+ if s.respond_to? :specification_version then
57
+ s.specification_version = 4
58
+
59
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
60
+ s.add_runtime_dependency(%q<css_parser>, [">= 0"])
61
+ s.add_development_dependency(%q<minitest>, [">= 0"])
62
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
63
+ s.add_development_dependency(%q<bundler>, ["~> 1.0"])
64
+ s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
65
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
66
+ else
67
+ s.add_dependency(%q<css_parser>, [">= 0"])
68
+ s.add_dependency(%q<minitest>, [">= 0"])
69
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
70
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
71
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
72
+ s.add_dependency(%q<simplecov>, [">= 0"])
73
+ end
74
+ else
75
+ s.add_dependency(%q<css_parser>, [">= 0"])
76
+ s.add_dependency(%q<minitest>, [">= 0"])
77
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
78
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
79
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
80
+ s.add_dependency(%q<simplecov>, [">= 0"])
81
+ end
82
+ end
83
+
data/test/helper.rb ADDED
@@ -0,0 +1,39 @@
1
+ require 'simplecov'
2
+
3
+ module SimpleCov::Configuration
4
+ def clean_filters
5
+ @filters = []
6
+ end
7
+ end
8
+
9
+ SimpleCov.configure do
10
+ clean_filters
11
+ load_profile 'test_frameworks'
12
+ end
13
+
14
+ ENV["COVERAGE"] && SimpleCov.start do
15
+ add_filter "/.rvm/"
16
+ end
17
+ require 'rubygems'
18
+ require 'bundler'
19
+ begin
20
+ Bundler.setup(:default, :development)
21
+ rescue Bundler::BundlerError => e
22
+ $stderr.puts e.message
23
+ $stderr.puts "Run `bundle install` to install missing gems"
24
+ exit e.status_code
25
+ end
26
+ require 'minitest/autorun'
27
+ require 'minitest/pride'
28
+
29
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
30
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
31
+ require 'load_dir'
32
+ require 'format'
33
+ require 'parse_dir'
34
+ require 'html_parser'
35
+
36
+ class MiniTest::Unit::TestCase
37
+ end
38
+
39
+ MiniTest.autorun
@@ -0,0 +1,53 @@
1
+ require 'helper'
2
+ module Format
3
+ class KlassTest < Minitest::Test
4
+
5
+ include Format
6
+
7
+ def test_if_old_style_index_html_exist_new_or_open_index_returns_IO_stream
8
+ new_or_open_index
9
+ assert_equal File, new_or_open_index.class
10
+ end
11
+
12
+ def test_create_css_file
13
+ create_css_file?
14
+ assert File.exist?(Format::PATH + "/old_style/index.css")
15
+ end
16
+
17
+ def test_if_css_file_exist_#create_css_file_returns_nil
18
+ create_css_file?
19
+ assert_equal nil, create_css_file?
20
+ end
21
+
22
+ def test_css_path
23
+ assert_equal Format::PATH + "/old_style/index.css", css_path
24
+ end
25
+
26
+ def test_base_css_file_exist
27
+ assert File.exists?("base.css")
28
+ end
29
+
30
+ def test_base_file_can_be_read
31
+ assert_equal 131, File.readlines("base.css").count
32
+ end
33
+
34
+ # the following two test are in sequence
35
+ # the first deletes the contents of the css file
36
+ # the next one adds the css to file
37
+
38
+ def test_index_css_is_empty
39
+ #deletes file contents by File.new ('w+')
40
+ file = File.new(css_path, 'w+')
41
+ assert_equal 0, File.readlines(file).count
42
+ file.close
43
+ end
44
+
45
+ def test_file_index_css_has_lines
46
+ #write the css from base.css file in gem
47
+ write_css
48
+ assert_equal 131, File.readlines(css_path).count
49
+ end
50
+
51
+ end
52
+
53
+ end
@@ -0,0 +1,67 @@
1
+ require 'helper'
2
+
3
+ class KlassTest < Minitest::Test
4
+ include HtmlParser
5
+
6
+ def setup
7
+ @file = File.expand_path("../../app", __FILE__) + "/views/fake/fake.html.erb"
8
+ end
9
+
10
+ def test_read_html_should_put_document_into_an_array
11
+ refute read_html(@file).empty?
12
+ end
13
+
14
+ def test_remove_extras_should_remove_all_punctuation_and_whitespace
15
+ refute remove_extras(@file).join.match(/(:|<|>|=|'|')/)
16
+ end
17
+
18
+ def test_remove_extras_should_also_remove_all_whitespace
19
+ refute remove_extras(@file).join.match(' ')
20
+ end
21
+
22
+ def test_extras_should_return_an_Array
23
+ assert_equal Array, remove_extras(@file).class
24
+ end
25
+
26
+ def test_selector_can_match_a_tag_in_the_html_erb_doc
27
+ #and id of id: test-id id in the file
28
+ array = []
29
+ remove_extras(@file).each do |line|
30
+ array << line if line.match(/(idtest-id|idpeace)/)
31
+ refute line.match('idtear-id'), "incorrect match"
32
+ refute line.match('idtesx-id'), "incorrect match"
33
+ refute line.match('idtest-im'), "incorrect match"
34
+ end
35
+
36
+ refute array.empty?, "correct match"
37
+ assert_equal 2, array.count
38
+ end
39
+
40
+ def test_#id_exists_then_return_true
41
+ assert_equal true, id_exists?("#test-id", @file)
42
+ end
43
+
44
+ def test_#id_doesn't_exist_returns_false
45
+ assert_equal false, id_exists?("#test-ix", @file)
46
+ end
47
+
48
+ def test_#class_exists_then_return_true
49
+ assert_equal true, class_exists?(".row", @file)
50
+ end
51
+
52
+ def test_#class_doesn't_doesn't_exist_then_return_false
53
+ refute_equal true, class_exists?(".container", @file)
54
+ end
55
+
56
+ def test_using_#class_as_a_control_structure
57
+ if class_exists?(".container", @file) == true
58
+ success = true
59
+ end
60
+ refute_equal true, success
61
+ end
62
+
63
+ def test_id_exists
64
+ assert_equal true, id_exists?("#test-id", @file)
65
+ end
66
+
67
+ end
@@ -0,0 +1,28 @@
1
+ require 'helper'
2
+
3
+ class LoadDirTest < MiniTest::Test
4
+ def setup
5
+ @load_dir = LoadDir.new("fake")
6
+ end
7
+
8
+ def test_HTML_PATH_should_be_for_views
9
+ assert_equal '/Users/hayduke19us/my_gems/old_style/app/views', LoadDir::HTML_PATH
10
+ end
11
+
12
+ def test_CSS_PATH_should_be_for_assets_stylesheets
13
+ assert_equal '/Users/hayduke19us/my_gems/old_style/app/assets/stylesheets', LoadDir::CSS_PATH
14
+ end
15
+
16
+ def test_LoadDir_args_is_an_array_of_dir
17
+ assert_equal Array, @load_dir.directories.class
18
+ end
19
+
20
+ def test_directories_count_is_proper
21
+ assert_equal 1, @load_dir.directories.count
22
+ end
23
+
24
+ def test_html_files_attribute_is_populated_after_initialization
25
+ assert_equal 4, @load_dir.files.keys.count
26
+ end
27
+
28
+ end
@@ -0,0 +1,2 @@
1
+
2
+
@@ -0,0 +1,86 @@
1
+ require 'helper'
2
+ require 'benchmark'
3
+
4
+ class ParseDirTest < MiniTest::Test
5
+
6
+ def setup
7
+ @parse = ParseDir.new("fake")
8
+ end
9
+
10
+ def test_attributes_of_Load_Dir
11
+ refute @parse.directories.empty?
12
+ end
13
+
14
+ def test_html_directories_and_css_directories
15
+ refute @parse.files.empty?
16
+ end
17
+
18
+ def test_true_if_css?
19
+ file = "playlist.css"
20
+ assert @parse.css?(file)
21
+ end
22
+
23
+ def false_if_html_with_css?
24
+ file = "playlist.html"
25
+ refute @parse.css?(file)
26
+ end
27
+
28
+ def test_true_if_html?
29
+ file = "playlist.css"
30
+ refute @parse.html?(file)
31
+ end
32
+
33
+ def false_if_css_for_html?
34
+ file = "playlist.css"
35
+ refute @parse.html?(file)
36
+ end
37
+
38
+ def test_ParseDir#segregate_puts_css_files_in_an_array
39
+ assert_equal 2, @parse.css.count
40
+ end
41
+
42
+ def test_ParseDir#segregate_puts_html_files_in_an_array
43
+ assert_equal 2, @parse.html.count
44
+ end
45
+
46
+ def test_parse_css_returns_hash_of_all_selectors_no_comments_no_SASS
47
+ assert_equal 7, @parse.parse_css.keys.count
48
+ end
49
+
50
+ def test_parse_css_keys_content
51
+ a = ["#salinger", "#find", "div.well",
52
+ ".franny", "#franny", ".zooey", "#test-id"]
53
+ assert_equal a, @parse.parse_css.keys
54
+ end
55
+
56
+ def test_found_css_finds_the_relevent_css
57
+ assert_equal 4, @parse.found.keys.count
58
+ end
59
+
60
+ def test_empty_css_returns_a_hash_of_false_selectors
61
+ assert_equal "#find", @parse.empty.keys.first
62
+ end
63
+
64
+ def test_if_Format#write_index_returns_true
65
+ assert_equal true, @parse.write_index
66
+ end
67
+
68
+ def test_good_percent
69
+ assert_equal "57.14%", @parse.good_percent
70
+ end
71
+
72
+ def test_success_message_if_Format#write_index_is_true
73
+ assert @parse.success?
74
+ end
75
+
76
+ #Preformance
77
+ =begin
78
+ def test_performance_of_found
79
+ n = 10000
80
+ Benchmark.bmbm do |x|
81
+ x.report("found:") {n.times do @parse.found end}
82
+ end
83
+ end
84
+ =end
85
+
86
+ end