meteorite 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.
- 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
|