juscr 0.10.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/LICENSE.markdown +29 -0
- data/bin/juscr +83 -0
- data/lib/juscrcompiler.rb +75 -0
- data/lib/juscrconfigparser.rb +25 -0
- data/tests/extensions.rb +19 -0
- data/tests/fixtures/files/file1.js +1 -0
- data/tests/fixtures/files/file2.js +2 -0
- data/tests/fixtures/files/file3.js +3 -0
- data/tests/fixtures/files/file4.js +4 -0
- data/tests/fixtures/files/file5.js +5 -0
- data/tests/test_juscr_command_line.rb +0 -0
- data/tests/test_juscrcompiler.rb +27 -0
- metadata +78 -0
data/LICENSE.markdown
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
Copyright (c) 2010 Dayton D. Nolan
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
No attribution is required by products that make use of this software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
|
23
|
+
Except as contained in this notice, the name(s) of the above copyright
|
24
|
+
holders shall not be used in advertising or otherwise to promote the sale,
|
25
|
+
use or other dealings in this Software without prior written authorization.
|
26
|
+
|
27
|
+
Contributors to this project agree to grant all rights to the copyright
|
28
|
+
holder of the primary product. Attribution is maintained in the source
|
29
|
+
control history of the product.
|
data/bin/juscr
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
|
3
|
+
$LOAD_PATH << '../lib'
|
4
|
+
require "rubygems"
|
5
|
+
require "simpleconsole"
|
6
|
+
require "juscrcompiler.rb"
|
7
|
+
require 'juscrconfigparser.rb'
|
8
|
+
|
9
|
+
class Controller < SimpleConsole::Controller
|
10
|
+
params :bool => {:c => :compress,
|
11
|
+
:h => :help},
|
12
|
+
:string => {:f => :files,
|
13
|
+
:d => :directory,
|
14
|
+
:n => :name}
|
15
|
+
def default
|
16
|
+
puts <<DOC
|
17
|
+
Usage: juscr [action] [options]
|
18
|
+
|
19
|
+
Description:
|
20
|
+
The juscr command line tool will compile and compress your javascript application into modules.
|
21
|
+
|
22
|
+
To compile and compress your javascript application into module files:
|
23
|
+
|
24
|
+
juscr compile -c
|
25
|
+
|
26
|
+
DOC
|
27
|
+
end
|
28
|
+
|
29
|
+
def compile
|
30
|
+
begin
|
31
|
+
raise ArgumentError, "You must specify an output filename: -n 'compressed.js" if params[:name].nil?
|
32
|
+
|
33
|
+
@root = Dir.getwd + '/'
|
34
|
+
@filename = params[:name]
|
35
|
+
@compress = params[:compress] ? params[:compress] : false
|
36
|
+
|
37
|
+
files_string = params[:files] ? params[:files] : false
|
38
|
+
directory = params[:directory] ? params[:directory] : false
|
39
|
+
|
40
|
+
if File.exists? @root + 'juscr_config.rb'
|
41
|
+
config = JuscrConfigParser.new @root + 'juscr_config.rb'
|
42
|
+
@compress = config.compress
|
43
|
+
@files = config.files
|
44
|
+
end
|
45
|
+
|
46
|
+
if directory
|
47
|
+
dir_without_prefix = directory.gsub(/^(\.+|\/)\/?/, '')
|
48
|
+
dir_without_suffix = dir_without_prefix.gsub(/\/$/, '')
|
49
|
+
directory = dir_without_suffix
|
50
|
+
@files = get_directory_contents directory
|
51
|
+
puts @files
|
52
|
+
end
|
53
|
+
|
54
|
+
if files_string
|
55
|
+
raise ArgumentError, "files must be a comma dilineated string of filenames: juscr compile -f 'fileone.js, filetwo.js'" if files_string =~ /(\[|\]|\'|\{|\}|\=|\>)/
|
56
|
+
@files = files_string.split(/\,\s*/)
|
57
|
+
end
|
58
|
+
|
59
|
+
@compiler = JuscrCompiler.new(@compress)
|
60
|
+
@compiler.compile(@files, @filename)
|
61
|
+
rescue RuntimeError => e
|
62
|
+
puts e.message
|
63
|
+
puts e.backtrace.inspect
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def get_directory_contents(directory)
|
68
|
+
files = Array.new
|
69
|
+
begin
|
70
|
+
puts directory
|
71
|
+
Dir.entries("#{@root}#{directory}/").each do |file|
|
72
|
+
files.push directory + '/' + file if not file =~ /^\./
|
73
|
+
end
|
74
|
+
files
|
75
|
+
rescue Exception => e
|
76
|
+
puts e.message
|
77
|
+
puts e.backtrace.inspect
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
SimpleConsole::Application.run(ARGV, Controller)
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'jsmin'
|
3
|
+
|
4
|
+
class JuscrCompiler
|
5
|
+
|
6
|
+
attr_accessor :directory
|
7
|
+
|
8
|
+
def compress?
|
9
|
+
@compress
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(compress = true)
|
13
|
+
begin
|
14
|
+
compress = compress.nil? ? false : true;
|
15
|
+
@compress = compress
|
16
|
+
@root = Dir.getwd + '/'
|
17
|
+
rescue RuntimeError => e
|
18
|
+
puts e.message
|
19
|
+
puts e.backtrace.inspect
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def compile(files, filename, message = "// File generated #{Time.now.to_s} by juscr")
|
24
|
+
@files = (files.is_a? String) ? [files] : files
|
25
|
+
@filename = filename
|
26
|
+
@message = message + "\n"
|
27
|
+
|
28
|
+
merge
|
29
|
+
compress if @compress
|
30
|
+
|
31
|
+
@compiled_content = @merged.join("\n")
|
32
|
+
|
33
|
+
create_file
|
34
|
+
end
|
35
|
+
|
36
|
+
def merge
|
37
|
+
@merged = Array.new
|
38
|
+
@files.each do |file|
|
39
|
+
begin
|
40
|
+
raise IOError, "#{file} does not exist", caller unless File.exists? "#{@root}#{file}"
|
41
|
+
File.open("#{@root}#{file}", "r") do |the_file|
|
42
|
+
@merged.push read_file the_file unless the_file.nil?
|
43
|
+
end
|
44
|
+
rescue RuntimeError => e
|
45
|
+
puts e.message
|
46
|
+
puts e.backtrace.inspect
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def compress
|
52
|
+
@merged.each_index do |i|
|
53
|
+
@merged[i] = JSMin.minify(@merged[i])
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def read_file(file)
|
58
|
+
n = File.size?(file)
|
59
|
+
file.sysread(n)
|
60
|
+
end
|
61
|
+
|
62
|
+
def create_file
|
63
|
+
begin
|
64
|
+
is_new_file = (File.exists? "#{@root}#{@filename}") ? false : true
|
65
|
+
File.open("#{@root}#{@filename}", "w+") do |the_file|
|
66
|
+
the_file.syswrite @message + @compiled_content
|
67
|
+
puts is_new_file ? "created #{@root}#{@filename}" : "updated #{@root}#{@filename}"
|
68
|
+
end
|
69
|
+
rescue IOError => e
|
70
|
+
puts "#{e.class} #{e.message} #{e.backtrace.join($/)}"
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class JuscrConfigParser
|
2
|
+
|
3
|
+
attr_reader :compress, :files
|
4
|
+
|
5
|
+
def initialize(config_file)
|
6
|
+
begin
|
7
|
+
raise IOError, "#{config_file} does not exist", caller unless File.exists? config_file
|
8
|
+
@compress = false
|
9
|
+
@files = Array.new
|
10
|
+
lines = IO.readlines config_file
|
11
|
+
lines.each do |line|
|
12
|
+
if line =~ /compress\:\s*/
|
13
|
+
compress_value = line.gsub(/compress\:\s*/, '').strip
|
14
|
+
@compress = compress_value == 'true' ? true : false
|
15
|
+
else
|
16
|
+
line.gsub!(/\s*/, '')
|
17
|
+
@files.push line unless line.length < 1
|
18
|
+
end
|
19
|
+
end
|
20
|
+
rescue IOError => e
|
21
|
+
puts e.message
|
22
|
+
puts e.backtrace.inspect
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/tests/extensions.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
module Test::Unit
|
2
|
+
|
3
|
+
class TestCase
|
4
|
+
|
5
|
+
def self.must(name, &block)
|
6
|
+
test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
|
7
|
+
defined = instance_method(test_name) rescue false
|
8
|
+
raise "#{test_name} is already defined in #{self}" if defined
|
9
|
+
if block_given?
|
10
|
+
define_method(test_name, &block)
|
11
|
+
else
|
12
|
+
define_method(test_name) do
|
13
|
+
flunk "No implementation provided for #{name}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
var one = "this is file one"
|
File without changes
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
require 'test/unit'
|
3
|
+
require 'extensions.rb'
|
4
|
+
require '../lib/juscrcompiler.rb'
|
5
|
+
|
6
|
+
class JuscrcompilerTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
end
|
12
|
+
|
13
|
+
must "contain defaults when initialized with no options" do
|
14
|
+
compiler = JuscrCompiler.new
|
15
|
+
assert_equal true, compiler.compress?
|
16
|
+
end
|
17
|
+
|
18
|
+
must "raise error when initialized with bad second param" do
|
19
|
+
assert_raises(ArgumentError) do
|
20
|
+
compiler = JuscrCompiler.new(true, Array.new)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
require 'test/unit/ui/console/testrunner'
|
27
|
+
Test::Unit::UI::Console::TestRunner.run(JuscrcompilerTest)
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: juscr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 55
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 10
|
9
|
+
- 0
|
10
|
+
version: 0.10.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Dayton Nolan
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-06-25 00:00:00 -05:00
|
19
|
+
default_executable: bin/juscr
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description: Juscr is a javascript compiler that helps you create javascript applications that are easier to write, manage and deploy.
|
23
|
+
email: daytonn@gmail.com
|
24
|
+
executables:
|
25
|
+
- juscr
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- LICENSE.markdown
|
32
|
+
- bin/juscr
|
33
|
+
- lib/juscrcompiler.rb
|
34
|
+
- lib/juscrconfigparser.rb
|
35
|
+
- tests/extensions.rb
|
36
|
+
- tests/test_juscr_command_line.rb
|
37
|
+
- tests/test_juscrcompiler.rb
|
38
|
+
- tests/fixtures/files/file1.js
|
39
|
+
- tests/fixtures/files/file2.js
|
40
|
+
- tests/fixtures/files/file3.js
|
41
|
+
- tests/fixtures/files/file4.js
|
42
|
+
- tests/fixtures/files/file5.js
|
43
|
+
has_rdoc: true
|
44
|
+
homepage: http://daytonnolan.com/jucr
|
45
|
+
licenses: []
|
46
|
+
|
47
|
+
post_install_message:
|
48
|
+
rdoc_options: []
|
49
|
+
|
50
|
+
require_paths:
|
51
|
+
- lib
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
hash: 3
|
67
|
+
segments:
|
68
|
+
- 0
|
69
|
+
version: "0"
|
70
|
+
requirements: []
|
71
|
+
|
72
|
+
rubyforge_project: juscr
|
73
|
+
rubygems_version: 1.3.7
|
74
|
+
signing_key:
|
75
|
+
specification_version: 3
|
76
|
+
summary: A Javascript compiler
|
77
|
+
test_files: []
|
78
|
+
|