stylus 1.0.0.beta → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 80a0a2eb1e730afce9c0d8550d6f054bcf527bf2
4
- data.tar.gz: b9e7866ea1cd4d1a9c35fe0f538e7735d698a00c
3
+ metadata.gz: aae79b1819cdb41d494c214ff4dcce6fc309b2b5
4
+ data.tar.gz: dd62bd41cf976f92c2e6a5a18948e9e306da3f53
5
5
  SHA512:
6
- metadata.gz: 8047e3c4724c6034a517b311d0162f5dbb2dbb13d4c7f3f8566c9efcb02a5804e754b27a78c7891c0272cdd9ac7a3d3a082666ba0908c2d094161f61e5b6176b
7
- data.tar.gz: a54f418ebd95c9e2d8d8dc0a89230abff8783cb265177fe3512534e79fd17a443f2e93868644b4dad6f2140224291fd3b80b229ff403ee0d6933987f7fa1d1b4
6
+ metadata.gz: 2df912f5de8d59046f46cb1c3c2aeb32829f17e145f08bb5f8c70b6da51ce83d0cd0d47ca2c31207d22d33c563bee6a3ebae2df805e91a0cbf29ee7397a5607b
7
+ data.tar.gz: 04a96508add2597861566cabfe481d7e0f6b953a290cfb89e547bbe0fd9e46370f81a928aab3205a3546446c52772c0d8fb06f425b52b0bd653678102771208e
@@ -1,5 +1,6 @@
1
1
  ### HEAD - 1.0.0
2
2
 
3
3
  * Rails 4+ and Ruby 1.9.x/2.0.0 support.
4
+ * Support for the `asset-path` and `asset-url` mixins, thanks to [@spilin](https://github.com/spilin).
4
5
 
5
6
  Please check [0-7-stable](https://github.com/lucasmazza/ruby-stylus/blob/0-7-stable/CHANGELOG.md) for previous changes.
data/README.md CHANGED
@@ -2,10 +2,22 @@
2
2
 
3
3
  [![Build Status](https://secure.travis-ci.org/lucasmazza/ruby-stylus.png)](http://travis-ci.org/lucasmazza/ruby-stylus)
4
4
 
5
- `stylus` is a bridge between your Ruby code and the [Stylus](https://github.com/LearnBoost/stylus) library that runs on [node.js](http://nodejs.org). It has support for the Rails 3.1 asset pipeline (thanks to a [Tilt](https://github.com/rtomayko/tilt) Template) and it's backed by the [ExecJS](https://github.com/sstephenson/execjs) gem.
5
+ `stylus` is a bridge between your Ruby code and the [Stylus](https://github.com/LearnBoost/stylus) library that runs on [node.js](http://nodejs.org). It has support for Rails 4 applications. (if you are working with Rails 3, check the [0-7-stable](https://github.com/lucasmazza/ruby-stylus/tree/0-7-stable) branch.)
6
6
 
7
7
  ## Installation
8
8
 
9
+ If you have a `Gemfile`:
10
+
11
+ ```
12
+ gem 'stylus'
13
+ ```
14
+
15
+ or if you don't have a Gemfile, install it in your system:
16
+
17
+ ```
18
+ gem install stylus
19
+ ```
20
+
9
21
  Since version 0.3.0, the [stylus-source](https://github.com/railsjedi/ruby-stylus-source) packages the Stylus source into a Rubygem, so it will be available after installing this gem. The `ruby-source` version will follow the Stylus releases and their versions.
10
22
 
11
23
  You can replace the Stylus code by placing another version of Stylus on `./node_modules/stylus`, and it will be used instead of the version bundled inside the gem.
@@ -23,7 +35,7 @@ require 'stylus'
23
35
  Stylus.compile(File.new('application.styl')) # returns the compiled stylesheet.
24
36
 
25
37
  # Use the :compress option, removing most newlines from the code.
26
- Stylus.compile(File.read('application.styl'), :compress => true)
38
+ Stylus.compile(File.read('application.styl'), compress: true)
27
39
 
28
40
  # Or use the global compress flag
29
41
  Stylus.compress = true
@@ -40,9 +52,7 @@ Stylus.use :nib
40
52
  # a `:filename` option so Stylus can locate your stylesheet for proper inspection.
41
53
  Stylus.debug = true
42
54
  ```
43
- ### With Rails 3 and the Asset Pipeline.
44
-
45
- First of all, remember to add `gem 'stylus'` to your Gemfile inside the `:assets` group, So Rails will require the gem according to your current environment - on production you should serve precompiled versions of your assets instead of compiling on the fly.
55
+ ### With Rails and the Asset Pipeline.
46
56
 
47
57
  Adding `stylus` to your Gemfile should let you work with `.styl` files with the Rails 3.1 Pipeline. Any asset generated with `rails generate` will be created with a `.css.styl` extension.
48
58
 
@@ -116,7 +126,7 @@ map('/assets') { run assets.index }
116
126
  [Stylus](https://github.com/LearnBoost/stylus) exposes a nice API to create plugins written on [node.js](http://nodejs.org), like [nib](https://github.com/visionmedia/nib). The installation process should be the same as described above for [Stylus](https://github.com/LearnBoost/stylus) (since they're all npm packages after all). You can hook them up on your Ruby code with `Stylus.use`:
117
127
 
118
128
  ```ruby
119
- Stylus.use :fingerprint, :literal => 'caa8c262e23268d2a7062c6217202343b84f472b'
129
+ Stylus.use :fingerprint, literal: 'caa8c262e23268d2a7062c6217202343b84f472b'
120
130
  ```
121
131
 
122
132
  Will run something like this in JavaScript:
@@ -138,7 +148,7 @@ For more info about the [Stylus](https://github.com/LearnBoost/stylus) syntax an
138
148
 
139
149
  (The MIT License)
140
150
 
141
- Copyright (c) 2012 Lucas Mazza <luc4smazza@gmail.com>
151
+ Copyright (c) 2012-2013 Lucas Mazza <luc4smazza@gmail.com>
142
152
 
143
153
  Permission is hereby granted, free of charge, to any person obtaining
144
154
  a copy of this software and associated documentation files (the
@@ -1,13 +1,13 @@
1
- require "rails/generators/named_base"
1
+ require 'rails/generators/named_base'
2
2
 
3
3
  module Stylus
4
4
  module Generators
5
5
  class AssetsGenerator < ::Rails::Generators::NamedBase
6
- source_root File.expand_path("../templates", __FILE__)
6
+ source_root File.expand_path('../templates', __FILE__)
7
7
 
8
8
  def copy_stylus
9
- template "stylesheet.css.styl", File.join('app/assets/stylesheets', class_path, "#{file_name}.css.styl")
9
+ template 'stylesheet.css.styl', File.join('app/assets/stylesheets', class_path, "#{file_name}.css.styl")
10
10
  end
11
11
  end
12
12
  end
13
- end
13
+ end
@@ -1,3 +1,3 @@
1
1
  // Place all the styles related to the matching controller here.
2
2
  // They will automatically be included in application.css.
3
- // You can use Stylus syntax here: http://learnboost.github.com/stylus
3
+ // You can use Stylus syntax here: http://learnboost.github.io/stylus
@@ -130,13 +130,13 @@ module Stylus
130
130
  # Returns the default `Hash` of options:
131
131
  # the compress flag and the global load path.
132
132
  def defaults
133
- { :compress => self.compress?, :paths => self.paths }
133
+ { compress: self.compress?, paths: self.paths }
134
134
  end
135
135
 
136
136
  # Returns a Hash with the debug options to pass to
137
137
  # Stylus.
138
138
  def debug_options
139
- { :linenos => self.debug?, :firebug => self.debug? }
139
+ { linenos: self.debug?, firebug: self.debug? }
140
140
  end
141
141
 
142
142
  # Return the gem version alongside with the current `Stylus` version of your system.
@@ -22,12 +22,20 @@ module Stylus
22
22
  #
23
23
  # Returns the stylesheet content, unmodified.
24
24
  def evaluate(context, locals, &block)
25
+ return data unless stylus_file?(context)
26
+
25
27
  depend_on(context, data)
26
28
  data
27
29
  end
28
30
 
29
31
  private
30
32
 
33
+ # Internal: Returns true if the file being processed counts as a
34
+ # Stylus file (That is, it has a .styl extension).
35
+ def stylus_file?(context)
36
+ File.fnmatch('*.styl', file) || File.fnmatch('*.styl.*', file)
37
+ end
38
+
31
39
  # Internal: Scan the stylesheet body, looking for '@import' calls to
32
40
  # declare them as a dependency on the context using 'depend_on' method.
33
41
  # This method will recursively scans all dependency to ensure that
@@ -51,10 +59,10 @@ module Stylus
51
59
  #
52
60
  # Returns the resolved 'Asset' or nil if it can't be found.
53
61
  def resolve(context, path)
54
- context.resolve(path, :content_type => 'text/css')
62
+ context.resolve(path, content_type: 'text/css')
55
63
  rescue ::Sprockets::FileNotFound
56
64
  begin
57
- context.resolve(path + '/index', :content_type => 'text/css')
65
+ context.resolve(path + '/index', content_type: 'text/css')
58
66
  rescue
59
67
  nil
60
68
  end
@@ -3,7 +3,7 @@ require 'stylus/sprockets'
3
3
 
4
4
  module Stylus
5
5
  # Internal: The Railtie responsible for integrate the Stylus library with
6
- # a Rails 3.2 (or 3.1) application.
6
+ # a Rails application.
7
7
  #
8
8
  # Some of the customizations of using Stylus alongside Rails:
9
9
  #
@@ -24,13 +24,9 @@ module Stylus
24
24
  # both Stylus and the Sprockets instance that lives on 'app.assets'. The entire
25
25
  # configuration object will be passed along.
26
26
  #
27
- # If you don't have the Asset Pipeline enabled on your application - done by
28
- # setting the 'config.assets.enabled' flag to false, this setup process will be
29
- # skipped.
30
- #
31
27
  # Returns nothing.
32
28
  config.assets.configure do |env|
33
- Stylus.setup(env, config.assets)
29
+ Stylus.setup(env, config.assets.merge(rails: true))
34
30
  end
35
31
  end
36
- end
32
+ end
@@ -8,8 +8,7 @@ module Stylus
8
8
  # Internal: Calls a specific function on the Node.JS context.
9
9
  #
10
10
  # Example
11
- # exec('version', 2)
12
- # # => "2"
11
+ # exec('version', 2) # => '2'
13
12
  #
14
13
  # Returns The function returned value.
15
14
  def exec(*arguments)
@@ -22,8 +21,8 @@ module Stylus
22
21
  # if the runtime isn't available. Otherwise, this is a noop.
23
22
  def check_availability!
24
23
  unless runtime.available?
25
- message = "The Node.JS runtime isn't available to Stylus."
26
- message << "Ensure that the 'node' (or 'nodejs') executable is present in your $PATH."
24
+ message = 'The Node.JS runtime is not available to Stylus.'
25
+ message << 'Ensure that the "node" (or "nodejs") executable is present in your $PATH.'
27
26
  raise RuntimeError, message
28
27
  end
29
28
  end
@@ -46,10 +45,10 @@ module Stylus
46
45
  # any Node.JS program.
47
46
  def runtime
48
47
  @runtime ||= ExecJS::ExternalRuntime.new(
49
- :name => 'Node.js (V8)',
50
- :command => ["nodejs", "node"],
51
- :runner_path => File.expand_path("../runtime/runner.js", __FILE__)
48
+ name: 'Node.js (V8)',
49
+ command: ['nodejs', 'node'],
50
+ runner_path: File.expand_path('../runtime/runner.js', __FILE__)
52
51
  )
53
52
  end
54
53
  end
55
- end
54
+ end
@@ -1,5 +1,6 @@
1
1
  require 'stylus'
2
- require 'stylus/tilt'
2
+ require 'stylus/tilt/stylus'
3
+ require 'stylus/tilt/rails'
3
4
  require 'stylus/import_processor'
4
5
  # Public: The setup logic to configure both Stylus and Sprockets on any
5
6
  # kind of application - Rails, Sinatra or Rack.
@@ -18,27 +19,40 @@ module Stylus
18
19
  #
19
20
  # environment - A instance of Sprockets::Environment.
20
21
  # options - The configuration Hash (default: {})
22
+ # :rails - a flag to inform that the current application is a Rails app.
21
23
  # :paths - An Array of paths to use the '@import' directive, defaults
22
24
  # to the `paths` attribute on the environment object.
23
- # :debug - The Boolean value for the debug flag.
24
- # :compress - The Boolean value for the debug compress.
25
+ # :debug - The Boolean value for the debug flag.
26
+ # :compress - The Boolean value for the debug compress.
25
27
  #
26
28
  # Example
27
29
  #
28
30
  # assets = Sprockets::Environment.new
29
- # Stylus.setup(assets, :compress => settings.production?)
31
+ # Stylus.setup(assets, compress: settings.production?)
30
32
  #
31
33
  # Returns nothing.
32
34
  def self.setup(environment, options = {})
33
35
  paths = options[:paths] || environment.paths
34
- directories = paths.select { |dir| dir.to_s =~ /stylesheets$/ }
35
36
 
36
- Stylus.paths.concat(directories)
37
+ Stylus.paths.concat(paths)
37
38
 
38
39
  Stylus.debug = options.fetch(:debug, Stylus.debug)
39
40
  Stylus.compress = options.fetch(:compress, Stylus.compress)
40
-
41
- environment.register_engine('.styl', Tilt::StylusTemplate)
41
+ template = detect_template_hander(options)
42
+ environment.register_engine('.styl', template)
42
43
  environment.register_preprocessor('text/css', Stylus::ImportProcessor)
43
44
  end
44
- end
45
+
46
+ # Internal: Gets the desired Tilt template handler to the current configuration.
47
+ # If a 'rails' option is present then the Rails specific template will be
48
+ # returned instead of the default Stylus Tilt template.
49
+ #
50
+ # Returns a Tilt::Template children class.
51
+ def self.detect_template_hander(options = {})
52
+ if options[:rails]
53
+ Stylus::Rails::StylusTemplate
54
+ else
55
+ Tilt::StylusTemplate
56
+ end
57
+ end
58
+ end
@@ -1,54 +1,2 @@
1
- require 'tilt'
2
- # Public: A Tilt template to compile Stylus stylesheets.
3
- #
4
- # Examples
5
- #
6
- # template = Tilt::StylusTemplate.new { |t| File.read('app.styl') }
7
- # template.render
8
- # # => the compiled CSS from the app.styl file.
9
- #
10
- # Options should assigned on the template constructor.
11
- # template = Tilt::StylusTemplate.new(:compress => true) { |t| File.read('app.styl') }
12
- # template.render
13
- # # => the compiled CSS with compression enabled.
14
- module Tilt
15
- class StylusTemplate < Template
16
-
17
- # Public: The default mime type for stylesheets.
18
- self.default_mime_type = 'text/css'
19
-
20
- # Internal: Checks if the Stylus module has been properly defined.
21
- #
22
- # Returns true if the 'Stylus' module is present.
23
- def self.engine_initialized?
24
- defined? ::Stylus
25
- end
26
-
27
- # Internal: Require the 'stylus' file to load the Stylus module.
28
- #
29
- # Returns nothing.
30
- def initialize_engine
31
- require_template_library 'stylus'
32
- end
33
-
34
- # Internal: Caches the filename as an option entry if it's present.
35
- #
36
- # Returns nothing.
37
- def prepare
38
- if self.file
39
- options[:filename] ||= self.file
40
- end
41
- end
42
-
43
- # Internal: Compile the template Stylus using this instance options.
44
- # The current 'scope' and given 'locals' are ignored and the output
45
- # is cached.
46
- #
47
- # Returns the compiled stylesheet with CSS syntax.
48
- def evaluate(scope, locals, &block)
49
- @output ||= Stylus.compile(data, options)
50
- end
51
- end
52
- end
53
-
54
- Tilt.register Tilt::StylusTemplate, 'styl'
1
+ # require compatibility with older versions.
2
+ require 'stylus/tilt/stylus'
@@ -0,0 +1,51 @@
1
+ require 'stylus/tilt/stylus'
2
+ # Public: A Tilt template to compile Stylus stylesheets with asset helpers.
3
+ module Stylus
4
+ module Rails
5
+ class StylusTemplate < ::Tilt::StylusTemplate
6
+
7
+ # Public: The default mime type for stylesheets.
8
+ self.default_mime_type = 'text/css'
9
+
10
+ # Internal: Appends stylus mixin for asset_url and asset_path support
11
+ def evaluate(scope, locals, &block)
12
+ @data = build_mixin_body(scope) + data
13
+ super
14
+ end
15
+
16
+ protected
17
+
18
+ # Internal: Builds body of a mixin
19
+ #
20
+ # Returns string representation of a mixin with asset helper functions
21
+ def build_mixin_body(scope)
22
+ @mixin_body ||= if assets_hash(scope).values.all? {|value| value != '' }
23
+ <<-STYL
24
+ asset-url(key)
25
+ return pair[1] if pair[0] == key for pair in #{assets_hash(scope)[:url]} ()
26
+ asset-path(key)
27
+ return pair[1] if pair[0] == key for pair in #{assets_hash(scope)[:path]} ()
28
+ STYL
29
+ else
30
+ ''
31
+ end
32
+ end
33
+
34
+ # Internal: Construct Hash with absolute/relative paths in stylus syntax.
35
+ #
36
+ # Returns string representations of hash in Stylus syntax
37
+ def assets_hash(scope)
38
+ @assets_hash ||= scope.environment.each_logical_path.each_with_object({ :url => '', :path => '' }) do |logical_path, assets_hash|
39
+ unless logical_path =~/.*\.(css|js)$/
40
+ path_to_asset = scope.path_to_asset(logical_path)
41
+ assets_hash[:url] << "('#{logical_path}' url(\"#{path_to_asset}\")) "
42
+ assets_hash[:path] << "('#{logical_path}' \"#{path_to_asset}\") "
43
+ end
44
+ end
45
+ end
46
+
47
+ end
48
+ end
49
+ end
50
+
51
+ Tilt.register ::Stylus::Rails::StylusTemplate, 'styl'
@@ -0,0 +1,52 @@
1
+ require 'tilt'
2
+ # Public: A Tilt template to compile Stylus stylesheets.
3
+ #
4
+ # Examples
5
+ #
6
+ # template = Tilt::StylusTemplate.new { |t| File.read('app.styl') }
7
+ # template.render # => the compiled CSS from the app.styl file.
8
+ #
9
+ # Options should assigned on the template constructor.
10
+ # template = Tilt::StylusTemplate.new(compress: true) { |t| File.read('app.styl') }
11
+ # template.render # => the compiled CSS with compression enabled.
12
+ module Tilt
13
+ class StylusTemplate < Template
14
+
15
+ # Public: The default mime type for stylesheets.
16
+ self.default_mime_type = 'text/css'
17
+
18
+ # Internal: Checks if the Stylus module has been properly defined.
19
+ #
20
+ # Returns true if the 'Stylus' module is present.
21
+ def self.engine_initialized?
22
+ defined? ::Stylus
23
+ end
24
+
25
+ # Internal: Require the 'stylus' file to load the Stylus module.
26
+ #
27
+ # Returns nothing.
28
+ def initialize_engine
29
+ require_template_library 'stylus'
30
+ end
31
+
32
+ # Internal: Caches the filename as an option entry if it's present.
33
+ #
34
+ # Returns nothing.
35
+ def prepare
36
+ if self.file
37
+ options[:filename] ||= self.file
38
+ end
39
+ end
40
+
41
+ # Internal: Compile the template Stylus using this instance options.
42
+ # The current 'scope' and given 'locals' are ignored and the output
43
+ # is cached.
44
+ #
45
+ # Returns a String with the compiled stylesheet with CSS syntax.
46
+ def evaluate(scope, locals, &block)
47
+ @output ||= Stylus.compile(data, options)
48
+ end
49
+ end
50
+ end
51
+
52
+ Tilt.register Tilt::StylusTemplate, 'styl'
@@ -1,3 +1,3 @@
1
1
  module Stylus
2
- VERSION = '1.0.0.beta'
2
+ VERSION = '1.0.0'
3
3
  end
@@ -6,6 +6,6 @@ describe Stylus::Generators::AssetsGenerator do
6
6
  arguments %w(posts)
7
7
 
8
8
  it 'generates a .styl file' do
9
- file('app/assets/stylesheets/posts.css.styl').should exist
9
+ expect(file('app/assets/stylesheets/posts.css.styl')).to exist
10
10
  end
11
11
  end
@@ -7,6 +7,6 @@ describe Rails::Generators::ControllerGenerator do
7
7
  arguments %w(posts --stylesheet-engine=stylus)
8
8
 
9
9
  it 'generates a .styl file' do
10
- file('app/assets/stylesheets/posts.css.styl').should exist
10
+ expect(file('app/assets/stylesheets/posts.css.styl')).to exist
11
11
  end
12
- end
12
+ end
@@ -8,10 +8,10 @@ describe Rails::Generators::ScaffoldGenerator do
8
8
  arguments %w(posts --stylesheet-engine=stylus --orm=false)
9
9
 
10
10
  it 'generates the default scaffold stylesheet' do
11
- file('app/assets/stylesheets/scaffold.css').should exist
11
+ expect(file('app/assets/stylesheets/scaffold.css')).to exist
12
12
  end
13
13
 
14
14
  it 'generates a named .styl file' do
15
- file('app/assets/stylesheets/posts.css.styl').should exist
15
+ expect(file('app/assets/stylesheets/posts.css.styl')).to exist
16
16
  end
17
- end
17
+ end
@@ -12,43 +12,53 @@ describe Stylus::ImportProcessor do
12
12
  asset = env['import']
13
13
  dependencies = dependencies_on(asset)
14
14
 
15
- dependencies.should include(fixture_path('mixins/vendor'))
15
+ expect(dependencies).to include(fixture_path('mixins/vendor'))
16
16
  end
17
17
 
18
- context "nested dependencies" do
18
+ context 'nested dependencies' do
19
19
  it 'walks the dependency chain of imported files' do
20
20
  asset = env['nested_import']
21
21
  dependencies = dependencies_on(asset)
22
22
 
23
- dependencies.should include(fixture_path('mixins/nested'))
24
- dependencies.should include(fixture_path('mixins/vendor'))
23
+ expect(dependencies).to include(fixture_path('mixins/nested'))
24
+ expect(dependencies).to include(fixture_path('mixins/vendor'))
25
25
  end
26
26
 
27
27
  it "adds files referenced in a directory's index file" do
28
28
  asset = env['indexed_nested_import']
29
29
  dependencies = dependencies_on(asset)
30
30
 
31
- dependencies.should include(fixture_path('indexed/index'))
32
- dependencies.should include(fixture_path('indexed/first_dep'))
33
- dependencies.should include(fixture_path('indexed/second_dep'))
31
+ expect(dependencies).to include(fixture_path('indexed/index'))
32
+ expect(dependencies).to include(fixture_path('indexed/first_dep'))
33
+ expect(dependencies).to include(fixture_path('indexed/second_dep'))
34
34
  end
35
35
 
36
- it "walks dependency chains through indexes" do
36
+ it 'walks dependency chains through indexes' do
37
37
  asset = env['indexed_recursive_import']
38
38
  dependencies = dependencies_on(asset)
39
39
 
40
- dependencies.should include(fixture_path('indexed_nested_import'))
41
- dependencies.should include(fixture_path('indexed/index'))
42
- dependencies.should include(fixture_path('indexed/first_dep'))
43
- dependencies.should include(fixture_path('indexed/second_dep'))
40
+ expect(dependencies).to include(fixture_path('indexed_nested_import'))
41
+ expect(dependencies).to include(fixture_path('indexed/index'))
42
+ expect(dependencies).to include(fixture_path('indexed/first_dep'))
43
+ expect(dependencies).to include(fixture_path('indexed/second_dep'))
44
44
  end
45
45
  end
46
46
 
47
- it "swallows errors from files outside the Sprockets paths" do
48
- source = "@import 'nib'"
47
+ it 'does not process non-stylus files' do
48
+ source = '@import "nib"'
49
+ template = Stylus::ImportProcessor.new('stylesheet.scss') { source }
50
+ context = double
51
+
52
+ expect(context).to_not receive(:depend_on)
53
+ template.render(context)
54
+ end
55
+
56
+ it 'swallows errors from files outside the Sprockets paths' do
57
+ source = '@import "nib"'
49
58
  template = Stylus::ImportProcessor.new { source }
50
- sprockets = double()
51
- sprockets.should_receive(:resolve).twice.and_raise(::Sprockets::FileNotFound)
59
+ sprockets = double
60
+ expect(sprockets).to receive(:resolve).twice.and_raise(::Sprockets::FileNotFound)
61
+ expect(template).to receive(:stylus_file?).and_return(true)
52
62
 
53
63
  expect {
54
64
  template.render(sprockets)
@@ -1,11 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'Rails integration' do
4
-
5
- it "copies the folders ending with 'stylesheets' from the Sprockets load path" do
4
+ it "copies all folders from the Sprockets load path" do
6
5
  app = create_app
7
- Stylus.paths.should == [fixture_root]
8
- Stylus.paths.should_not == app.assets.paths
6
+ Stylus.paths.should include fixture_root
7
+ Stylus.paths.should == app.assets.paths
9
8
  end
10
9
 
11
10
  it 'process .styl files with the asset pipeline' do
@@ -44,4 +43,4 @@ describe 'Rails integration' do
44
43
  it 'loads the app normally even when the asset pipeline is disabled' do
45
44
  pending "TODO: supress the sprockets-rails railtie to test this."
46
45
  end
47
- end
46
+ end
@@ -1,11 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stylus::Runtime do
4
- it "raises an error if the runtime isn't available" do
5
- Stylus.stub(:runtime) { double("An unavailable Runtime", :available? => false) }
4
+ it 'raises an error if the runtime is not available' do
5
+ allow(Stylus).to receive(:runtime) { double('An unavailable Runtime', available?: false) }
6
6
 
7
7
  expect {
8
8
  Stylus.version
9
- }.to raise_error RuntimeError, %r[The Node.JS runtime isn't available to Stylus.]
9
+ }.to raise_error RuntimeError, %r[The Node.JS runtime is not available to Stylus.]
10
10
  end
11
11
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "Sprockets setup" do
3
+ describe 'Sprockets setup' do
4
4
  let(:env) do
5
5
  Sprockets::Environment.new do |assets|
6
6
  assets.append_path fixture_root
@@ -8,24 +8,29 @@ describe "Sprockets setup" do
8
8
  end
9
9
  end
10
10
 
11
- it "register the Tilt engine" do
12
- env.should_receive(:register_engine).with('.styl', Tilt::StylusTemplate)
11
+ it 'register the default Tilt template' do
12
+ expect(env).to receive(:register_engine).with('.styl', Tilt::StylusTemplate)
13
13
  Stylus.setup(env)
14
14
  end
15
15
 
16
- it "register the import processor" do
17
- env.should_receive(:register_preprocessor).with('text/css', Stylus::ImportProcessor)
16
+ it 'register a Rails specific Tilt template' do
17
+ expect(env).to receive(:register_engine).with('.styl', Stylus::Rails::StylusTemplate)
18
+ Stylus.setup(env, rails: true)
19
+ end
20
+
21
+ it 'register the import processor' do
22
+ expect(env).to receive(:register_preprocessor).with('text/css', Stylus::ImportProcessor)
18
23
  Stylus.setup(env)
19
24
  end
20
25
 
21
- it "copies the 'stylesheets' paths" do
26
+ it 'copies the asset paths' do
22
27
  Stylus.setup(env)
23
- Stylus.paths.should == [fixture_root]
28
+ expect(Stylus.paths).to eq(env.paths)
24
29
  end
25
30
 
26
- it "configure the debug and compress flags" do
27
- Stylus.setup(env, :debug => true, :compress => true)
28
- Stylus.debug.should == true
29
- Stylus.compress.should == true
31
+ it 'configure the debug and compress flags' do
32
+ Stylus.setup(env, debug: true, compress: true)
33
+ expect(Stylus.debug).to be_true
34
+ expect(Stylus.compress).to be_true
30
35
  end
31
- end
36
+ end
@@ -1,103 +1,101 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stylus do
4
-
5
- it "compiles the given source" do
6
- input, output = fixture :simple
7
- Stylus.compile(input).should == output
4
+ it 'compiles the given source' do
5
+ input, output = fixture(:simple)
6
+ expect(Stylus.compile(input)).to eq(output)
8
7
  end
9
8
 
10
- it "accepts an IO object" do
11
- input, output = fixture :simple
9
+ it 'accepts an IO object' do
10
+ input, output = fixture(:simple)
12
11
  input = StringIO.new(input)
13
- Stylus.compile(input).should == output
12
+ expect(Stylus.compile(input)).to eq(output)
14
13
  end
15
14
 
16
- it "compress the file when the 'compress' flag is given" do
17
- input, output = fixture :compressed
18
- Stylus.compile(input, :compress => true).should == output
15
+ it 'compress the file when the "compress" flag is given' do
16
+ input, output = fixture(:compressed)
17
+ expect(Stylus.compile(input, compress: true)).to eq(output)
19
18
  end
20
19
 
21
- it "handles the compress flag globally" do
20
+ it 'handles the compress flag globally' do
22
21
  Stylus.compress = true
23
- input, output = fixture :compressed
24
- Stylus.compile(input).should == output
22
+ input, output = fixture(:compressed)
23
+ expect(Stylus.compile(input)).to eq(output)
25
24
  end
26
25
 
27
- it "imports the given paths" do
26
+ it 'imports the given paths' do
28
27
  path = fixture_root
29
- input, output = fixture :import
30
- Stylus.compile(input, :paths => path).should == output
28
+ input, output = fixture(:import)
29
+ expect(Stylus.compile(input, paths: path)).to eq(output)
31
30
  end
32
31
 
33
- it "handles the import paths globally" do
32
+ it 'handles the import paths globally' do
34
33
  Stylus.paths << fixture_root
35
- input, output = fixture :import
36
- Stylus.compile(input).should == output
34
+ input, output = fixture(:import)
35
+ expect(Stylus.compile(input)).to eq(output)
37
36
  end
38
37
 
39
38
  it 'implicit imports the given paths' do
40
39
  path = File.expand_path('mixins/vendor.styl', fixture_root)
41
- input, output = fixture :implicit
40
+ input, output = fixture(:implicit)
42
41
  Stylus.import path
43
- Stylus.compile(input).should == output
42
+ expect(Stylus.compile(input)).to eq(output)
44
43
  end
45
44
 
46
- it "outputs both gem and library version" do
47
- Stylus.version.should =~ /Stylus - gem .+ library .+/
45
+ it 'outputs both gem and library version' do
46
+ expect(Stylus.version).to match(/Stylus - gem .+ library .+/)
48
47
  end
49
48
 
50
- it "converts CSS to Stylus" do
51
- stylus, css = fixture :stylesheet
52
- Stylus.convert(css).should == stylus
49
+ it 'converts CSS to Stylus' do
50
+ stylus, css = fixture(:stylesheet)
51
+ expect(Stylus.convert(css)).to eq(stylus)
53
52
  end
54
53
 
55
- it "stores the given plugins" do
56
- Stylus.use :one, :two, :argument => true
57
- Stylus.should have(2).plugins
54
+ it 'stores the given plugins' do
55
+ Stylus.use :one, :two, argument: true
56
+ expect(Stylus).to have(2).plugins
58
57
  end
59
58
 
60
- it "includes the given plugins" do
59
+ it 'includes the given plugins' do
61
60
  Stylus.use :nib
62
- input, output = fixture :plugin
63
- Stylus.compile(input).should == output
61
+ input, output = fixture(:plugin)
62
+ expect(Stylus.compile(input)).to eq(output)
64
63
  end
65
64
 
66
- it "includes and imports 'nib' automatically" do
65
+ it 'includes and imports "nib" automatically' do
67
66
  Stylus.nib = true
68
- input, output = fixture :nib
69
- Stylus.compile(input).should == output
67
+ input, output = fixture(:nib)
68
+ expect(Stylus.compile(input)).to eq(output)
70
69
  end
71
70
 
72
- it "share variables between imported stylesheets" do
73
- input, output = fixture :variables
71
+ it 'share variables between imported stylesheets' do
72
+ input, output = fixture(:variables)
74
73
  path = fixture_root
75
74
 
76
- Stylus.compile(input, :paths => path).should == output
75
+ expect(Stylus.compile(input, paths: path)).to eq(output)
77
76
  end
78
77
 
79
- describe "The debug flag" do
80
-
78
+ describe 'The debug flag' do
81
79
  let(:path) { fixture_path(:debug) }
82
80
  let(:fixture) { File.read(path) }
83
81
  let(:file) { File.new(path) }
84
82
 
85
83
  before { Stylus.debug = true }
86
84
 
87
- it "turns the 'linenos' option on" do
88
- Stylus.compile(file).should match(/line 1 : #{path}/)
85
+ it 'turns the "linenos" option on' do
86
+ expect(Stylus.compile(file)).to match(/line 1 : #{path}/)
89
87
  end
90
88
 
91
- it "skips the 'linenos' option if no filename is given" do
92
- Stylus.compile(fixture).should_not match(/line 1 : #{path}/)
89
+ it 'skips the "linenos" option if no filename is given' do
90
+ expect(Stylus.compile(fixture)).to_not match(/line 1 : #{path}/)
93
91
  end
94
92
 
95
- it "turns the 'firebug' option on" do
96
- Stylus.compile(file).should match(/@media -stylus-debug-info/)
93
+ it 'turns the "firebug" option on' do
94
+ expect(Stylus.compile(file)).to match(/@media -stylus-debug-info/)
97
95
  end
98
96
 
99
- it "skips the 'firebug' option if no filename is given" do
100
- Stylus.compile(fixture).should_not match(/@media -stylus-debug-info/)
97
+ it 'skips the "firebug" option if no filename is given' do
98
+ expect(Stylus.compile(fixture)).to_not match(/@media -stylus-debug-info/)
101
99
  end
102
100
  end
103
- end
101
+ end
@@ -23,7 +23,7 @@ module Generators
23
23
  run_generator
24
24
  end
25
25
 
26
- destination File.expand_path("../tmp", __FILE__)
26
+ destination File.expand_path('../tmp', __FILE__)
27
27
  end
28
28
 
29
29
  module ClassMethods
@@ -56,4 +56,4 @@ module Generators
56
56
  end
57
57
  end
58
58
  end
59
- end
59
+ end
@@ -1,6 +1,6 @@
1
1
  module Helpers
2
2
  def create_routes
3
- destination = File.join(destination_root, "config")
3
+ destination = File.join(destination_root, 'config')
4
4
 
5
5
  FileUtils.mkdir_p(destination)
6
6
  FileUtils.touch File.join(destination, 'routes.rb')
@@ -19,6 +19,7 @@ module Helpers
19
19
  config.debug = options[:debug]
20
20
  config.paths << fixture_root
21
21
  config.paths << File.expand_path('javascripts')
22
+ yield(app) if block_given?
22
23
 
23
24
  app.config.eager_load = false
24
25
  app.config.active_support.deprecation = :log
@@ -30,6 +31,10 @@ module Helpers
30
31
  File.expand_path('../../stylesheets', __FILE__)
31
32
  end
32
33
 
34
+ def images_root
35
+ File.expand_path('../../images', __FILE__)
36
+ end
37
+
33
38
  def output_root
34
39
  File.expand_path('../../cases', __FILE__)
35
40
  end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+ require 'stylus/tilt/rails'
3
+
4
+ describe Stylus::Rails::StylusTemplate do
5
+ it 'registers the template for .styl files' do
6
+ expect(Tilt['application.styl']).to eq(Stylus::Rails::StylusTemplate)
7
+ end
8
+
9
+ it 'has a content-type' do
10
+ expect(Stylus::Rails::StylusTemplate.default_mime_type).to eq('text/css')
11
+ end
12
+
13
+ context 'when no resources other then css found' do
14
+ it 'compiles the given source without changes' do
15
+ result = fixture(:simple).last
16
+
17
+ app = create_app
18
+ expect(app.assets['simple'].to_s).to eq(result)
19
+ end
20
+ end
21
+
22
+
23
+ it 'substitutes asset_path with path' do
24
+ app = create_app do |app|
25
+ app.config.assets.paths << images_root
26
+ app.config.asset_host = 'http://localhost'
27
+ end
28
+ result = fixture(:asset_path).last
29
+ expect(app.assets['asset_path'].to_s).to eq(result)
30
+ end
31
+
32
+ it 'substitutes asset_url with url' do
33
+ app = create_app do |app|
34
+ app.config.assets.paths << images_root
35
+ app.config.asset_host = 'http://localhost'
36
+ end
37
+ result = fixture(:asset_url).last
38
+ expect(app.assets['asset_url'].to_s).to eq(result)
39
+ end
40
+
41
+ context 'when config.assets.digest = true' do
42
+ let(:app) do
43
+ create_app do |app|
44
+ app.config.assets.paths << images_root
45
+ app.config.asset_host = 'http://localhost'
46
+ app.config.assets.digest = true
47
+ end
48
+ end
49
+
50
+ it 'appends fingerprint to asset path' do
51
+ digested_image_path = app.assets['rails.png'].digest_path
52
+ expect(digested_image_path).to match(/^rails-(\w+)\.png$/)
53
+ asset = app.assets['digested_asset_path']
54
+ expect(asset.to_s).to eq("body {\n background-image: url(\"http://localhost/assets/#{digested_image_path}\");\n}\n")
55
+ end
56
+
57
+ it 'appends fingerprint to asset url' do
58
+ digested_image_path = app.assets['rails.png'].digest_path
59
+ expect(digested_image_path).to match(/^rails-(\w+)\.png$/)
60
+ asset = app.assets['digested_asset_url']
61
+ expect(asset.to_s).to eq("body {\n background-image: url(\"http://localhost/assets/#{digested_image_path}\");\n}\n")
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+ require 'stylus/tilt/stylus'
3
+
4
+ describe Tilt::StylusTemplate do
5
+ it 'registers the template for .styl files' do
6
+ expect(Tilt['application.styl']).to eq(Stylus::Rails::StylusTemplate)
7
+ end
8
+
9
+ it 'has a content-type' do
10
+ expect(Tilt::StylusTemplate.default_mime_type).to eq('text/css')
11
+ end
12
+
13
+ it 'compiles the given source' do
14
+ input, output = fixture(:simple)
15
+ template = Tilt::StylusTemplate.new { |_| input }
16
+ expect(template.render).to eq(output)
17
+ end
18
+
19
+ it 'compiles with the compress option' do
20
+ input, output = fixture(:compressed)
21
+ template = Tilt::StylusTemplate.new(compress: true) { |_| input }
22
+ expect(template.render).to eq(output)
23
+ end
24
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stylus
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Mazza
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-14 00:00:00.000000000 Z
11
+ date: 2013-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: execjs
@@ -57,6 +57,8 @@ files:
57
57
  - lib/stylus/runtime/runner.js
58
58
  - lib/stylus/runtime.rb
59
59
  - lib/stylus/sprockets.rb
60
+ - lib/stylus/tilt/rails.rb
61
+ - lib/stylus/tilt/stylus.rb
60
62
  - lib/stylus/tilt.rb
61
63
  - lib/stylus/version.rb
62
64
  - lib/stylus.rb
@@ -70,14 +72,14 @@ files:
70
72
  - spec/sprockets_spec.rb
71
73
  - spec/stylus_spec.rb
72
74
  - spec/support/generators/test_case.rb
73
- - spec/support/generators/tmp/app/controllers/posts_controller.rb
74
- - spec/support/generators/tmp/app/helpers/posts_helper.rb
75
75
  - spec/support/generators/tmp/config/routes.rb
76
76
  - spec/support/helpers.rb
77
77
  - spec/support/matchers.rb
78
- - spec/tilt_spec.rb
78
+ - spec/tilt/rails_spec.rb
79
+ - spec/tilt/stylus_spec.rb
79
80
  homepage: https://github.com/lucasmazza/ruby-stylus
80
- licenses: []
81
+ licenses:
82
+ - MIT
81
83
  metadata: {}
82
84
  post_install_message:
83
85
  rdoc_options: []
@@ -90,12 +92,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
90
92
  version: '0'
91
93
  required_rubygems_version: !ruby/object:Gem::Requirement
92
94
  requirements:
93
- - - '>'
95
+ - - '>='
94
96
  - !ruby/object:Gem::Version
95
- version: 1.3.1
97
+ version: '0'
96
98
  requirements: []
97
99
  rubyforge_project:
98
- rubygems_version: 2.0.2
100
+ rubygems_version: 2.0.3
99
101
  signing_key:
100
102
  specification_version: 4
101
103
  summary: Ruby Stylus Compiler
@@ -110,9 +112,8 @@ test_files:
110
112
  - spec/sprockets_spec.rb
111
113
  - spec/stylus_spec.rb
112
114
  - spec/support/generators/test_case.rb
113
- - spec/support/generators/tmp/app/controllers/posts_controller.rb
114
- - spec/support/generators/tmp/app/helpers/posts_helper.rb
115
115
  - spec/support/generators/tmp/config/routes.rb
116
116
  - spec/support/helpers.rb
117
117
  - spec/support/matchers.rb
118
- - spec/tilt_spec.rb
118
+ - spec/tilt/rails_spec.rb
119
+ - spec/tilt/stylus_spec.rb
@@ -1,2 +0,0 @@
1
- class PostsController < ApplicationController
2
- end
@@ -1,2 +0,0 @@
1
- module PostsHelper
2
- end
@@ -1,26 +0,0 @@
1
- require 'spec_helper'
2
- require 'stylus/tilt'
3
-
4
- describe Tilt::StylusTemplate do
5
-
6
- it "registers the template for .styl files" do
7
- Tilt['application.styl'].should == Tilt::StylusTemplate
8
- end
9
-
10
- it "has a content-type" do
11
- Tilt::StylusTemplate.default_mime_type.should == 'text/css'
12
- end
13
-
14
- it "compiles the given source" do
15
- input, output = fixture :simple
16
- template = Tilt::StylusTemplate.new { |t| input }
17
- template.render.should == output
18
- end
19
-
20
- it "compiles with the compress option" do
21
- input, output = fixture :compressed
22
- template = Tilt::StylusTemplate.new(:compress => true) { |t| input }
23
- template.render.should == output
24
- end
25
-
26
- end