less-js 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.
- data/.gitignore +4 -0
- data/Gemfile +7 -0
- data/README.md +41 -0
- data/Rakefile +11 -0
- data/lib/less-js.rb +1 -0
- data/lib/less_js.rb +65 -0
- data/ruby-less-js.gemspec +26 -0
- data/test/test_less_js.rb +29 -0
- metadata +102 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
Ruby LessJs
|
2
|
+
=================
|
3
|
+
|
4
|
+
Ruby LessJs is a bridge to the official Javascript-based Less.js compiler.
|
5
|
+
|
6
|
+
LessJs.compile File.read("css.less")
|
7
|
+
|
8
|
+
|
9
|
+
Installation
|
10
|
+
------------
|
11
|
+
|
12
|
+
gem install less-js
|
13
|
+
|
14
|
+
|
15
|
+
Dependencies
|
16
|
+
------------
|
17
|
+
|
18
|
+
This library depends on the `less-js-source` gem which will be
|
19
|
+
updated any time a new version of Less.js is released. (The
|
20
|
+
`less-js-source` gem's version number is synced with each
|
21
|
+
official Less.js release.) This way you can build against
|
22
|
+
different versions of Less.js by requiring the correct version of
|
23
|
+
the `less-js-source` gem.
|
24
|
+
|
25
|
+
*Note: verion 1.1.1 is tagged as 1.1.1.1 on the `less-js-source` gem.*
|
26
|
+
|
27
|
+
### JSON
|
28
|
+
|
29
|
+
The `json` library is also required but is not explicitly stated as a
|
30
|
+
gem dependency. If you're on Ruby 1.8 you'll need to install the
|
31
|
+
`json` or `json_pure` gem. On Ruby 1.9, `json` is included in the
|
32
|
+
standard library.
|
33
|
+
|
34
|
+
### ExecJS
|
35
|
+
|
36
|
+
The [ExecJS](https://github.com/sstephenson/execjs) library is used to automatically choose the best JavaScript engine for your platform. Check out its [README](https://github.com/sstephenson/execjs/blob/master/README.md) for a complete list of supported engines.
|
37
|
+
|
38
|
+
Lifted From
|
39
|
+
-----------
|
40
|
+
|
41
|
+
The template for this gem was lifted from [Joshua Peek's](https://github.com/josh) [ruby-coffee-script](https://github.com/josh/ruby-coffee-script) gem.
|
data/Rakefile
ADDED
data/lib/less-js.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'less_js'
|
data/lib/less_js.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'execjs'
|
2
|
+
require 'less_js/source'
|
3
|
+
|
4
|
+
module LessJs
|
5
|
+
EngineError = ExecJS::RuntimeError
|
6
|
+
CompilationError = ExecJS::ProgramError
|
7
|
+
|
8
|
+
module Source
|
9
|
+
def self.path
|
10
|
+
@path ||= ENV['LESSJS_SOURCE_PATH'] || bundled_path
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.path=(path)
|
14
|
+
@contents = @version = @bare_option = @context = nil
|
15
|
+
@path = path
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.contents
|
19
|
+
@contents ||= File.read(path)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.version
|
23
|
+
@version ||= contents[/Less.js Compiler v([\d.]+)/, 1]
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.context
|
27
|
+
@context ||= ExecJS.compile(contents)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class << self
|
32
|
+
def engine
|
33
|
+
end
|
34
|
+
|
35
|
+
def engine=(engine)
|
36
|
+
end
|
37
|
+
|
38
|
+
def version
|
39
|
+
Source.version
|
40
|
+
end
|
41
|
+
|
42
|
+
def callback(error, tree)
|
43
|
+
puts tree.inspect
|
44
|
+
end
|
45
|
+
|
46
|
+
# Compile a script (String or IO) to CSS.
|
47
|
+
def compile(script, options = {})
|
48
|
+
script = script.read if script.respond_to?(:read)
|
49
|
+
|
50
|
+
code = <<-EOS
|
51
|
+
(function(input) {
|
52
|
+
var resp = "error";
|
53
|
+
new(less.Parser)().parse(input, function(error, tree) {
|
54
|
+
resp = [error, tree.toCSS()]
|
55
|
+
});
|
56
|
+
return resp;
|
57
|
+
})
|
58
|
+
EOS
|
59
|
+
|
60
|
+
(error, response) = Source.context.call(code, script)
|
61
|
+
raise CompilationError, error if error
|
62
|
+
response
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "less-js"
|
6
|
+
s.version = '0.1.0'
|
7
|
+
|
8
|
+
s.authors = ["Adnan Ali"]
|
9
|
+
s.email = ["adnan.ali@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/thisduck/ruby-less-js"
|
11
|
+
s.summary = "Ruby Less.js Compiler"
|
12
|
+
s.description = <<-EOS
|
13
|
+
Ruby Less.js is a bridge to the JS Less.js compiler.
|
14
|
+
EOS
|
15
|
+
|
16
|
+
|
17
|
+
s.rubyforge_project = "less-js"
|
18
|
+
|
19
|
+
s.add_dependency 'less-js-source'
|
20
|
+
s.add_dependency 'execjs'
|
21
|
+
|
22
|
+
s.files = `git ls-files`.split("\n")
|
23
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
24
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
25
|
+
s.require_paths = ["lib"]
|
26
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'less_js'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'stringio'
|
4
|
+
|
5
|
+
class TestLessJs < Test::Unit::TestCase
|
6
|
+
def test_compile
|
7
|
+
assert_equal ".a {\n border: 4px;\n}\n",
|
8
|
+
LessJs.compile(".a { border: 2px * 2;}\n")
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_compile_with_io
|
12
|
+
io = StringIO.new(".a { border: 2px * 2;}\n")
|
13
|
+
assert_equal ".a {\n border: 4px;\n}\n",
|
14
|
+
LessJs.compile(io)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_compilation_error
|
18
|
+
assert_raise LessJs::CompilationError do
|
19
|
+
LessJs.compile("&&&&.a")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def assert_exception_does_not_match(pattern)
|
24
|
+
yield
|
25
|
+
flunk "no exception raised"
|
26
|
+
rescue Exception => e
|
27
|
+
assert_no_match pattern, e.message
|
28
|
+
end
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: less-js
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Adnan Ali
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-05-21 00:00:00 -04:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: less-js-source
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: execjs
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
49
|
+
description: "\t\tRuby Less.js is a bridge to the JS Less.js compiler.\n"
|
50
|
+
email:
|
51
|
+
- adnan.ali@gmail.com
|
52
|
+
executables: []
|
53
|
+
|
54
|
+
extensions: []
|
55
|
+
|
56
|
+
extra_rdoc_files: []
|
57
|
+
|
58
|
+
files:
|
59
|
+
- .gitignore
|
60
|
+
- Gemfile
|
61
|
+
- README.md
|
62
|
+
- Rakefile
|
63
|
+
- lib/less-js.rb
|
64
|
+
- lib/less_js.rb
|
65
|
+
- ruby-less-js.gemspec
|
66
|
+
- test/test_less_js.rb
|
67
|
+
has_rdoc: true
|
68
|
+
homepage: https://github.com/thisduck/ruby-less-js
|
69
|
+
licenses: []
|
70
|
+
|
71
|
+
post_install_message:
|
72
|
+
rdoc_options: []
|
73
|
+
|
74
|
+
require_paths:
|
75
|
+
- lib
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
hash: 3
|
82
|
+
segments:
|
83
|
+
- 0
|
84
|
+
version: "0"
|
85
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
hash: 3
|
91
|
+
segments:
|
92
|
+
- 0
|
93
|
+
version: "0"
|
94
|
+
requirements: []
|
95
|
+
|
96
|
+
rubyforge_project: less-js
|
97
|
+
rubygems_version: 1.6.1
|
98
|
+
signing_key:
|
99
|
+
specification_version: 3
|
100
|
+
summary: Ruby Less.js Compiler
|
101
|
+
test_files:
|
102
|
+
- test/test_less_js.rb
|