coyote 0.7.0 → 1.0.0.beta1
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/Manifest +13 -31
- data/README.md +1 -91
- data/Rakefile +8 -4
- data/bin/coyote +9 -32
- data/coyote.gemspec +4 -10
- data/lib/coyote.rb +28 -62
- data/lib/coyote/asset.rb +51 -0
- data/lib/coyote/assets/coffeescript.rb +29 -0
- data/lib/coyote/assets/javascript.rb +4 -0
- data/lib/coyote/bundle.rb +101 -0
- data/lib/coyote/closure_compiler.rb +9 -9
- data/lib/coyote/configuration.rb +23 -77
- data/lib/coyote/notifications.rb +22 -0
- data/test/scripts/input1.js +1 -0
- data/test/scripts/input2.js +1 -0
- data/test/scripts/input3.js +1 -0
- data/test/scripts/input4.js +1 -0
- data/test/scripts/lib/input5.coffee +3 -0
- data/test/scripts/lib/input6.js +1 -0
- data/test/scripts/lib/keystone/input7.js +2 -0
- data/test/scripts/vendor/input8.coffee +1 -0
- metadata +29 -70
- data/config/coyote-icon.png +0 -0
- data/config/coyote-usage.txt +0 -16
- data/config/coyote.yaml +0 -2
- data/lib/coyote/generator.rb +0 -49
- data/lib/coyote/notification.rb +0 -62
- data/lib/coyote/script.rb +0 -124
- data/lib/coyote/scripts/coffeescript.rb +0 -32
- data/lib/coyote/scripts/combine.rb +0 -54
- data/lib/coyote/scripts/javascript.rb +0 -4
- data/test/src/public/assets/javascripts/app/application/interface.coffee +0 -10
- data/test/src/public/assets/javascripts/app/application/main.coffee +0 -14
- data/test/src/public/assets/javascripts/app/application/pages/home.coffee +0 -9
- data/test/src/public/assets/javascripts/app/boot.coffee +0 -1
- data/test/src/public/assets/javascripts/lib/extensions.coffee +0 -8
- data/test/src/public/assets/javascripts/lib/imulus.coffee +0 -7
- data/test/src/public/assets/javascripts/lib/imulus/forms.coffee +0 -46
- data/test/src/public/assets/javascripts/lib/imulus/maps/infowindow.coffee +0 -37
- data/test/src/public/assets/javascripts/lib/imulus/maps/map.coffee +0 -51
- data/test/src/public/assets/javascripts/lib/imulus/maps/marker.coffee +0 -66
- data/test/src/public/assets/javascripts/lib/imulus/maps/point.coffee +0 -5
- data/test/src/public/assets/javascripts/lib/imulus/maps/results.coffee +0 -117
- data/test/src/public/assets/javascripts/lib/imulus/tables.coffee +0 -11
- data/test/src/public/assets/javascripts/lib/imulus/triggers.coffee +0 -26
- data/test/src/public/assets/javascripts/scripts.coffee +0 -14
- data/test/src/public/assets/javascripts/vendor/jquery.js +0 -18
- data/test/src/public/assets/javascripts/vendor/jquery/jquery.cookie.js +0 -89
- data/test/src/public/assets/javascripts/vendor/jquery/jquery.cycle.js +0 -21
- data/test/src/public/assets/javascripts/vendor/jquery/jquery.query.js +0 -224
- data/test/src/public/assets/javascripts/vendor/swfobject.js +0 -4
- data/test/src/public/scripts/scripts.combine +0 -18
- data/test/src/public/scripts/scripts.js +0 -944
data/config/coyote-icon.png
DELETED
Binary file
|
data/config/coyote-usage.txt
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
------------------------------------------
|
2
|
-
Coyote - Command-line Concatenation
|
3
|
-
http://github.com/imulus/coyote
|
4
|
-
------------------------------------------
|
5
|
-
|
6
|
-
Usage : 'coyote Action [Environment] [Options]'
|
7
|
-
|
8
|
-
== Actions
|
9
|
-
build - Execute the compiler
|
10
|
-
watch - Starts the Coyote observe mechanism.
|
11
|
-
new - Create a Coyote configuration in this directory
|
12
|
-
|
13
|
-
== Options
|
14
|
-
-c | --compress - Use Google Closure Compiler
|
15
|
-
-v | --verbose - Verbose CLI logging
|
16
|
-
|
data/config/coyote.yaml
DELETED
data/lib/coyote/generator.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
module Coyote
|
2
|
-
class Generator
|
3
|
-
attr_accessor :files_found
|
4
|
-
|
5
|
-
def initialize
|
6
|
-
@files_found = []
|
7
|
-
end
|
8
|
-
|
9
|
-
def generate
|
10
|
-
if config_exists?
|
11
|
-
Coyote::Notification.new "This directory is already configured for Coyote.\n", "failure"
|
12
|
-
else
|
13
|
-
discover_files
|
14
|
-
copy_config
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def discover_files
|
19
|
-
js_files = File.join("**","*.js")
|
20
|
-
cs_files = File.join("**","*.coffee")
|
21
|
-
Dir.glob(js_files).each do |file|
|
22
|
-
@files_found.push file
|
23
|
-
end
|
24
|
-
Dir.glob(cs_files).each do |file|
|
25
|
-
@files_found.push file
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def config_exists?
|
30
|
-
File.exists?(Coyote::CONFIG_FILENAME)
|
31
|
-
end
|
32
|
-
|
33
|
-
def copy_config
|
34
|
-
Coyote::Notification.new "\nGenerating Coyote\n"
|
35
|
-
Coyote::Notification.new "#{@files_found.length} files discovered\n"
|
36
|
-
|
37
|
-
File.open("#{Coyote::CONFIG_PATH}/#{Coyote::CONFIG_FILENAME}") do |file|
|
38
|
-
output_file = File.open(Coyote::CONFIG_FILENAME, 'w+')
|
39
|
-
generated = file.read
|
40
|
-
@files_found.each do |file|
|
41
|
-
generated += " - #{file}\n"
|
42
|
-
end
|
43
|
-
output_file.write(generated)
|
44
|
-
end
|
45
|
-
|
46
|
-
Coyote::Notification.new "Coyote generated at #{Coyote::CONFIG_FILENAME}\n\n", "success"
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
data/lib/coyote/notification.rb
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
module Coyote
|
2
|
-
class Notification
|
3
|
-
|
4
|
-
attr_accessor :growl, :application, :icon, :default_notifications, :notifications, :type, :message
|
5
|
-
|
6
|
-
def initialize(message, type = "message")
|
7
|
-
@message = message
|
8
|
-
@type = type
|
9
|
-
|
10
|
-
console_notify
|
11
|
-
|
12
|
-
if Config::CONFIG['target_os'] =~ /darwin/i
|
13
|
-
require 'appscript'
|
14
|
-
@growl = Appscript.app("GrowlHelperApp");
|
15
|
-
|
16
|
-
if @growl.is_running?
|
17
|
-
growl_register
|
18
|
-
growl_notify
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
def console_notify
|
25
|
-
case @type
|
26
|
-
when "success"
|
27
|
-
print @message.green
|
28
|
-
when "warning"
|
29
|
-
print @message.yellow
|
30
|
-
when "failure"
|
31
|
-
print @message.red
|
32
|
-
else
|
33
|
-
print @message.white
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
|
38
|
-
# trigger a growl notification
|
39
|
-
def growl_notify
|
40
|
-
options = { :title => @application,
|
41
|
-
:description => @message.gsub(/[\n]+/, ""),
|
42
|
-
:application_name => @application,
|
43
|
-
:image_from_location => @icon,
|
44
|
-
:sticky => false,
|
45
|
-
:priority => 0,
|
46
|
-
:with_name => notifications.first }
|
47
|
-
@growl.notify options
|
48
|
-
end
|
49
|
-
|
50
|
-
|
51
|
-
# register Coyote as an application with Growl
|
52
|
-
def growl_register
|
53
|
-
@application = Coyote::APP_NAME
|
54
|
-
@icon = "#{Coyote::CONFIG_PATH}/#{Coyote::CONFIG_ICON}"
|
55
|
-
@default_notifications = ["Coyote Success"]
|
56
|
-
@notifications = ["Coyote Success", "Coyote Failure"]
|
57
|
-
@growl.register(:as_application => @application, :all_notifications => @notifications, :default_notifications => @default_notifications)
|
58
|
-
end
|
59
|
-
|
60
|
-
|
61
|
-
end
|
62
|
-
end
|
data/lib/coyote/script.rb
DELETED
@@ -1,124 +0,0 @@
|
|
1
|
-
module Coyote
|
2
|
-
autoload :JavaScript, 'coyote/scripts/javascript'
|
3
|
-
autoload :CoffeeScript, 'coyote/scripts/coffeescript'
|
4
|
-
autoload :Combine, 'coyote/scripts/combine'
|
5
|
-
|
6
|
-
class Script
|
7
|
-
attr_reader :filename, :relative_path
|
8
|
-
attr_accessor :contents
|
9
|
-
|
10
|
-
# Class method
|
11
|
-
# Determine the type of file base on the file extension
|
12
|
-
# and return an instance of the proper extended script class
|
13
|
-
def self.select_and_init(filename)
|
14
|
-
case File.extname(filename)
|
15
|
-
when /\.js/i ; JavaScript.new(filename)
|
16
|
-
when /\.coffee/i ; CoffeeScript.new(filename)
|
17
|
-
when /\.combine/i ; Combine.new(filename)
|
18
|
-
else ; self.new(filename)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
|
23
|
-
def initialize(filename, contents = "")
|
24
|
-
@filename = filename
|
25
|
-
@relative_path = @filename.gsub("#{Dir.pwd}/", '')
|
26
|
-
@directory = File.dirname(@filename)
|
27
|
-
|
28
|
-
if contents.empty? and File.exists? @filename
|
29
|
-
@contents = File.open(@filename, 'r').read
|
30
|
-
else
|
31
|
-
@contents = contents
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
|
-
# Append a string of additional content
|
37
|
-
# to the end of the current script contents
|
38
|
-
def append(string)
|
39
|
-
@contents += "#{string}\n\n"
|
40
|
-
end
|
41
|
-
|
42
|
-
|
43
|
-
# Prepend a string of additional content
|
44
|
-
# to the beginning of the current script contents
|
45
|
-
def prepend(string)
|
46
|
-
@contents = "#{string}\n\n" + @contents
|
47
|
-
end
|
48
|
-
|
49
|
-
|
50
|
-
# Defines the regex pattern for scanning the contents of the
|
51
|
-
# file to look for require directives
|
52
|
-
def require_pattern
|
53
|
-
Regexp.new(/\/\/=\s*require\s*(.*)$/i) # '//= require a/b/c.js' => 'a/b/c.js'
|
54
|
-
end
|
55
|
-
|
56
|
-
|
57
|
-
# Scan the contents of the file for require directives
|
58
|
-
# By default, it looks for a directive of '//= require a/b/c.js'
|
59
|
-
# It determines the full filepath of the required file,
|
60
|
-
# relative to the current file being read in
|
61
|
-
def requires(pattern = require_pattern)
|
62
|
-
matches = @contents.scan(pattern)
|
63
|
-
matches.collect do |match|
|
64
|
-
File.expand_path(match.last.strip, @directory)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
|
69
|
-
# Clear out the contents of the script, in-place
|
70
|
-
def empty!
|
71
|
-
@contents = ""
|
72
|
-
end
|
73
|
-
|
74
|
-
|
75
|
-
# Run the contents of the script through the Google Closure compile
|
76
|
-
# It compresses the contents of the script in-place
|
77
|
-
def compress!
|
78
|
-
Coyote::Notification.new "Compiling #{@filename}...\n", "warning"
|
79
|
-
compiler = ClosureCompiler.new.compile(@contents)
|
80
|
-
if compiler.success?
|
81
|
-
@contents = compiler.compiled_code
|
82
|
-
elsif compiler.file_too_big?
|
83
|
-
Coyote::Notification.new "Input code too big for API, creating uncompiled file\n", "failure"
|
84
|
-
elsif compiler.errors
|
85
|
-
Coyote::Notification.new "Google closure API failed to compile, creating uncompiled file\n", "failure"
|
86
|
-
Coyote::Notification.new "Errors: \n", "failure"
|
87
|
-
Coyote::Notification.new "#{compiler.errors.to_s}\n\n", "failure"
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
|
92
|
-
# Save the contents of the script to disk
|
93
|
-
def save
|
94
|
-
output = File.open @filename, 'w+'
|
95
|
-
output.write @contents
|
96
|
-
output.close
|
97
|
-
end
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
protected
|
102
|
-
|
103
|
-
# This method converts a JavaScript filepath to a CoffeeScript filepath in the same directory
|
104
|
-
# Given the path /a/b/c.js it will return /a/b/c.coffee
|
105
|
-
def convert_js_path_to_coffee(path)
|
106
|
-
directory, basename = File.split(path)
|
107
|
-
basename = File.basename(basename, '.js')
|
108
|
-
"#{directory}/#{basename}.coffee"
|
109
|
-
end
|
110
|
-
|
111
|
-
# This method converts a CoffeeScript filepath to a JavaScript filepath in the same directory
|
112
|
-
# Given the path /a/b/c.coffee it will return /a/b/c.js
|
113
|
-
def convert_coffee_path_to_js(path)
|
114
|
-
directory, basename = File.split(path)
|
115
|
-
basename = File.basename(basename, '.coffee')
|
116
|
-
"#{directory}/#{basename}.js"
|
117
|
-
end
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module Coyote
|
2
|
-
class CoffeeScript < Script
|
3
|
-
|
4
|
-
# Defines the regex pattern for scanning the contents of the
|
5
|
-
# file to look for require directives
|
6
|
-
def require_pattern
|
7
|
-
Regexp.new(/#=\s*require\s(.*)$/i) # '#= require a/b/c.coffee' => 'a/b/c.coffee'
|
8
|
-
end
|
9
|
-
|
10
|
-
|
11
|
-
# We're defining setters and getters here
|
12
|
-
# for the contents of the script file
|
13
|
-
# because we need to compile the CoffeeScript to JavaScript
|
14
|
-
# on the way out
|
15
|
-
def contents=(string)
|
16
|
-
@contents = string
|
17
|
-
end
|
18
|
-
|
19
|
-
def contents
|
20
|
-
compile!
|
21
|
-
@contents
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
# Run the contents of the script through the CoffeeScript compile
|
26
|
-
# Changes the content of the script in-place
|
27
|
-
def compile!
|
28
|
-
@contents = `cat #{@filename} | coffee -sc`
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
module Coyote
|
2
|
-
|
3
|
-
# This class adds support for .combine files, following the style
|
4
|
-
# of SassAndCoffee for .NET (https://github.com/xpaulbettsx/SassAndCoffee)
|
5
|
-
|
6
|
-
class Combine < Script
|
7
|
-
|
8
|
-
# .combine files serve primarily as a manifest listing files to pull in and combine
|
9
|
-
# In turn, each line of a .combine file is a require directive, so what we do here
|
10
|
-
# to detemine requires is read in each line of the file, do a bit of cleanup,
|
11
|
-
# and return an array of full filepaths of the required files
|
12
|
-
def requires
|
13
|
-
requires = []
|
14
|
-
|
15
|
-
File.open(@filename).readlines.each do |line|
|
16
|
-
# Because the directives in the .combine file are not comments,
|
17
|
-
# we have to strip out the directives from the file's contents
|
18
|
-
@contents.gsub!(/#{line}/, '')
|
19
|
-
|
20
|
-
# Clean up whitespace on the directive, and make sure it's not a blank line
|
21
|
-
if line.strip! != ''
|
22
|
-
|
23
|
-
# The .NET .combine engine automatically detects .js files as their .coffee counterparts
|
24
|
-
# so we need to replicate that functionality and also look for .coffee files with the same filename
|
25
|
-
file = check_for_alternate_filetype(File.expand_path(line, @directory))
|
26
|
-
if file
|
27
|
-
requires << file
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
return requires
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
|
-
# This method with look for an alternate filetype for a given filepath
|
37
|
-
# If it is given a path of /a/b/c.js it will look for /a/b/c.coffee
|
38
|
-
# and return whichever filetype it finds first
|
39
|
-
# It looks for JavaScript first and then CoffeeScript, returning nil if it doesn't find anything
|
40
|
-
def check_for_alternate_filetype(path)
|
41
|
-
javascript = path
|
42
|
-
coffeescript = convert_js_path_to_coffee(javascript)
|
43
|
-
|
44
|
-
if File.file?(javascript)
|
45
|
-
javascript
|
46
|
-
elsif File.file?(coffeescript)
|
47
|
-
coffeescript
|
48
|
-
else
|
49
|
-
nil
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
@module "Application", ->
|
2
|
-
|
3
|
-
@main = ->
|
4
|
-
new Application.Interface
|
5
|
-
|
6
|
-
initializers = $('body').attr('data-js-init')
|
7
|
-
|
8
|
-
Application.initializers = if initializers? then initializers.replace(" ","").split(",") else []
|
9
|
-
|
10
|
-
for initializer in Application.initializers
|
11
|
-
segments = initializer.split(".")
|
12
|
-
method = window
|
13
|
-
method = method[segment] for segment in segments
|
14
|
-
do method if method?
|
@@ -1 +0,0 @@
|
|
1
|
-
$ -> Application.main()
|
@@ -1,46 +0,0 @@
|
|
1
|
-
@module "Imulus", ->
|
2
|
-
class @Forms
|
3
|
-
constructor: ($form)->
|
4
|
-
do @build
|
5
|
-
|
6
|
-
build: ->
|
7
|
-
if not Imulus.elementSupportsAttribute 'input', 'placeholder'
|
8
|
-
$('input[placeholder]').each ->
|
9
|
-
$input = $(this)
|
10
|
-
placeholder = $input.attr 'placeholder'
|
11
|
-
$input.val(placeholder).addClass 'inactive'
|
12
|
-
$input.bind
|
13
|
-
focus : ->
|
14
|
-
if $input.val() is placeholder
|
15
|
-
$input.val('').removeClass 'inactive'
|
16
|
-
blur : ->
|
17
|
-
if $input.val() is ''
|
18
|
-
$input.val(placeholder).addClass 'inactive'
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
$('fieldset.overlay .row').each ->
|
23
|
-
|
24
|
-
$label = $(this).find 'label'
|
25
|
-
$input = $(this).find 'input'
|
26
|
-
|
27
|
-
if $input.val() isnt ""
|
28
|
-
$label.hide()
|
29
|
-
|
30
|
-
$label.click -> $input.focus()
|
31
|
-
|
32
|
-
$input.bind
|
33
|
-
focus: ->
|
34
|
-
if $input.val() is ""
|
35
|
-
$label.addClass 'faded'
|
36
|
-
|
37
|
-
blur: ->
|
38
|
-
if $input.val() is ""
|
39
|
-
$label.fadeIn().removeClass 'faded'
|
40
|
-
|
41
|
-
change: ->
|
42
|
-
if $input.val() isnt ""
|
43
|
-
$label.fadeOut().removeClass 'faded'
|
44
|
-
|
45
|
-
keypress: ->
|
46
|
-
$label.hide().removeClass 'faded'
|