jsdm 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/Rakefile +2 -1
  2. data/bin/jsdm +87 -0
  3. data/lib/jsdm.rb +23 -3
  4. data/lib/jsdm/errors.rb +1 -1
  5. metadata +11 -5
data/Rakefile CHANGED
@@ -11,11 +11,12 @@ spec = Gem::Specification.new do |s|
11
11
  s.files = Dir['{lib,doc,bin,ext}/**/*'].delete_if { |f|
12
12
  /\/rdoc(\/|$)/i.match f
13
13
  } + %w(Rakefile README.rdoc)
14
+ s.executables = Dir['bin/*'].map(&File.method(:basename))
14
15
  s.require_path = 'lib'
15
16
  s.has_rdoc = true
16
17
  s.rubyforge_project = 'jsdm'
17
18
  s.homepage = 'http://www.github.com/retiman/jsdm'
18
- s.version = '0.4.2'
19
+ s.version = '0.4.3'
19
20
  s.summary = 'Javascript dependency manager'
20
21
  s.description = <<-EOF
21
22
  Use #require statements to declare dependencies in JavaScript and let JSDM
data/bin/jsdm ADDED
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $: << 'lib'
4
+
5
+ require 'jsdm'
6
+ require 'optparse'
7
+ require 'pp'
8
+
9
+ options = {
10
+ :load_path => ['.']
11
+ }
12
+
13
+ optparse = OptionParser.new do |opts|
14
+ opts.banner = 'Usage: jsdm [options] path1 path2 path3'
15
+
16
+ opts.on(
17
+ '-e',
18
+ '--extension EXTENSION',
19
+ 'Process files ending in .EXTENSION'
20
+ ) do |extension|
21
+ if extension.nil?
22
+ puts opts
23
+ exit
24
+ end
25
+ options[:extension] = extension
26
+ end
27
+
28
+ opts.on(
29
+ '-c',
30
+ '--comment-pattern PATTERN',
31
+ 'Process comments matching regex PATTERN'
32
+ ) do |pattern|
33
+ if pattern.nil?
34
+ puts opts
35
+ exit
36
+ end
37
+ options[:comment_pattern] = Regexp.new(pattern)
38
+ end
39
+
40
+ opts.on(
41
+ '-r',
42
+ '--require-pattern',
43
+ 'Process require directives matching regex PATTERN'
44
+ ) do |pattern|
45
+ if pattern.nil?
46
+ puts opts
47
+ exit
48
+ end
49
+ options[:require_pattern] = Regexp.new(pattern)
50
+ end
51
+
52
+ opts.on(
53
+ '-R',
54
+ '--randomize',
55
+ 'Randomize files beforehand'
56
+ ) do
57
+ options[:randomize] = true
58
+ options[:sort] = false
59
+ end
60
+
61
+ opts.on(
62
+ '-S',
63
+ '--sort',
64
+ 'Sort files beforehand'
65
+ ) do
66
+ options[:randomize] = false
67
+ options[:sort] = true
68
+ end
69
+
70
+ opts.on('-h', '--help', 'Display this screen') do
71
+ puts opts
72
+ exit
73
+ end
74
+ end
75
+
76
+ optparse.parse!
77
+ options[:load_path] = ARGV unless ARGV.empty?
78
+
79
+ begin
80
+ sources = JSDM.new(options).sources
81
+ exit if sources.empty?
82
+ sources.each { |s| puts s }
83
+ rescue JSDM::CircularDependencyError => e
84
+ puts e.message
85
+ rescue JSDM::UnsatisfiableDependencyError => e
86
+ puts e.message
87
+ end
data/lib/jsdm.rb CHANGED
@@ -26,9 +26,28 @@ class JSDM
26
26
  :manager,
27
27
  :resolver
28
28
 
29
+ # Options: randomize sort load_path extension comment_pattern require_pattern
30
+ #
31
+ # Examples:
32
+ #
33
+ # # Looks for both .js and .jsm extensions in the current directory
34
+ # JSDM.new :extension => '{js,jsm}'
35
+ #
36
+ # # Looks for JavaScript files in two different directories
37
+ # JSDM.new :load_path => %w(some/path some/other/path)
38
+ #
39
+ # # Sorts the JavaScript files beforehand; ensures a unique ordering of
40
+ # # dependencies, even if you've made a mistake in specifying the require
41
+ # # statements
42
+ # JSDM.new :sort => true
43
+ #
44
+ # # Randomizes the JavaScript files beforehand; hopefully ensures that you
45
+ # # will get an error from improperly specifying dependencies
46
+ # JSDM.new :randomize => true
29
47
  def initialize(opts = {})
30
48
  defaults = {
31
- :randomize => true,
49
+ :randomize => false,
50
+ :sort => true,
32
51
  :load_path => '.',
33
52
  :extension => 'js',
34
53
  :comment_pattern => Preprocessor.comment_pattern,
@@ -57,8 +76,9 @@ class JSDM
57
76
  self.sources = options[:load_path].map { |path|
58
77
  Dir[File.join(path, '**', "*.#{options[:extension]}")]
59
78
  }.flatten
60
- self.sources = sources.sort { rand } if options[:randomize]
61
- self.preprocessor = Preprocessor.new sources, options
79
+ self.sources = sources.sort if options[:sort]
80
+ self.sources = sources.sort_by { rand } if options[:randomize]
81
+ self.preprocessor = Preprocessor.new sources, options
62
82
  self.manager = DependencyManager.new sources
63
83
  self.resolver = DependencyResolver.new options[:load_path]
64
84
  self.requires = preprocessor.process
data/lib/jsdm/errors.rb CHANGED
@@ -39,7 +39,7 @@ class JSDM
39
39
  private :source=, :dep=
40
40
 
41
41
  def initialize(source, dep)
42
- msg = "File #{source} has unsatisfiable dependency:\n" +
42
+ msg = "File #{source} has one or more unsatisfiable dependencies:\n" +
43
43
  " #{dep}"
44
44
  self.source = source
45
45
  self.dep = dep
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsdm
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 9
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 4
8
- - 2
9
- version: 0.4.2
9
+ - 3
10
+ version: 0.4.3
10
11
  platform: ruby
11
12
  authors:
12
13
  - Min Huang
@@ -20,8 +21,8 @@ dependencies: []
20
21
 
21
22
  description: " Use #require statements to declare dependencies in JavaScript and let JSDM\n resolve the dependencies for you.\n"
22
23
  email: min.huang@alumni.usc.edu
23
- executables: []
24
-
24
+ executables:
25
+ - jsdm
25
26
  extensions: []
26
27
 
27
28
  extra_rdoc_files: []
@@ -37,6 +38,7 @@ files:
37
38
  - lib/jsdm/dependency_resolver.rb
38
39
  - doc/LICENSE
39
40
  - doc/REFERENCES
41
+ - bin/jsdm
40
42
  - Rakefile
41
43
  - README.rdoc
42
44
  has_rdoc: true
@@ -49,23 +51,27 @@ rdoc_options: []
49
51
  require_paths:
50
52
  - lib
51
53
  required_ruby_version: !ruby/object:Gem::Requirement
54
+ none: false
52
55
  requirements:
53
56
  - - ">="
54
57
  - !ruby/object:Gem::Version
58
+ hash: 3
55
59
  segments:
56
60
  - 0
57
61
  version: "0"
58
62
  required_rubygems_version: !ruby/object:Gem::Requirement
63
+ none: false
59
64
  requirements:
60
65
  - - ">="
61
66
  - !ruby/object:Gem::Version
67
+ hash: 3
62
68
  segments:
63
69
  - 0
64
70
  version: "0"
65
71
  requirements: []
66
72
 
67
73
  rubyforge_project: jsdm
68
- rubygems_version: 1.3.6
74
+ rubygems_version: 1.3.7
69
75
  signing_key:
70
76
  specification_version: 3
71
77
  summary: Javascript dependency manager