updates from Production

This commit is contained in:
Lee Lawlor committed 2014-09-12 14:20:18 -04:00
1 parent d67697acff
commit 1d7e9cd221
11 files changed
+78 -15

No files matched your search

+1
View File
@@ -37,6 +37,7 @@ gem 'tzinfo'
gem 'tzinfo-data' gem 'tzinfo-data'
gem 'turbolinks' gem 'turbolinks'
gem 'geokit-rails' gem 'geokit-rails'
gem 'clockwork'
# to use debugger # to use debugger
# gem 'ruby-debug' # gem 'ruby-debug'
+4
View File
@@ -90,6 +90,9 @@ GEM
net-ssh (>= 2.0.14) net-ssh (>= 2.0.14)
net-ssh-gateway (>= 1.1.0) net-ssh-gateway (>= 1.1.0)
chronic (0.10.2) chronic (0.10.2)
clockwork (0.7.7)
activesupport
tzinfo
coffee-rails (4.0.1) coffee-rails (4.0.1)
coffee-script (>= 2.2.0) coffee-script (>= 2.2.0)
railties (>= 4.0.0, < 5.0) railties (>= 4.0.0, < 5.0)
@@ -356,6 +359,7 @@ DEPENDENCIES
autotest-rails autotest-rails
capistrano (~> 2.15.4) capistrano (~> 2.15.4)
chronic chronic
clockwork
coffee-rails (~> 4.0) coffee-rails (~> 4.0)
daemons daemons
dalli dalli
+6
View File
@@ -40,6 +40,7 @@ class User < ActiveRecord::Base
has_many :reacts, :dependent => :destroy has_many :reacts, :dependent => :destroy
has_many :scheduled_thinghttps, :dependent => :destroy has_many :scheduled_thinghttps, :dependent => :destroy
has_many :talkbacks, :dependent => :destroy has_many :talkbacks, :dependent => :destroy
has_many :timecontrols, :dependent => :destroy
has_many :plugins, :dependent => :destroy has_many :plugins, :dependent => :destroy
has_many :devices, :dependent => :destroy has_many :devices, :dependent => :destroy
has_many :api_keys, :dependent => :destroy has_many :api_keys, :dependent => :destroy
@@ -56,6 +57,11 @@ class User < ActiveRecord::Base
cattr_reader :per_page cattr_reader :per_page
@@per_page = 50 @@per_page = 50
# true if the user has used the maximum number of available timecontrols
def max_timecontrols?
self.timecontrols.roots.count >= Timecontrol::MAX_PER_USER
end
# allow login by login name also # allow login by login name also
def self.find_first_by_auth_conditions(warden_conditions) def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup conditions = warden_conditions.dup
+7 -7
View File
@@ -46,13 +46,13 @@
</div> </div>
<% if current_admin_user.present? %> <% if current_admin_user.present? %>
<div class="apps"> <div class="apps">
<%= link_to scheduled_thinghttps_path do %> <%= link_to timecontrols_path do %>
<%= image_tag 'scheduled_thinghttp.png', :size => '104x104' %> <%= image_tag 'scheduled_thinghttp.png', :size => '104x104' %>
<br> <br>
<%= t(:scheduled_thinghttp) %> <%= t(:timecontrol) %>
<% end %> <% end %>
</div> </div>
<% end %> <% end %>
</div> </div>
+20 -1
View File
@@ -97,6 +97,7 @@ en:
confirm_react_delete: "Are you sure you want to delete this React?" confirm_react_delete: "Are you sure you want to delete this React?"
confirm_talkback_delete: "Are you sure you want to delete this TalkBack?" confirm_talkback_delete: "Are you sure you want to delete this TalkBack?"
confirm_thinghttp_delete: "Are you sure you want to delete this ThingHTTP?" confirm_thinghttp_delete: "Are you sure you want to delete this ThingHTTP?"
confirm_timecontrol_delete: "Are you sure you want to delete this TimeControl?"
confirm_tweetcontrol_delete: "Are you sure you want to delete this TweetControl?" confirm_tweetcontrol_delete: "Are you sure you want to delete this TweetControl?"
confirm_twitter_delete: "Are you sure you want to unlink this Twitter account?" confirm_twitter_delete: "Are you sure you want to unlink this Twitter account?"
contact_us: "Contact Us" contact_us: "Contact Us"
@@ -146,11 +147,13 @@ en:
forgot: "Forgot your password?" forgot: "Forgot your password?"
forum: "Forum" forum: "Forum"
for_more_information: "More Information" for_more_information: "More Information"
frequency: 'frequency'
generate_thingtweet_arduino_code: "Generate ThingTweet Arduino Code" generate_thingtweet_arduino_code: "Generate ThingTweet Arduino Code"
get_started: "Get Started Now" get_started: "Get Started Now"
height: "Height" height: "Height"
home_motto: "Billions and Billions." home_motto: "Billions and Billions."
home_tagline: "The open data platform for the Internet of Things." home_tagline: "The open data platform for the Internet of Things."
hour: 'hour'
import: "Import" import: "Import"
latitude: "Latitude" latitude: "Latitude"
longitude: "Longitude" longitude: "Longitude"
@@ -159,10 +162,13 @@ en:
message: 'message' message: 'message'
message_field: "Message Field" message_field: "Message Field"
metadata: 'metadata' metadata: 'metadata'
minute: 'minute'
myaccount: "My Account" myaccount: "My Account"
name: 'name'
new: "New" new: "New"
note: "Note" note: "Note"
note_save: "Save Note" note_save: "Save Note"
one_time: 'one time'
password: "Password" password: "Password"
password_change: "Change Password" password_change: "Change Password"
password_confirmation: "Password Confirmation" password_confirmation: "Password Confirmation"
@@ -263,6 +269,7 @@ en:
react_option_run_every_time: "Run action each time condition is met" react_option_run_every_time: "Run action each time condition is met"
react_create_button: "Create React" react_create_button: "Create React"
react_save_button: "Create React" react_save_button: "Create React"
recurring: 'recurring'
remember_me: "Remember my User ID" remember_me: "Remember my User ID"
results: "Results" results: "Results"
save: "Save" save: "Save"
@@ -357,8 +364,19 @@ en:
thingtweet: "ThingTweet" thingtweet: "ThingTweet"
thingtweet_arduino_select_message: "Select Twitter account to use for this code" thingtweet_arduino_select_message: "Select Twitter account to use for this code"
thingtweet_back: "Back to ThingTweet" thingtweet_back: "Back to ThingTweet"
time_zone: "Time Zone" timecontrol: "TimeControl"
timecontrols: "TimeControls"
timecontrol_date: 'date'
timecontrol_days: 'days'
timecontrol_delete: "Delete TimeControl"
timecontrol_delete_message: "Want to delete this TimeControl?"
timecontrol_error: "There were some problems creating your TimeControl:"
timecontrol_max_message: "You have reached the maximum number of TimeControls available per user. Please delete an existing TimeControl before adding a new one."
timecontrol_new: "New TimeControl"
timecontrol_run_at: 'run at'
timecontrol_time: 'time'
timescale: "Timescale" timescale: "Timescale"
time_zone: "Time Zone"
title: "Title" title: "Title"
tos: "Terms of Service" tos: "Terms of Service"
tos_agree: "By signing up, you agree to the" tos_agree: "By signing up, you agree to the"
@@ -450,6 +468,7 @@ en:
help_thinghttp_example: "This will send your HTTP GET request to Google Finance and parse the response for an element having an ID of ref_626307_c, which corresponds to the S&P 500 current price change for the day." help_thinghttp_example: "This will send your HTTP GET request to Google Finance and parse the response for an element having an ID of ref_626307_c, which corresponds to the S&P 500 current price change for the day."
help_thinghttp_show: "You can now send your ThingHTTP request and view the response using the following URL:" help_thinghttp_show: "You can now send your ThingHTTP request and view the response using the following URL:"
help_thingtweet: "ThingTweet acts as a proxy to Twitter so that your devices can update Twitter statuses without having to implement Open Authentication (OAuth)." help_thingtweet: "ThingTweet acts as a proxy to Twitter so that your devices can update Twitter statuses without having to implement Open Authentication (OAuth)."
help_timecontrol_index: "Create a TimeControl to automatically execute ThingHTTP requests at predetermined times."
help_tweetcontrol: "Use TweetControl to listen to specific trigger words from Twitter, and then process a ThingHTTP request." help_tweetcontrol: "Use TweetControl to listen to specific trigger words from Twitter, and then process a ThingHTTP request."
help_tweetcontrol_edit: "Select Anonymous TweetControl to allow anyone to trigger your TweetControl or fill in a specfic Twitter Account (don't include the '@' sign)." help_tweetcontrol_edit: "Select Anonymous TweetControl to allow anyone to trigger your TweetControl or fill in a specfic Twitter Account (don't include the '@' sign)."
help_tweetcontrol_hashtag: "To trigger a TweetControl, you need to send a Twitter Status Update with at least the hashtag #thingspeak and the trigger word, for example:" help_tweetcontrol_hashtag: "To trigger a TweetControl, you need to send a Twitter Status Update with at least the hashtag #thingspeak and the trigger word, for example:"
+3 -2
View File
@@ -17,9 +17,9 @@ Thingspeak::Application.routes.draw do
# for api: login and get token # for api: login and get token
match 'users/api_login', :to => 'users#api_login', :via => [:get, :post] match 'users/api_login', :to => 'users#api_login', :via => [:get, :post]
# devise for authentication # devise for authentication (but don't use devise if $skip_devise == true, necessary for clockworkd to run)
# override devise controllers and use custom sessions_controller and registrations_controller # override devise controllers and use custom sessions_controller and registrations_controller
devise_for :users, :controllers => {:sessions => 'sessions', :registrations => 'registrations'} devise_for :users, :controllers => {:sessions => 'sessions', :registrations => 'registrations'} if $skip_devise != true
resource :pages do resource :pages do
collection do collection do
@@ -172,6 +172,7 @@ Thingspeak::Application.routes.draw do
end end
resources :tweetcontrol resources :tweetcontrol
resources :reacts resources :reacts
resources :timecontrols
resources :scheduled_thinghttps resources :scheduled_thinghttps
end end
+35 -3
View File
@@ -11,13 +11,13 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20140804223739) do ActiveRecord::Schema.define(version: 20140903095213) do
create_table "active_admin_comments", force: true do |t| create_table "active_admin_comments", force: true do |t|
t.string "namespace" t.string "namespace"
t.text "body" t.text "body"
t.string "resource_id", limit: 50, null: false t.string "resource_id", null: false
t.string "resource_type", limit: 50, null: false t.string "resource_type", null: false
t.integer "author_id" t.integer "author_id"
t.string "author_type" t.string "author_type"
t.datetime "created_at" t.datetime "created_at"
@@ -166,6 +166,15 @@ ActiveRecord::Schema.define(version: 20140804223739) do
add_index "devices", ["mac_address"], name: "index_devices_on_mac_address", using: :btree add_index "devices", ["mac_address"], name: "index_devices_on_mac_address", using: :btree
add_index "devices", ["user_id"], name: "index_devices_on_user_id", using: :btree add_index "devices", ["user_id"], name: "index_devices_on_user_id", using: :btree
create_table "events", force: true do |t|
t.integer "timecontrol_id"
t.datetime "run_at"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "events", ["run_at"], name: "index_events_on_run_at", using: :btree
create_table "failedlogins", force: true do |t| create_table "failedlogins", force: true do |t|
t.string "login" t.string "login"
t.string "password" t.string "password"
@@ -329,6 +338,29 @@ ActiveRecord::Schema.define(version: 20140804223739) do
add_index "thinghttps", ["api_key"], name: "index_thinghttps_on_api_key", using: :btree add_index "thinghttps", ["api_key"], name: "index_thinghttps_on_api_key", using: :btree
add_index "thinghttps", ["user_id"], name: "index_thinghttps_on_user_id", using: :btree add_index "thinghttps", ["user_id"], name: "index_thinghttps_on_user_id", using: :btree
create_table "timecontrols", force: true do |t|
t.integer "user_id"
t.integer "schedulable_id"
t.string "schedulable_type", limit: 50
t.string "frequency", limit: 20
t.integer "day", limit: 1
t.integer "hour", limit: 1
t.integer "minute", limit: 1
t.integer "parent_id"
t.datetime "last_event_at"
t.text "last_response"
t.datetime "created_at"
t.datetime "updated_at"
t.string "name"
t.datetime "run_at"
end
add_index "timecontrols", ["frequency", "minute", "hour", "day"], name: "index_timecontrols_on_frequency_and_minute_and_hour_and_day", using: :btree
add_index "timecontrols", ["parent_id"], name: "index_timecontrols_on_parent_id", using: :btree
add_index "timecontrols", ["run_at"], name: "index_timecontrols_on_run_at", using: :btree
add_index "timecontrols", ["schedulable_id", "schedulable_type"], name: "index_timecontrols_on_schedulable_id_and_schedulable_type", using: :btree
add_index "timecontrols", ["user_id"], name: "index_timecontrols_on_user_id", using: :btree
create_table "tweetcontrols", force: true do |t| create_table "tweetcontrols", force: true do |t|
t.string "screen_name" t.string "screen_name"
t.string "trigger" t.string "trigger"
+1 -1
View File
@@ -1 +1 @@
span.icon{vertical-align:middle;display:inline-block}span.icon svg{vertical-align:baseline}span.icon{width:0.8em;height:0.8em}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline}body{line-height:1;color:black;background:white}ol,ul{list-style:none}table{border-collapse:separate;border-spacing:0;vertical-align:middle}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:"" ""}q:before,q:after,blockquote:before,blockquote:after{content:""}a img{border:none}html{font-size:100.01%}body{font-size:75%;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif}h1,h2,h3,h4,h5,h6{font-weight:normal;color:#5e6469}h1 img,h2 img,h3 img,h4 img,h5 img,h6 img{margin:0}h1{font-size:3em;line-height:1;margin-bottom:0.5em}h2{font-size:2em;margin-bottom:0.75em}h3{font-size:1.5em;line-height:1;margin-bottom:1em}h4{font-size:1.2em;line-height:1.25;margin-bottom:1.25em}h5{font-size:1em;font-weight:bold;margin-bottom:1.5em}h6{font-size:1em;font-weight:bold}p{margin:0 0 1.5em}p .left{margin:1.5em 1.5em 1.5em 0;padding:0}p .right{margin:1.5em 0 1.5em 1.5em;padding:0}.left{float:left !important}.right{float:right !important}blockquote{margin:1.5em;color:#666;font-style:italic}strong,dfn{font-weight:bold}em,dfn{font-style:italic}sup,sub{line-height:0}abbr,acronym{border-bottom:1px dotted #666}address{margin:0 0 1.5em;font-style:italic}del{color:#666}pre{margin:1.5em 0;white-space:pre}pre,code,tt{font:1em 'andale mono', 'lucida console', monospace;line-height:1.5}li ul,li ol{margin:0}ul,ol{margin:0 1.5em 1.5em 0;padding-left:1.5em}ul{list-style-type:disc}ol{list-style-type:decimal}dl{margin:0 0 1.5em 0}dl dt{font-weight:bold}dd{margin-left:1.5em}table{margin-bottom:1.4em;width:100%}th{font-weight:bold}thead th{background:#c3d9ff}th,td,caption{padding:4px 10px 4px 5px}.small{font-size:.8em;margin-bottom:1.875em;line-height:1.875em}.large{font-size:1.2em;line-height:2.5em;margin-bottom:1.25em}.hide{display:none}.quiet{color:#666}.loud{color:#000}.highlight{background:#ff0}.added{background:#060;color:#fff}.removed{background:#900;color:#fff}.first{margin-left:0;padding-left:0}.last{margin-right:0;padding-right:0}.top{margin-top:0;padding-top:0}.bottom{margin-bottom:0;padding-bottom:0}#header{background:#6a7176;background:-webkit-linear-gradient(-90deg, #6a7176, #4d5256);background:-moz-linear-gradient(-90deg, #6a7176, #4d5256);background:linear, -90deg, #6a7176, #4d5256;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF6A7176', endColorstr='#FF4D5256');-ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF6A7176', endColorstr='#FF4D5256');border-bottom:1px solid #44484b;box-shadow:0 1px 2px rgba(0,0,0,0.37);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.37);-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.37);text-shadow:black 0 1px 0;display:table;height:20px;width:100%;overflow:visible;position:inherit;padding:5px 0;z-index:900}#header h1{display:table-cell;vertical-align:middle;white-space:nowrap;color:#cdcdcd;margin-right:20px;margin-bottom:0px;padding:3px 30px 0 30px;font-size:1.3em;font-weight:normal;line-height:1.2}#header h1 a{text-decoration:none}#header h1 a:hover{color:#fff}#header h1 img{position:relative;top:-2px}#header a,#header a:link{color:#cdcdcd}#header .header-item{top:2px;position:relative;height:20px}#header ul.tabs{display:table-cell;vertical-align:middle;height:100%;margin:0;padding:0}#header ul.tabs>li{display:inline-block;margin-right:4px;margin-top:5px;margin-bottom:5px;font-size:1.0em;position:relative}#header ul.tabs>li a{text-decoration:none;padding:6px 10px 4px 10px;position:relative;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}#header ul.tabs>li.current>a{background:#7b8389;color:#fff}#header ul.tabs>li.has_nested>a{background:url(/assets/active_admin/nested_menu_arrow-94d9c4f73e81d377f80ae8dbcc71128b.gif) no-repeat calc(100% - 7px) 50%;padding-right:20px}#header ul.tabs>li.has_nested.current>a{background:#7b8389 url(/assets/active_admin/nested_menu_arrow_dark-b40a488b4f4b7d25cce531a15db4037b.gif) no-repeat calc(100% - 7px) 50%;padding-right:20px}#header ul.tabs>li:hover>a{background:#7b8389;color:#fff}#header ul.tabs>li.has_nested:hover>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-top-right-radius:10px;border-top-left-radius:10px;-moz-border-radius-topright:10px;-moz-border-radius-topleft:10px;-webkit-border-top-right-radius:10px;-webkit-border-top-left-radius:10px;border-bottom:5px solid #7b8389;background:#7b8389 url(/assets/active_admin/nested_menu_arrow_dark-b40a488b4f4b7d25cce531a15db4037b.gif) no-repeat calc(100% - 7px) 50%;z-index:1020}#header Line truncated span.icon{vertical-align:middle;display:inline-block}span.icon svg{vertical-align:baseline}span.icon{width:0.8em;height:0.8em}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline}body{line-height:1;color:black;background:white}ol,ul{list-style:none}table{border-collapse:separate;border-spacing:0;vertical-align:middle}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:"" ""}q:before,q:after,blockquote:before,blockquote:after{content:""}a img{border:none}html{font-size:100.01%}body{font-size:75%;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif}h1,h2,h3,h4,h5,h6{font-weight:normal;color:#5e6469}h1 img,h2 img,h3 img,h4 img,h5 img,h6 img{margin:0}h1{font-size:3em;line-height:1;margin-bottom:0.5em}h2{font-size:2em;margin-bottom:0.75em}h3{font-size:1.5em;line-height:1;margin-bottom:1em}h4{font-size:1.2em;line-height:1.25;margin-bottom:1.25em}h5{font-size:1em;font-weight:bold;margin-bottom:1.5em}h6{font-size:1em;font-weight:bold}p{margin:0 0 1.5em}p .left{margin:1.5em 1.5em 1.5em 0;padding:0}p .right{margin:1.5em 0 1.5em 1.5em;padding:0}.left{float:left !important}.right{float:right !important}blockquote{margin:1.5em;color:#666;font-style:italic}strong,dfn{font-weight:bold}em,dfn{font-style:italic}sup,sub{line-height:0}abbr,acronym{border-bottom:1px dotted #666}address{margin:0 0 1.5em;font-style:italic}del{color:#666}pre{margin:1.5em 0;white-space:pre}pre,code,tt{font:1em 'andale mono', 'lucida console', monospace;line-height:1.5}li ul,li ol{margin:0}ul,ol{margin:0 1.5em 1.5em 0;padding-left:1.5em}ul{list-style-type:disc}ol{list-style-type:decimal}dl{margin:0 0 1.5em 0}dl dt{font-weight:bold}dd{margin-left:1.5em}table{margin-bottom:1.4em;width:100%}th{font-weight:bold}thead th{background:#c3d9ff}th,td,caption{padding:4px 10px 4px 5px}.small{font-size:.8em;margin-bottom:1.875em;line-height:1.875em}.large{font-size:1.2em;line-height:2.5em;margin-bottom:1.25em}.hide{display:none}.quiet{color:#666}.loud{color:#000}.highlight{background:#ff0}.added{background:#060;color:#fff}.removed{background:#900;color:#fff}.first{margin-left:0;padding-left:0}.last{margin-right:0;padding-right:0}.top{margin-top:0;padding-top:0}.bottom{margin-bottom:0;padding-bottom:0}#header{background:#6a7176;background:-webkit-linear-gradient(-90deg, #6a7176, #4d5256);background:-moz-linear-gradient(-90deg, #6a7176, #4d5256);background:linear, -90deg, #6a7176, #4d5256;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF6A7176', endColorstr='#FF4D5256');-ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF6A7176', endColorstr='#FF4D5256');border-bottom:1px solid #44484b;box-shadow:0 1px 2px rgba(0,0,0,0.37);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.37);-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.37);text-shadow:black 0 1px 0;display:table;height:20px;width:100%;overflow:visible;position:inherit;padding:5px 0;z-index:900}#header h1{display:table-cell;vertical-align:middle;white-space:nowrap;color:#cdcdcd;margin-right:20px;margin-bottom:0px;padding:3px 30px 0 30px;font-size:1.3em;font-weight:normal;line-height:1.2}#header h1 a{text-decoration:none}#header h1 a:hover{color:#fff}#header h1 img{position:relative;top:-2px}#header a,#header a:link{color:#cdcdcd}#header .header-item{top:2px;position:relative;height:20px}#header ul.tabs{display:table-cell;vertical-align:middle;height:100%;margin:0;padding:0}#header ul.tabs>li{display:inline-block;margin-right:4px;margin-top:5px;margin-bottom:5px;font-size:1.0em;position:relative}#header ul.tabs>li a{text-decoration:none;padding:6px 10px 4px 10px;position:relative;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}#header ul.tabs>li.current>a{background:#7b8389;color:#fff}#header ul.tabs>li.has_nested>a{background:url(/assets/active_admin/nested_menu_arrow-94d9c4f73e81d377f80ae8dbcc71128b.gif) no-repeat calc(100% - 7px) 50%;padding-right:20px}#header ul.tabs>li.has_nested.current>a{background:#7b8389 url(/assets/active_admin/nested_menu_arrow_dark-b40a488b4f4b7d25cce531a15db4037b.gif) no-repeat calc(100% - 7px) 50%;padding-right:20px}#header ul.tabs>li:hover>a{background:#7b8389;color:#fff}#header ul.tabs>li.has_nested:hover>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-top-right-radius:10px;border-top-left-radius:10px;-moz-border-radius-topright:10px;-moz-border-radius-topleft:10px;-webkit-border-top-right-radius:10px;-webkit-border-top-left-radius:10px;border-bottom:5px solid #7b8389;background:#7b8389 url(/assets/active_admin/nested_menu_arrow_dark-b40a488b4f4b7d25cce531a15db4037b.gif) no-repeat calc(100% - 7px) 50%;z-index:1020}#header Line truncated
Binary file not shown.
@@ -1 +1 @@
{"files":{"GitHub_ThingSpeak_API-f39bba3caddbf4af63e208b8552a98ac.jpg":{"logical_path":"GitHub_ThingSpeak_API.jpg","mtime":"2014-02-08T20:02:14-05:00","size":26303,"digest":"f39bba3caddbf4af63e208b8552a98ac"},"ThingSpeak_Logo-3139b15204b5af565fca3a5f342ef19c.png":{"logical_path":"ThingSpeak_Logo.png","mtime":"2014-02-08T20:02:14-05:00","size":9258,"digest":"3139b15204b5af565fca3a5f342ef19c"},"eye-b67d3d940541ae7d0b469ed20ee92fe3.png":{"logical_path":"eye.png","mtime":"2014-02-08T20:02:14-05:00","size":3294,"digest":"b67d3d940541ae7d0b469ed20ee92fe3"},"flag_gray-319110a59d1d75cad2d8f29af88fdb23.gif":{"logical_path":"flag_gray.gif","mtime":"2014-02-08T20:02:14-05:00","size":983,"digest":"319110a59d1d75cad2d8f29af88fdb23"},"flag_red-16607fd54284010c4e95d5e9a3935b40.gif":{"logical_path":"flag_red.gif","mtime":"2014-02-08T20:02:14-05:00","size":987,"digest":"16607fd54284010c4e95d5e9a3935b40"},"front-b28e4f9d550ff0101a0140b1fb1ec1da.png":{"logical_path":"front.png","mtime":"2014-02-08T20:02:14-05:00","size":17717,"digest":"b28e4f9d550ff0101a0140b1fb1ec1da"},"icon_location_24-40aef0eb9d6824f7538c1056c90a2156.png":{"logical_path":"icon_location_24.png","mtime":"2014-02-08T20:01:43-05:00","size":618,"digest":"40aef0eb9d6824f7538c1056c90a2156"},"icon_rss-3ce0d86e00a9e937993988e73720950e.gif":{"logical_path":"icon_rss.gif","mtime":"2014-02-08T20:02:14-05:00","size":1008,"digest":"3ce0d86e00a9e937993988e73720950e"},"icons/InfoBox-54072dd9794a709a9fee5ab80d4be545.png":{"logical_path":"icons/InfoBox.png","mtime":"2014-02-08T20:02:14-05:00","size":837,"digest":"54072dd9794a709a9fee5ab80d4be545"},"icons/Locked-84572b6d8c7a390e424483b16f28410f.png":{"logical_path":"icons/Locked.png","mtime":"2014-02-08T20:02:14-05:00","size":1882,"digest":"84572b6d8c7a390e424483b16f28410f"},"icons/Public_32-2bcfb892862a4396e3a5593a5e1df202.png":{"logical_path":"icons/Public_32.png","mtime":"2014-02-08T20:02:14-05:00","size":4788,"digest":"2bcfb892862a4396e3a5593a5e1df202"},"icons/Unlocked-226c08041c55d88ecf7898dffe6568aa.png":{"logical_path":"icons/Unlocked.png","mtime":"2014-02-08T20:02:14-05:00","size":1652,"digest":"226c08041c55d88ecf7898dffe6568aa"},"icons/delete-9a7fbc7ba573f4ab735f66bc17466a84.png":{"logical_path":"icons/delete.png","mtime":"2014-02-08T20:02:14-05:00","size":715,"digest":"9a7fbc7ba573f4ab735f66bc17466a84"},"my_house_status_update-526a896242134f12bf2882dfad48fe24.png":{"logical_path":"my_house_status_update.png","mtime":"2014-02-08T20:02:14-05:00","size":13437,"digest":"526a896242134f12bf2882dfad48fe24"},"rails-6a9a73b3eeba7d35c79c3de6fc98b6f1.png":{"logical_path":"rails.png","mtime":"2014-02-08T20:02:14-05:00","size":6646,"digest":"6a9a73b3eeba7d35c79c3de6fc98b6f1"},"react-99715cc1aac81b13fdc4384378c9cf0e.png":{"logical_path":"react.png","mtime":"2014-02-08T20:02:14-05:00","size":2996,"digest":"99715cc1aac81b13fdc4384378c9cf0e"},"scheduled_thinghttp-b525411c648770d5252475ab92925006.png":{"logical_path":"scheduled_thinghttp.png","mtime":"2014-02-08T20:02:14-05:00","size":8677,"digest":"b525411c648770d5252475ab92925006"},"shading-4c8cafd8b85355f46eedb553ece6a663.png":{"logical_path":"shading.png","mtime":"2014-02-08T20:02:14-05:00","size":565,"digest":"4c8cafd8b85355f46eedb553ece6a663"},"social_sensor_network_logo-2cc4b27d8115a3efcf38c0c6539d06fe.png":{"logical_path":"social_sensor_network_logo.png","mtime":"2014-02-08T20:02:14-05:00","size":15370,"digest":"2cc4b27d8115a3efcf38c0c6539d06fe"},"social_sensor_network_main-f2114a6f96a027de3c3b39aefd11a34b.png":{"logical_path":"social_sensor_network_main.png","mtime":"2014-02-08T20:02:14-05:00","size":132931,"digest":"f2114a6f96a027de3c3b39aefd11a34b"},"talkback-a8f0046a06cddead53bfe73e0a1b11b1.png":{"logical_path":"talkback.png","mtime":"2014-02-08T20:02:14-05:00","size":5183,"digest":"a8f0046a06cddead53bfe73e0a1b11b1"},"thinghttp-b22d0641869d4b49e8fdc1441d19bd9d.png":{"logical_path":"thinghttp.png","mtime":"2014-02-08T20:02:14-05:00","size":5918,"digest":"b22d0641869d4b49e8fdc1441d19bd9d"},"thingtweet-2f829197927298b1eb724a072adb072a.png":{"logical_path":"thingtweet.png","mtime":"2014-02-08T20:02:14-05:00","size":4075,"digest":"2f829197927298b1eb724a072adb072a"},"tweetcontrol-5fa1225bb39f188b215d5897b37c2c18.png":{"logical_path":"tweetcontrol.png","mtime":"2014-02-08T20:02:14-05:00","size":13429,"digest":"5fa1225bb39f188b215d5897b37c2c18"},"images/ui-bg_diagonals-thick_18_b81900_40x40-7cff5779324125bfa623755a21cb7d08.png":{"logical_path":"images/ui-bg_diagonals-thick_18_b81900_40x40.png","mtime":"2014-02-08T20:01:44-05:00","size":260,"digest":"7cff5779324125bfa623755a21cb7d08"},"images/ui-bg_diagonals-thick_20_666666_40x40-e3476d26e53f4b2bdba1cbd4216bd169.png":{"logical_path":"images/ui-bg_diagonals-thick_20_666666_40x40.png","mtime":"2014-02-08T20:01:44-05:00","size":251,"digest":"e3476d26e53f4b2bdba1cbd4216bd169"},"images/ui-bg_flat_10_000000_40x100-b4d9562e67d66d83845d2edeaae222d7.png":{"logical_path":"images/ui-bg_flat_10_000000_40x100.png","mtime":"2014-02-08T20:02:1Line truncated {"files":{"GitHub_ThingSpeak_API-f39bba3caddbf4af63e208b8552a98ac.jpg":{"logical_path":"GitHub_ThingSpeak_API.jpg","mtime":"2014-02-08T20:02:14-05:00","size":26303,"digest":"f39bba3caddbf4af63e208b8552a98ac"},"ThingSpeak_Logo-3139b15204b5af565fca3a5f342ef19c.png":{"logical_path":"ThingSpeak_Logo.png","mtime":"2014-02-08T20:02:14-05:00","size":9258,"digest":"3139b15204b5af565fca3a5f342ef19c"},"eye-b67d3d940541ae7d0b469ed20ee92fe3.png":{"logical_path":"eye.png","mtime":"2014-02-08T20:02:14-05:00","size":3294,"digest":"b67d3d940541ae7d0b469ed20ee92fe3"},"flag_gray-319110a59d1d75cad2d8f29af88fdb23.gif":{"logical_path":"flag_gray.gif","mtime":"2014-02-08T20:02:14-05:00","size":983,"digest":"319110a59d1d75cad2d8f29af88fdb23"},"flag_red-16607fd54284010c4e95d5e9a3935b40.gif":{"logical_path":"flag_red.gif","mtime":"2014-02-08T20:02:14-05:00","size":987,"digest":"16607fd54284010c4e95d5e9a3935b40"},"front-b28e4f9d550ff0101a0140b1fb1ec1da.png":{"logical_path":"front.png","mtime":"2014-02-08T20:02:14-05:00","size":17717,"digest":"b28e4f9d550ff0101a0140b1fb1ec1da"},"icon_location_24-40aef0eb9d6824f7538c1056c90a2156.png":{"logical_path":"icon_location_24.png","mtime":"2014-02-08T20:01:43-05:00","size":618,"digest":"40aef0eb9d6824f7538c1056c90a2156"},"icon_rss-3ce0d86e00a9e937993988e73720950e.gif":{"logical_path":"icon_rss.gif","mtime":"2014-02-08T20:02:14-05:00","size":1008,"digest":"3ce0d86e00a9e937993988e73720950e"},"icons/InfoBox-54072dd9794a709a9fee5ab80d4be545.png":{"logical_path":"icons/InfoBox.png","mtime":"2014-02-08T20:02:14-05:00","size":837,"digest":"54072dd9794a709a9fee5ab80d4be545"},"icons/Locked-84572b6d8c7a390e424483b16f28410f.png":{"logical_path":"icons/Locked.png","mtime":"2014-02-08T20:02:14-05:00","size":1882,"digest":"84572b6d8c7a390e424483b16f28410f"},"icons/Public_32-2bcfb892862a4396e3a5593a5e1df202.png":{"logical_path":"icons/Public_32.png","mtime":"2014-02-08T20:02:14-05:00","size":4788,"digest":"2bcfb892862a4396e3a5593a5e1df202"},"icons/Unlocked-226c08041c55d88ecf7898dffe6568aa.png":{"logical_path":"icons/Unlocked.png","mtime":"2014-02-08T20:02:14-05:00","size":1652,"digest":"226c08041c55d88ecf7898dffe6568aa"},"icons/delete-9a7fbc7ba573f4ab735f66bc17466a84.png":{"logical_path":"icons/delete.png","mtime":"2014-02-08T20:02:14-05:00","size":715,"digest":"9a7fbc7ba573f4ab735f66bc17466a84"},"my_house_status_update-526a896242134f12bf2882dfad48fe24.png":{"logical_path":"my_house_status_update.png","mtime":"2014-02-08T20:02:14-05:00","size":13437,"digest":"526a896242134f12bf2882dfad48fe24"},"rails-6a9a73b3eeba7d35c79c3de6fc98b6f1.png":{"logical_path":"rails.png","mtime":"2014-02-08T20:02:14-05:00","size":6646,"digest":"6a9a73b3eeba7d35c79c3de6fc98b6f1"},"react-99715cc1aac81b13fdc4384378c9cf0e.png":{"logical_path":"react.png","mtime":"2014-02-08T20:02:14-05:00","size":2996,"digest":"99715cc1aac81b13fdc4384378c9cf0e"},"scheduled_thinghttp-b525411c648770d5252475ab92925006.png":{"logical_path":"scheduled_thinghttp.png","mtime":"2014-02-08T20:02:14-05:00","size":8677,"digest":"b525411c648770d5252475ab92925006"},"shading-4c8cafd8b85355f46eedb553ece6a663.png":{"logical_path":"shading.png","mtime":"2014-02-08T20:02:14-05:00","size":565,"digest":"4c8cafd8b85355f46eedb553ece6a663"},"social_sensor_network_logo-2cc4b27d8115a3efcf38c0c6539d06fe.png":{"logical_path":"social_sensor_network_logo.png","mtime":"2014-02-08T20:02:14-05:00","size":15370,"digest":"2cc4b27d8115a3efcf38c0c6539d06fe"},"social_sensor_network_main-f2114a6f96a027de3c3b39aefd11a34b.png":{"logical_path":"social_sensor_network_main.png","mtime":"2014-02-08T20:02:14-05:00","size":132931,"digest":"f2114a6f96a027de3c3b39aefd11a34b"},"talkback-a8f0046a06cddead53bfe73e0a1b11b1.png":{"logical_path":"talkback.png","mtime":"2014-02-08T20:02:14-05:00","size":5183,"digest":"a8f0046a06cddead53bfe73e0a1b11b1"},"thinghttp-b22d0641869d4b49e8fdc1441d19bd9d.png":{"logical_path":"thinghttp.png","mtime":"2014-02-08T20:02:14-05:00","size":5918,"digest":"b22d0641869d4b49e8fdc1441d19bd9d"},"thingtweet-2f829197927298b1eb724a072adb072a.png":{"logical_path":"thingtweet.png","mtime":"2014-02-08T20:02:14-05:00","size":4075,"digest":"2f829197927298b1eb724a072adb072a"},"tweetcontrol-5fa1225bb39f188b215d5897b37c2c18.png":{"logical_path":"tweetcontrol.png","mtime":"2014-02-08T20:02:14-05:00","size":13429,"digest":"5fa1225bb39f188b215d5897b37c2c18"},"images/ui-bg_diagonals-thick_18_b81900_40x40-7cff5779324125bfa623755a21cb7d08.png":{"logical_path":"images/ui-bg_diagonals-thick_18_b81900_40x40.png","mtime":"2014-02-08T20:01:44-05:00","size":260,"digest":"7cff5779324125bfa623755a21cb7d08"},"images/ui-bg_diagonals-thick_20_666666_40x40-e3476d26e53f4b2bdba1cbd4216bd169.png":{"logical_path":"images/ui-bg_diagonals-thick_20_666666_40x40.png","mtime":"2014-02-08T20:01:44-05:00","size":251,"digest":"e3476d26e53f4b2bdba1cbd4216bd169"},"images/ui-bg_flat_10_000000_40x100-b4d9562e67d66d83845d2edeaae222d7.png":{"logical_path":"images/ui-bg_flat_10_000000_40x100.png","mtime":"2014-02-08T20:02:1Line truncated