Skip to content

Commit 69b418d

Browse files
committed
Initial version.
0 parents  commit 69b418d

File tree

5 files changed

+113
-0
lines changed

5 files changed

+113
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.build*
2+
.idea

.travis.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
language: node_js
2+
node_js:
3+
- "0.10"
4+
sudo: required
5+
before_install:
6+
- "curl -L http://git.io/ejPSng | /bin/sh"

lib.coffee

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class ReactiveField
2+
constructor: (initialValue, equalsFunc) ->
3+
value = new ReactiveVar initialValue, equalsFunc
4+
getterSetter = (newValue) ->
5+
if arguments.length > 0
6+
value.set newValue
7+
# We return the value as well, but we do not want to register a dependency.
8+
return Tracker.nonreactive =>
9+
value.get()
10+
11+
value.get()
12+
13+
getterSetter.__proto__ = @constructor::
14+
15+
getterSetter.toString = ->
16+
"ReactiveField{#{@()}}"
17+
18+
return getterSetter

package.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
Package.describe({
2+
name: 'peerlibrary:reactive-field',
3+
summary: "Reactive field for Meteor",
4+
version: '0.1.0',
5+
git: 'https://github.com/peerlibrary/meteor-reactive-field.git'
6+
});
7+
8+
Package.onUse(function (api) {
9+
api.versionsFrom('METEOR@1.0.3.1');
10+
11+
// Core dependencies.
12+
api.use([
13+
'coffeescript',
14+
'tracker',
15+
'reactive-var'
16+
]);
17+
18+
api.export('ReactiveField');
19+
20+
api.addFiles([
21+
'lib.coffee'
22+
]);
23+
});
24+
25+
Package.onTest(function (api) {
26+
// Core dependencies.
27+
api.use([
28+
'coffeescript',
29+
'tracker'
30+
]);
31+
32+
// Internal dependencies.
33+
api.use([
34+
'peerlibrary:reactive-field'
35+
]);
36+
37+
// 3rd party dependencies.
38+
api.use([
39+
'peerlibrary:classy-test@0.2.9'
40+
]);
41+
42+
api.addFiles([
43+
'tests.coffee'
44+
]);
45+
});

tests.coffee

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
class BasicTestCase extends ClassyTestCase
2+
@testName: 'reactive-field - basic'
3+
4+
testBasic: ->
5+
foo = new ReactiveField 42
6+
7+
@assertEqual foo(), 42
8+
@assertInstanceOf foo, ReactiveField
9+
@assertEqual foo.constructor, ReactiveField
10+
@assertEqual foo(43), 43
11+
@assertEqual foo(), 43
12+
13+
@assertEqual "#{foo}", 'ReactiveField{43}'
14+
15+
testReactive: ->
16+
foo = new ReactiveField 42
17+
18+
changes = []
19+
handle = Tracker.autorun (computation) =>
20+
changes.push foo()
21+
22+
foo(43)
23+
24+
Tracker.flush()
25+
26+
foo(44)
27+
28+
Tracker.flush()
29+
30+
foo(44)
31+
32+
Tracker.flush()
33+
34+
foo(43)
35+
36+
Tracker.flush()
37+
38+
@assertEqual changes, [42, 43, 44, 43]
39+
40+
handle.stop()
41+
42+
ClassyTestCase.addTest new BasicTestCase()

0 commit comments

Comments
 (0)