sassfmt 0.1.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d83a8169e0b7de81f640010584ba7b34e9e6a7c8
4
+ data.tar.gz: 2bd1de8908d4bee2c809243b5d864525b0434aa5
5
+ SHA512:
6
+ metadata.gz: 527b02df3e782feecb2feb8a6d23462c015e8f65b1b93a5668d9b4d8380667d0933e03b2d98db9d169be96ddabf35fce653b4e60304e9cae9214beaf4e706f3b
7
+ data.tar.gz: c33c6cb0e14ef2002921d72e91425e19ee66a0fa9a06d7819439b3ce75dda4f6d0c781a08361658916ccbe14bd9c929f2d584fa544143f5804e90fa3e2b7b2a0
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.3
4
+ before_install: gem install bundler -v 1.10.6
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in sassfmt.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Utkarsh Kukreti
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
13
+ all 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
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,37 @@
1
+ # Sassfmt
2
+
3
+ Sassfmt sorts properties in your .sass files according to the order defined in
4
+ Twitter's [RECESS]. (Sassfmt actually uses [scss-lint]'s updated fork available
5
+ [here][recess.txt].)
6
+
7
+ [RECESS]: https://github.com/twitter/recess
8
+ [scss-lint]: https://github.com/brigade/scss-lint
9
+ [recess.txt]: https://github.com/brigade/scss-lint/blob/fe04ca9de2d1cf1b28122fb3add7116bef995edd/data/property-sort-orders/recess.txt
10
+
11
+ ## Installation
12
+
13
+ $ gem install sassfmt
14
+
15
+ ## Usage
16
+
17
+ To format a .sass file and print to stdout:
18
+
19
+ $ sassfmt /path/to/your/style.sass
20
+
21
+ or
22
+
23
+ $ cat /path/to/your/style.sass | sassfmt
24
+
25
+ ## Development
26
+
27
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. Run `bundle exec sassfmt` to use the gem in this directory, ignoring other installed copies of this gem.
28
+
29
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
30
+
31
+ ## Contributing
32
+
33
+ Bug reports and pull requests are welcome on GitHub at https://github.com/utkarshkukreti/sassfmt.
34
+
35
+ ## License
36
+
37
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
9
+
10
+ task :default => :test
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "sassfmt"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
data/exe/sassfmt ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "sassfmt"
4
+
5
+ print Sassfmt.format(ARGF.read)
@@ -0,0 +1,3 @@
1
+ module Sassfmt
2
+ VERSION = "0.1.0"
3
+ end
data/lib/sassfmt.rb ADDED
@@ -0,0 +1,53 @@
1
+ require "sassfmt/version"
2
+
3
+ module Sassfmt
4
+ # From https://github.com/brigade/scss-lint/blob/fe04ca9de2d1cf1b28122fb3add7116bef995edd/data/property-sort-orders/recess.txt
5
+ # which itself was modified from https://github.com/twitter/recess.
6
+ PROPERTY_ORDER = %w(position top right bottom left z-index display
7
+ align-content align-items align-self flex flex-basis flex-direction flex-flow
8
+ flex-grow flex-shrink flex-wrap justify-content order float width height
9
+ max-width max-height min-width min-height padding padding-top padding-right
10
+ padding-bottom padding-left margin margin-top margin-right margin-bottom
11
+ margin-left margin-collapse margin-top-collapse margin-right-collapse
12
+ margin-bottom-collapse margin-left-collapse overflow overflow-x overflow-y clip
13
+ clear font font-family font-size font-smoothing osx-font-smoothing font-style
14
+ font-weight hyphens src line-height letter-spacing word-spacing color
15
+ text-align text-decoration text-indent text-overflow text-rendering
16
+ text-size-adjust text-shadow text-transform word-break word-wrap white-space
17
+ vertical-align list-style list-style-type list-style-position list-style-image
18
+ pointer-events cursor background background-attachment background-color
19
+ background-image background-position background-repeat background-size border
20
+ border-collapse border-top border-right border-bottom border-left border-color
21
+ border-image border-top-color border-right-color border-bottom-color
22
+ border-left-color border-spacing border-style border-top-style
23
+ border-right-style border-bottom-style border-left-style border-width
24
+ border-top-width border-right-width border-bottom-width border-left-width
25
+ border-radius border-top-right-radius border-bottom-right-radius
26
+ border-bottom-left-radius border-top-left-radius border-radius-topright
27
+ border-radius-bottomright border-radius-bottomleft border-radius-topleft
28
+ content quotes outline outline-offset outline-width outline-style outline-color
29
+ opacity filter visibility size zoom transform box-align box-flex box-orient
30
+ box-pack box-shadow box-sizing table-layout animation animation-delay
31
+ animation-duration animation-iteration-count animation-name
32
+ animation-play-state animation-timing-function animation-fill-mode transition
33
+ transition-delay transition-duration transition-property
34
+ transition-timing-function background-clip backface-visibility resize
35
+ appearance user-select interpolation-mode direction marks page set-link-source
36
+ unicode-bidi speak).map.with_index { |p, i| [p, i] }.to_h
37
+
38
+ PROPERTY_REGEXP = /^\s*([a-zA-Z0-9-]+)\s*:/
39
+
40
+ def self.format(sass)
41
+ sass.lines.chunk do |line|
42
+ [!!(line =~ PROPERTY_REGEXP), line.match(/^\s*/)[0].size]
43
+ end.flat_map do |((is_property, _), lines)|
44
+ if is_property
45
+ lines.sort_by.with_index do |line, i|
46
+ [PROPERTY_ORDER[line.match(PROPERTY_REGEXP)[1]] || Float::INFINITY, i]
47
+ end
48
+ else
49
+ lines
50
+ end
51
+ end.join
52
+ end
53
+ end
data/sassfmt.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'sassfmt/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "sassfmt"
8
+ spec.version = Sassfmt::VERSION
9
+ spec.authors = ["Utkarsh Kukreti"]
10
+ spec.email = ["utkarshkukreti@gmail.com"]
11
+
12
+ spec.summary = %q{Sorts properties in your Sass files according to Twitter RECESS}
13
+ spec.description = %q{Sorts properties in your Sass files according to Twitter RECESS}
14
+ spec.homepage = "https://github.com/utkarshkukreti/sassfmt"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.10"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "minitest"
25
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sassfmt
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Utkarsh Kukreti
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-01-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Sorts properties in your Sass files according to Twitter RECESS
56
+ email:
57
+ - utkarshkukreti@gmail.com
58
+ executables:
59
+ - sassfmt
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".gitignore"
64
+ - ".travis.yml"
65
+ - Gemfile
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - bin/console
70
+ - bin/setup
71
+ - exe/sassfmt
72
+ - lib/sassfmt.rb
73
+ - lib/sassfmt/version.rb
74
+ - sassfmt.gemspec
75
+ homepage: https://github.com/utkarshkukreti/sassfmt
76
+ licenses:
77
+ - MIT
78
+ metadata: {}
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubyforge_project:
95
+ rubygems_version: 2.4.5.1
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: Sorts properties in your Sass files according to Twitter RECESS
99
+ test_files: []