@@ -66,4 +66,3 @@ class @AgentShowPage |
||
66 | 66 |
|
67 | 67 |
$ -> |
68 | 68 |
Utils.registerPage(AgentShowPage, forPathsMatching: /^agents\/\d+/) |
69 |
- |
@@ -8,12 +8,26 @@ class AgentsController < ApplicationController |
||
8 | 8 |
|
9 | 9 |
@agents = current_user.agents.preload(:scenarios, :controllers).reorder(table_sort).page(params[:page]) |
10 | 10 |
|
11 |
+ if show_only_enabled_agents? |
|
12 |
+ @agents = @agents.where(disabled: false) |
|
13 |
+ end |
|
14 |
+ |
|
11 | 15 |
respond_to do |format| |
12 | 16 |
format.html |
13 | 17 |
format.json { render json: @agents } |
14 | 18 |
end |
15 | 19 |
end |
16 | 20 |
|
21 |
+ def toggle_visibility |
|
22 |
+ if show_only_enabled_agents? |
|
23 |
+ mark_all_agents_viewable |
|
24 |
+ else |
|
25 |
+ set_only_enabled_agents_as_viewable |
|
26 |
+ end |
|
27 |
+ |
|
28 |
+ redirect_to agents_path |
|
29 |
+ end |
|
30 |
+ |
|
17 | 31 |
def handle_details_post |
18 | 32 |
@agent = current_user.agents.find(params[:id]) |
19 | 33 |
if @agent.respond_to?(:handle_details_post) |
@@ -257,4 +271,20 @@ class AgentsController < ApplicationController |
||
257 | 271 |
@agent = FormConfigurableAgentPresenter.new(@agent, view_context) |
258 | 272 |
end |
259 | 273 |
end |
274 |
+ |
|
275 |
+ private |
|
276 |
+ def show_only_enabled_agents? |
|
277 |
+ !!cookies[:huginn_view_only_enabled_agents] |
|
278 |
+ end |
|
279 |
+ |
|
280 |
+ def set_only_enabled_agents_as_viewable |
|
281 |
+ cookies[:huginn_view_only_enabled_agents] = { |
|
282 |
+ value: "true", |
|
283 |
+ expires: 1.year.from_now |
|
284 |
+ } |
|
285 |
+ end |
|
286 |
+ |
|
287 |
+ def mark_all_agents_viewable |
|
288 |
+ cookies.delete(:huginn_view_only_enabled_agents) |
|
289 |
+ end |
|
260 | 290 |
end |
@@ -6,6 +6,14 @@ module AgentHelper |
||
6 | 6 |
end |
7 | 7 |
end |
8 | 8 |
|
9 |
+ def toggle_disabled_text |
|
10 |
+ if cookies[:huginn_view_only_enabled_agents] |
|
11 |
+ " Show Disabled Agents" |
|
12 |
+ else |
|
13 |
+ " Hide Disabled Agents" |
|
14 |
+ end |
|
15 |
+ end |
|
16 |
+ |
|
9 | 17 |
def scenario_links(agent) |
10 | 18 |
agent.scenarios.map { |scenario| |
11 | 19 |
link_to(scenario.name, scenario, class: "label", style: style_colors(scenario)) |
@@ -13,6 +13,7 @@ |
||
13 | 13 |
<%= link_to icon_tag('glyphicon-plus') + ' New Agent', new_agent_path, class: "btn btn-default" %> |
14 | 14 |
<%= link_to icon_tag('glyphicon-refresh') + ' Run event propagation', propagate_agents_path, method: 'post', class: "btn btn-default" %> |
15 | 15 |
<%= link_to icon_tag('glyphicon-random') + ' View diagram', diagram_path, class: "btn btn-default" %> |
16 |
+ <%= link_to icon_tag('glyphicon-adjust') + toggle_disabled_text, toggle_visibility_agents_path, method: :put, class: "btn btn-default visibility-enabler" %> |
|
16 | 17 |
</div> |
17 | 18 |
</div> |
18 | 19 |
</div> |
@@ -10,6 +10,7 @@ Huginn::Application.routes.draw do |
||
10 | 10 |
end |
11 | 11 |
|
12 | 12 |
collection do |
13 |
+ put :toggle_visibility |
|
13 | 14 |
post :propagate |
14 | 15 |
get :type_details |
15 | 16 |
post :dry_run |
@@ -16,6 +16,14 @@ describe AgentsController do |
||
16 | 16 |
get :index |
17 | 17 |
expect(assigns(:agents).all? {|i| expect(i.user).to eq(users(:bob)) }).to be_truthy |
18 | 18 |
end |
19 |
+ |
|
20 |
+ it "should not show disabled agents if the cookie is set" do |
|
21 |
+ @request.cookies["huginn_view_only_enabled_agents"] = "true" |
|
22 |
+ |
|
23 |
+ sign_in users(:bob) |
|
24 |
+ get :index |
|
25 |
+ expect(assigns(:agents).map(&:disabled).uniq).to eq([false]) |
|
26 |
+ end |
|
19 | 27 |
end |
20 | 28 |
|
21 | 29 |
describe "POST handle_details_post" do |
@@ -67,6 +75,21 @@ describe AgentsController do |
||
67 | 75 |
end |
68 | 76 |
end |
69 | 77 |
|
78 |
+ describe "PUT toggle_visibility" do |
|
79 |
+ it "should set the cookie" do |
|
80 |
+ sign_in users(:jane) |
|
81 |
+ put :toggle_visibility |
|
82 |
+ expect(response.cookies["huginn_view_only_enabled_agents"]).to eq("true") |
|
83 |
+ end |
|
84 |
+ |
|
85 |
+ it "should delete the cookie" do |
|
86 |
+ @request.cookies["huginn_view_only_enabled_agents"] = "true" |
|
87 |
+ sign_in users(:jane) |
|
88 |
+ put :toggle_visibility |
|
89 |
+ expect(response.cookies["huginn_view_only_enabled_agents"]).to be_nil |
|
90 |
+ end |
|
91 |
+ end |
|
92 |
+ |
|
70 | 93 |
describe "POST propagate" do |
71 | 94 |
before(:each) do |
72 | 95 |
sign_in users(:bob) |
@@ -0,0 +1,22 @@ |
||
1 |
+require 'capybara_helper' |
|
2 |
+ |
|
3 |
+describe "Toggling the visibility of an agent", js: true do |
|
4 |
+ it "hides them if they are disabled" do |
|
5 |
+ login_as(users(:bob)) |
|
6 |
+ visit("/agents") |
|
7 |
+ |
|
8 |
+ expect { |
|
9 |
+ click_on("Show/Hide Disabled Agents") |
|
10 |
+ }.to change{ find_all(".table-striped tr").count }.by(-1) |
|
11 |
+ end |
|
12 |
+ |
|
13 |
+ it "shows them when they are hidden" do |
|
14 |
+ login_as(users(:bob)) |
|
15 |
+ visit("/agents") |
|
16 |
+ click_on("Show/Hide Disabled Agents") |
|
17 |
+ |
|
18 |
+ expect { |
|
19 |
+ click_on("Show/Hide Disabled Agents") |
|
20 |
+ }.to change{ find_all(".table-striped tr").count }.by(1) |
|
21 |
+ end |
|
22 |
+end |
@@ -32,6 +32,25 @@ bob_website_agent: |
||
32 | 32 |
} |
33 | 33 |
}.to_json.inspect %> |
34 | 34 |
|
35 |
+bob_disabled_website_agent: |
|
36 |
+ type: Agents::WebsiteAgent |
|
37 |
+ disabled: true |
|
38 |
+ user: bob |
|
39 |
+ events_count: 1 |
|
40 |
+ schedule: "midnight" |
|
41 |
+ name: "Disabled ZKCD" |
|
42 |
+ guid: <%= SecureRandom.hex %> |
|
43 |
+ options: <%= { |
|
44 |
+ :url => "http://xkcd.com", |
|
45 |
+ :expected_update_period_in_days => 2, |
|
46 |
+ :mode => :on_change, |
|
47 |
+ :extract => { |
|
48 |
+ :url => {:css => "#comic img", :value => "@src"}, |
|
49 |
+ :title => {:css => "#comic img", :value => "@title"} |
|
50 |
+ } |
|
51 |
+ }.to_json.inspect %> |
|
52 |
+ |
|
53 |
+ |
|
35 | 54 |
bob_weather_agent: |
36 | 55 |
type: Agents::WeatherAgent |
37 | 56 |
user: bob |
@@ -130,7 +149,7 @@ jane_basecamp_agent: |
||
130 | 149 |
bob_data_output_agent: |
131 | 150 |
type: Agents::DataOutputAgent |
132 | 151 |
user: bob |
133 |
- name: RSS Feed |
|
152 |
+ name: RSS Feed |
|
134 | 153 |
guid: <%= SecureRandom.hex %> |
135 | 154 |
options: <%= { |
136 | 155 |
expected_receive_period_in_days: 3, |