subduino 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (196) hide show
  1. data/.document +5 -0
  2. data/.gitignore +26 -0
  3. data/Rakefile +76 -0
  4. data/Readme.textile +46 -0
  5. data/VERSION +1 -0
  6. data/bin/subduino +34 -0
  7. data/bin/subduino-cli +65 -0
  8. data/duino/.gitignore +2 -0
  9. data/duino/Makefile +401 -0
  10. data/duino/duino.pde +17 -0
  11. data/duino/duino.rb +16 -0
  12. data/duino/methods.pde +5 -0
  13. data/lib/subduino/ard_io.rb +60 -0
  14. data/lib/subduino/ard_ps.rb +38 -0
  15. data/lib/subduino/arduino.rb +30 -0
  16. data/lib/subduino/parse.rb +61 -0
  17. data/lib/subduino/scaffold/Makefile +401 -0
  18. data/lib/subduino/scaffold/Makefile2 +247 -0
  19. data/lib/subduino/scaffold/generator.rb +29 -0
  20. data/lib/subduino/scaffold/scaffold.pde +17 -0
  21. data/lib/subduino/scaffold/scaffold.rb +16 -0
  22. data/lib/subduino/store.rb +65 -0
  23. data/lib/subduino.rb +48 -0
  24. data/node/arduinode.js +68 -0
  25. data/node/server.js +45 -0
  26. data/node/vendor/faye.js +1925 -0
  27. data/spec/spec_helper.rb +10 -0
  28. data/spec/subduino/ard_io_spec.rb +9 -0
  29. data/spec/subduino/parse_spec.rb +21 -0
  30. data/spec/subduino/store_spec.rb +17 -0
  31. data/spec/subduino_spec.rb +20 -0
  32. data/subduino.gemspec +239 -0
  33. data/webapp/Gemfile +8 -0
  34. data/webapp/Gemfile.lock +14 -0
  35. data/webapp/Rakefile +49 -0
  36. data/webapp/Readme.textile +45 -0
  37. data/webapp/VERSION +1 -0
  38. data/webapp/lib/app.rb +103 -0
  39. data/webapp/lib/duino.rb +213 -0
  40. data/webapp/lib/environment.rb +36 -0
  41. data/webapp/lib/messenger.rb +16 -0
  42. data/webapp/public/app.css +119 -0
  43. data/webapp/public/app.js +34 -0
  44. data/webapp/public/faye.js +1 -0
  45. data/webapp/public/icons/alarm-clock-blue.png +0 -0
  46. data/webapp/public/icons/alarm-clock.png +0 -0
  47. data/webapp/public/icons/balloon-left.png +0 -0
  48. data/webapp/public/icons/bandaid.png +0 -0
  49. data/webapp/public/icons/bell-disable.png +0 -0
  50. data/webapp/public/icons/bell.png +0 -0
  51. data/webapp/public/icons/big_icon.png +0 -0
  52. data/webapp/public/icons/bomb.png +0 -0
  53. data/webapp/public/icons/bookmark.png +0 -0
  54. data/webapp/public/icons/box-label.png +0 -0
  55. data/webapp/public/icons/brightness-control-up.png +0 -0
  56. data/webapp/public/icons/brightness-control.png +0 -0
  57. data/webapp/public/icons/brightness-small.png +0 -0
  58. data/webapp/public/icons/broom.png +0 -0
  59. data/webapp/public/icons/bug.png +0 -0
  60. data/webapp/public/icons/calculator.png +0 -0
  61. data/webapp/public/icons/calendar-day.png +0 -0
  62. data/webapp/public/icons/camera.png +0 -0
  63. data/webapp/public/icons/cards-address.png +0 -0
  64. data/webapp/public/icons/chart.png +0 -0
  65. data/webapp/public/icons/clock-select.png +0 -0
  66. data/webapp/public/icons/color.png +0 -0
  67. data/webapp/public/icons/compass.png +0 -0
  68. data/webapp/public/icons/control-power-small.png +0 -0
  69. data/webapp/public/icons/control-power.png +0 -0
  70. data/webapp/public/icons/control-record-small.png +0 -0
  71. data/webapp/public/icons/cpus.png +0 -0
  72. data/webapp/public/icons/credit-card.png +0 -0
  73. data/webapp/public/icons/cross-small.png +0 -0
  74. data/webapp/public/icons/dashboard.png +0 -0
  75. data/webapp/public/icons/database.png +0 -0
  76. data/webapp/public/icons/databases.png +0 -0
  77. data/webapp/public/icons/door-open-in.png +0 -0
  78. data/webapp/public/icons/door-open-out.png +0 -0
  79. data/webapp/public/icons/door-open.png +0 -0
  80. data/webapp/public/icons/door.png +0 -0
  81. data/webapp/public/icons/drive-globe.png +0 -0
  82. data/webapp/public/icons/equalizer.png +0 -0
  83. data/webapp/public/icons/exclamation-diamond.png +0 -0
  84. data/webapp/public/icons/exclamation.png +0 -0
  85. data/webapp/public/icons/eye-disable.png +0 -0
  86. data/webapp/public/icons/eye.png +0 -0
  87. data/webapp/public/icons/false.png +0 -0
  88. data/webapp/public/icons/gear-small.png +0 -0
  89. data/webapp/public/icons/gear.png +0 -0
  90. data/webapp/public/icons/groups.png +0 -0
  91. data/webapp/public/icons/heart.png +0 -0
  92. data/webapp/public/icons/heart_empty.png +0 -0
  93. data/webapp/public/icons/info.png +0 -0
  94. data/webapp/public/icons/key.png +0 -0
  95. data/webapp/public/icons/lightbulb.png +0 -0
  96. data/webapp/public/icons/lightbulb_off.png +0 -0
  97. data/webapp/public/icons/lightning-disable.png +0 -0
  98. data/webapp/public/icons/lightning-small.png +0 -0
  99. data/webapp/public/icons/lightning.png +0 -0
  100. data/webapp/public/icons/lock-unlock.png +0 -0
  101. data/webapp/public/icons/lock.png +0 -0
  102. data/webapp/public/icons/marker.png +0 -0
  103. data/webapp/public/icons/media-player-phone.png +0 -0
  104. data/webapp/public/icons/megaphone.png +0 -0
  105. data/webapp/public/icons/mem.png +0 -0
  106. data/webapp/public/icons/microphone.png +0 -0
  107. data/webapp/public/icons/monitor.png +0 -0
  108. data/webapp/public/icons/navigation.png +0 -0
  109. data/webapp/public/icons/off.png +0 -0
  110. data/webapp/public/icons/on.png +0 -0
  111. data/webapp/public/icons/pin.png +0 -0
  112. data/webapp/public/icons/plug--exclamation.png +0 -0
  113. data/webapp/public/icons/plug-disable.png +0 -0
  114. data/webapp/public/icons/plug.png +0 -0
  115. data/webapp/public/icons/restart.png +0 -0
  116. data/webapp/public/icons/ruby.png +0 -0
  117. data/webapp/public/icons/server.png +0 -0
  118. data/webapp/public/icons/shield-disable.png +0 -0
  119. data/webapp/public/icons/shield.png +0 -0
  120. data/webapp/public/icons/socket--exclamation.png +0 -0
  121. data/webapp/public/icons/socket-disable.png +0 -0
  122. data/webapp/public/icons/socket.png +0 -0
  123. data/webapp/public/icons/start.png +0 -0
  124. data/webapp/public/icons/stop.png +0 -0
  125. data/webapp/public/icons/switch--exclamation.png +0 -0
  126. data/webapp/public/icons/switch-disable.png +0 -0
  127. data/webapp/public/icons/switch-small.png +0 -0
  128. data/webapp/public/icons/switch.png +0 -0
  129. data/webapp/public/icons/target.png +0 -0
  130. data/webapp/public/icons/television-off.png +0 -0
  131. data/webapp/public/icons/television.png +0 -0
  132. data/webapp/public/icons/terminal.png +0 -0
  133. data/webapp/public/icons/tick-small.png +0 -0
  134. data/webapp/public/icons/traffic-light-off.png +0 -0
  135. data/webapp/public/icons/traffic-light.png +0 -0
  136. data/webapp/public/icons/traffic.png +0 -0
  137. data/webapp/public/icons/true.png +0 -0
  138. data/webapp/public/icons/umbrella.png +0 -0
  139. data/webapp/public/icons/unmonitor.png +0 -0
  140. data/webapp/public/icons/unmonitored.png +0 -0
  141. data/webapp/public/icons/users.png +0 -0
  142. data/webapp/public/icons/vcard.png +0 -0
  143. data/webapp/public/icons/wall.png +0 -0
  144. data/webapp/public/icons/wall_brick.png +0 -0
  145. data/webapp/public/icons/wall_disable.png +0 -0
  146. data/webapp/public/icons/wand-disable.png +0 -0
  147. data/webapp/public/icons/wand.png +0 -0
  148. data/webapp/public/icons/warn.png +0 -0
  149. data/webapp/public/icons/weather_clouds.png +0 -0
  150. data/webapp/public/icons/weather_cloudy.png +0 -0
  151. data/webapp/public/icons/weather_lightning.png +0 -0
  152. data/webapp/public/icons/weather_rain.png +0 -0
  153. data/webapp/public/icons/weather_snow.png +0 -0
  154. data/webapp/public/icons/weather_sun.png +0 -0
  155. data/webapp/public/icons/wrench-screwdriver.png +0 -0
  156. data/webapp/public/icons/wrench.png +0 -0
  157. data/webapp/public/iui/backButton.png +0 -0
  158. data/webapp/public/iui/blueButton.png +0 -0
  159. data/webapp/public/iui/cancel.png +0 -0
  160. data/webapp/public/iui/grayButton.png +0 -0
  161. data/webapp/public/iui/greenButton.png +0 -0
  162. data/webapp/public/iui/iui-logo-touch-icon.png +0 -0
  163. data/webapp/public/iui/iui.css +396 -0
  164. data/webapp/public/iui/iui.js +511 -0
  165. data/webapp/public/iui/iuix.css +1 -0
  166. data/webapp/public/iui/iuix.js +1 -0
  167. data/webapp/public/iui/listArrow.png +0 -0
  168. data/webapp/public/iui/listArrowSel.png +0 -0
  169. data/webapp/public/iui/listGroup.png +0 -0
  170. data/webapp/public/iui/loading.gif +0 -0
  171. data/webapp/public/iui/pinstripes.png +0 -0
  172. data/webapp/public/iui/redButton.png +0 -0
  173. data/webapp/public/iui/selection.png +0 -0
  174. data/webapp/public/iui/thumb.png +0 -0
  175. data/webapp/public/iui/toggle.png +0 -0
  176. data/webapp/public/iui/toggleOn.png +0 -0
  177. data/webapp/public/iui/toolButton.png +0 -0
  178. data/webapp/public/iui/toolbar.png +0 -0
  179. data/webapp/public/iui/whiteButton.png +0 -0
  180. data/webapp/public/iui/yellowButton.png +0 -0
  181. data/webapp/public/jquery.js +154 -0
  182. data/webapp/public/layout.css +33 -0
  183. data/webapp/public/right.js +9 -0
  184. data/webapp/public/rt.js +7 -0
  185. data/webapp/public/sparkline.js +85 -0
  186. data/webapp/spec/duino_spec.rb +8 -0
  187. data/webapp/spec/spec_helper.rb +10 -0
  188. data/webapp/views/command.haml +4 -0
  189. data/webapp/views/icon.haml +6 -0
  190. data/webapp/views/index.haml +51 -0
  191. data/webapp/views/layout.haml +17 -0
  192. data/webapp/views/mobile.haml +21 -0
  193. data/webapp/views/switch.haml +56 -0
  194. data/webapp/views/top.haml +4 -0
  195. data/webapp/views/watch.haml +26 -0
  196. metadata +277 -0
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'subduino'
4
+ require 'rspec'
5
+ include Subduino
6
+ # require 'spec/autorun'
7
+
8
+ # Spec::Runner.configure do |config|
9
+
10
+ # end
@@ -0,0 +1,9 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe ArdIO do
4
+
5
+ it "should start serial port" do
6
+ SerialPort.should_receive(:new).with("/dev/ttyUSB0", 115200)
7
+ ArdIO.sp
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe Parse do
4
+ include Parse
5
+
6
+ it "should parse digital" do
7
+ d = DigParser.new(8)
8
+ d.should be_digital
9
+ end
10
+
11
+ it "should parse digital" do
12
+ d = Bool.new(8)
13
+ d.to_s.should eql("ON")
14
+ end
15
+
16
+ it "should parse analog ratio" do
17
+ d = Knob.new(1023)
18
+ d.ratio.should eql(100)
19
+ end
20
+
21
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Store" do
4
+
5
+ it "should write things" do
6
+ Store.flush
7
+ Store.write(:temp, 18)
8
+ Store.count.should eql(2)
9
+ end
10
+
11
+ it "should read" do
12
+ Store.read(:temp).should eql("18")
13
+ end
14
+
15
+ it "should read array"
16
+
17
+ end
@@ -0,0 +1,20 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Subduino" do
4
+
5
+ it "should be a module" do
6
+ Subduino.should be_a Module
7
+ end
8
+
9
+ it "should have io" do
10
+ Subduino.should be_const_defined :ArdIO
11
+ end
12
+
13
+ it "should have pubsub" do
14
+ Subduino.should be_const_defined :ArdPS
15
+ end
16
+
17
+ it "should autostart redis"
18
+
19
+
20
+ end
data/subduino.gemspec ADDED
@@ -0,0 +1,239 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{subduino}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Marcos Piccinini"]
12
+ s.date = %q{2010-09-11}
13
+ s.description = %q{Interface, compile, upload, play with arduino/ruby}
14
+ s.email = %q{x@nofxx.com}
15
+ s.executables = ["subduino-cli", "subduino"]
16
+ s.files = [
17
+ ".document",
18
+ ".gitignore",
19
+ "Rakefile",
20
+ "Readme.textile",
21
+ "VERSION",
22
+ "bin/subduino",
23
+ "bin/subduino-cli",
24
+ "duino/.gitignore",
25
+ "duino/Makefile",
26
+ "duino/duino.pde",
27
+ "duino/duino.rb",
28
+ "duino/methods.pde",
29
+ "lib/subduino.rb",
30
+ "lib/subduino/ard_io.rb",
31
+ "lib/subduino/ard_ps.rb",
32
+ "lib/subduino/arduino.rb",
33
+ "lib/subduino/parse.rb",
34
+ "lib/subduino/scaffold/Makefile",
35
+ "lib/subduino/scaffold/Makefile2",
36
+ "lib/subduino/scaffold/generator.rb",
37
+ "lib/subduino/scaffold/scaffold.pde",
38
+ "lib/subduino/scaffold/scaffold.rb",
39
+ "lib/subduino/store.rb",
40
+ "node/arduinode.js",
41
+ "node/server.js",
42
+ "node/vendor/faye.js",
43
+ "spec/spec_helper.rb",
44
+ "spec/subduino/ard_io_spec.rb",
45
+ "spec/subduino/parse_spec.rb",
46
+ "spec/subduino/store_spec.rb",
47
+ "spec/subduino_spec.rb",
48
+ "subduino.gemspec",
49
+ "webapp/Gemfile",
50
+ "webapp/Gemfile.lock",
51
+ "webapp/Rakefile",
52
+ "webapp/Readme.textile",
53
+ "webapp/VERSION",
54
+ "webapp/lib/app.rb",
55
+ "webapp/lib/duino.rb",
56
+ "webapp/lib/environment.rb",
57
+ "webapp/lib/messenger.rb",
58
+ "webapp/public/app.css",
59
+ "webapp/public/app.js",
60
+ "webapp/public/faye.js",
61
+ "webapp/public/icons/alarm-clock-blue.png",
62
+ "webapp/public/icons/alarm-clock.png",
63
+ "webapp/public/icons/balloon-left.png",
64
+ "webapp/public/icons/bandaid.png",
65
+ "webapp/public/icons/bell-disable.png",
66
+ "webapp/public/icons/bell.png",
67
+ "webapp/public/icons/big_icon.png",
68
+ "webapp/public/icons/bomb.png",
69
+ "webapp/public/icons/bookmark.png",
70
+ "webapp/public/icons/box-label.png",
71
+ "webapp/public/icons/brightness-control-up.png",
72
+ "webapp/public/icons/brightness-control.png",
73
+ "webapp/public/icons/brightness-small.png",
74
+ "webapp/public/icons/broom.png",
75
+ "webapp/public/icons/bug.png",
76
+ "webapp/public/icons/calculator.png",
77
+ "webapp/public/icons/calendar-day.png",
78
+ "webapp/public/icons/camera.png",
79
+ "webapp/public/icons/cards-address.png",
80
+ "webapp/public/icons/chart.png",
81
+ "webapp/public/icons/clock-select.png",
82
+ "webapp/public/icons/color.png",
83
+ "webapp/public/icons/compass.png",
84
+ "webapp/public/icons/control-power-small.png",
85
+ "webapp/public/icons/control-power.png",
86
+ "webapp/public/icons/control-record-small.png",
87
+ "webapp/public/icons/cpus.png",
88
+ "webapp/public/icons/credit-card.png",
89
+ "webapp/public/icons/cross-small.png",
90
+ "webapp/public/icons/dashboard.png",
91
+ "webapp/public/icons/database.png",
92
+ "webapp/public/icons/databases.png",
93
+ "webapp/public/icons/door-open-in.png",
94
+ "webapp/public/icons/door-open-out.png",
95
+ "webapp/public/icons/door-open.png",
96
+ "webapp/public/icons/door.png",
97
+ "webapp/public/icons/drive-globe.png",
98
+ "webapp/public/icons/equalizer.png",
99
+ "webapp/public/icons/exclamation-diamond.png",
100
+ "webapp/public/icons/exclamation.png",
101
+ "webapp/public/icons/eye-disable.png",
102
+ "webapp/public/icons/eye.png",
103
+ "webapp/public/icons/false.png",
104
+ "webapp/public/icons/gear-small.png",
105
+ "webapp/public/icons/gear.png",
106
+ "webapp/public/icons/groups.png",
107
+ "webapp/public/icons/heart.png",
108
+ "webapp/public/icons/heart_empty.png",
109
+ "webapp/public/icons/info.png",
110
+ "webapp/public/icons/key.png",
111
+ "webapp/public/icons/lightbulb.png",
112
+ "webapp/public/icons/lightbulb_off.png",
113
+ "webapp/public/icons/lightning-disable.png",
114
+ "webapp/public/icons/lightning-small.png",
115
+ "webapp/public/icons/lightning.png",
116
+ "webapp/public/icons/lock-unlock.png",
117
+ "webapp/public/icons/lock.png",
118
+ "webapp/public/icons/marker.png",
119
+ "webapp/public/icons/media-player-phone.png",
120
+ "webapp/public/icons/megaphone.png",
121
+ "webapp/public/icons/mem.png",
122
+ "webapp/public/icons/microphone.png",
123
+ "webapp/public/icons/monitor.png",
124
+ "webapp/public/icons/navigation.png",
125
+ "webapp/public/icons/off.png",
126
+ "webapp/public/icons/on.png",
127
+ "webapp/public/icons/pin.png",
128
+ "webapp/public/icons/plug--exclamation.png",
129
+ "webapp/public/icons/plug-disable.png",
130
+ "webapp/public/icons/plug.png",
131
+ "webapp/public/icons/restart.png",
132
+ "webapp/public/icons/ruby.png",
133
+ "webapp/public/icons/server.png",
134
+ "webapp/public/icons/shield-disable.png",
135
+ "webapp/public/icons/shield.png",
136
+ "webapp/public/icons/socket--exclamation.png",
137
+ "webapp/public/icons/socket-disable.png",
138
+ "webapp/public/icons/socket.png",
139
+ "webapp/public/icons/start.png",
140
+ "webapp/public/icons/stop.png",
141
+ "webapp/public/icons/switch--exclamation.png",
142
+ "webapp/public/icons/switch-disable.png",
143
+ "webapp/public/icons/switch-small.png",
144
+ "webapp/public/icons/switch.png",
145
+ "webapp/public/icons/target.png",
146
+ "webapp/public/icons/television-off.png",
147
+ "webapp/public/icons/television.png",
148
+ "webapp/public/icons/terminal.png",
149
+ "webapp/public/icons/tick-small.png",
150
+ "webapp/public/icons/traffic-light-off.png",
151
+ "webapp/public/icons/traffic-light.png",
152
+ "webapp/public/icons/traffic.png",
153
+ "webapp/public/icons/true.png",
154
+ "webapp/public/icons/umbrella.png",
155
+ "webapp/public/icons/unmonitor.png",
156
+ "webapp/public/icons/unmonitored.png",
157
+ "webapp/public/icons/users.png",
158
+ "webapp/public/icons/vcard.png",
159
+ "webapp/public/icons/wall.png",
160
+ "webapp/public/icons/wall_brick.png",
161
+ "webapp/public/icons/wall_disable.png",
162
+ "webapp/public/icons/wand-disable.png",
163
+ "webapp/public/icons/wand.png",
164
+ "webapp/public/icons/warn.png",
165
+ "webapp/public/icons/weather_clouds.png",
166
+ "webapp/public/icons/weather_cloudy.png",
167
+ "webapp/public/icons/weather_lightning.png",
168
+ "webapp/public/icons/weather_rain.png",
169
+ "webapp/public/icons/weather_snow.png",
170
+ "webapp/public/icons/weather_sun.png",
171
+ "webapp/public/icons/wrench-screwdriver.png",
172
+ "webapp/public/icons/wrench.png",
173
+ "webapp/public/iui/backButton.png",
174
+ "webapp/public/iui/blueButton.png",
175
+ "webapp/public/iui/cancel.png",
176
+ "webapp/public/iui/grayButton.png",
177
+ "webapp/public/iui/greenButton.png",
178
+ "webapp/public/iui/iui-logo-touch-icon.png",
179
+ "webapp/public/iui/iui.css",
180
+ "webapp/public/iui/iui.js",
181
+ "webapp/public/iui/iuix.css",
182
+ "webapp/public/iui/iuix.js",
183
+ "webapp/public/iui/listArrow.png",
184
+ "webapp/public/iui/listArrowSel.png",
185
+ "webapp/public/iui/listGroup.png",
186
+ "webapp/public/iui/loading.gif",
187
+ "webapp/public/iui/pinstripes.png",
188
+ "webapp/public/iui/redButton.png",
189
+ "webapp/public/iui/selection.png",
190
+ "webapp/public/iui/thumb.png",
191
+ "webapp/public/iui/toggle.png",
192
+ "webapp/public/iui/toggleOn.png",
193
+ "webapp/public/iui/toolButton.png",
194
+ "webapp/public/iui/toolbar.png",
195
+ "webapp/public/iui/whiteButton.png",
196
+ "webapp/public/iui/yellowButton.png",
197
+ "webapp/public/jquery.js",
198
+ "webapp/public/layout.css",
199
+ "webapp/public/right.js",
200
+ "webapp/public/rt.js",
201
+ "webapp/public/sparkline.js",
202
+ "webapp/spec/duino_spec.rb",
203
+ "webapp/spec/spec_helper.rb",
204
+ "webapp/views/command.haml",
205
+ "webapp/views/icon.haml",
206
+ "webapp/views/index.haml",
207
+ "webapp/views/layout.haml",
208
+ "webapp/views/mobile.haml",
209
+ "webapp/views/switch.haml",
210
+ "webapp/views/top.haml",
211
+ "webapp/views/watch.haml"
212
+ ]
213
+ s.homepage = %q{http://github.com/nofxx/subduino}
214
+ s.rdoc_options = ["--charset=UTF-8"]
215
+ s.require_paths = ["lib"]
216
+ s.rubygems_version = %q{1.3.7}
217
+ s.summary = %q{Arduino Ruby Helpers}
218
+ s.test_files = [
219
+ "spec/subduino_spec.rb",
220
+ "spec/spec_helper.rb",
221
+ "spec/subduino/ard_io_spec.rb",
222
+ "spec/subduino/parse_spec.rb",
223
+ "spec/subduino/store_spec.rb"
224
+ ]
225
+
226
+ if s.respond_to? :specification_version then
227
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
228
+ s.specification_version = 3
229
+
230
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
231
+ s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
232
+ else
233
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
234
+ end
235
+ else
236
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
237
+ end
238
+ end
239
+
data/webapp/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ #
2
+ # Sinatra Webapp Gems
3
+ #
4
+ source "http://gemcutter.org"
5
+
6
+ gem "sinatra"
7
+ gem "redis"
8
+
@@ -0,0 +1,14 @@
1
+ GEM
2
+ remote: http://gemcutter.org/
3
+ specs:
4
+ rack (1.2.1)
5
+ redis (2.0.5)
6
+ sinatra (1.0)
7
+ rack (>= 1.0)
8
+
9
+ PLATFORMS
10
+ ruby
11
+
12
+ DEPENDENCIES
13
+ redis
14
+ sinatra
data/webapp/Rakefile ADDED
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "duino"
8
+ gem.summary = "Web UI for Arduino"
9
+ gem.description = "Friendly sinatra web UI for Arduino"
10
+ gem.email = "see@github.com"
11
+ gem.homepage = "http://github.com/nofxx/duino"
12
+ gem.authors = ["Marcos Piccinini"]
13
+ gem.add_dependency "sinatra"
14
+ gem.add_development_dependency "rspec"
15
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
+ end
17
+ rescue LoadError
18
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
19
+ end
20
+
21
+ require 'spec/rake/spectask'
22
+ Spec::Rake::SpecTask.new(:spec) do |spec|
23
+ spec.libs << 'lib' << 'spec'
24
+ spec.spec_files = FileList['spec/**/*_spec.rb']
25
+ end
26
+
27
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
28
+ spec.libs << 'lib' << 'spec'
29
+ spec.pattern = 'spec/**/*_spec.rb'
30
+ spec.rcov = true
31
+ end
32
+
33
+ task :spec => :check_dependencies
34
+
35
+ task :default => :spec
36
+
37
+ require 'rake/rdoctask'
38
+ Rake::RDocTask.new do |rdoc|
39
+ if File.exist?('VERSION')
40
+ version = File.read('VERSION')
41
+ else
42
+ version = ""
43
+ end
44
+
45
+ rdoc.rdoc_dir = 'rdoc'
46
+ rdoc.title = "duino #{version}"
47
+ rdoc.rdoc_files.include('README*')
48
+ rdoc.rdoc_files.include('lib/**/*.rb')
49
+ end
@@ -0,0 +1,45 @@
1
+ h2. Description
2
+
3
+ Friendly web "Arduino":http://arduino.cc
4
+
5
+ h2. Screenshots
6
+
7
+
8
+ h3. Requirements
9
+
10
+ * "Sinatra":http://sinatrarb.com/
11
+
12
+ h3. Install
13
+
14
+
15
+ gem install duino
16
+
17
+ h2. Usage
18
+
19
+ username: foo
20
+ </pre>
21
+
22
+ h2. Contributing
23
+
24
+ duino uses "ditz":http://ditz.rubyforge.org for issue tracking. Fork
25
+ duino, clone your copy and then run:
26
+
27
+ @ditz todo@
28
+
29
+ For more details on a specific issue:
30
+
31
+ @ditz show duino-1@
32
+
33
+ Make your changes that fix a bug, then resolve it.
34
+
35
+ @ditz close duino-1@
36
+
37
+ Commit, push your changes to GitHub, then send a pull request!
38
+
39
+ h3. Author
40
+
41
+ nofxx
42
+
43
+ h3. License
44
+
45
+ "WTFPL":http://sam.zoy.org/wtfpl/
data/webapp/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/webapp/lib/app.rb ADDED
@@ -0,0 +1,103 @@
1
+
2
+ helpers do
3
+
4
+ def get_layout
5
+ return false if request.env['HTTP_XHR']
6
+ case request.env['HTTP_USER_AGENT']
7
+ when /iPhone|iPod/ then :mobile
8
+ when /Android|Nokia/ then :mobile
9
+ else true
10
+ end
11
+ end
12
+
13
+ end # helpers
14
+
15
+ before do
16
+ unless (DUINO_CONFIG['username'].nil? && DUINO_CONFIG['password'].nil?) || self.request.path_info == '/heartbeat'
17
+ use Rack::Auth::Basic do |user, pass|
18
+ [user, pass] == [DUINO_CONFIG['username'], DUINO_CONFIG['password']]
19
+ end
20
+ end
21
+ # DUINO.ping
22
+ end
23
+
24
+
25
+
26
+ set :haml, {:format => :html5 }
27
+
28
+
29
+
30
+
31
+ get '/' do
32
+ @statuses = DUINO.status
33
+ @watches = []
34
+ # @statuses.each do |watch, status|
35
+ # @watches << watch.to_s
36
+ # end
37
+ # @watches = @watches.group_by { |w| @statuses[w][:state].to_s }
38
+ @sensors = DUINO.sensors
39
+ @host = `hostname`
40
+ @stats = Duino.cpu_status
41
+ @footer = "Subduino www v0.0.1 - #{@host}"
42
+ show(:index, @host)
43
+ end
44
+
45
+
46
+ get '/o' do
47
+ @commands = %w{ false false }
48
+ @watch = :all
49
+ show(:switch, "Pins Switch")
50
+ end
51
+
52
+ get '/i' do
53
+ @text = `hostname`
54
+ show(:icon)
55
+ end
56
+
57
+ get '/t' do
58
+ @text = `top -Hibn 1`.gsub("top - ", "")
59
+ show(:top)
60
+ end
61
+
62
+ get '/heartbeat' do
63
+ @statuses = DUINO.status
64
+ 'OK'
65
+ end
66
+
67
+ get '/w/:watch' do
68
+ @watch = params["watch"]
69
+ @status = DUINO.status[@watch][:state]
70
+ @commands = Duino.possible_statuses(@status)
71
+ @log = DUINO.last_log(@watch)
72
+ show(:switch, @watch)
73
+ end
74
+
75
+ get '/w/:watch/:command' do
76
+ @watch = params["watch"]
77
+ @command = params["command"]
78
+ @success = DUINO.switch(@watch, @command)
79
+ # @success = false if @success == []
80
+ @log = DUINO.last_log(@watch)
81
+ show(:command, "#{@command}ing #{@watch}")
82
+ end
83
+
84
+ get '/g/:sensor' do
85
+ @watch = params["sensor"]
86
+ @name, @sensor = *DUINO.sensors(@watch).to_a[0]
87
+ @name = @name.capitalize
88
+ @log = DUINO.log @watch
89
+ # @child = DUINO.status.keys.each.select { |k| DUINO.status[k][:sensor] == @sensor } #.select { |w| w["sensor"] = @sensor }
90
+ # @child.map!{ |c| [c, DUINO.status[c][:state]]}
91
+ # @status = nil
92
+ # @commands = Duino.possible_statuses(@status)
93
+ show(:watch, "#{@name} #{@sensor} [sensor]")
94
+ end
95
+
96
+
97
+ private
98
+
99
+ def show(template, title = 'Duino')
100
+ @title = title
101
+ p request.env['HTTP_XHR']
102
+ haml(template, :layout => get_layout)
103
+ end