Skip to content
This repository has been archived by the owner on Jul 14, 2023. It is now read-only.

Commit

Permalink
Remove Bourbon as a dependency
Browse files Browse the repository at this point in the history
(feelsbadman) but the dependency on Bourbon was technically minimal. By
removing the dependency on Bourbon we are able to gain more users and
can potentially grow the community.

resolves #346
  • Loading branch information
Curt Howard committed Jun 16, 2016
1 parent 4bef318 commit 4415490
Show file tree
Hide file tree
Showing 16 changed files with 62 additions and 75 deletions.
5 changes: 2 additions & 3 deletions Gulpfile.js
@@ -1,5 +1,4 @@
var bourbon = require("bourbon").includePaths,
autoprefix = require("gulp-autoprefixer"),
var autoprefix = require("gulp-autoprefixer"),
connect = require("gulp-connect"),
gulp = require("gulp"),
sass = require("gulp-sass");
Expand All @@ -13,7 +12,7 @@ var paths = {
gulp.task("sass", function () {
return gulp.src(paths.scss)
.pipe(sass({
includePaths: ["styles"].concat(bourbon)
sourcemaps: true
}))
.pipe(autoprefix("last 2 versions"))
.pipe(gulp.dest("./contrib"))
Expand Down
24 changes: 6 additions & 18 deletions README.md
Expand Up @@ -4,9 +4,9 @@
[![Gitter](http://img.shields.io/badge/gitter-neat-ae3dd2.svg?style=flat)](https://gitter.im/thoughtbot/neat)
[![Stack Overflow](http://img.shields.io/badge/stack%20overflow-neat-ae3dd2.svg?style=flat)](http://stackoverflow.com/questions/tagged/neat)

## A lightweight, semantic grid framework built with Bourbon
## A lightweight, semantic grid framework

Neat is a fluid grid framework built with [Bourbon](https://github.com/thoughtbot/bourbon) with the aim of being easy enough to use out of the box and flexible enough to customize down the road.
Neat is a fluid grid framework with the aim of being easy enough to use out of the box and flexible enough to customize down the road.

- **[Demo](http://neat.bourbon.io)**
- **[Documentation](http://thoughtbot.github.io/neat-docs/latest)**
Expand All @@ -19,7 +19,6 @@ for updates.
## Requirements

- [Sass](https://github.com/sass/sass) 3.3+
- [Bourbon](https://github.com/thoughtbot/bourbon) 4.0+
- :warning: If you need **Sass 3.2 support**, you should [use Neat 1.5.1](#installing-older-versions-of-neat)

## Installation
Expand All @@ -39,23 +38,16 @@ For command line help, visit our wiki page on Neat’s [command line interface](
```bash
gem install sass # or gem update sass
```
```bash
gem install bourbon # or gem update bourbon
```

3. Install the Neat library into the current directory:

```bash
bourbon install # if not already installed
```
```bash
neat install
```

4. Import Neat in your stylesheet, after Bourbon:
4. Import Neat in your stylesheet:

```scss
@import "bourbon/bourbon";
@import "neat/neat";
```

Expand All @@ -81,10 +73,9 @@ For command line help, visit our wiki page on Neat’s [command line interface](
bundle update sass
```

3. Import Neat in your `application.scss`, after Bourbon:
3. Import Neat in your `application.scss`:

```scss
@import "bourbon";
@import "neat";
```

Expand All @@ -98,12 +89,11 @@ For command line help, visit our wiki page on Neat’s [command line interface](
npm install --save bourbon-neat
```

1. If you’re using [Eyeglass](http://eyeglass.rocks), skip to Step 3. Otherwise, you’ll need to add Bourbon and Neat to your node-sass `includePaths` option. `require("bourbon-neat").includePaths` is an array of directories that you should pass to node-sass. How you do this depends on how node-sass is integrated into your project. You will also need to ensure that Bourbon is in the `includePaths` passed to node-sass.
1. If you’re using [Eyeglass](http://eyeglass.rocks), skip to Step 3. Otherwise, you’ll need to add Neat to your node-sass `includePaths` option. `require("bourbon-neat").includePaths` is an array of directories that you should pass to node-sass. How you do this depends on how node-sass is integrated into your project.

1. Import Neat into your Sass files, after Bourbon:
1. Import Neat into your Sass files:

```scss
@import "bourbon";
@import "neat";
```

Expand All @@ -128,15 +118,13 @@ For command line help, visit our wiki page on Neat’s [command line interface](
First off, if you are planning to override the default grid settings (12 columns), it is recommended to create a `_grid-settings.scss` file for that purpose. Make sure to import it right *before* importing Neat:

```scss
@import "bourbon/bourbon"; // or "bourbon" when in Rails
@import "grid-settings";
@import "neat/neat"; // or "neat" when in Rails
```

In your newly created `_grid-settings.scss`, import `neat-helpers` if you are planning to use `new-breakpoint()`, then define your new variables:

```scss
@import "bourbon/bourbon"; // or "bourbon" when in Rails
@import "neat/neat-helpers"; // or "neat-helpers" when in Rails

// Change the grid settings
Expand Down
4 changes: 0 additions & 4 deletions Rakefile
Expand Up @@ -8,15 +8,11 @@ RSpec::Core::RakeTask.new(:spec)
task :default => :spec

task :test do
puts "Creating a Bourbon directory..."
`bourbon install --path test`
puts "Generating CSS..."
`sass -I . --watch test:css/ --style expanded`
end

task :clean do
puts "Deleting Bourbon directory..."
`rm -rf test/bourbon`
puts "Deleting generated CSS..."
`rm -rf css/`
end
3 changes: 3 additions & 0 deletions app/assets/stylesheets/_neat-helpers.scss
@@ -1,3 +1,6 @@
// Mixins
@import "mixins/clearfix";

// Functions
@import "functions/private";
@import "functions/new-breakpoint";
Expand Down
25 changes: 25 additions & 0 deletions app/assets/stylesheets/mixins/_clearfix.scss
@@ -0,0 +1,25 @@
@charset "UTF-8";

/// Provides an easy way to include a clearfix for containing floats.
///
/// @link http://goo.gl/yP5hiZ
///
/// @example scss
/// .element {
/// @include clearfix;
/// }
///
/// @example css
/// .element::after {
/// clear: both;
/// content: "";
/// display: block;
/// }
@mixin clearfix {
&::after {
clear: both;
content: "";
display: block;
}
}
8 changes: 4 additions & 4 deletions app/assets/stylesheets/settings/_grid.scss
@@ -1,16 +1,16 @@
@charset "UTF-8";

/// Sets the relative width of a single grid column. The unit used should be the same one used to define `$gutter`. To learn more about `modular-scale()` see [Bourbon docs](http://bourbon.io/docs/#modular-scale). Set with a `!global` flag.
/// Sets the relative width of a single grid column. The unit used should be the same one used to define `$gutter`. Set with a `!global` flag.
///
/// @type Number (Unit)

$column: modular-scale(3, 1em, $golden) !default;
$column: 4.2358em !default;

/// Sets the relative width of a single grid gutter. The unit used should be the same one used to define `$column`. To learn more about `modular-scale()` see [Bourbon docs](http://bourbon.io/docs/#modular-scale). Set with the `!global` flag.
/// Sets the relative width of a single grid gutter. The unit used should be the same one used to define `$column`. Set with the `!global` flag.
///
/// @type Number (Unit)

$gutter: modular-scale(1, 1em, $golden) !default;
$gutter: 1.618em !default;

/// Sets the total number of columns in the grid. Its value can be overridden inside a media query using the `media()` mixin. Set with the `!global` flag.
///
Expand Down
6 changes: 1 addition & 5 deletions bower.json
@@ -1,6 +1,6 @@
{
"name": "neat",
"description": "A lightweight, semantic grid framework built with Bourbon",
"description": "A lightweight, semantic grid framework",
"version": "1.7.4",
"main": "app/assets/stylesheets/_neat.scss",
"license": "MIT",
Expand All @@ -19,7 +19,6 @@
"test"
],
"keywords": [
"bourbon",
"columns",
"grid",
"layout",
Expand All @@ -38,8 +37,5 @@
"repository": {
"type": "git",
"url": "https://github.com/thoughtbot/neat.git"
},
"dependencies": {
"bourbon": ">=4.0"
}
}
9 changes: 4 additions & 5 deletions contrib/styles.scss
@@ -1,4 +1,3 @@
@import "bourbon";
@import "../app/assets/stylesheets/neat";

// Grid Settings
Expand Down Expand Up @@ -35,7 +34,7 @@ $darkerblue: #072f44;

body {
color: $darkerblue;
font-family: $helvetica;
font-family: sans-serif;
line-height: $base-line-height;
margin: 0 0 (1.5rem * 2);
text-align: center;
Expand All @@ -62,17 +61,17 @@ code {
// ============================================

.container {
@include margin(null auto);
@include padding(null $gutter);
margin: 0 auto;
max-width: 500px;
padding: 0 $gutter;
position: relative;
}

.welcome-message {
@include clearfix();
@include padding($base-spacing null);
background-color: $blue;
margin-bottom: 1.5rem;
padding: $base-spacing 0;
text-align: center;
}

Expand Down
1 change: 0 additions & 1 deletion lib/neat.rb
@@ -1,5 +1,4 @@
require "sass"
require "bourbon"
require "neat/generator"

module Neat
Expand Down
24 changes: 11 additions & 13 deletions lib/tasks/install.rake
@@ -1,20 +1,18 @@
require "fileutils"
require "find"

namespace :bourbon do
namespace :neat do
desc "Copy Neat's files to the Rails assets directory."
task :install, [:sass_path] do |t, args|
args.with_defaults(:sass_path => 'public/stylesheets/sass')
source_root = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
FileUtils.mkdir_p("#{Rails.root}/#{args.sass_path}/neat")
FileUtils.cp_r("#{source_root}/app/assets/stylesheets/.", "#{Rails.root}/#{args.sass_path}/neat", { :preserve => true })
namespace :neat do
desc "Copy Neat's files to the Rails assets directory."
task :install, [:sass_path] do |t, args|
args.with_defaults(:sass_path => 'public/stylesheets/sass')
source_root = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
FileUtils.mkdir_p("#{Rails.root}/#{args.sass_path}/neat")
FileUtils.cp_r("#{source_root}/app/assets/stylesheets/.", "#{Rails.root}/#{args.sass_path}/neat", { :preserve => true })

Find.find("#{Rails.root}/#{args.sass_path}/neat") do |path|
if path.end_with?(".css.scss")
path_without_css_extension = path.gsub(/\.css\.scss$/, ".scss")
FileUtils.mv(path, path_without_css_extension)
end
Find.find("#{Rails.root}/#{args.sass_path}/neat") do |path|
if path.end_with?(".css.scss")
path_without_css_extension = path.gsub(/\.css\.scss$/, ".scss")
FileUtils.mv(path, path_without_css_extension)
end
end
end
Expand Down
7 changes: 3 additions & 4 deletions neat.gemspec
Expand Up @@ -9,11 +9,11 @@ Gem::Specification.new do |s|
s.authors = ['Joel Oliveira', 'Kyle Fiedler', 'Reda Lemeden']
s.email = 'design+bourbon@thoughtbot.com'
s.homepage = 'http://neat.bourbon.io'
s.summary = 'A lightweight, semantic grid framework built with Bourbon'
s.summary = 'A lightweight, semantic grid framework'
s.license = 'MIT'
s.description = <<-DESC
Neat is a fluid grid framework built with Bourbon with the aim of being easy
enough to use out of the box and flexible enough to customize down the road.
Neat is a fluid grid framework built with the aim of being easy enough to use
out of the box and flexible enough to customize down the road.
DESC

s.rubyforge_project = 'neat'
Expand All @@ -23,7 +23,6 @@ enough to use out of the box and flexible enough to customize down the road.
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
s.require_paths = ['lib']

s.add_dependency('bourbon', '>= 4.0')
s.add_dependency('sass', '>= 3.3')
s.add_dependency("thor", "~> 0.19")

Expand Down
4 changes: 1 addition & 3 deletions package.json
@@ -1,9 +1,8 @@
{
"name": "bourbon-neat",
"version": "1.7.4",
"description": "A lightweight, semantic grid framework built with Bourbon",
"description": "A lightweight, semantic grid framework",
"keywords": [
"bourbon",
"columns",
"grid",
"layout",
Expand Down Expand Up @@ -34,7 +33,6 @@
"test": "echo \"No test specified\""
},
"dependencies": {
"bourbon": "^4.2",
"node-sass": "^3.4"
},
"devDependencies": {
Expand Down
4 changes: 2 additions & 2 deletions sache.json
@@ -1,5 +1,5 @@
{
"name": "Neat",
"description": "A lightweight, semantic grid framework built with Bourbon",
"tags": ["bourbon", "columns", "grid", "layout", "media", "media-queries", "neat", "queries", "sass", "scss", "semantic"]
"description": "A lightweight, semantic grid framework",
"tags": ["columns", "grid", "layout", "media", "media-queries", "neat", "queries", "sass", "scss", "semantic"]
}
3 changes: 0 additions & 3 deletions spec/spec_helper.rb
Expand Up @@ -7,19 +7,16 @@
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }

RSpec.configure do |config|
config.include BourbonSupport
config.include SassSupport
config.include CssParser
config.include ParserSupport
config.include Aruba::Api

config.before(:all) do
install_bourbon_files
generate_css
end

config.after(:all) do
remove_bourbon_files
clean_up
end
end
9 changes: 0 additions & 9 deletions spec/support/bourbon_support.rb

This file was deleted.

1 change: 0 additions & 1 deletion test/_setup.scss
@@ -1,3 +1,2 @@
@import "bourbon/bourbon";
@import "../app/assets/stylesheets/neat";
$disable-warnings: true !global;

7 comments on commit 4415490

@clemensg
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @meowsus,

this commit breaks gems depending on neat, for example administrate. Can't be fixed with a simple gem 'bourbon' in the project's Gemfile, but must be fixed in the administrate gem itself.

Shouldn't this change be in a major version bump (2.0 ?) where you can break backwards compatibility?

@tysongach
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@clemensg This sounds like a bug with Administrate. Can you file an issue there?

@meowsus
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@clemensg I agree with @clemensg. This does seem like a bug with the Administrate library.

Originally I had thought that this change would be breaking, and was surprised that it was actually released as a minor, but truthfully the functionality did not change and that would support the choice of releasing a minor and not a major version.

@tysongach
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like Administrate only specifies Neat as a dependency, but not Bourbon (which it needs): https://github.com/thoughtbot/administrate/blob/master/administrate.gemspec#L22

Up until now, Neat brought in Bourbon which made this a non-issue. But that was fragile and now that Neat doesn’t explicitly declare Bourbon as a dependency, it’s broken.

Here’s a PR to Administrate to try and fix the problem: thoughtbot/administrate#614

@clemensg
Copy link

@clemensg clemensg commented on 4415490 Jun 21, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Removing a dependency which other projects depend upon implicitly, does qualify as a breaking change in my opinion, but) I'm also fine with fixing it in administrate.

Thank you for the quick responses and the pull request! 👍

@tysongach
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@clemensg The problem is that Administrate directly uses Bourbon features, but never explicitly declared it as a dependency. It shouldn’t have assumed that Neat would always bring in the Bourbon library for it. It was fragile all along. Outside the context of Administrate, Neat no longer using Bourbon for one function isn’t a breaking change. The output is the same without that function.

@clemensg
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, sounds reasonable. Thanks for the explanation!

Please sign in to comment.