autoexec_bat 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f60fe570778c137a5bb9113e01a021045bb2030
4
- data.tar.gz: 524273306bf383b9852747df6be337ea41138aa2
3
+ metadata.gz: 9456ddb6200e4852332f22cdfce6ff20b3667d54
4
+ data.tar.gz: f73ece4e3f1f78534570edd25a25943adfa26d81
5
5
  SHA512:
6
- metadata.gz: 9dc3b94bd0b4f83be51aa53d2447f59225aa229d721b2d68f72a2068e74a3851b64ed14b5bd76614b4375e4c911d5381bbdaff79081a38c722171a5c607eeebc
7
- data.tar.gz: 670464648abc419179aa3854cd98fd1f9843e15066beee0fcc44536649c98c5207ae7780b8d8422c2cb4d88e42975af1e739a66763a2dc8415db60840c6d1b32
6
+ metadata.gz: 1a5cdeac97d98aa2a3cf346723de284587e1bb736849eadd3279076880de7dfdc4e8e42a1ea2e0162491a32a418fff336f41847ecb780be016e01043541cd224
7
+ data.tar.gz: 1a4c3da6dc24b9126a47b318f22cf325df87617a4a71220d13cb35f131ef572ca137f80644205f80c1f56880c026e7d655aa6649fdf13f9e261501d842e10516
data/.gitignore CHANGED
@@ -15,3 +15,5 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ /bin/
19
+ /node_modules/
data/README.md CHANGED
@@ -105,6 +105,18 @@ For Rails 3:
105
105
  jQuery ->
106
106
  $('[data-autoexec]').autoexec()
107
107
 
108
+ ## Testing
109
+
110
+ Install mocha and chai:
111
+
112
+ # npm install -g mocha coffee-script
113
+ # npm install chai jack
114
+
115
+ And run the test suite:
116
+
117
+ # mocha -R spec --watch (or)
118
+ # rake test
119
+
108
120
  ## Contributing
109
121
 
110
122
  1. Fork it
data/Rakefile CHANGED
@@ -5,3 +5,8 @@ desc 'Compile coffee source to JavaScript (requires coffee binary)'
5
5
  task :compile do
6
6
  `coffee -o . lib/assets/javascripts/autoexec_bat.coffee`
7
7
  end
8
+
9
+ desc 'Test'
10
+ task :test do
11
+ system "mocha -R spec"
12
+ end
@@ -14,4 +14,6 @@ Gem::Specification.new do |gem|
14
14
  gem.name = "autoexec_bat"
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = AutoexecBat::VERSION
17
+
18
+ gem.add_development_dependency "rake"
17
19
  end
@@ -1,21 +1,32 @@
1
- // Generated by CoffeeScript 1.3.1
1
+ // Generated by CoffeeScript 1.6.2
2
2
  (function() {
3
- // Generated by CoffeeScript 1.3.3
4
3
  var $, AutoexecBat, root,
5
4
  __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
6
5
 
7
- root = typeof exports !== "undefined" && exports !== null ? exports : window;
8
-
9
6
  AutoexecBat = {
10
7
  topLevel: "App",
11
- debug: true,
8
+ debug: false,
9
+ autoRequire: false,
12
10
  log: function(msg) {
13
11
  if (AutoexecBat.debug) {
14
12
  return typeof console !== "undefined" && console !== null ? console.log(msg) : void 0;
15
13
  }
16
14
  },
15
+ require: function(dependencies) {
16
+ var lib, _i, _len, _results;
17
+
18
+ if (dependencies) {
19
+ _results = [];
20
+ for (_i = 0, _len = dependencies.length; _i < _len; _i++) {
21
+ lib = dependencies[_i];
22
+ _results.push(AutoexecBat.initializeModule(lib));
23
+ }
24
+ return _results;
25
+ }
26
+ },
17
27
  define: function(name) {
18
28
  var arg, block, dependencies, module, target, top, _i, _j, _len, _len1;
29
+
19
30
  dependencies = [];
20
31
  if (AutoexecBat.autoRequire && name !== AutoexecBat.autoRequire) {
21
32
  dependencies.push(AutoexecBat.autoRequire);
@@ -43,8 +54,12 @@
43
54
  target.autoexec = function() {};
44
55
  target.dependencies = dependencies;
45
56
  target.init = function(options) {
57
+ options || (options = {
58
+ idempotent: false,
59
+ callee: null
60
+ });
46
61
  if (!(options.idempotent && this.loaded)) {
47
- require(dependencies);
62
+ AutoexecBat.require(dependencies);
48
63
  if (typeof this.autoexec === 'function') {
49
64
  this.autoexec(options.callee);
50
65
  }
@@ -58,19 +73,9 @@
58
73
  };
59
74
  return block(target, top);
60
75
  },
61
- require: function(dependencies) {
62
- var lib, _i, _len, _results;
63
- if (dependencies) {
64
- _results = [];
65
- for (_i = 0, _len = dependencies.length; _i < _len; _i++) {
66
- lib = dependencies[_i];
67
- _results.push(AutoexecBat.initializeModule(lib));
68
- }
69
- return _results;
70
- }
71
- },
72
76
  namespace: function(name) {
73
77
  var item, target, _i, _len, _ref;
78
+
74
79
  target = root;
75
80
  _ref = name.split('.');
76
81
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
@@ -81,6 +86,7 @@
81
86
  },
82
87
  findModule: function(ns) {
83
88
  var item, module, _i, _len;
89
+
84
90
  if (!ns) {
85
91
  return;
86
92
  }
@@ -101,6 +107,7 @@
101
107
  },
102
108
  initializeModule: function(nameOrModule, options) {
103
109
  var module;
110
+
104
111
  module = typeof nameOrModule === "string" ? AutoexecBat.findModule(nameOrModule) : nameOrModule;
105
112
  if (typeof module !== 'undefined' && typeof module.init !== 'undefined') {
106
113
  return module.init(options);
@@ -108,11 +115,14 @@
108
115
  },
109
116
  run: function(name, options) {
110
117
  var module;
118
+
111
119
  module = AutoexecBat.findModule(name);
112
120
  return AutoexecBat.initializeModule(module, options);
113
121
  }
114
122
  };
115
123
 
124
+ root = typeof exports !== "undefined" && exports !== null ? exports : window;
125
+
116
126
  root.AutoexecBat = AutoexecBat;
117
127
 
118
128
  root.define = AutoexecBat.define;
@@ -1,27 +1,28 @@
1
- root = exports ? window
2
-
3
1
  AutoexecBat =
4
2
  topLevel: "App"
5
- debug: true
6
- # autoRequire: null
7
-
3
+ debug: false
4
+ autoRequire: false
5
+
8
6
  log: (msg) ->
9
7
  console?.log msg if AutoexecBat.debug
10
8
 
9
+ require: (dependencies) ->
10
+ (AutoexecBat.initializeModule(lib) for lib in dependencies) if dependencies
11
+
11
12
  define: (name) ->
12
13
  dependencies = []
13
14
  dependencies.push AutoexecBat.autoRequire if AutoexecBat.autoRequire && name != AutoexecBat.autoRequire
14
15
 
15
16
  for arg in arguments
16
- if typeof arg is "object"
17
+ if typeof arg is "object"
17
18
  for module in arg
18
19
  dependencies.push module unless module in dependencies && module != name
19
20
 
20
- else if typeof arg is "function"
21
+ else if typeof arg is "function"
21
22
  block = arg
22
23
 
23
24
  block ?= -> # empty function
24
- top = AutoexecBat.topLevel
25
+ top = AutoexecBat.topLevel
25
26
  target = AutoexecBat.namespace name
26
27
 
27
28
  target.name = name
@@ -29,17 +30,18 @@ AutoexecBat =
29
30
  target.autoexec = -> # make sure the autoexec function exists
30
31
  target.dependencies = dependencies
31
32
  target.init = (options) ->
33
+ options or=
34
+ idempotent: false
35
+ callee: null
36
+
32
37
  unless options.idempotent and @loaded
33
- require dependencies
38
+ AutoexecBat.require dependencies
34
39
  @autoexec(options.callee) if typeof @autoexec is 'function'
35
40
  if options.idempotent
36
41
  @autoexec = -> AutoexecBat.log "Module already initialized"
37
42
  @loaded = true
38
43
 
39
- block target, top
40
-
41
- require: (dependencies) ->
42
- (AutoexecBat.initializeModule(lib) for lib in dependencies) if dependencies
44
+ block target, top
43
45
 
44
46
  namespace: (name) ->
45
47
  target = root
@@ -66,6 +68,7 @@ AutoexecBat =
66
68
 
67
69
 
68
70
  # Globals
71
+ root = exports ? window
69
72
  root.AutoexecBat = AutoexecBat
70
73
  root.define = AutoexecBat.define
71
74
  root.require = AutoexecBat.require
@@ -1,3 +1,3 @@
1
1
  module AutoexecBat
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -0,0 +1,84 @@
1
+ chai = require 'chai'
2
+ jack = require 'jack'
3
+
4
+ chai.use jack.chai
5
+ should = chai.should()
6
+ expect = chai.expect
7
+
8
+ autoexec = require '../lib/assets/javascripts/autoexec_bat'
9
+
10
+ describe 'AutoexecBat', ->
11
+
12
+ describe "global variables", ->
13
+ it "should define AutoexecBat", -> autoexec.AutoexecBat.should.be.a 'object'
14
+ it "should have a define function", -> autoexec.define.should.be.a 'function'
15
+ it "should have a require function", -> autoexec.require.should.be.a 'function'
16
+ it "should have a namespace function", -> autoexec.namespace.should.be.a 'function'
17
+
18
+ describe "namespace", ->
19
+
20
+ it "declares function namespaces", ->
21
+ autoexec.namespace('App.Foo.Bar').should.equal autoexec.App.Foo.Bar
22
+ autoexec.namespace('App.Foo').should.equal autoexec.App.Foo
23
+ autoexec.namespace('App.Foo').should.be.a 'object'
24
+
25
+ describe "define", ->
26
+ beforeEach ->
27
+ autoexec.define 'App.Foo', (exports) ->
28
+ exports.autoexec = ->
29
+ "do something"
30
+
31
+ privateMethod = ->
32
+ 'I am hidden'
33
+
34
+ it "defines a function that can be called", ->
35
+ autoexec.App.Foo.autoexec().should.equal "do something"
36
+
37
+ it "can be executed", ->
38
+ autoexec.AutoexecBat.run('App.Foo').should.equal true
39
+
40
+ it "private methods are unavailable", ->
41
+ expect(autoexec.App.Foo.privateMethod).to.not.be.ok
42
+
43
+ it "should not be loaded", ->
44
+ autoexec.App.Foo.loaded.should.equal false
45
+
46
+ describe "dependencies", ->
47
+ it "should be empty when not defined", ->
48
+ autoexec.App.Foo.dependencies.should.be.empty
49
+
50
+ it "can be specified", ->
51
+ autoexec.define 'App.Bar', ["App.Foo"], (exports) ->
52
+ autoexec.App.Bar.dependencies.should.deep.equal(["App.Foo"])
53
+
54
+ it "ignores non-existing dependencies", ->
55
+ autoexec.define 'App.Bar', ["App.Bullshit"], (exports) ->
56
+ autoexec.App.Bar.dependencies.should =~ ['App.Bullshit']
57
+
58
+ describe "autoRequire", ->
59
+
60
+ it "should be disabled by default", ->
61
+ autoexec.AutoexecBat.autoRequire.should.not.be.ok
62
+ autoexec.App.Foo.dependencies.should.be.empty
63
+
64
+ it "autoRequired modules are automatically added to the dependency list", ->
65
+ autoexec.AutoexecBat.autoRequire = "App.Always"
66
+ autoexec.define "App.Bar", -> exports.autoexec = -> 'something here'
67
+ autoexec.App.Bar.dependencies.should.include "App.Always"
68
+
69
+ it "has support for idempotency"
70
+
71
+ it "knows the callee"
72
+
73
+ describe "require", ->
74
+ beforeEach ->
75
+ autoexec.define 'App.Foo', (exports) ->
76
+ exports.autoexec = -> "do something"
77
+
78
+ it "loads the modules"
79
+
80
+ it "ignores undefined modules", ->
81
+ autoexec.require(["App.BareFoot"])
82
+
83
+ it "ignores empty argument", ->
84
+ autoexec.require()
@@ -0,0 +1,2 @@
1
+ --compilers coffee:coffee-script
2
+
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: autoexec_bat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gudleik Rasch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-07 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2013-05-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  description: Autoexecution of javascript based on data attribute
14
28
  email:
15
29
  - gudleik@gmail.com
@@ -28,6 +42,8 @@ files:
28
42
  - lib/autoexec_bat.rb
29
43
  - lib/autoexec_bat/helper.rb
30
44
  - lib/autoexec_bat/version.rb
45
+ - test/autoexecBatTest.coffee
46
+ - test/mocha.opts
31
47
  homepage: https://github.com/Skalar/autoexec_bat
32
48
  licenses: []
33
49
  metadata: {}
@@ -47,9 +63,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
47
63
  version: '0'
48
64
  requirements: []
49
65
  rubyforge_project:
50
- rubygems_version: 2.0.0
66
+ rubygems_version: 2.0.2
51
67
  signing_key:
52
68
  specification_version: 4
53
69
  summary: Autoexecution of javascript based on data attribute
54
- test_files: []
55
- has_rdoc:
70
+ test_files:
71
+ - test/autoexecBatTest.coffee
72
+ - test/mocha.opts