tool-shed 0.0.5 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/README.md +45 -22
  2. data/bin/{as-asset-detector → as-asset-vacuum} +2 -2
  3. data/bin/{as-class-detector → as-class-vacuum} +2 -2
  4. data/bin/{as-style-detector → as-style-vacuum} +2 -2
  5. data/bin/as-vacuum +16 -0
  6. data/lib/shed/asdoc_package.rb +11 -11
  7. data/lib/shed/asset_vacuum.rb +85 -0
  8. data/lib/shed/{unused_class.rb → class_vacuum.rb} +18 -19
  9. data/lib/shed/manifest.rb +11 -12
  10. data/lib/shed/opts/asdoc_package_opts.rb +1 -1
  11. data/lib/shed/opts/asset_vacuum_opts.rb +22 -0
  12. data/lib/shed/opts/{unused_class_opts.rb → class_vacuum_opts.rb} +9 -12
  13. data/lib/shed/opts/manifest_opts.rb +2 -2
  14. data/lib/shed/opts/style_vacuum_opts.rb +31 -0
  15. data/lib/shed/opts/tool_opts.rb +8 -8
  16. data/lib/shed/style_vacuum.rb +92 -0
  17. data/lib/shed/tool.rb +43 -6
  18. data/lib/shed/version.rb +1 -1
  19. data/lib/tool_shed.rb +6 -6
  20. data/test/fixtures/unused-asset/assets/audio/referenced.mp3 +0 -0
  21. data/test/fixtures/unused-asset/assets/audio/un-referenced.mp3 +0 -0
  22. data/test/fixtures/unused-asset/assets/css/referenced-in-mxml.css +0 -0
  23. data/test/fixtures/unused-asset/assets/css/referenced.css +12 -0
  24. data/test/fixtures/unused-asset/assets/css/un-referenced.css +7 -0
  25. data/test/fixtures/unused-asset/assets/fonts/referenced-in-css.ttf +0 -0
  26. data/test/fixtures/unused-asset/assets/fonts/referenced-in-unused-css.ttf +0 -0
  27. data/test/fixtures/unused-asset/assets/img/referenced.gif +0 -0
  28. data/test/fixtures/unused-asset/assets/img/referenced.svg +0 -0
  29. data/test/fixtures/unused-asset/assets/img/un-referenced.gif +0 -0
  30. data/test/fixtures/unused-asset/assets/img/un-referenced.svg +0 -0
  31. data/test/fixtures/unused-asset/assets/swf/referenced-in-css.swf +0 -0
  32. data/test/fixtures/unused-asset/assets/swf/referenced.swf +0 -0
  33. data/test/fixtures/unused-asset/assets/swf/un-referenced.swf +0 -0
  34. data/test/fixtures/unused-asset/src/org/helvector/ToolBox.mxml +5 -0
  35. data/test/fixtures/unused-asset/src/org/helvector/ToolShed.as +7 -2
  36. data/test/unit/test_asdoc_package_opts.rb +1 -1
  37. data/test/unit/test_asset_vacuum.rb +77 -0
  38. data/test/unit/{test_unused_asset_opts.rb → test_asset_vacuum_opts.rb} +5 -7
  39. data/test/unit/{test_unused_class.rb → test_class_vacuum.rb} +7 -7
  40. data/test/unit/test_class_vacuum_opts.rb +51 -0
  41. data/test/unit/{test_unused_style.rb → test_style_vacuum.rb} +21 -15
  42. data/test/unit/test_style_vacuum_opts.rb +46 -0
  43. metadata +36 -22
  44. data/lib/shed/opts/unused_asset_opts.rb +0 -24
  45. data/lib/shed/opts/unused_style_opts.rb +0 -23
  46. data/lib/shed/unused_asset.rb +0 -93
  47. data/lib/shed/unused_style.rb +0 -114
  48. data/test/unit/test_unused_asset.rb +0 -69
  49. data/test/unit/test_unused_class_opts.rb +0 -59
  50. data/test/unit/test_unused_style_opts.rb +0 -31
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tool-shed
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 5
10
- version: 0.0.5
9
+ - 7
10
+ version: 0.0.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Simon Gregory
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-25 00:00:00 +00:00
18
+ date: 2010-11-27 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -109,36 +109,38 @@ email: tool-shed@helvector.org
109
109
  executables:
110
110
  - as-docp
111
111
  - as-manifest
112
- - as-class-detector
113
- - as-style-detector
112
+ - as-class-vacuum
113
+ - as-style-vacuum
114
+ - as-asset-vacuum
114
115
  extensions: []
115
116
 
116
117
  extra_rdoc_files:
117
118
  - LICENSE
118
119
  - README.md
119
120
  files:
120
- - bin/as-asset-detector
121
- - bin/as-class-detector
121
+ - bin/as-asset-vacuum
122
+ - bin/as-class-vacuum
122
123
  - bin/as-docp
123
124
  - bin/as-manifest
124
- - bin/as-style-detector
125
+ - bin/as-style-vacuum
126
+ - bin/as-vacuum
125
127
  - Gemfile
126
128
  - Gemfile.lock
127
129
  - lib/shed/asdoc_package.rb
130
+ - lib/shed/asset_vacuum.rb
131
+ - lib/shed/class_vacuum.rb
128
132
  - lib/shed/manifest.rb
129
133
  - lib/shed/opts/asdoc_package_opts.rb
134
+ - lib/shed/opts/asset_vacuum_opts.rb
135
+ - lib/shed/opts/class_vacuum_opts.rb
130
136
  - lib/shed/opts/manifest_opts.rb
137
+ - lib/shed/opts/style_vacuum_opts.rb
131
138
  - lib/shed/opts/tool_opts.rb
132
- - lib/shed/opts/unused_asset_opts.rb
133
- - lib/shed/opts/unused_class_opts.rb
134
- - lib/shed/opts/unused_style_opts.rb
135
139
  - lib/shed/project_tools.rb
136
140
  - lib/shed/search.rb
137
141
  - lib/shed/stripper.rb
142
+ - lib/shed/style_vacuum.rb
138
143
  - lib/shed/tool.rb
139
- - lib/shed/unused_asset.rb
140
- - lib/shed/unused_class.rb
141
- - lib/shed/unused_style.rb
142
144
  - lib/shed/version.rb
143
145
  - lib/tool_shed.rb
144
146
  - LICENSE
@@ -156,14 +158,26 @@ files:
156
158
  - test/fixtures/src/org/helvector/three/package.asdoc
157
159
  - test/fixtures/src/org/helvector/two/HelTwo.as
158
160
  - test/fixtures/src/org/helvector/two/package.asdoc
161
+ - test/fixtures/unused-asset/assets/audio/referenced.mp3
162
+ - test/fixtures/unused-asset/assets/audio/un-referenced.mp3
163
+ - test/fixtures/unused-asset/assets/css/referenced-in-mxml.css
159
164
  - test/fixtures/unused-asset/assets/css/referenced.css
160
165
  - test/fixtures/unused-asset/assets/css/un-referenced.css
166
+ - test/fixtures/unused-asset/assets/fonts/referenced-in-css.ttf
167
+ - test/fixtures/unused-asset/assets/fonts/referenced-in-unused-css.ttf
161
168
  - test/fixtures/unused-asset/assets/fonts/referenced.otf
162
169
  - test/fixtures/unused-asset/assets/fonts/un-referenced.otf
170
+ - test/fixtures/unused-asset/assets/img/referenced.gif
163
171
  - test/fixtures/unused-asset/assets/img/referenced.jpg
164
172
  - test/fixtures/unused-asset/assets/img/referenced.png
173
+ - test/fixtures/unused-asset/assets/img/referenced.svg
174
+ - test/fixtures/unused-asset/assets/img/un-referenced.gif
165
175
  - test/fixtures/unused-asset/assets/img/un-referenced.jpg
166
176
  - test/fixtures/unused-asset/assets/img/un-referenced.png
177
+ - test/fixtures/unused-asset/assets/img/un-referenced.svg
178
+ - test/fixtures/unused-asset/assets/swf/referenced-in-css.swf
179
+ - test/fixtures/unused-asset/assets/swf/referenced.swf
180
+ - test/fixtures/unused-asset/assets/swf/un-referenced.swf
167
181
  - test/fixtures/unused-asset/src/org/helvector/ToolBox.mxml
168
182
  - test/fixtures/unused-asset/src/org/helvector/ToolShed.as
169
183
  - test/fixtures/unused-cla/link-report.xml
@@ -178,19 +192,19 @@ files:
178
192
  - test/test_helper.rb
179
193
  - test/unit/test_asdoc_package.rb
180
194
  - test/unit/test_asdoc_package_opts.rb
195
+ - test/unit/test_asset_vacuum.rb
196
+ - test/unit/test_asset_vacuum_opts.rb
197
+ - test/unit/test_class_vacuum.rb
198
+ - test/unit/test_class_vacuum_opts.rb
181
199
  - test/unit/test_manifest.rb
182
200
  - test/unit/test_manifest_opts.rb
183
201
  - test/unit/test_search.rb
184
202
  - test/unit/test_source_tools.rb
185
203
  - test/unit/test_stripper.rb
204
+ - test/unit/test_style_vacuum.rb
205
+ - test/unit/test_style_vacuum_opts.rb
186
206
  - test/unit/test_tool.rb
187
207
  - test/unit/test_tool_opts.rb
188
- - test/unit/test_unused_asset.rb
189
- - test/unit/test_unused_asset_opts.rb
190
- - test/unit/test_unused_class.rb
191
- - test/unit/test_unused_class_opts.rb
192
- - test/unit/test_unused_style.rb
193
- - test/unit/test_unused_style_opts.rb
194
208
  has_rdoc: true
195
209
  homepage: http://github.com/simongregory/tool-shed
196
210
  licenses: []
@@ -198,7 +212,7 @@ licenses: []
198
212
  post_install_message: |+
199
213
  Welcome to the Tool-Shed
200
214
  ========================
201
- Get Tooled Up 0.0.5. Kick off.
215
+ Get Tooled Up 0.0.7. Kick off.
202
216
 
203
217
  Thanks for installing, the tools are under development. Don't expect reliability.
204
218
 
@@ -1,24 +0,0 @@
1
- # encoding: utf-8
2
-
3
- #
4
- # Manages the command line interface for the unused assets detection tool.
5
- #
6
- class UnusedAssetOpts < ToolOpts
7
-
8
- def self.name
9
- "as-asset-detector"
10
- end
11
-
12
- def self.description
13
- "ActionScript Unused Asset Detection Tool"
14
- end
15
-
16
- def self.default_config
17
- dc = superclass.default_config
18
- dc[:output] = 'assets.txt'
19
- dc[:manifest] = 'manifest.xml'
20
- dc[:link_report] = 'link-report.xml'
21
- dc
22
- end
23
-
24
- end
@@ -1,23 +0,0 @@
1
- # encoding: utf-8
2
-
3
- #
4
- # Manages the command line interface for the unused style detection tool.
5
- #
6
- class UnusedStyleOpts < ToolOpts
7
-
8
- def self.name
9
- "as-style-detector"
10
- end
11
-
12
- def self.description
13
- "ActionScript Unused Style Detection Tool"
14
- end
15
-
16
- def self.default_config
17
- dc = superclass.default_config
18
- dc[:output] = 'styles.txt'
19
- dc[:css_dir] = 'style'
20
- dc
21
- end
22
-
23
- end
@@ -1,93 +0,0 @@
1
- # encoding: utf-8
2
-
3
- #
4
- # This script scans all Actionscript classes and CSS files in a project to
5
- # identify assets, like PNG files, that are in the project source tree but are
6
- # no longer used by the application.
7
- #
8
- class UnusedAsset < Tool
9
- attr_reader :assets, :src_files, :declared, :unused
10
-
11
- def initialize(opt,out=STDOUT)
12
- super(opt,out)
13
-
14
- @project_dir = opt[:project_dir]
15
- @assets = []
16
- @src_files = []
17
- @declared = []
18
-
19
- unless valid_opts
20
- @out.puts "#{INVALID_OPTS} One or all of specified asset and source directories does not exist."
21
- return
22
- end
23
-
24
- @declared_regex = /Embed\(source='([\w.\/]+)'/
25
-
26
- detect
27
-
28
- #@report = describe
29
-
30
- #to_disk(@report)
31
- end
32
-
33
- def valid_opts
34
- File.exist?(@project_dir) rescue false
35
- end
36
-
37
- private
38
-
39
- def detect
40
- Search.find_all(/\.(jpg|jpeg|png|otf)$/,@project_dir,@excludes) do |path|
41
- @assets << path
42
- end
43
-
44
- @declared = scan_dirs(/\.(css|as|mxml)$/, @project_dir, @declared_regex)
45
-
46
- @unused = []
47
-
48
- @assets.each { |a|
49
- @unused << a unless is_used(a)
50
- }
51
- end
52
-
53
- def is_used(file)
54
- used = false
55
- @declared.each { |f|
56
- if File.basename(f) == File.basename(file)
57
- used = true
58
- end
59
- }
60
- used
61
- end
62
-
63
- #
64
- # Scans directories for all files that match the file extension regex, and
65
- # for each match goes on to scan that document for items matching the syntax
66
- # regex.
67
- #
68
- def scan_dirs(file_ext_regex,path,syntax_regex)
69
- d = []
70
-
71
- Search.find_all(file_ext_regex,path,@excludes) do |p|
72
- @src_files << p
73
- d << scan_doc(p,syntax_regex)
74
- end
75
-
76
- d.flatten!.sort!.uniq! unless d.empty?
77
- d
78
- end
79
-
80
- #
81
- # Opens the document specified by path and returns a list of all first capture
82
- # group matches, after stripping comments.
83
- #
84
- def scan_doc(path,regex)
85
- n = []
86
- f = File.open(path,"r").read.strip
87
- f = Stripper.comments(f)
88
- f.scan(regex) do |style_name|
89
- n << $1
90
- end
91
- n
92
- end
93
- end
@@ -1,114 +0,0 @@
1
- # encoding: utf-8
2
-
3
- #
4
- # Detects styles that are not used in a Flex application.
5
- #
6
- # This needs to be provided with a source directory to search for used styles,
7
- # and a directory containing css files which will be loaded and parsed for
8
- # style definitions.
9
- #
10
- # NOTE: This tool needs further work before it can be considerd to cover all
11
- # use cases.
12
- #
13
- class UnusedStyle < Tool
14
- attr_reader :report,
15
- :declared,
16
- :used,
17
- :unused,
18
- :undeclared
19
-
20
- def initialize(opt,out=STDOUT)
21
- super(opt,out)
22
-
23
- @css_dir = opt[:css_dir]
24
-
25
- @style_regex = /styleName\s*=\s*["']\s*\{?\s*([\w.]+)\s*\}?\s*["']/
26
- @declared_regex = /^\.(\w+)/
27
-
28
- @declared, @used, @unused, @undeclared = []
29
-
30
- unless valid_opts
31
- @out.puts "#{INVALID_OPTS} The directory specified as containging css files does not exist, or does not contain css files."
32
- return
33
- end
34
-
35
- detect
36
-
37
- @report = describe
38
- end
39
-
40
- def valid_opts
41
- return false unless File.exist?(@css_dir)
42
-
43
- found = Dir.chdir("#{@css_dir}") do |d|
44
- Dir.glob('*.css')
45
- end
46
-
47
- found.length > 0
48
- end
49
-
50
- def detect
51
- @declared = scan_dirs(/\.(css)/, @css_dir, @declared_regex)
52
- @used = scan_dirs(/\.(as|mxml)/, @src, @style_regex)
53
-
54
- #Find any style names used in the source which haven't been declared.
55
- @undeclared = @used-@declared
56
-
57
- #Find any style names declared in the css but not used in the src.
58
- @unused = @declared-@used
59
- end
60
-
61
- private
62
-
63
- #
64
- # Returns a string detailing the findings of the style detection.
65
- #
66
- def describe
67
- desc = "#{generated_at}"
68
- desc << add_desc("declared in CSS", @declared)
69
- desc << add_desc("used in MXML",@used)
70
- desc << add_desc("declared but not used (in a styleName property)",@unused)
71
- desc << add_desc("used but not declared",@undeclared)
72
- desc
73
- end
74
-
75
- #
76
- # Prints a description category.
77
- #
78
- def add_desc(txt,list)
79
- d = "\nStyles #{txt}: #{list.length.to_s}\n"
80
- d << list.join("\n") unless list.empty?
81
- d
82
- end
83
-
84
- #
85
- # Scans directories for all files that match the file extension regex, and
86
- # for each match goes on to scan that document for items matching the syntax
87
- # regex.
88
- #
89
- def scan_dirs(extension_regex,path,syntax_regex)
90
- d = []
91
-
92
- Search.find_all(extension_regex,path,@excludes) do |path|
93
- d << scan_doc(path,syntax_regex)
94
- end
95
-
96
- d.flatten!.sort!.uniq! unless d.empty?
97
- d
98
- end
99
-
100
- #
101
- # Opens the document specified by path and returns a list of all first capture
102
- # group matches, after stripping comments.
103
- #
104
- def scan_doc(path,regex)
105
- n = []
106
- f = File.open(path,"r").read.strip
107
- f = Stripper.comments(f)
108
- f.scan(regex) do |style_name|
109
- n << $1
110
- end
111
- n
112
- end
113
-
114
- end
@@ -1,69 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require File.join(File.dirname(__FILE__), "/../test_helper")
4
-
5
- class TestUnusedAsset < Test::Unit::TestCase
6
-
7
- def fix
8
- File.expand_path(File.dirname(__FILE__)+ "/../fixtures/unused-asset")
9
- end
10
-
11
- context "A unused asset detector" do
12
-
13
- context "with correct arguments" do
14
- setup do
15
- opt = { :project_dir => "#{fix}" }
16
-
17
- @out = StringIO.new
18
- @tool = UnusedAsset.new(opt,@out)
19
- end
20
-
21
- should "find all assets in the project" do
22
- assert_equal(6, @tool.assets.length)
23
- assert_match(/\.jpg/, @tool.assets.to_s)
24
- assert_match(/\.png/, @tool.assets.to_s)
25
- assert_match(/\.otf/, @tool.assets.to_s)
26
- end
27
-
28
- should "locate all src files in the project" do
29
- assert_equal(4, @tool.src_files.length)
30
- assert_match(/\.mxml/, @tool.src_files.to_s)
31
- assert_match(/\.as/, @tool.src_files.to_s)
32
- assert_match(/\.css/, @tool.src_files.to_s)
33
- end
34
-
35
- should "search all loaded src files for asset references and store them in a list" do
36
- assert_equal(3, @tool.declared.length)
37
- assert_match('referenced.otf', @tool.declared.to_s)
38
- assert_match('referenced.jpg', @tool.declared.to_s)
39
- assert_match('referenced.png', @tool.declared.to_s)
40
- end
41
-
42
- should "produce a list of assets found in the project directory which are not referenced in the project src" do
43
- assert_equal(3, @tool.unused.length)
44
- assert_match('un-referenced.otf', @tool.unused.to_s)
45
- assert_match('un-referenced.jpg', @tool.unused.to_s)
46
- assert_match('un-referenced.png', @tool.unused.to_s)
47
- end
48
-
49
- should "load the project link report and look for assets compiled into the application" do
50
- #TODO
51
- #flunk
52
- end
53
-
54
- end
55
-
56
- context "with incorrect arguments" do
57
- setup do
58
- opt = {:project_dir => "INVALID"}
59
- @out = StringIO.new
60
- @tool = UnusedAsset.new(opt,@out)
61
- end
62
-
63
- should "fail with a warning message" do
64
- assert_match(/#{UnusedAsset::INVALID_OPTS}/, @out.string)
65
- end
66
- end
67
- end
68
-
69
- end
@@ -1,59 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require File.join(File.dirname(__FILE__), "/../test_helper")
4
-
5
- class UnusedClassOptsTest < Test::Unit::TestCase
6
-
7
- context "A Unused Class Tool Options Parser" do
8
-
9
- should "return default hash if no arguments are specified" do
10
-
11
- args = []
12
- opts = UnusedClassOpts.parse(args)
13
-
14
- assert_equal 'class-vaccum.txt', opts[:output]
15
- assert_equal 'manifest.xml', opts[:manifest]
16
- assert_equal 'link-report.xml', opts[:link_report]
17
- assert_equal '.', opts[:src]
18
- assert_equal false, opts[:verbose]
19
-
20
- end
21
-
22
- should "display a name" do
23
- assert_match(/\w+/, UnusedClassOpts.name)
24
- end
25
-
26
- should "describe itself" do
27
- assert_match(/\w+/, UnusedClassOpts.description)
28
- end
29
-
30
- should "raise an exception if mandatory arguments are missing" do
31
- #TODO assert_raise(Exception) { UnusedClassOpts.parse([]) }
32
- end
33
-
34
- should "exit with a useage message if mandatory options are not specified" do
35
- #TODO: This is failing as the rescue is never entered.
36
- #rescued = false;
37
- #begin
38
- # out = StringIO.new
39
- # args = []
40
- # opts = UnusedClassOpts.parse(args,out)
41
- #rescue SystemExit => e
42
- # assert_equal 0, e.status
43
- # assert_match(/Usage/, out.string)
44
- # rescued = true
45
- #end
46
- #flunk() unless rescued
47
- end
48
-
49
- should "set manifest and link-report properties" do
50
- args = ['-m', 'custom-manifest.xml', '-l', 'custom-link-report.xml']
51
- opts = UnusedClassOpts.parse(args)
52
-
53
- assert_equal 'custom-manifest.xml', opts[:manifest]
54
- assert_equal 'custom-link-report.xml', opts[:link_report]
55
- end
56
-
57
- end
58
-
59
- end
@@ -1,31 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require File.join(File.dirname(__FILE__), "/../test_helper")
4
-
5
- class UnusedStyleOptsTest < Test::Unit::TestCase
6
-
7
- context "A Unused Style Tool Options Parser" do
8
-
9
- should "return default hash if no arguments are specified" do
10
-
11
- args = []
12
- opts = UnusedStyleOpts.parse(args)
13
-
14
- assert_equal 'styles.txt', opts[:output]
15
- assert_equal 'style', opts[:css_dir]
16
- assert_equal '.', opts[:src]
17
- assert_equal false, opts[:verbose]
18
-
19
- end
20
-
21
- should "display a name" do
22
- assert_match(/\w+/, UnusedStyleOpts.name)
23
- end
24
-
25
- should "describe itself" do
26
- assert_match(/\w+/, UnusedStyleOpts.description)
27
- end
28
-
29
- end
30
-
31
- end