barista 0.3.0 → 0.4.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/Rakefile +1 -1
- data/barista.gemspec +3 -3
- data/lib/barista.rb +46 -21
- data/lib/barista/compiler.rb +37 -16
- data/lib/barista/filter.rb +3 -3
- data/lib/barista/framework.rb +18 -18
- data/lib/barista/tasks/barista.rake +8 -4
- data/lib/barista/version.rb +1 -1
- metadata +5 -5
data/Rakefile
CHANGED
@@ -7,7 +7,7 @@ begin
|
|
7
7
|
require 'jeweler'
|
8
8
|
Jeweler::Tasks.new do |gem|
|
9
9
|
gem.name = "barista"
|
10
|
-
gem.summary = %Q{Transparent coffeescript support for rails 3}
|
10
|
+
gem.summary = %Q{Transparent coffeescript support for rails 3.}
|
11
11
|
gem.description = %Q{Automatically compiles app/scripts/*.coffee to javascript for rails awesomesauce.}
|
12
12
|
gem.email = "sutto@sutto.net"
|
13
13
|
gem.homepage = "http://github.com/Sutto/barista"
|
data/barista.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{barista}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Darcy Laycock"]
|
12
|
-
s.date = %q{2010-06
|
12
|
+
s.date = %q{2010-07-06}
|
13
13
|
s.description = %q{Automatically compiles app/scripts/*.coffee to javascript for rails awesomesauce.}
|
14
14
|
s.email = %q{sutto@sutto.net}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -39,7 +39,7 @@ Gem::Specification.new do |s|
|
|
39
39
|
s.rdoc_options = ["--charset=UTF-8"]
|
40
40
|
s.require_paths = ["lib"]
|
41
41
|
s.rubygems_version = %q{1.3.7}
|
42
|
-
s.summary = %q{Transparent coffeescript support for rails 3}
|
42
|
+
s.summary = %q{Transparent coffeescript support for rails 3.}
|
43
43
|
|
44
44
|
if s.respond_to? :specification_version then
|
45
45
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
data/lib/barista.rb
CHANGED
@@ -3,6 +3,10 @@ require 'pathname'
|
|
3
3
|
|
4
4
|
module Barista
|
5
5
|
|
6
|
+
Error = Class.new(StandardError)
|
7
|
+
CompilationError = Class.new(Error)
|
8
|
+
CompilerUnavailableError = Class.new(Error)
|
9
|
+
|
6
10
|
autoload :Compiler, 'barista/compiler'
|
7
11
|
autoload :Filter, 'barista/filter'
|
8
12
|
autoload :Framework, 'barista/framework'
|
@@ -13,6 +17,15 @@ module Barista
|
|
13
17
|
yield self if block_given?
|
14
18
|
end
|
15
19
|
|
20
|
+
def exception_on_error?
|
21
|
+
@exception_on_error = true if !defined?(@exception_on_error)
|
22
|
+
!!@exception_on_error
|
23
|
+
end
|
24
|
+
|
25
|
+
def exception_on_error=(value)
|
26
|
+
@exception_on_error = value
|
27
|
+
end
|
28
|
+
|
16
29
|
def root
|
17
30
|
@root ||= Rails.root.join("app", "coffeescripts")
|
18
31
|
end
|
@@ -30,78 +43,90 @@ module Barista
|
|
30
43
|
@output_root = Pathname(value.to_s)
|
31
44
|
end
|
32
45
|
|
33
|
-
def compile_file!(file, force = false)
|
46
|
+
def compile_file!(file, force = false, silence_error = false)
|
47
|
+
# Ensure we have a coffeescript compiler available.
|
48
|
+
if !Compiler.check_availability!(silence_error)
|
49
|
+
debug "The coffeescript compiler at '#{Compiler.bin_path}' is currently unavailable."
|
50
|
+
return ""
|
51
|
+
end
|
52
|
+
# Expand the path from the framework.
|
34
53
|
origin_path, framework = Framework.full_path_for(file)
|
35
54
|
return if origin_path.blank?
|
36
55
|
destination_path = self.output_path_for(file)
|
37
56
|
return unless force || Compiler.dirty?(origin_path, destination_path)
|
38
57
|
debug "Compiling #{file} from framework '#{framework.name}'"
|
39
58
|
FileUtils.mkdir_p File.dirname(destination_path)
|
40
|
-
content = Compiler.compile(origin_path)
|
59
|
+
content = Compiler.compile(origin_path, :silence_error => silence_error)
|
41
60
|
# Write the rendered content to file.
|
42
|
-
|
43
|
-
content
|
61
|
+
# nil is only when silence_error is true.
|
62
|
+
if content.nil?
|
63
|
+
debug "An error occured compiling '#{file}' - Leaving file as is."
|
64
|
+
else
|
65
|
+
File.open(destination_path, "w+") { |f| f.write content }
|
66
|
+
content
|
67
|
+
end
|
44
68
|
rescue SystemCallError
|
69
|
+
debug "An unknown error occured attempting to compile '#{file}'"
|
45
70
|
""
|
46
71
|
end
|
47
|
-
|
48
|
-
def compile_all!(force = false)
|
72
|
+
|
73
|
+
def compile_all!(force = false, silence_error = true)
|
49
74
|
debug "Compiling all coffeescripts"
|
50
75
|
Framework.exposed_coffeescripts.each do |coffeescript|
|
51
|
-
compile_file! coffeescript, force
|
76
|
+
compile_file! coffeescript, force, silence_error
|
52
77
|
end
|
53
78
|
true
|
54
79
|
end
|
55
|
-
|
80
|
+
|
56
81
|
def change_output_prefix!(framework, prefix = nil)
|
57
82
|
framework = framework.is_a?(Barista::Framework) ? framework : Barista::Framework[framework]
|
58
83
|
return unless framework
|
59
84
|
framework.output_prefix = prefix
|
60
85
|
end
|
61
|
-
|
86
|
+
|
62
87
|
def each_framework(include_default = false)
|
63
88
|
Framework.all(include_default).each { yield if block_given? }
|
64
89
|
end
|
65
|
-
|
90
|
+
|
66
91
|
def output_path_for(file)
|
67
92
|
output_root.join(file.to_s.gsub(/^\/+/, '')).to_s.gsub(/\.coffee$/, '.js')
|
68
93
|
end
|
69
|
-
|
94
|
+
|
70
95
|
def debug(message)
|
71
96
|
Rails.logger.debug "[Barista] #{message}" if defined?(Rails.logger) && Rails.logger
|
72
97
|
end
|
73
|
-
|
98
|
+
|
74
99
|
# By default, only add it in dev / test
|
75
100
|
def add_filter?
|
76
101
|
Rails.env.test? || Rails.env.development?
|
77
102
|
end
|
78
|
-
|
103
|
+
|
79
104
|
def no_wrap?
|
80
105
|
defined?(@no_wrap) && @no_wrap
|
81
106
|
end
|
82
|
-
|
107
|
+
|
83
108
|
def no_wrap!
|
84
109
|
self.no_wrap = true
|
85
110
|
end
|
86
|
-
|
111
|
+
|
87
112
|
def no_wrap=(value)
|
88
113
|
@no_wrap = !!value
|
89
114
|
end
|
90
|
-
|
115
|
+
|
91
116
|
end
|
92
|
-
|
117
|
+
|
93
118
|
if defined?(Rails::Engine)
|
94
119
|
class Engine < Rails::Engine
|
95
|
-
|
120
|
+
|
96
121
|
rake_tasks do
|
97
122
|
load File.expand_path('./barista/tasks/barista.rake', File.dirname(__FILE__))
|
98
123
|
end
|
99
|
-
|
124
|
+
|
100
125
|
initializer "barista.wrap_filter" do
|
101
126
|
ActionController::Base.before_filter(Barista::Filter) if Barista.add_filter?
|
102
127
|
end
|
103
|
-
|
128
|
+
|
104
129
|
end
|
105
130
|
end
|
106
|
-
|
131
|
+
|
107
132
|
end
|
data/lib/barista/compiler.rb
CHANGED
@@ -2,50 +2,71 @@ require 'digest/sha2'
|
|
2
2
|
|
3
3
|
module Barista
|
4
4
|
class Compiler
|
5
|
-
|
5
|
+
|
6
6
|
class << self; attr_accessor :bin_path; end
|
7
7
|
self.bin_path ||= "coffee"
|
8
|
-
|
9
|
-
def self.
|
10
|
-
|
8
|
+
|
9
|
+
def self.available?
|
10
|
+
@coffee_available ||= system("command -v '#{self.bin_path}' >/dev/null 2>&1")
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.check_availability!(silence = false)
|
14
|
+
available?.tap do |available|
|
15
|
+
if Barista.exception_on_error? && !silence
|
16
|
+
raise CompilerUnavailableError, "The coffeescript compiler '#{self.bin_path}' could not be found."
|
17
|
+
end
|
18
|
+
end
|
11
19
|
end
|
12
|
-
|
13
|
-
def
|
20
|
+
|
21
|
+
def self.compile(path, options = {})
|
22
|
+
new(path, options).to_js
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(path, options = {})
|
14
26
|
@compiled = false
|
27
|
+
@options = {}
|
15
28
|
@path = path
|
16
29
|
end
|
17
|
-
|
30
|
+
|
18
31
|
def compile!
|
19
32
|
# Compiler code thanks to bistro_car.
|
20
33
|
@compiled_content = invoke_coffee(@path)
|
21
34
|
@compiled = true
|
22
35
|
end
|
23
|
-
|
36
|
+
|
24
37
|
def to_js
|
25
38
|
compile! unless @compiled
|
26
|
-
@compiled_content
|
39
|
+
@compiled_content
|
27
40
|
end
|
28
|
-
|
41
|
+
|
29
42
|
def self.dirty?(from, to)
|
30
43
|
File.exist?(from) && (!File.exist?(to) || File.mtime(to) < File.mtime(from))
|
31
44
|
end
|
32
|
-
|
45
|
+
|
33
46
|
protected
|
34
|
-
|
47
|
+
|
35
48
|
def coffee_options
|
36
49
|
["-p"].tap do |options|
|
37
50
|
options << "--no-wrap" if Barista.no_wrap?
|
38
51
|
end.join(" ")
|
39
52
|
end
|
40
|
-
|
53
|
+
|
41
54
|
def invoke_coffee(path)
|
42
55
|
command = "#{self.class.bin_path} #{coffee_options} '#{path}'".squeeze(' ')
|
43
|
-
%x(#{command})
|
56
|
+
result = %x(#{command}).to_s
|
57
|
+
if !$?.success?
|
58
|
+
if Barista.exception_on_error? && !@options[:silence]
|
59
|
+
raise CompilationError, "\"#{command}\" exited with a non-zero status."
|
60
|
+
else
|
61
|
+
result = nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
result
|
44
65
|
end
|
45
|
-
|
66
|
+
|
46
67
|
def content_hash
|
47
68
|
@content_hash ||= Digest::SHA256.hexdigest(@content)
|
48
69
|
end
|
49
|
-
|
70
|
+
|
50
71
|
end
|
51
72
|
end
|
data/lib/barista/filter.rb
CHANGED
data/lib/barista/framework.rb
CHANGED
@@ -1,26 +1,26 @@
|
|
1
1
|
module Barista
|
2
2
|
class Framework
|
3
|
-
|
3
|
+
|
4
4
|
def self.default_framework
|
5
5
|
@default_framework ||= self.new("default", Barista.root)
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def self.default_framework=(value)
|
9
9
|
@default_framework = value
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def self.all(include_default = false)
|
13
13
|
all = (@all ||= [])
|
14
14
|
all = [default_framework] + all if include_default
|
15
15
|
all
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def self.exposed_coffeescripts
|
19
19
|
all(true).inject([]) do |collection, fw|
|
20
20
|
collection + fw.exposed_coffeescripts
|
21
21
|
end.uniq.sort_by { |f| f.length }
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
def self.full_path_for(script)
|
25
25
|
script = script.to_s.gsub(/\.js$/, '.coffee').gsub(/^\/+/, '')
|
26
26
|
all(true).each do |fw|
|
@@ -29,52 +29,52 @@ module Barista
|
|
29
29
|
end
|
30
30
|
nil
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def self.register(name, root)
|
34
34
|
(@all ||= []) << self.new(name, root)
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
def self.[](name)
|
38
38
|
name = name.to_s
|
39
39
|
(@all ||= []).detect { |fw| fw.name == name }
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
attr_reader :name, :framework_root, :output_prefix
|
43
|
-
|
43
|
+
|
44
44
|
def initialize(name, root, output_prefix = nil)
|
45
45
|
@name = name.to_s
|
46
46
|
@output_prefix = nil
|
47
47
|
@framework_root = File.expand_path(root)
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
def coffeescripts
|
51
51
|
Dir[File.join(@framework_root, "**", "*.coffee")]
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
def short_name(script)
|
55
55
|
short_name = remove_prefix script, @framework_root
|
56
56
|
File.join *[@output_prefix, short_name].compact
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
def exposed_coffeescripts
|
60
60
|
coffeescripts.map { |script| short_name(script) }
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
def output_prefix=(value)
|
64
64
|
value = value.to_s.gsub /(^\/|\/$)/, ''
|
65
65
|
@output_prefix = value.blank? ? nil : value
|
66
66
|
end
|
67
|
-
|
67
|
+
|
68
68
|
def full_path_for(name)
|
69
69
|
full_path = File.join(@framework_root, remove_prefix(name, @output_prefix.to_s))
|
70
70
|
File.exist?(full_path) ? full_path : nil
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
protected
|
74
|
-
|
74
|
+
|
75
75
|
def remove_prefix(path, prefix)
|
76
76
|
path.to_s.gsub /^#{Regexp.escape(prefix.to_s)}\/?/, ''
|
77
77
|
end
|
78
|
-
|
78
|
+
|
79
79
|
end
|
80
|
-
end
|
80
|
+
end
|
@@ -1,8 +1,12 @@
|
|
1
1
|
namespace :barista do
|
2
|
-
|
2
|
+
|
3
3
|
desc "Compiles coffeescripts from app/scripts into public/javascripts"
|
4
4
|
task :brew => :environment do
|
5
|
-
Barista.
|
5
|
+
if !Barista::Compiler.available?
|
6
|
+
$stderr.puts "'#{Barista::Compiler.bin_path}' was unavailable."
|
7
|
+
exit 1
|
8
|
+
end
|
9
|
+
Barista.compile_all! true, false
|
6
10
|
end
|
7
|
-
|
8
|
-
end
|
11
|
+
|
12
|
+
end
|
data/lib/barista/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: barista
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Darcy Laycock
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-06
|
18
|
+
date: 2010-07-06 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -79,6 +79,6 @@ rubyforge_project:
|
|
79
79
|
rubygems_version: 1.3.7
|
80
80
|
signing_key:
|
81
81
|
specification_version: 3
|
82
|
-
summary: Transparent coffeescript support for rails 3
|
82
|
+
summary: Transparent coffeescript support for rails 3.
|
83
83
|
test_files: []
|
84
84
|
|