Skip to content

Commit de37477

Browse files
author
Austin Schneider
committed
move AR related code for alert to record class; reorg files
1 parent 7050043 commit de37477

31 files changed

+309
-246
lines changed

app/controllers/alerts_controller.rb

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,13 @@ class AlertsController < ApplicationController
55
helper_method :alert
66

77
def create
8-
current_user.save_alert alert
8+
alert.save
99
respond_with alert, location: alerts_url
1010
end
1111

1212
# TODO: test
1313
def alert
14-
@alert ||= begin
15-
alert_attrs = params[:alert] || {}
16-
alert_attrs.reverse_merge! :location_id => params[:location_id]
17-
Alert.new alert_attrs
18-
end
14+
@alert ||= current_user.build_alert_from_params(params)
1915
end
2016

2117
end

app/helpers/application_helper.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ module ApplicationHelper
22

33
# TODO: test
44
def present(object, klass = nil, &block)
5-
klass ||= "#{object.class}Presenter".constantize
6-
presenter = klass.new object, self
5+
presenter = if !klass && object.respond_to?(:to_presenter)
6+
object.to_presenter(self)
7+
else
8+
"#{object.class}Presenter".constantize.new object, self
9+
end
710
if block_given?
811
block.arity > 0 ? yield(presenter) : presenter.instance_eval(&block)
912
end

app/models/alert.rb

Lines changed: 0 additions & 24 deletions
This file was deleted.

app/models/email_callback.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,8 @@ class EmailCallback < ActiveRecord::Base
88
uniqueness: true,
99
length: {maximum: 255}
1010

11+
def to_presenter(view)
12+
EmailCallbackPresenter.new self, view
13+
end
14+
1115
end

app/presenters/alert_presenter.rb

Lines changed: 0 additions & 46 deletions
This file was deleted.

app/presenters/alert_presenter/attribute.rb

Lines changed: 0 additions & 7 deletions
This file was deleted.

app/presenters/alert_presenter/code_is_not.rb

Lines changed: 0 additions & 27 deletions
This file was deleted.

app/presenters/alert_presenter/email_callback_attribute.rb

Lines changed: 0 additions & 35 deletions
This file was deleted.

app/presenters/alert_presenter/location_attribute.rb

Lines changed: 0 additions & 24 deletions
This file was deleted.

app/presenters/alert_presenter/times.rb

Lines changed: 0 additions & 27 deletions
This file was deleted.

lib/pinger/alert.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
require 'alert/record'
2+
3+
class Alert
4+
5+
class << self
6+
def build(attrs)
7+
Record.new attrs
8+
end
9+
10+
delegate :joins, :scoped, :unscoped, :table_name,
11+
:to => Record
12+
end
13+
14+
end
15+
16+
require 'alert/presenter'

lib/pinger/alert/presenter.rb

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
class Alert
2+
class Presenter < Poser::Presenter
3+
4+
presents :alert
5+
6+
def location
7+
@location ||= LocationAttribute.new(self)
8+
end
9+
10+
def code_is_not
11+
@code_is_not ||= CodeIsNotAttribute.new(self)
12+
end
13+
14+
def times
15+
@times ||= TimesAttribute.new(self)
16+
end
17+
18+
def email_callback
19+
@email_callback ||= EmailCallbackAttribute.new(self)
20+
end
21+
22+
def location_options_for_select
23+
locations.map { |l| [l.title, l.id] }
24+
end
25+
26+
def email_callback_options_for_select
27+
EmailCallback.order { label.asc }.map { |ec| [ec.label, ec.id] }
28+
end
29+
30+
# TODO: test
31+
attr_accessor :form_builder
32+
33+
# TODO: test
34+
def form
35+
form_for alert do |f|
36+
self.form_builder = f
37+
yield
38+
self.form_builder = nil
39+
end
40+
end
41+
42+
end
43+
end
44+
45+
require 'alert/presenter/code_is_not_attribute'
46+
require 'alert/presenter/email_callback_attribute'
47+
require 'alert/presenter/location_attribute'
48+
require 'alert/presenter/times_attribute'
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Alert
2+
class Presenter
3+
class Attribute < Poser::Presenter::Attribute
4+
5+
delegate :alert, to: :presenter
6+
7+
end
8+
end
9+
end
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
require 'alert/presenter/attribute'
2+
3+
class Alert
4+
class Presenter
5+
class CodeIsNotAttribute < Attribute
6+
7+
def label
8+
form_builder.label :code_is_not, 'Response status code is not'
9+
end
10+
11+
def field
12+
text_field :code_is_not, max_length: 255, size: 20
13+
end
14+
15+
def errors
16+
errors = alert.errors[:code_is_not]
17+
if errors.present?
18+
render 'shared/form_errors', errors: errors.map(&:capitalize)
19+
end
20+
end
21+
22+
# TODO: test
23+
def to_s
24+
alert.code_is_not.to_s
25+
end
26+
27+
end
28+
end
29+
end
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
require 'alert/presenter/attribute'
2+
3+
class Alert
4+
class Presenter
5+
class EmailCallbackAttribute < Attribute
6+
7+
# TODO: test
8+
delegate :link_to, :new_email_callback_path, :email_callback_options_for_select, to: :presenter
9+
10+
def label
11+
form_builder.label :email_callback_id, 'Alert via'
12+
end
13+
14+
# TODO: test
15+
def field
16+
if email_callback_options_for_select.empty?
17+
"There are no email callbacks. #{link_to "Add one", new_email_callback_path}".html_safe
18+
else
19+
select :email_callback_id, email_callback_options_for_select
20+
end
21+
end
22+
23+
def errors
24+
errors = alert.errors[:email_callback_id]
25+
if errors.present?
26+
render 'shared/form_errors', errors: errors.map(&:capitalize)
27+
end
28+
end
29+
30+
# TODO: test
31+
def to_s
32+
alert.email_callback.try(:label).to_s
33+
end
34+
35+
end
36+
end
37+
end

0 commit comments

Comments
 (0)