lessFactor 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/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ README.pdf
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in lessFactor.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Bernhard Weichel
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Bernhard Weichel
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # LessFactor
2
+
3
+ This gem supports refactoring of css/less stylefiles. As of now it
4
+ mainly extracts variables. Variables are recognized by a pattern:
5
+
6
+ - length : number followed by 'px' or 'em'
7
+ - color : \#xxxxxx or \#xxx
8
+
9
+ It generates two new files:
10
+
11
+ <infile>.refactored.less - the refactored lessfile
12
+ <infile>.refactored_vars.less - the new variables file
13
+
14
+ ## Installation
15
+
16
+ Add this line to your application's Gemfile:
17
+
18
+ gem 'lessFactor'
19
+
20
+ And then execute:
21
+
22
+ $ bundle
23
+
24
+ Or install it yourself as:
25
+
26
+ $ gem install lessFactor
27
+
28
+ ## Usage
29
+
30
+ 1. run
31
+
32
+ lessfactor infile.less varfile.less
33
+
34
+ 2. identify the semantics of the variables, e.g. by comparing
35
+ 'infile.refactored.less' with 'infile.less'
36
+ 3. rename the variables in the variables file to reflect the semantics
37
+ 4. rerun lessfactor to get the new variable names
38
+ 5. merge the refactored files back into your project
39
+
40
+ ## Known Issues
41
+
42
+ This is a very first shot. Areas of improvements:
43
+
44
+ * more robust parser
45
+ * option to ignore particular literals from being refactored - no idea how to achieve that
46
+ * do not crate a new variables file but patch the existing one
47
+ * apply the same for sass
48
+
49
+ ## Contributing
50
+
51
+ 1. Fork it
52
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
53
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
54
+ 4. Push to the branch (`git push origin my-new-feature`)
55
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/lessfactor ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "lib")
4
+ require "lessfactor.rb"
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'lessFactor/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "lessFactor"
8
+ spec.version = LessFactor::VERSION
9
+ spec.authors = ["Bernhard Weichel"]
10
+ spec.email = ["github.com@nospam.weichel21.de"]
11
+ spec.description = %q{This gem supports refactoring of less files. In particular it extracts variables.}
12
+ spec.summary = %q{Refactoring less style files}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ end
@@ -0,0 +1,3 @@
1
+ module LessFactor
2
+ VERSION = "0.0.1"
3
+ end
data/lib/lessFactor.rb ADDED
@@ -0,0 +1,101 @@
1
+
2
+
3
+
4
+ class LessReplacer
5
+
6
+ VAR_PATTERN = /(@[a-z\-]+):\s*([^;]*);/
7
+ LENGTH_PATTERN = /(\s+|:)([0-9\.]+(em|px|));/
8
+ COLOR_PATTERN = /()(#[a-fA-F0-9]+);/
9
+
10
+
11
+ def initialize
12
+ @vars = {}
13
+ @literals = {}
14
+ end
15
+
16
+ def scan_vars(file)
17
+ File.open(file, "r").readlines.each do |l|
18
+ l.match(VAR_PATTERN) do |m|
19
+ value =$2.downcase
20
+ @vars[$1] = value
21
+ @literals[value] = $1
22
+ end
23
+ end
24
+ end
25
+
26
+ def scan_literals(file)
27
+ File.open(file, "r").readlines.each do |l|
28
+ l.match(LENGTH_PATTERN) do |m|
29
+ value =$2.downcase
30
+ unless @literals[value]
31
+ @literals[value] = "@zz-length-" + "000#{@literals.keys.count}"[-3 .. -1]
32
+ end
33
+ end
34
+ l.match(COLOR_PATTERN) do |m|
35
+ value =$2.downcase
36
+ unless @literals[value]
37
+ @literals[value] = "@zz-color-" + "000#{@literals.keys.count}"[-3 .. -1]
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ def replace_vars(infile, outfile)
44
+ result = File.open(infile, "r").readlines.each.map{|l|
45
+ r1 = l.gsub(LENGTH_PATTERN) do |m|
46
+ vn =$2.downcase
47
+ if @literals[vn]
48
+ $1 + @literals[vn] + ';'
49
+ else
50
+ m
51
+ end
52
+ end
53
+
54
+ r1.gsub(COLOR_PATTERN) do |m|
55
+ vn =$2.downcase
56
+ if @literals[vn]
57
+ $1 + @literals[vn] +';'
58
+ else
59
+ m
60
+ end
61
+ end
62
+ }
63
+
64
+ File.open(outfile, "w") do |f|
65
+ f.puts(result.join())
66
+ end
67
+ end
68
+
69
+
70
+ def save_vars(file)
71
+ File.open(file, "w") do |f|
72
+ @literals.sort{|a, b| a[1]<=> b[1] }.each{|value, name| f.puts "#{name}: #{value};" }
73
+ end
74
+ end
75
+ end
76
+
77
+ unless ARGV[1]
78
+ puts %q{
79
+ usage: lessfactor <infile> <variablesfile>
80
+
81
+ creates
82
+
83
+ <infile>.refactored.less - the refactored lessfile
84
+ <infile>.refactored_vars.less - the new variables file
85
+ }
86
+ exit(0)
87
+ end
88
+
89
+
90
+ varfile = ARGV[0]
91
+ lessfile = ARGV[1]
92
+
93
+ lessoutfile = lessfile + ".refactored.less"
94
+ lessvarfile = lessfile + ".refactored_vars.less"
95
+
96
+
97
+ lr = LessReplacer.new
98
+ lr.scan_vars(varfile)
99
+ lr.scan_literals(lessfile)
100
+ lr.replace_vars(lessfile, lessoutfile)
101
+ lr.save_vars(lessvarfile)
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lessFactor
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Bernhard Weichel
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-08-16 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: This gem supports refactoring of less files. In particular it extracts
47
+ variables.
48
+ email:
49
+ - github.com@nospam.weichel21.de
50
+ executables:
51
+ - lessfactor
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - .gitignore
56
+ - Gemfile
57
+ - LICENSE
58
+ - LICENSE.txt
59
+ - README.md
60
+ - Rakefile
61
+ - bin/lessfactor
62
+ - lessFactor.gemspec
63
+ - lib/lessFactor.rb
64
+ - lib/lessFactor/version.rb
65
+ homepage: ''
66
+ licenses:
67
+ - MIT
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ segments:
79
+ - 0
80
+ hash: -3672470324399119344
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ segments:
88
+ - 0
89
+ hash: -3672470324399119344
90
+ requirements: []
91
+ rubyforge_project:
92
+ rubygems_version: 1.8.25
93
+ signing_key:
94
+ specification_version: 3
95
+ summary: Refactoring less style files
96
+ test_files: []