meteorite 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +52 -13
- data/app/assets/javascripts/meteorite.js +1 -1
- data/lib/meteorite/version.rb +1 -1
- metadata +34 -20
- checksums.yaml +0 -7
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Meteorite
|
2
2
|
|
3
3
|
Meteorite enables you to add two-way data binding to your application with minimal effort.
|
4
|
+
For an example application, please see https://github.com/llawlor/meteorite-simple-todos .
|
4
5
|
|
5
6
|
## Dependencies
|
6
7
|
|
@@ -8,11 +9,11 @@ You need Redis installed and running for Meteorite to work properly.
|
|
8
9
|
|
9
10
|
Install Redis server (on Ubuntu):
|
10
11
|
|
11
|
-
sudo apt-get install redis-server
|
12
|
+
$ sudo apt-get install redis-server
|
12
13
|
|
13
14
|
Run Redis server:
|
14
15
|
|
15
|
-
nohup redis-server &
|
16
|
+
$ nohup redis-server &
|
16
17
|
|
17
18
|
## Installation
|
18
19
|
|
@@ -28,19 +29,30 @@ Install required files:
|
|
28
29
|
|
29
30
|
$ rails generate meteorite:install
|
30
31
|
|
32
|
+
[(view diff)](https://github.com/llawlor/meteorite-tasks-example/commit/adb20f19b8bd6034ea6ef81a4618f359e9b93222)
|
33
|
+
|
31
34
|
The generated JavaScript file needs to be added to the assets pipeline. In app/assets/javascripts/application.js, add this line:
|
32
35
|
|
33
36
|
//= require meteorite
|
34
37
|
|
38
|
+
[(view diff)](https://github.com/llawlor/meteorite-tasks-example/commit/c7b82339822a6af62548af96adc0374ebb9fa12f)
|
39
|
+
|
35
40
|
Run the websocket daemon:
|
36
41
|
|
37
|
-
ruby daemons/websocket.rb
|
42
|
+
$ ruby daemons/websocket.rb
|
43
|
+
|
44
|
+
The Redis server location can be configured at config/initializers/meteorite.rb .
|
38
45
|
|
39
46
|
## Example Usage in a Task Model
|
40
47
|
|
41
48
|
### Create a task:
|
42
|
-
|
49
|
+
|
50
|
+
First, we publish a message to Redis with a key of 'tasks' and a value equal to the task's partial.
|
51
|
+
Meteorite.bind_key(MODEL_NAME.all) will use the table name as the key to bind messages to.
|
52
|
+
|
43
53
|
```ruby
|
54
|
+
# task_controller#create
|
55
|
+
|
44
56
|
# create the task
|
45
57
|
task = Task.create(task_params)
|
46
58
|
# render the partial to a string
|
@@ -49,8 +61,11 @@ task_string = render_to_string(partial: 'task', locals: { task: task })
|
|
49
61
|
$redis.publish(Meteorite.bind_key(Task.all), task_string)
|
50
62
|
```
|
51
63
|
|
52
|
-
|
64
|
+
An HTML element with a class of "meteorite" and data attribute for the bind key is used to specify where additional model instances will be added to the DOM.
|
65
|
+
|
53
66
|
```html
|
67
|
+
<!-- tasks/index.html.erb -->
|
68
|
+
|
54
69
|
<table class="meteorite" data-bind-key="<%= Meteorite.bind_key(@tasks) %>">
|
55
70
|
<% @tasks.each do |task| %>
|
56
71
|
<%= render partial: 'task', locals: { task: task } %>
|
@@ -58,32 +73,56 @@ tasks/index.html.erb
|
|
58
73
|
</table>
|
59
74
|
```
|
60
75
|
|
61
|
-
|
76
|
+
The partial should have a top-level element with an ID of the model instance's bind key.
|
77
|
+
Individual HTML attributes can be dynamically updated by adding a "meteorite" class, data-bind-key, and data-bind-attr.
|
78
|
+
|
62
79
|
```html
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
80
|
+
<!-- tasks/_task.html.erb -->
|
81
|
+
|
82
|
+
<tr id="<%= Meteorite.bind_key(task) %>">
|
83
|
+
<td>
|
84
|
+
<%= form_for task, remote: true, html: { style: 'float: left; margin-right: 5px;' } do |f| %>
|
85
|
+
<label>
|
86
|
+
<%= f.check_box :checked, class: 'task_check meteorite', data: { bind_key: Meteorite.bind_key(task), bind_attr: 'checked' } %>
|
87
|
+
<span class="checkbox_text <%= 'checked' if task.checked?%>"><%= task.text %></span>
|
88
|
+
</label>
|
89
|
+
<% end %>
|
90
|
+
|
91
|
+
<%= link_to raw("×"), task, method: 'delete', data: { remote: true }, class: 'pull-right' %>
|
92
|
+
</td>
|
93
|
+
</tr>
|
68
94
|
<% end %>
|
69
95
|
```
|
70
96
|
|
97
|
+
[(view diff)](https://github.com/llawlor/meteorite-tasks-example/commit/9440626fdc14af5e84066eef60fabf3e99fcfd93)
|
98
|
+
|
71
99
|
### Update a task:
|
72
|
-
|
100
|
+
|
101
|
+
Updates can be performed by publishing the model instance's bind key and the model instance to JSON.
|
102
|
+
|
73
103
|
```ruby
|
104
|
+
# tasks_controller#update
|
105
|
+
|
74
106
|
# use the $redis.publish method to send your bind_key and task as JSON
|
75
107
|
task = Task.find(params[:id])
|
76
108
|
$redis.publish(Meteorite.bind_key(task), task.to_json)
|
77
109
|
```
|
78
110
|
|
111
|
+
[(view diff)](https://github.com/llawlor/meteorite-tasks-example/commit/f5a4e21b4b24173c7a4832d954567b616d685b4c)
|
112
|
+
|
79
113
|
### Delete a task:
|
80
|
-
|
114
|
+
|
115
|
+
Model instances can be deleted by publishing the model instance's bind key and the 'delete' message.
|
116
|
+
|
81
117
|
```ruby
|
118
|
+
# tasks_controller#destroy
|
119
|
+
|
82
120
|
# use the $redis.publish method to send your bind_key and 'delete' message
|
83
121
|
task = Task.find(params[:id])
|
84
122
|
$redis.publish(Meteorite.bind_key(task), 'delete')
|
85
123
|
```
|
86
124
|
|
125
|
+
[(view diff)](https://github.com/llawlor/meteorite-tasks-example/commit/abfb76d11b3cb422ee4d37aaf8b9364823a2b0bf)
|
87
126
|
|
88
127
|
## Contributing
|
89
128
|
|
data/lib/meteorite/version.rb
CHANGED
metadata
CHANGED
@@ -1,97 +1,110 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: meteorite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- llawlor
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2015-
|
12
|
+
date: 2015-07-02 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- -
|
19
|
+
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '1.3'
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '1.3'
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rake
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- -
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '0'
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- -
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '0'
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: em-websocket
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- -
|
51
|
+
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '0'
|
48
54
|
type: :runtime
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- -
|
59
|
+
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: em-hiredis
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- -
|
67
|
+
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: '0'
|
62
70
|
type: :runtime
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
|
-
- -
|
75
|
+
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
68
77
|
version: '0'
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: redis
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
|
-
- -
|
83
|
+
- - ! '>='
|
74
84
|
- !ruby/object:Gem::Version
|
75
85
|
version: '0'
|
76
86
|
type: :runtime
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
|
-
- -
|
91
|
+
- - ! '>='
|
81
92
|
- !ruby/object:Gem::Version
|
82
93
|
version: '0'
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
95
|
name: railties
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
|
-
- -
|
99
|
+
- - ! '>='
|
88
100
|
- !ruby/object:Gem::Version
|
89
101
|
version: '0'
|
90
102
|
type: :runtime
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
|
-
- -
|
107
|
+
- - ! '>='
|
95
108
|
- !ruby/object:Gem::Version
|
96
109
|
version: '0'
|
97
110
|
description: Uses websockets to update HTML pages automatically when the underlying
|
@@ -102,7 +115,7 @@ executables: []
|
|
102
115
|
extensions: []
|
103
116
|
extra_rdoc_files: []
|
104
117
|
files:
|
105
|
-
-
|
118
|
+
- .gitignore
|
106
119
|
- Gemfile
|
107
120
|
- LICENSE.txt
|
108
121
|
- README.md
|
@@ -119,25 +132,26 @@ files:
|
|
119
132
|
homepage: ''
|
120
133
|
licenses:
|
121
134
|
- MIT
|
122
|
-
metadata: {}
|
123
135
|
post_install_message:
|
124
136
|
rdoc_options: []
|
125
137
|
require_paths:
|
126
138
|
- lib
|
127
139
|
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
128
141
|
requirements:
|
129
|
-
- -
|
142
|
+
- - ! '>='
|
130
143
|
- !ruby/object:Gem::Version
|
131
144
|
version: '0'
|
132
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
none: false
|
133
147
|
requirements:
|
134
|
-
- -
|
148
|
+
- - ! '>='
|
135
149
|
- !ruby/object:Gem::Version
|
136
150
|
version: '0'
|
137
151
|
requirements: []
|
138
152
|
rubyforge_project:
|
139
|
-
rubygems_version:
|
153
|
+
rubygems_version: 1.8.23
|
140
154
|
signing_key:
|
141
|
-
specification_version:
|
155
|
+
specification_version: 3
|
142
156
|
summary: Two-way data binding for Rails
|
143
157
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: b3f52eccbd85f2408b28c8a2acb0dabdab2eb93b
|
4
|
-
data.tar.gz: d8ebb4b1153e0b8764ba678f08f7c2510ac138ef
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: edc2773a003260faba62a75b9728afbb5de580aa2a1528302bcf48bba677c7105c23a773f7b94f9f5df1717955d157108fa44f8d2478381ffdc52ac0df9b1578
|
7
|
-
data.tar.gz: 32cb165eff72479b076842bf3057e2af5b0fa096a0c9c5dae96a1f671f3bcc2d85f91ae66a6ba3dfaf85774807b349cbbaa63fb38c0bbe128c20e5c9239e42a0
|