less 2.2.2 → 2.3.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 +7 -0
- data/Gemfile +5 -3
- data/bin/lessc +3 -1
- data/less.gemspec +0 -4
- data/lib/less/defaults.rb +1 -1
- data/lib/less/java_script/rhino_context.rb +1 -1
- data/lib/less/java_script/v8_context.rb +11 -11
- data/lib/less/loader.rb +106 -2
- data/lib/less/version.rb +2 -2
- data/spec/less/parser_spec.rb +3 -2
- metadata +29 -50
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f8209d9c3cd23b895c33800822fee9609d0e1fd4
|
4
|
+
data.tar.gz: d7a7070cdd740d5e43b44b4dd9ccd1df943e5322
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 307bb3ad01064e296ee286dbaf18fb19057de032cbbf8984822996167c2017fca57993449ac779135173f689112e9750112675eefa0f16f6d9a8886933f35cbf
|
7
|
+
data.tar.gz: 6f815cc31388eebefec20a27d67d7ba5b835d54f67861dc0b3c6692d0894e19040d0bc12b0bfb2c37e41917e6feb49cc59cd275859d483735ecb221bec6c63c3
|
data/Gemfile
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
-
source
|
1
|
+
source 'https://rubygems.org'
|
2
2
|
|
3
3
|
gemspec
|
4
4
|
|
5
|
-
|
6
|
-
gem "therubyracer", "~> 0.10.0", :require => nil, :platforms => :ruby
|
5
|
+
gem "therubyracer", "~> 0.11.0", :require => nil, :platforms => :ruby
|
7
6
|
gem "therubyrhino", "~> 1.73.3", :require => nil, :platforms => :jruby
|
7
|
+
|
8
|
+
gem "rake"
|
9
|
+
gem "rspec", "~> 2.0"
|
data/bin/lessc
CHANGED
@@ -17,6 +17,8 @@ output = nil
|
|
17
17
|
require 'optparse'
|
18
18
|
|
19
19
|
opts = OptionParser.new do |opts|
|
20
|
+
opts.summary_width = 37
|
21
|
+
|
20
22
|
opts.banner = 'Usage: lessc [options] [INPUT]'
|
21
23
|
|
22
24
|
opts.on('-h', '--help', 'print this help') do
|
@@ -52,7 +54,7 @@ opts = OptionParser.new do |opts|
|
|
52
54
|
require 'rbconfig'
|
53
55
|
is_windows = (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/)
|
54
56
|
separator = is_windows ? ';' : ':'
|
55
|
-
opts.on('--paths', '--include-path',
|
57
|
+
opts.on('--paths PATHS', '--include-path PATHS',
|
56
58
|
"paths to include separated by '#{separator}'") do |paths|
|
57
59
|
paths = paths.split(separator).map do |path|
|
58
60
|
path.empty? ? nil : File.expand_path(path)
|
data/less.gemspec
CHANGED
data/lib/less/defaults.rb
CHANGED
@@ -74,7 +74,7 @@ module Less
|
|
74
74
|
if e.value && ( e.value['message'] || e.value['type'].is_a?(String) )
|
75
75
|
raise Less::ParseError.new(e, e.value) # LessError
|
76
76
|
end
|
77
|
-
if e.unwrap.to_s
|
77
|
+
if e.unwrap.to_s =~ /missing closing `}`/
|
78
78
|
raise Less::ParseError.new(e.unwrap.to_s)
|
79
79
|
end
|
80
80
|
if e.message && e.message[0, 12] == "Syntax Error"
|
@@ -14,7 +14,7 @@ module Less
|
|
14
14
|
def self.instance
|
15
15
|
return new
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def initialize(globals = nil)
|
19
19
|
lock do
|
20
20
|
@v8_context = V8::Context.new
|
@@ -25,7 +25,7 @@ module Less
|
|
25
25
|
def unwrap
|
26
26
|
@v8_context
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
def exec(&block)
|
30
30
|
lock(&block)
|
31
31
|
end
|
@@ -53,9 +53,9 @@ module Less
|
|
53
53
|
super
|
54
54
|
end
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
private
|
58
|
-
|
58
|
+
|
59
59
|
def lock(&block)
|
60
60
|
do_lock(&block)
|
61
61
|
rescue V8::JSError => e
|
@@ -63,26 +63,26 @@ module Less
|
|
63
63
|
js_value = e.value.respond_to?(:'[]')
|
64
64
|
name = js_value && e.value["name"]
|
65
65
|
constructor = js_value && e.value['constructor']
|
66
|
-
if name == "SyntaxError" ||
|
66
|
+
if name == "SyntaxError" ||
|
67
67
|
( constructor && constructor.name == "LessError" )
|
68
68
|
raise Less::ParseError.new(e, js_value ? e.value : nil)
|
69
69
|
end
|
70
70
|
# NOTE: less/parser.js :
|
71
|
-
#
|
71
|
+
#
|
72
72
|
# error = new(LessError)({
|
73
73
|
# index: i,
|
74
74
|
# type: 'Parse',
|
75
75
|
# message: "missing closing `}`",
|
76
76
|
# filename: env.filename
|
77
77
|
# }, env);
|
78
|
-
#
|
78
|
+
#
|
79
79
|
# comes back as value: RuntimeError !
|
80
|
-
elsif e.value.to_s
|
80
|
+
elsif e.value.to_s =~ /missing closing `}`/
|
81
81
|
raise Less::ParseError.new(e.value.to_s)
|
82
82
|
end
|
83
83
|
raise Less::Error.new(e)
|
84
84
|
end
|
85
|
-
|
85
|
+
|
86
86
|
def do_lock
|
87
87
|
result, exception = nil, nil
|
88
88
|
V8::C::Locker() do
|
@@ -99,7 +99,7 @@ module Less
|
|
99
99
|
result
|
100
100
|
end
|
101
101
|
end
|
102
|
-
|
102
|
+
|
103
103
|
end
|
104
104
|
end
|
105
|
-
end
|
105
|
+
end
|
data/lib/less/loader.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'commonjs'
|
3
|
+
require 'net/http'
|
4
|
+
require 'uri'
|
3
5
|
|
4
6
|
module Less
|
5
7
|
class Loader
|
@@ -15,7 +17,10 @@ module Less
|
|
15
17
|
@environment = CommonJS::Environment.new(@context, :path => path.to_s)
|
16
18
|
@environment.native('path', Path.new)
|
17
19
|
@environment.native('util', Sys.new)
|
20
|
+
@environment.native('url', Url.new)
|
21
|
+
@environment.native('http', Http.new)
|
18
22
|
@environment.native('fs', Fs.new)
|
23
|
+
|
19
24
|
end
|
20
25
|
|
21
26
|
def require(module_id)
|
@@ -26,7 +31,8 @@ module Less
|
|
26
31
|
|
27
32
|
class Path
|
28
33
|
def join(*components)
|
29
|
-
|
34
|
+
# node.js expands path on join
|
35
|
+
File.expand_path(File.join(*components))
|
30
36
|
end
|
31
37
|
|
32
38
|
def dirname(path)
|
@@ -60,10 +66,108 @@ module Less
|
|
60
66
|
end
|
61
67
|
|
62
68
|
class Console
|
63
|
-
def
|
69
|
+
def log(*msgs)
|
64
70
|
puts msgs.join(', ')
|
65
71
|
end
|
66
72
|
end
|
73
|
+
|
74
|
+
class Url
|
75
|
+
def resolve(*args)
|
76
|
+
URI.join(*args)
|
77
|
+
end
|
78
|
+
|
79
|
+
def parse(url_string)
|
80
|
+
u = URI.parse(url_string)
|
81
|
+
result = {}
|
82
|
+
result['protocol'] = u.scheme + ':' if u.scheme
|
83
|
+
result['hostname'] = u.host if u.host
|
84
|
+
result['pathname'] = u.path if u.path
|
85
|
+
result['port'] = u.port if u.port
|
86
|
+
result['query'] = u.query if u.query
|
87
|
+
result['search'] = '?' + u.query if u.query
|
88
|
+
result['hash'] = '#' + u.fragment if u.fragment
|
89
|
+
result
|
90
|
+
end
|
91
|
+
end
|
67
92
|
|
93
|
+
class Http
|
94
|
+
def get(options, callback)
|
95
|
+
err = nil
|
96
|
+
begin
|
97
|
+
#less always sends options as an object, so no need to check for string
|
98
|
+
uri_hash = {}
|
99
|
+
uri_hash[:host] = options['hostname'] ? options['hostname'] : options['host']
|
100
|
+
path_components = options['path'] ? options['path'].split('?', 2) : [''] #have to do this because node expects path and query to be combined
|
101
|
+
if path_components.length > 1
|
102
|
+
uri_hash[:path] = path_components[0]
|
103
|
+
uri_hash[:query] = path_components[0]
|
104
|
+
else
|
105
|
+
uri_hash[:path] = path_components[0]
|
106
|
+
end
|
107
|
+
uri_hash[:port] = options['port'] ? options['port'] : Net::HTTP.http_default_port
|
108
|
+
uri_hash[:scheme] = uri_hash[:port] == Net::HTTP.https_default_port ? 'https' : 'http' #have to check this way because of node's http.get
|
109
|
+
case uri_hash[:scheme]
|
110
|
+
when 'http'
|
111
|
+
uri = URI::HTTP.build(uri_hash)
|
112
|
+
when 'https'
|
113
|
+
uri = URI::HTTPS.build(uri_hash)
|
114
|
+
else
|
115
|
+
raise Exception, 'Less import only supports http and https'
|
116
|
+
end
|
117
|
+
http = Net::HTTP.new uri.host, uri.port
|
118
|
+
if uri.scheme == 'https'
|
119
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
120
|
+
http.use_ssl = true
|
121
|
+
end
|
122
|
+
response = nil
|
123
|
+
http.start do |req|
|
124
|
+
response = req.get(uri.to_s)
|
125
|
+
end
|
126
|
+
sr = ServerResponse.new(response.read_body, response.code.to_i)
|
127
|
+
callback.call(sr)
|
128
|
+
rescue => e
|
129
|
+
err = e.message
|
130
|
+
ensure
|
131
|
+
ret = HttpNodeObj.new(err)
|
132
|
+
end
|
133
|
+
ret
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
class HttpNodeObj
|
138
|
+
attr_accessor :err
|
139
|
+
|
140
|
+
def initialize(err)
|
141
|
+
@err = err
|
142
|
+
end
|
143
|
+
|
144
|
+
def on(event, callback)
|
145
|
+
case event
|
146
|
+
when 'error'
|
147
|
+
callback.call(@err) if @err #only call when error exists
|
148
|
+
else
|
149
|
+
callback.call()
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
class ServerResponse
|
155
|
+
attr_accessor :statusCode
|
156
|
+
attr_accessor :data #faked because ServerResponse acutally implements WriteableStream
|
157
|
+
|
158
|
+
def initialize(data, status_code)
|
159
|
+
@data = data
|
160
|
+
@statusCode = status_code
|
161
|
+
end
|
162
|
+
|
163
|
+
def on(event, callback)
|
164
|
+
case event
|
165
|
+
when 'data'
|
166
|
+
callback.call(@data)
|
167
|
+
else
|
168
|
+
callback.call()
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
68
172
|
end
|
69
173
|
end
|
data/lib/less/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module Less
|
2
|
-
VERSION = '2.
|
3
|
-
end
|
2
|
+
VERSION = '2.3.0'
|
3
|
+
end
|
data/spec/less/parser_spec.rb
CHANGED
@@ -42,8 +42,9 @@ describe Less::Parser do
|
|
42
42
|
it "will track imported files" do
|
43
43
|
subject.parse('@import "one.less";')
|
44
44
|
subject.parse('@import "two.less";')
|
45
|
-
|
46
|
-
subject.imports.
|
45
|
+
# Parser#imports returns full path names
|
46
|
+
subject.imports.grep(/one\.less$/).should_not be_empty
|
47
|
+
subject.imports.grep(/two\.less$/).should_not be_empty
|
47
48
|
end
|
48
49
|
|
49
50
|
it "reports type, line, column and filename of (parse) error" do
|
metadata
CHANGED
@@ -1,20 +1,39 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: less
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
5
|
-
prerelease:
|
4
|
+
version: 2.3.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Charles Lowell
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
|
-
cert_chain:
|
12
|
-
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDPjCCAiagAwIBAgIBADANBgkqhkiG9w0BAQUFADBFMRAwDgYDVQQDDAdjb3di
|
14
|
+
b3lkMRwwGgYKCZImiZPyLGQBGRYMdGhlZnJvbnRzaWRlMRMwEQYKCZImiZPyLGQB
|
15
|
+
GRYDbmV0MB4XDTEzMDEzMDIxMDYwNFoXDTE0MDEzMDIxMDYwNFowRTEQMA4GA1UE
|
16
|
+
AwwHY293Ym95ZDEcMBoGCgmSJomT8ixkARkWDHRoZWZyb250c2lkZTETMBEGCgmS
|
17
|
+
JomT8ixkARkWA25ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO45
|
18
|
+
CUxpETDGYXjCCy2dMg/aIrdrTqBqQW5ZrzhHxF9EkcdmWFr0z/qMz0JSpZ3pF11Z
|
19
|
+
KYaj5PaQQpjZfLPwbuiGGkuSWi+UAac//V18xo6S4lzRBjO+gpzG9f2AOzt9b+SR
|
20
|
+
Uc8UhO7QBZ5edUDxMxw9QstD+U0YBAlzsPJbHuUOqdtxXmNQCds3ZnqTgZaIpdUy
|
21
|
+
CSejtrukSmlthxFzwgMezYQhcYxmkl+Q475JUodnI6Pjc6nja/Or8Y6cEWiLgeUa
|
22
|
+
a+efcPGLDEbwJC7TGRrvk8yassMByBEJ3XueTMzeqWFd+665ptciojYo6BvIAR0N
|
23
|
+
iLwks0x567FZyS8SqTcCAwEAAaM5MDcwCQYDVR0TBAIwADAdBgNVHQ4EFgQUxVgR
|
24
|
+
5TUqf7Hd24ICb3g4FNbM7oYwCwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEBBQUAA4IB
|
25
|
+
AQDdJj+NzZhiYXA56z0wzRUA/Fcf6CYqKB+RFRlPssDEcHTor5SnwdWgQof/gNLi
|
26
|
+
Qel1Om4zO0Shcp89jxaUqtvEdYVhmyfc0vycHmemKttNBT734yMrEJtF8Hhy+Dnz
|
27
|
+
9CzixXLvgGaRH+mf3M0+l+zIDJJr2L+39L8cyTSSRnp/srfI8aSmJKhGshudBKoC
|
28
|
+
Ty6Gi071pwoJXvdMaE/6iPy7bUzlndYdHyYuWSKaO9N47HqQ62oEnBraglw6ghoi
|
29
|
+
UgImJlChAzCoDP9zi9tdm6jAr7ttF25R9PPYr11ILb7dYe3qUzlNlM6zJx/nb31b
|
30
|
+
IhdyRVup4qLcqYSTPsm6u7VA
|
31
|
+
-----END CERTIFICATE-----
|
32
|
+
date: 2013-03-04 00:00:00.000000000 Z
|
13
33
|
dependencies:
|
14
34
|
- !ruby/object:Gem::Dependency
|
15
35
|
name: commonjs
|
16
36
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
37
|
requirements:
|
19
38
|
- - ~>
|
20
39
|
- !ruby/object:Gem::Version
|
@@ -22,43 +41,10 @@ dependencies:
|
|
22
41
|
type: :runtime
|
23
42
|
prerelease: false
|
24
43
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
44
|
requirements:
|
27
45
|
- - ~>
|
28
46
|
- !ruby/object:Gem::Version
|
29
47
|
version: 0.2.6
|
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
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: rspec
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '2.0'
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '2.0'
|
62
48
|
description: Invoke the Less CSS compiler from Ruby
|
63
49
|
email:
|
64
50
|
- cowboyd@thefrontside.net
|
@@ -219,33 +205,26 @@ files:
|
|
219
205
|
- lib/less/js/test/less/whitespace.less
|
220
206
|
homepage: http://lesscss.org
|
221
207
|
licenses: []
|
208
|
+
metadata: {}
|
222
209
|
post_install_message:
|
223
210
|
rdoc_options: []
|
224
211
|
require_paths:
|
225
212
|
- lib
|
226
213
|
required_ruby_version: !ruby/object:Gem::Requirement
|
227
|
-
none: false
|
228
214
|
requirements:
|
229
|
-
- -
|
215
|
+
- - '>='
|
230
216
|
- !ruby/object:Gem::Version
|
231
217
|
version: '0'
|
232
|
-
segments:
|
233
|
-
- 0
|
234
|
-
hash: -3584122421188710040
|
235
218
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
236
|
-
none: false
|
237
219
|
requirements:
|
238
|
-
- -
|
220
|
+
- - '>='
|
239
221
|
- !ruby/object:Gem::Version
|
240
222
|
version: '0'
|
241
|
-
segments:
|
242
|
-
- 0
|
243
|
-
hash: -3584122421188710040
|
244
223
|
requirements: []
|
245
224
|
rubyforge_project: less
|
246
|
-
rubygems_version:
|
225
|
+
rubygems_version: 2.0.0
|
247
226
|
signing_key:
|
248
|
-
specification_version:
|
227
|
+
specification_version: 4
|
249
228
|
summary: Leaner CSS, in your browser or Ruby (via less.js)
|
250
229
|
test_files:
|
251
230
|
- spec/less/faulty/faulty.less
|