coffee-script 0.3.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010 Jeremy Ashkenas
1
+ Copyright (c) 2010 Joshua Peek
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person
4
4
  obtaining a copy of this software and associated documentation
@@ -19,4 +19,4 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
19
  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
20
  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
21
  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
- OTHER DEALINGS IN THE SOFTWARE.
22
+ OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,15 @@
1
+ Ruby CoffeeScript
2
+ =================
3
+
4
+ Ruby CoffeeScript is a thin wrapper around the `coffee` binary.
5
+
6
+ CoffeeScript.compile File.open("script.coffee")
7
+
8
+ Dependencies
9
+ ------------
10
+
11
+ This is **not** the CoffeeScript parser. This means you need to install `node` and `coffee`.
12
+
13
+ If your `coffee` binary is in a weird location, you can specify the path by hand.
14
+
15
+ CoffeeScript.coffee_bin = "/usr/local/bin/coffee"
@@ -1,21 +1 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- require "coffee_script/lexer"
3
- require "coffee_script/parser"
4
- require "coffee_script/nodes"
5
- require "coffee_script/value"
6
- require "coffee_script/scope"
7
- require "coffee_script/rewriter"
8
- require "coffee_script/parse_error"
9
-
10
- # Namespace for all CoffeeScript internal classes.
11
- module CoffeeScript
12
-
13
- VERSION = '0.3.2' # Keep in sync with the gemspec.
14
-
15
- # Compile a script (String or IO) to JavaScript.
16
- def self.compile(script, options={})
17
- script = script.read if script.respond_to?(:read)
18
- Parser.new.parse(script).compile(options)
19
- end
20
-
21
- end
1
+ require 'coffee_script'
@@ -0,0 +1,31 @@
1
+ module CoffeeScript
2
+ def self.locate_coffee_bin
3
+ out = `which coffee`
4
+ if $?.success?
5
+ out.chomp
6
+ else
7
+ raise LoadError, "could not find `coffee` in PATH"
8
+ end
9
+ end
10
+
11
+ def self.coffee_bin
12
+ @@coffee_bin ||= locate_coffee_bin
13
+ end
14
+
15
+ def self.coffee_bin=(path)
16
+ @@coffee_bin = path
17
+ end
18
+
19
+ # Compile a script (String or IO) to JavaScript.
20
+ def self.compile(script, options = {})
21
+ script = script.read if script.respond_to?(:read)
22
+ command = "#{coffee_bin} -sp"
23
+ command += " --no-wrap" if options[:no_wrap]
24
+
25
+ IO.popen(command, "w+") do |f|
26
+ f << script
27
+ f.close_write
28
+ f.read
29
+ end
30
+ end
31
+ end
metadata CHANGED
@@ -1,63 +1,40 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coffee-script
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - Jeremy Ashkenas
14
+ - Joshua Peek
8
15
  autorequire:
9
16
  bindir: bin
10
17
  cert_chain: []
11
18
 
12
- date: 2010-02-08 00:00:00 -05:00
19
+ date: 2010-09-10 00:00:00 -05:00
13
20
  default_executable:
14
21
  dependencies: []
15
22
 
16
- description: " CoffeeScript is a little language that compiles into JavaScript. Think\n of it as JavaScript's less ostentatious kid brother -- the same genes,\n roughly the same height, but a different sense of style. Apart from a\n handful of bonus goodies, statements in CoffeeScript correspond\n one-to-one with their equivalent in JavaScript, it's just another\n way of saying it.\n"
17
- email: jashkenas@gmail.com
18
- executables:
19
- - coffee
23
+ description: " Ruby CoffeeScript is a thin wrapper around the coffee binary.\n"
24
+ email: josh@joshpeek.com
25
+ executables: []
26
+
20
27
  extensions: []
21
28
 
22
29
  extra_rdoc_files: []
23
30
 
24
31
  files:
25
- - bin/coffee
26
- - examples/blocks.coffee
27
- - examples/code.coffee
28
- - examples/poignant.coffee
29
- - examples/potion.coffee
30
- - examples/underscore.coffee
31
- - extras/coffee.vim
32
- - extras/CoffeeScript.tmbundle/info.plist
33
- - extras/CoffeeScript.tmbundle/Preferences/CoffeeScript.tmPreferences
34
- - extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage
35
- - extras/EXTRAS
36
32
  - lib/coffee-script.rb
37
- - lib/coffee_script/coffee-script.js
38
- - lib/coffee_script/command_line.rb
39
- - lib/coffee_script/grammar.y
40
- - lib/coffee_script/lexer.js
41
- - lib/coffee_script/lexer.rb
42
- - lib/coffee_script/narwhal/coffee-script.js
43
- - lib/coffee_script/nodes.js
44
- - lib/coffee_script/nodes.rb
45
- - lib/coffee_script/parse_error.rb
46
- - lib/coffee_script/parser.js
47
- - lib/coffee_script/parser.rb
48
- - lib/coffee_script/repl.js
49
- - lib/coffee_script/rewriter.js
50
- - lib/coffee_script/rewriter.rb
51
- - lib/coffee_script/runner.js
52
- - lib/coffee_script/scope.js
53
- - lib/coffee_script/scope.rb
54
- - lib/coffee_script/value.rb
55
- - coffee-script.gemspec
33
+ - lib/coffee_script.rb
56
34
  - LICENSE
57
- - README
58
- - package.json
59
- has_rdoc: false
60
- homepage: http://jashkenas.github.com/coffee-script/
35
+ - README.md
36
+ has_rdoc: true
37
+ homepage: http://github.com/josh/ruby-coffee-script
61
38
  licenses: []
62
39
 
63
40
  post_install_message:
@@ -66,23 +43,30 @@ rdoc_options: []
66
43
  require_paths:
67
44
  - lib
68
45
  required_ruby_version: !ruby/object:Gem::Requirement
46
+ none: false
69
47
  requirements:
70
48
  - - ">="
71
49
  - !ruby/object:Gem::Version
50
+ hash: 3
51
+ segments:
52
+ - 0
72
53
  version: "0"
73
- version:
74
54
  required_rubygems_version: !ruby/object:Gem::Requirement
55
+ none: false
75
56
  requirements:
76
57
  - - ">="
77
58
  - !ruby/object:Gem::Version
59
+ hash: 3
60
+ segments:
61
+ - 0
78
62
  version: "0"
79
- version:
80
- requirements: []
81
-
63
+ requirements:
64
+ - node
65
+ - coffee-script
82
66
  rubyforge_project: coffee-script
83
- rubygems_version: 1.3.5
67
+ rubygems_version: 1.3.7
84
68
  signing_key:
85
69
  specification_version: 3
86
- summary: The CoffeeScript Compiler
70
+ summary: Ruby CoffeeScript wrapper
87
71
  test_files: []
88
72
 
data/README DELETED
@@ -1,41 +0,0 @@
1
- =
2
- {
3
- } } {
4
- { { } }
5
- } }{ {
6
- { }{ } } _____ __ __
7
- ( }{ }{ { ) / ____| / _|/ _|
8
- .- { { } { }} -. | | ___ | |_| |_ ___ ___
9
- ( ( } { } { } } ) | | / _ \| _| _/ _ \/ _ \
10
- |`-..________ ..-'| | |___| (_) | | | || __/ __/
11
- | | \_____\___/|_| |_| \___|\___|
12
- | ;--.
13
- | (__ \ _____ _ _
14
- | | ) ) / ____| (_) | |
15
- | |/ / | (___ ___ _ __ _ _ __ | |_
16
- | ( / \___ \ / __| '__| | '_ \| __|
17
- | |/ ____) | (__| | | | |_) | |_
18
- | | |_____/ \___|_| |_| .__/ \__|
19
- `-.._________..-' | |
20
- |_|
21
-
22
-
23
- CoffeeScript is a little language that compiles into JavaScript.
24
-
25
- Install the compiler:
26
- gem install coffee-script
27
-
28
- Compile a script:
29
- coffee /path/to/script.coffee
30
-
31
- For documentation, usage, and examples, see:
32
- http://jashkenas.github.com/coffee-script/
33
-
34
- To suggest a feature or report a bug:
35
- http://github.com/jashkenas/coffee-script/issues/
36
-
37
- The source repository:
38
- git://github.com/jashkenas/coffee-script.git
39
-
40
- To build CoffeeScript from source, install the "racc" gem and
41
- run "rake build:parser". Then bin/coffee will work.
data/bin/coffee DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "#{File.dirname(__FILE__)}/../lib/coffee_script/command_line.rb"
4
-
5
- CoffeeScript::CommandLine.new
@@ -1,27 +0,0 @@
1
- Gem::Specification.new do |s|
2
- s.name = 'coffee-script'
3
- s.version = '0.3.2' # Keep version in sync with coffee-script.rb
4
- s.date = '2010-2-8'
5
-
6
- s.homepage = "http://jashkenas.github.com/coffee-script/"
7
- s.summary = "The CoffeeScript Compiler"
8
- s.description = <<-EOS
9
- CoffeeScript is a little language that compiles into JavaScript. Think
10
- of it as JavaScript's less ostentatious kid brother -- the same genes,
11
- roughly the same height, but a different sense of style. Apart from a
12
- handful of bonus goodies, statements in CoffeeScript correspond
13
- one-to-one with their equivalent in JavaScript, it's just another
14
- way of saying it.
15
- EOS
16
-
17
- s.authors = ['Jeremy Ashkenas']
18
- s.email = 'jashkenas@gmail.com'
19
- s.rubyforge_project = 'coffee-script'
20
- s.has_rdoc = false
21
-
22
- s.require_paths = ['lib']
23
- s.executables = ['coffee']
24
-
25
- s.files = Dir['bin/*', 'examples/*', 'extras/**/*', 'lib/**/*',
26
- 'coffee-script.gemspec', 'LICENSE', 'README', 'package.json']
27
- end
@@ -1,57 +0,0 @@
1
- # After wycats' http://yehudakatz.com/2010/02/07/the-building-blocks-of-ruby/
2
-
3
- # Sinatra.
4
- get '/hello', ->
5
- 'Hello World'
6
-
7
-
8
- # Append.
9
- append: (location, data) ->
10
- path: new Pathname location
11
- throw "Location does not exist" unless path.exists()
12
-
13
- File.open path, 'a', (file) ->
14
- file.puts YAML.dump data
15
-
16
- data
17
-
18
-
19
- # Rubinius' File.open implementation.
20
- File.open: (path, mode, block) ->
21
- io: new File path, mode
22
-
23
- return io unless block
24
-
25
- try
26
- block io
27
- finally
28
- try
29
- io.close() unless io.closed()
30
- catch error
31
- # nothing, just swallow them.
32
-
33
-
34
- # Write.
35
- write: (location, data) ->
36
- path = new Pathname location
37
- raise "Location does not exist" unless path.exists()
38
-
39
- File.open path, 'w', (file) ->
40
- return false if Digest.MD5.hexdigest(file.read()) is data.hash()
41
- file.puts YAML.dump data
42
- true
43
-
44
-
45
- # Rails' respond_to.
46
- index: ->
47
- people: Person.find 'all'
48
-
49
- respond_to (format) ->
50
- format.html()
51
- format.xml -> render { xml: people.xml() }
52
-
53
-
54
- # Synchronization.
55
- synchronize: (block) ->
56
- lock()
57
- try block() finally unlock()
@@ -1,173 +0,0 @@
1
- # Functions:
2
- square: (x) -> x * x
3
-
4
- sum: (x, y) -> x + y
5
-
6
- odd: (x) -> x % 2 isnt 0
7
-
8
- even: (x) -> x % 2 is 0
9
-
10
- run_loop: ->
11
- fire_events((e) -> e.stopPropagation())
12
- listen()
13
- wait()
14
-
15
- # Objects:
16
- dense_object_literal: {one: 1, two: 2, three: 3}
17
-
18
- spaced_out_multiline_object: {
19
- pi: 3.14159
20
- list: [1, 2, 3, 4]
21
- regex: /match[ing](every|thing|\/)/gi
22
- three: new Idea()
23
-
24
- inner_obj: {
25
- freedom: -> _.freedom()
26
- }
27
- }
28
-
29
- # Arrays:
30
- stooges: [{moe: 45}, {curly: 43}, {larry: 46}]
31
-
32
- exponents: [(x) -> x, (x) -> x * x, (x) -> x * x * x]
33
-
34
- empty: []
35
-
36
- multiline: [
37
- 'line one'
38
- 'line two'
39
- ]
40
-
41
- # Conditionals and ternaries.
42
- if submarine.shields_up
43
- full_speed_ahead()
44
- fire_torpedos()
45
- else if submarine.sinking
46
- abandon_ship()
47
- else
48
- run_away()
49
-
50
- eldest: if 25 > 21 then liz else marge
51
-
52
- decoration: medal_of_honor if war_hero
53
-
54
- go_to_sleep() unless coffee
55
-
56
- # Returning early:
57
- race: ->
58
- run()
59
- walk()
60
- crawl()
61
- if tired then return sleep()
62
- race()
63
-
64
- # Conditional assignment:
65
- good ||= evil
66
- wine &&= cheese
67
-
68
- # Nested property access and calls.
69
- ((moon.turn(360))).shapes[3].move({x: 45, y: 30}).position['top'].offset('x')
70
-
71
- a: b: c: 5
72
-
73
- # Embedded JavaScript.
74
- callback(
75
- `function(e) { e.stop(); }`
76
- )
77
-
78
- # Try/Catch/Finally/Throw.
79
- try
80
- all_hell_breaks_loose()
81
- dogs_and_cats_living_together()
82
- throw "up"
83
- catch error
84
- print(error)
85
- finally
86
- clean_up()
87
-
88
- try all_hell_breaks_loose() catch error then print(error) finally clean_up()
89
-
90
- # While loops, break and continue.
91
- while demand > supply
92
- sell()
93
- restock()
94
-
95
- while supply > demand then buy()
96
-
97
- while true
98
- break if broken
99
- continue if continuing
100
-
101
- # Unary operators.
102
- !!true
103
-
104
- # Lexical scoping.
105
- v_1: 5
106
- change_a_and_set_b: ->
107
- v_1: 10
108
- v_2: 15
109
- v_2: 20
110
-
111
- # Array comprehensions.
112
- supper: food.capitalize() for food in ['toast', 'cheese', 'wine']
113
-
114
- drink(bottle) for bottle, i in ['soda', 'wine', 'lemonade'] when even(i)
115
-
116
- # Switch statements ("else" serves as a default).
117
- activity: switch day
118
- when "Tuesday" then eat_breakfast()
119
- when "Sunday" then go_to_church()
120
- when "Saturday" then go_to_the_park()
121
- when "Wednesday"
122
- if day is bingo_day
123
- go_to_bingo()
124
- else
125
- eat_breakfast()
126
- go_to_work()
127
- eat_dinner()
128
- else go_to_work()
129
-
130
- # Semicolons can optionally be used instead of newlines.
131
- wednesday: -> eat_breakfast(); go_to_work(); eat_dinner()
132
-
133
- # Array slice literals.
134
- zero_to_nine: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
135
- three_to_six: zero_to_nine[3..6]
136
-
137
- # Multiline strings with inner quotes.
138
- story: "Lorem ipsum dolor \"sit\" amet, consectetuer adipiscing elit,
139
- sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna
140
- aliquam erat volutpat. Ut wisi enim ad."
141
-
142
- # Inheritance and calling super.
143
- Animal: ->
144
- Animal::move: (meters) ->
145
- alert(this.name + " moved " + meters + "m.")
146
-
147
- Snake: (name) -> this.name: name
148
- Snake extends Animal
149
- Snake::move: ->
150
- alert('Slithering...')
151
- super(5)
152
-
153
- Horse: (name) -> this.name: name
154
- Horse extends Animal
155
- Horse::move: ->
156
- alert('Galloping...')
157
- super(45)
158
-
159
- sam: new Snake("Sammy the Snake")
160
- tom: new Horse("Tommy the Horse")
161
-
162
- sam.move()
163
- tom.move()
164
-
165
- # Numbers.
166
- a_googol: 1e100
167
- hex: 0xff0000
168
- negative: -1.0
169
- infinity: Infinity
170
- nan: NaN
171
-
172
- # Deleting.
173
- delete secret.identity