From a5871fabf6a2e86e709b9405ae8e196f4f475821 Mon Sep 17 00:00:00 2001 From: Lee Lawlor Date: Mon, 23 Mar 2015 10:37:17 -0400 Subject: [PATCH] updates from Production --- app/controllers/channels_controller.rb | 1 - app/controllers/windows_controller.rb | 117 +++++------------- app/models/feed.rb | 3 +- app/models/window.rb | 24 ++++ app/views/docs/channels/_update_feed.html.erb | 4 +- app/views/docs/tutorials.html.erb | 18 ++- app/views/windows/_hidden_windows.html.erb | 13 +- spec/models/feed_spec.rb | 5 + 8 files changed, 82 insertions(+), 103 deletions(-) diff --git a/app/controllers/channels_controller.rb b/app/controllers/channels_controller.rb index 65f65de..e96d0e1 100644 --- a/app/controllers/channels_controller.rb +++ b/app/controllers/channels_controller.rb @@ -369,7 +369,6 @@ class ChannelsController < ApplicationController feed.longitude = params[:long] if params[:long] feed.longitude = params[:longitude] if params[:longitude] feed.elevation = params[:elevation] if params[:elevation] - feed.location = params[:location] if params[:location] # if the saves were successful if channel.save && feed.save diff --git a/app/controllers/windows_controller.rb b/app/controllers/windows_controller.rb index be0a853..952a9d5 100644 --- a/app/controllers/windows_controller.rb +++ b/app/controllers/windows_controller.rb @@ -1,6 +1,7 @@ class WindowsController < ApplicationController before_filter :require_user, :except => [:index, :html, :iframe] + # hides a window, returns the window id if successful or '-1' if failure def hide window = Window.find(params[:id]) window.show_flag = false @@ -11,60 +12,36 @@ class WindowsController < ApplicationController end end - # Call WindowsController.display when we want to display a window on the dashboard - # params[:visibility_flag] is whether it is the private or public dashboard - # params[:plugin] is for displaying a plugin, instead of a window - # params[:id] is the window ID for conventional windows, but the plugin_id for plugins - # params[:channel_id] is the channel_id + # displays a window on the dashboard def display - @visibility = params[:visibility_flag] - window = Window.find(params[:id]) - window = Window.new if window.nil? window.show_flag = true - #Just save this change, then modify the object before rendering the JSON - savedWindow = window.save + # save this change + saved_window = window.save - config_window window + # modify the object before rendering the JSON + window.set_title_for_display! + window.set_html_for_display! - @mychannel = current_user && current_user.id == window.channel.user_id - - if savedWindow + # if the window was saved successfully + if saved_window render :json => window.to_json else render :json => 'An error occurred'.to_json end end - def config_window(window) - if window.window_type == "plugin" - pluginName = Plugin.find(window.content_id).name - window.title = t(window.title, {:name => pluginName}) - elsif window.window_type == "chart" - window.title = t(window.title, {:field_number => window.content_id}) - options = window.options if !window.nil? - options ||= "" - window.html["::OPTIONS::"] = options unless window.html.nil? || window.html.index("::OPTIONS::").nil? - else - window.title = t(window.title) - end - end - def html window = Window.find(params[:id]) - options = window.options unless window.nil? || window.window_type != "chart" - window.html["::OPTIONS::"] = options unless window.html.nil? || window.html.index("::OPTIONS::").nil? - html = window.html - - render :text => html + window.set_html_for_display! + render :text => window.html end def iframe window = Window.find(params[:id]) - options = window.options unless window.nil? || window.window_type != "chart" - window.html["::OPTIONS::"] = options unless window.html.nil? || window.html.index("::OPTIONS::").nil? + window.set_html_for_display! iframe_html = window.html - + # set the domain correctly iframe_html = iframe_html.gsub(/src=\"[\/.]/, 'src="' + api_domain); render :text => iframe_html end @@ -73,26 +50,16 @@ class WindowsController < ApplicationController channel = Channel.find(params[:channel_id]) windows = channel.public_windows(true).order(:position) unless params[:channel_id].nil? - if channel.recent_statuses.nil? || channel.recent_statuses.size <= 0 + if channel.recent_statuses.blank? @windows = windows.delete_if { |w| w.window_type == "status" } else @windows = windows end @windows.each do |window| - - if window.window_type == "plugin" - pluginName = Plugin.find(window.content_id).name - window.title = t(window.title, {:name => pluginName}) - elsif window.window_type == "chart" - window.title = t(window.title, {:field_number => window.content_id}) - options = window.options if !window.nil? - options ||= "" - window.html["::OPTIONS::"] = options unless window.html.nil? || window.html.index("::OPTIONS::").nil? - else - window.title = t(window.title) - end - + # modify the object before rendering the JSON + window.set_title_for_display! + window.set_html_for_display! end respond_to do |format| @@ -108,21 +75,15 @@ class WindowsController < ApplicationController channel = Channel.find(params[:channel_id]) if @visibility == "private" - @windows = channel.private_windows(false) unless channel.nil? + @windows = channel.private_windows(false) else - @windows = channel.public_windows(false) unless channel.nil? + @windows = channel.public_windows(false) end @windows.reject! { |window| window.window_type == "plugin" } @windows.each do |window| - if window.window_type == "plugin" - elsif window.window_type == "chart" - window.title = t(window.title, {:field_number => window.content_id}) - options = window.options unless window.nil? - options ||= "" - window.html["::OPTIONS::"] = options unless window.html.nil? || window.html.index("::OPTIONS::").nil? - else - window.title = t(window.title) - end + # modify the object before rendering the JSON + window.set_title_for_display! + window.set_html_for_display! end respond_to do |format| @@ -133,26 +94,18 @@ class WindowsController < ApplicationController def private_windows channel = Channel.find(params[:channel_id]) - windows = channel.private_windows(true).order(:position) unless params[:channel_id].nil? + windows = channel.private_windows(true).order(:position) - if channel.recent_statuses.nil? || channel.recent_statuses.size <= 0 + if channel.recent_statuses.blank? @windows = windows.delete_if { |w| w.window_type == "status" } else @windows = windows end @windows.each do |window| - if window.window_type == "plugin" - pluginName = Plugin.find(window.content_id).name - window.title = t(window.title, {:name => pluginName}) - elsif window.window_type == "chart" - window.title = t(window.title, {:field_number => window.content_id}) - options = window.options unless window.nil? - options ||= "" - window.html["::OPTIONS::"] = options unless window.html.nil? || window.html.index("::OPTIONS::").nil? - else - window.title = t(window.title) - end + # modify the object before rendering the JSON + window.set_title_for_display! + window.set_html_for_display! end respond_to do |format| @@ -163,7 +116,6 @@ class WindowsController < ApplicationController def update - logger.info "We're trying to update the windows with " + params.to_s #params for this put are going to look like # page"=>"{\"col\":0,\"positions\":[1,2,3]}" #So.. the position values are Windows.id They should get updated with the ordinal value based @@ -177,21 +129,20 @@ class WindowsController < ApplicationController values = JSON(params[:page]) # .. then find each window and update with new ordinal position and col. - logger.info "Channel id = " + params[:channel_id].to_s @channel = current_user.channels.find(params[:channel_id]) col = values["col"] saved = true - values["positions"].each_with_index do |p,i| - windows = @channel.windows.where({:id => p}) unless p.nil? - unless windows.nil? || windows.empty? - w = windows[0] - w.position = i - w.col = col - if !w.save + values["positions"].each_with_index do |p, index| + window = @channel.windows.where({:id => p}).first unless p.nil? + if window.present? + window.position = index + window.col = col + if !window.save saved = false end end end + # if the windows were saved successfully if saved render :text => '0' else diff --git a/app/models/feed.rb b/app/models/feed.rb index 6f524a9..0426db4 100644 --- a/app/models/feed.rb +++ b/app/models/feed.rb @@ -48,7 +48,7 @@ class Feed < ActiveRecord::Base # for to_xml, return only the public attributes def self.public_options { - :except => [:id, :updated_at] + :except => [:id, :updated_at, :location] } end @@ -70,7 +70,6 @@ class Feed < ActiveRecord::Base only += [:latitude] only += [:longitude] only += [:elevation] - only += [:location] end # add status if necessary diff --git a/app/models/window.rb b/app/models/window.rb index b1d4d9c..1ffa91d 100644 --- a/app/models/window.rb +++ b/app/models/window.rb @@ -43,5 +43,29 @@ class Window < ActiveRecord::Base window if window.save end + # set the title for display to user; don't save after calling this method + def set_title_for_display! + # if this is a plugin + if window_type == "plugin" + plugin_name = Plugin.find(content_id).name + self.title = I18n.t(title, {:name => plugin_name}) + # else if this is a chart + elsif window_type == "chart" + self.title = I18n.t(title, {:field_number => content_id}) + # else set title for other window types, for example: I18n.t('window_map') = 'Channel Location' + else + self.title = I18n.t(title) + end + end + + # set the html for display to user; don't save after calling this method + def set_html_for_display! + if window_type == "chart" + html_options = options || '' + # replace '::OPTIONS::' if present + self.html['::OPTIONS::'] = html_options if html.present? && html.index("::OPTIONS::").present? + end + end + end diff --git a/app/views/docs/channels/_update_feed.html.erb b/app/views/docs/channels/_update_feed.html.erb index fa70ab2..b07b505 100644 --- a/app/views/docs/channels/_update_feed.html.erb +++ b/app/views/docs/channels/_update_feed.html.erb @@ -64,8 +64,7 @@ POST <%= @ssl_api_domain %>update @@ -92,7 +91,6 @@ POST <%= @ssl_api_domain %>update <longitude type="decimal" nil="true"/> <elevation nil="true"/> - <location nil="true"/> </feed> diff --git a/app/views/docs/tutorials.html.erb b/app/views/docs/tutorials.html.erb index 88bd36c..91b9954 100644 --- a/app/views/docs/tutorials.html.erb +++ b/app/views/docs/tutorials.html.erb @@ -12,7 +12,7 @@
-

Getting Started with ThingSpeak

+

Getting Started with ThingSpeak

C

-

Freetronics

-

Google

+

Raspberry Pi

+

Ruby

Spark Core

Twine

    @@ -136,6 +138,10 @@ +

    Windows PowerShell

    +

    Wireless

    • Connecting XBee Wireless Networks to ThingSpeak via the ConnectPort X2 running XIG
    • diff --git a/app/views/windows/_hidden_windows.html.erb b/app/views/windows/_hidden_windows.html.erb index e920f1a..1d87efd 100644 --- a/app/views/windows/_hidden_windows.html.erb +++ b/app/views/windows/_hidden_windows.html.erb @@ -15,16 +15,13 @@ // add click handler $(document).on('click', '.ioplugin', function() { - var plugins = $(".plugin"); var addPlugin = $(this); var ids = addPlugin.attr('id').split("-"); - var channelId = <%= params[:channel_id] %>; - var windowId =ids[1]; - //Need to add data to this request to identify it as a plugin request - var data = {plugin:true, visibility_flag:"<%= @visibility %>"}; - $.update("/channels/" + channelId + "/windows/"+ windowId + "/display" , data, - function(response) { + var channelId = <%= params[:channel_id] %>; + var windowId = ids[1]; + + $.update("/channels/" + channelId + "/windows/"+ windowId + "/display", {}, function(response) { var window = response.window; var window_type = window.window_type; @@ -79,7 +76,7 @@
      • Windows
      • - <% if @visibility =="private" %> + <% if @visibility == "private" %>
      • Plugins
      • <% else %>
      • Plugins
      • diff --git a/spec/models/feed_spec.rb b/spec/models/feed_spec.rb index b6b797c..499554d 100644 --- a/spec/models/feed_spec.rb +++ b/spec/models/feed_spec.rb @@ -26,6 +26,11 @@ require 'spec_helper' describe Feed do + it "should not include location in feed.to_json" do + feed = Feed.new + JSON.parse(feed.to_json).keys.include?('location').should eq(false) + end + it "should close the connection when an exception is raised" do # use a single connection for both queries connection = ActiveRecord::Base.connection