barista 1.1.0.pre1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -146,6 +146,7 @@ and `#option!` (to set the value to true):
146
146
  * `root` – The folder path to read CoffeeScripts from. (Defaults to `app/coffeescripts`.)
147
147
  * `output_root` – The folder to write compiled JS files to. (Defaults to `public/javascripts`.)
148
148
  * `change_output_prefix!` – Method to change the output prefix for a framework.
149
+ * `change_output_root!` - Method to change the output root for a given framework.
149
150
  * `verbose` – Whether or not Barista will add a preamble to files.
150
151
  * `js_path` – Path to the pure-JavaScript compiler.
151
152
  * `env` – The application environment. (Defaults to `Rails.env`.)
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{barista}
8
- s.version = "1.1.0.pre1"
8
+ s.version = "1.1.0"
9
9
 
10
- s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
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{2011-04-18}
12
+ s.date = %q{2011-06-01}
13
13
  s.description = %q{Barista provides simple, integrated support for CoffeeScript in Rack and Rails applications.
14
14
 
15
15
  Much like Compass does for Sass, It also provides Frameworks (bundleable code which can be shared via Gems).
@@ -1,7 +1,12 @@
1
1
  require 'pathname'
2
-
2
+ require 'time' # Required for httpdate
3
3
  require 'coffee_script'
4
4
 
5
+ # Setup ExecJS extras if present
6
+ if defined?(ExecJS::ExternalRuntime)
7
+ ExecJS::ExternalRuntime.send :attr_accessor, :binary
8
+ end
9
+
5
10
  module Barista
6
11
 
7
12
  Error = Class.new(StandardError)
@@ -54,6 +59,7 @@ module Barista
54
59
 
55
60
  has_boolean_options :verbose, :bare, :add_filter, :add_preamble, :exception_on_error, :embedded_interpreter, :auto_compile
56
61
  has_delegate_methods Compiler, :bin_path, :bin_path=, :js_path, :js_path=
62
+ has_delegate_methods Framework, :register
57
63
  has_deprecated_methods :compiler, :compiler=, :compiler_klass, :compiler_klass=
58
64
 
59
65
  def configure
@@ -182,6 +188,10 @@ module Barista
182
188
  Framework.exposed_coffeescripts.each do |coffeescript|
183
189
  Compiler.autocompile_file coffeescript, force, silence_error
184
190
  end
191
+ debug "Copying all javascripts"
192
+ Framework.exposed_javascripts.each do |javascript|
193
+ Compiler.autocompile_file javascript, force, silence_error
194
+ end
185
195
  Barista.invoke_hook :all_compiled
186
196
  true
187
197
  end
@@ -191,6 +201,11 @@ module Barista
191
201
  framework.output_prefix = prefix if framework
192
202
  end
193
203
 
204
+ def change_output_root!(framework, root)
205
+ framework = Barista::Framework[framework] unless framework.is_a?(Barista::Framework)
206
+ framework.output_root = root if framework
207
+ end
208
+
194
209
  def each_framework(include_default = false, &blk)
195
210
  Framework.all(include_default).each(&blk)
196
211
  end
@@ -13,21 +13,38 @@ module Barista
13
13
  def js_path=(value)
14
14
  CoffeeScript::Source.path = value
15
15
  end
16
-
16
+
17
17
  def bin_path
18
- CoffeeScript::Engines::Node.binary
18
+ if defined?(CoffeeScript::Engines::Node)
19
+ CoffeeScript::Engines::Node.binary
20
+ else
21
+ execjs_runtime_call :binary
22
+ end
19
23
  end
20
-
24
+
21
25
  def bin_path=(path)
22
- CoffeeScript::Engines::Node.binary = path
26
+ if defined?(CoffeeScript::Engines::Node)
27
+ CoffeeScript::Engines::Node.binary = path
28
+ else
29
+ execjs_runtime_call :binary=, path
30
+ end
23
31
  end
24
-
32
+
33
+ def execjs_runtime_call(method, *args)
34
+ runtime = ExecJS.runtime
35
+ if runtime.respond_to?(method, true)
36
+ runtime.send method, *args
37
+ else
38
+ nil
39
+ end
40
+ end
41
+
25
42
  def available?
26
43
  CoffeeScript.engine && CoffeeScript.engine.supported?
27
44
  end
28
45
 
29
46
  def check_availability!(silence = false)
30
- available = available?
47
+ available = available?
31
48
  if !available && Barista.exception_on_error? && !silence
32
49
  raise CompilerUnavailableError, "No method of compiling cofffescript is currently available. Please install therubyracer or node."
33
50
  end
@@ -43,12 +60,12 @@ module Barista
43
60
  origin_path, framework = Framework.full_path_for(file)
44
61
  return if origin_path.nil?
45
62
  destination_path = framework.output_path_for(file)
46
-
63
+
47
64
  # read file directly if auto_compile is disabled
48
- if !Barista.auto_compile?
49
- if File.exist?(destination_path)
65
+ if !Barista.auto_compile?
66
+ if File.exist?(destination_path)
50
67
  return File.read(destination_path)
51
- else
68
+ else
52
69
  return nil
53
70
  end
54
71
  end
@@ -65,7 +82,7 @@ module Barista
65
82
  compiler.save
66
83
  content
67
84
  end
68
-
85
+
69
86
  def compile_as(file, type)
70
87
  origin_path, framework = Framework.full_path_for(file)
71
88
  return if origin_path.nil?
@@ -75,11 +92,11 @@ module Barista
75
92
  return autocompile_file(file), Time.now
76
93
  end
77
94
  end
78
-
95
+
79
96
  def dirty?(from, to)
80
97
  File.exist?(from) && (!File.exist?(to) || File.mtime(to) < File.mtime(from))
81
98
  end
82
-
99
+
83
100
  def setup_default_error_logger
84
101
  Barista.on_compilation_error do |where, message|
85
102
  if Barista.verbose?
@@ -88,9 +105,9 @@ module Barista
88
105
  end
89
106
  end
90
107
  end
91
-
108
+
92
109
  end
93
-
110
+
94
111
  def initialize(context, options = {})
95
112
  @compiled = false
96
113
  @options = options
@@ -108,11 +125,19 @@ module Barista
108
125
  compile! unless defined?(@compiled) && @compiled
109
126
  @compiled_content
110
127
  end
111
-
128
+
129
+ def copyable?(location)
130
+ location != 'inline' && File.extname(location) == '.js'
131
+ end
132
+
112
133
  def compile(script, where = 'inline')
113
- Barista.invoke_hook :before_compilation, where
114
- out = CoffeeScript.compile script, :bare => Barista.bare?
115
- Barista.invoke_hook :compiled, where
134
+ if copyable?(where)
135
+ out = script
136
+ else
137
+ Barista.invoke_hook :before_compilation, where
138
+ out = CoffeeScript.compile script, :bare => Barista.bare?
139
+ Barista.invoke_hook :compiled, where
140
+ end
116
141
  out
117
142
  rescue CoffeeScript::Error => e
118
143
  Barista.invoke_hook :compilation_failed, where, e.message
@@ -139,14 +164,15 @@ module Barista
139
164
  protected
140
165
 
141
166
  def preamble(location)
142
- "/* DO NOT MODIFY. This file was compiled #{Time.now.httpdate} from\n * #{location.strip}\n */\n\n"
167
+ inner_message = copyable?(location) ? "copied" : "compiled"
168
+ "/* DO NOT MODIFY. This file was #{inner_message} #{Time.now.httpdate} from\n * #{location.strip}\n */\n\n"
143
169
  end
144
-
170
+
145
171
  def compilation_error_for(location, message)
146
172
  details = "Compilation of '#{location}' failed:\n#{message}"
147
173
  Barista.verbose? ? "alert(#{details.to_json});" : nil
148
174
  end
149
-
175
+
150
176
  def setup_compiler_context(context)
151
177
  if context.respond_to?(:read)
152
178
  @context = context.read
@@ -163,6 +189,6 @@ module Barista
163
189
  @options[:origin] ||= 'inline'
164
190
  end
165
191
  end
166
-
192
+
167
193
  end
168
194
  end
@@ -21,21 +21,33 @@ module Barista
21
21
  end.uniq.sort_by { |f| f.length }
22
22
  end
23
23
 
24
+ def self.exposed_javascripts
25
+ all(true).inject([]) do |collection, fw|
26
+ collection + fw.exposed_javascripts
27
+ end.uniq.sort_by { |f| f.length }
28
+ end
29
+
24
30
  def self.coffeescript_glob_paths
25
31
  all(true).map { |fw| fw.coffeescript_glob_path }
26
32
  end
27
33
 
28
34
  def self.full_path_for(script)
29
- script = script.to_s.gsub(/\.js$/, '.coffee').gsub(/^\/+/, '')
35
+ javascript = script.to_s.gsub(/\.coffee$/, '.js').gsub(/^\/+/, '')
36
+ coffeescript = script.to_s.gsub(/\.js$/, '.coffee').gsub(/^\/+/, '')
30
37
  all(true).each do |fw|
31
- full_path = fw.full_path_for(script)
38
+ full_path = fw.full_path_for(coffeescript) || fw.full_path_for(javascript)
32
39
  return full_path, fw if full_path
33
40
  end
34
41
  nil
35
42
  end
36
43
 
37
- def self.register(name, root)
38
- (@all ||= []) << self.new(:name => name, :root => root)
44
+ def self.register(name, options = nil)
45
+ if options.is_a?(Hash)
46
+ framework = self.new(options.merge(:name => name))
47
+ else
48
+ framework = self.new(:name => name, :root => options)
49
+ end
50
+ (@all ||= []) << framework
39
51
  end
40
52
 
41
53
  def self.[](name)
@@ -56,20 +68,28 @@ module Barista
56
68
  end
57
69
  # actually setup the framework.
58
70
  check_options! options, :name, :root
59
- @name = options[:name].to_s
60
- @output_prefix = options[:output_prefix]
61
- @framework_root = File.expand_path(options[:root].to_s)
62
- @output_root = options[:output_root] && Pathname(options[:output_root])
71
+ @name = options[:name].to_s
72
+ @output_prefix = options[:output_prefix]
73
+ @framework_root = File.expand_path(options[:root].to_s)
74
+ self.output_root = options[:output_root]
63
75
  end
64
76
 
65
77
  def coffeescripts
66
78
  Dir[coffeescript_glob_path]
67
79
  end
68
80
 
81
+ def javascripts
82
+ Dir[javascript_glob_path]
83
+ end
84
+
69
85
  def coffeescript_glob_path
70
86
  @coffeescript_glob_path ||= File.join(@framework_root, "**", "*.coffee")
71
87
  end
72
88
 
89
+ def javascript_glob_path
90
+ @javascript_glob_path ||= File.join(@framework_root, "**", "*.js")
91
+ end
92
+
73
93
  def short_name(script)
74
94
  short_name = remove_prefix script, @framework_root
75
95
  File.join(*[@output_prefix, short_name].compact)
@@ -79,6 +99,10 @@ module Barista
79
99
  coffeescripts.map { |script| short_name(script) }
80
100
  end
81
101
 
102
+ def exposed_javascripts
103
+ javascripts.map { |script| short_name(script) }
104
+ end
105
+
82
106
  def output_prefix=(value)
83
107
  value = value.to_s.gsub(/(^\/|\/$)/, '').strip
84
108
  @output_prefix = value.empty? ? nil : value
@@ -93,6 +117,14 @@ module Barista
93
117
  @output_root || Barista.output_root
94
118
  end
95
119
 
120
+ def output_root=(value)
121
+ if value.nil?
122
+ @output_root = nil
123
+ else
124
+ @output_root = Pathname(value.to_s)
125
+ end
126
+ end
127
+
96
128
  def output_path_for(file, format = 'js')
97
129
  # Strip the leading slashes
98
130
  file = file.to_s.gsub(/^\/+/, '')
@@ -3,6 +3,6 @@ module Barista
3
3
  MAJOR = 1
4
4
  MINOR = 1
5
5
  PATCH = 0
6
- STRING = [MAJOR, MINOR, PATCH, "pre1"].join(".")
6
+ STRING = [MAJOR, MINOR, PATCH].join(".")
7
7
  end
8
8
  end
@@ -10,12 +10,14 @@ Barista.configure do |c|
10
10
  # Disable auto compile, use generated file directly:
11
11
  # c.auto_compile = false
12
12
 
13
- # Set the compiler
13
+ # Add a new framework:
14
+
15
+ # c.register :tests, :root => Rails.root.join('test', 'coffeescript'), :output_prefix => 'test'
14
16
 
15
17
  # Disable wrapping in a closure:
16
- # c.no_wrap = true
18
+ # c.bare = true
17
19
  # ... or ...
18
- # c.no_wrap!
20
+ # c.bare!
19
21
 
20
22
  # Change the output root for a framework:
21
23
 
@@ -24,13 +26,17 @@ Barista.configure do |c|
24
26
  # or for all frameworks...
25
27
 
26
28
  # c.each_framework do |framework|
27
- # c.change_output_prefix! framework.name, "vendor/#{framework.name}"
29
+ # c.change_output_prefix! framework, "vendor/#{framework.name}"
28
30
  # end
29
31
 
30
32
  # or, prefix the path for the app files:
31
33
 
32
34
  # c.change_output_prefix! :default, 'my-app-name'
33
35
 
36
+ # or, change the directory the framework goes into full stop:
37
+
38
+ # c.change_output_prefix! :tests, Rails.root.join('spec', 'javascripts')
39
+
34
40
  # or, hook into the compilation:
35
41
 
36
42
  # c.before_compilation { |path| puts "Barista: Compiling #{path}" }
metadata CHANGED
@@ -1,15 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: barista
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1923831963
5
- prerelease: 6
4
+ hash: 19
5
+ prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
9
  - 0
10
- - pre
11
- - 1
12
- version: 1.1.0.pre1
10
+ version: 1.1.0
13
11
  platform: ruby
14
12
  authors:
15
13
  - Darcy Laycock
@@ -17,7 +15,7 @@ autorequire:
17
15
  bindir: bin
18
16
  cert_chain: []
19
17
 
20
- date: 2011-04-18 00:00:00 +08:00
18
+ date: 2011-06-01 00:00:00 +08:00
21
19
  default_executable:
22
20
  dependencies:
23
21
  - !ruby/object:Gem::Dependency
@@ -150,14 +148,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
150
148
  required_rubygems_version: !ruby/object:Gem::Requirement
151
149
  none: false
152
150
  requirements:
153
- - - ">"
151
+ - - ">="
154
152
  - !ruby/object:Gem::Version
155
- hash: 25
153
+ hash: 3
156
154
  segments:
157
- - 1
158
- - 3
159
- - 1
160
- version: 1.3.1
155
+ - 0
156
+ version: "0"
161
157
  requirements: []
162
158
 
163
159
  rubyforge_project: