action_smser 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ module ActionSmser
2
+ module ApplicationHelper
3
+
4
+ def dr_summary_url(new_params)
5
+ delivery_reports_url({:time_span => params[:time_span], :gateway => params[:gateway], :redeliveries => params[:redeliveries]}.merge(new_params))
6
+ end
7
+
8
+ end
9
+ end
@@ -43,7 +43,8 @@ module ActionSmser
43
43
  sms_new
44
44
  end
45
45
 
46
- def re_deliver(gateway = :default)
46
+ # This updates re_delivered attribute for itself
47
+ def re_delivarable_sms(changed_delivery_options = {})
47
48
  ActionSmser::Logger.info("Re_delivering: #{self.inspect}")
48
49
  self.update_attribute(:re_delivered, true)
49
50
 
@@ -51,11 +52,7 @@ module ActionSmser
51
52
  sms_new.sms_type = "#{sms_new.sms_type}.re_delivery"
52
53
  sms_new.re_delivery_of_delivery_report_id = self.id
53
54
 
54
- unless gateway == :default
55
- sms_new.delivery_options[:delivery_method] = gateway
56
- end
57
-
58
- [sms_new, sms_new.deliver]
55
+ sms_new
59
56
  end
60
57
 
61
58
  end
@@ -1,60 +1,78 @@
1
1
 
2
2
  <%
3
- params['time_span'] ||= 'Last Month'
4
-
5
- time_span = case params['time_span'].to_s.downcase
6
- when 'previous week'
7
- 2.weeks.ago..1.week.ago
8
- when 'last month'
9
- 1.month.ago..10.minutes.ago
10
- when 'last 24 hours'
11
- 1.day.ago..10.minutes.ago
12
- when 'previous 24 hours'
13
- 2.days.ago..1.day.ago
14
- else
15
- 1.week.ago..10.minutes.ago
16
- end
3
+ params['time_span'] ||= 'Last week'
4
+ params['redeliveries'] ||= 'Include normally'
5
+
6
+ time_span = case params['time_span'].to_s.downcase
7
+ when 'week before that'
8
+ 2.weeks.ago..1.week.ago
9
+ when 'last month'
10
+ 1.month.ago..10.minutes.ago
11
+ when 'last 24 hours'
12
+ 1.day.ago..10.minutes.ago
13
+ when '24 hours before that'
14
+ 2.days.ago..1.day.ago
15
+ else
16
+ 1.week.ago..10.minutes.ago
17
+ end
17
18
 
18
19
  ar_timespan = ActionSmser::DeliveryReport.where(:created_at => time_span)
19
20
 
20
- ar_gateway = ar_timespan
21
+ ar_redeliveries = case params['redeliveries'].to_s.downcase
22
+ when 'ignore redeliveries'
23
+ ar_timespan.where("re_delivery_of_delivery_report_id IS NULL")
24
+ when 'only redeliveries'
25
+ ar_timespan.where("re_delivery_of_delivery_report_id IS NOT NULL")
26
+ else
27
+ ar_timespan
28
+ end
29
+
30
+ ar_gateway = ar_redeliveries
21
31
  ar_gateway = ar_gateway.where(:gateway => params[:gateway]) if (params[:gateway] && params[:gateway].to_s != 'all')
22
32
 
23
33
  %>
24
34
 
25
35
 
26
- <h1>Delivery Reports Summary for <%= params['time_span'] %> <%= "for #{params[:gateway]}" unless params[:gateway].blank? %></h1>
36
+ <h1>Delivery Reports Summary for
37
+ (<span style="font-size: smaller"><%= "#{time_span.first.to_s(:db)} => #{time_span.last.to_s(:db)}" %></span>)
38
+ <%= "for #{params[:gateway]}" unless params[:gateway].blank? %>
39
+ </h1>
27
40
 
28
- <p>
29
- Show summary:
30
- <%= link_to 'Last 24 hours', delivery_reports_path(:time_span => 'Last 24 Hours', :gateway => params[:gateway]) %>,
31
- <%= link_to '24 hours before that', delivery_reports_path(:time_span => 'Previous 24 Hours', :gateway => params[:gateway]) %>,
32
- <%= link_to 'Last week', delivery_reports_path(:time_span => 'Last Week', :gateway => params[:gateway]) %>,
33
- <%= link_to 'Week before that', delivery_reports_path(:time_span => 'Previous Week', :gateway => params[:gateway]) %> or
34
- <%= link_to 'Last month', delivery_reports_path(:time_span => 'Last Month', :gateway => params[:gateway]) %>.
41
+ <p class="selection_links">
42
+ <strong>Show summary:</strong>
43
+ <% ['Last 24 hours', '24 hours before that', 'Last week', 'Week before that', 'Last month'].each do |key| %>
44
+ <%= link_to key, dr_summary_url(:time_span => key), :class => (key == params['time_span'] ? 'selected' : 'not_selected') %>
45
+ <% end %>
35
46
  </p>
36
47
 
37
- <h2>Select gateway</h2>
48
+ <p class="selection_links">
49
+ <strong>Redeliveries:</strong>
50
+
51
+ <% ['Include normally', 'Ignore redeliveries', 'Only redeliveries'].each do |key| %>
52
+ <%= link_to key, dr_summary_url(:redeliveries => key), :class => (key == params['redeliveries'] ? 'selected' : 'not_selected') %>
53
+ <% end %>
54
+ </p>
38
55
 
39
- <ul>
56
+ <h2>Select gateway</h2>
57
+ <ul class="selection_links" style="width: 500px;">
40
58
  <li>
41
59
  <strong>
42
- <%= link_to('all', delivery_reports_path(:time_span => params[:time_span]) ) %>
60
+ <%= link_to('all', dr_summary_url(:gateway => nil) ) %>
43
61
  </strong>
44
62
  &nbsp;&nbsp;
63
+ <%= total = ar_redeliveries.count %> sms
64
+ &nbsp;&nbsp;
45
65
  (you can select only gateways that have messages in this period)
46
66
  </li>
47
- <%
48
- total = ar_timespan.count
49
- grouped_by_status = ar_timespan.group(:gateway).count.each do |key, val| %>
50
- <li>
51
- <strong>
52
- <%= link_to(key, delivery_reports_path(:time_span => params[:time_span], :gateway => key) ) %>
53
- </strong>
67
+ <% ar_redeliveries.group(:gateway).count.each do |key, val| %>
68
+ <li class="<%= (key == params['gateway'] ? 'selected' : 'not_selected') -%>">
69
+ <%= link_to(key, dr_summary_url(:gateway => key) ) %>
70
+
54
71
  &nbsp;&nbsp;
55
72
  <%= val %> sms
56
73
  &nbsp;&nbsp;
57
74
  (<strong><%= number_to_percentage(100.0 * val / total, :precision => 2) %></strong>)
75
+ <% if params[:gateway] == key %><strong style="padding-left: 50px;">(selected)</strong><% end %>
58
76
  </li>
59
77
  <% end %>
60
78
  </ul>
@@ -125,7 +143,7 @@ Show summary:
125
143
  <td><strong><%= key %></strong></td>
126
144
  <td><%= val %></td>
127
145
  <td><strong><%= number_to_percentage(100.0 * val / total, :precision => 2) %></strong></td>
128
- <td><%= sms_count = ActionSmser::DeliveryReport.where(:created_at => time_span).where(:sms_type => key).where(:status => 'delivered').count %></td>
146
+ <td><%= sms_count = ar_gateway.where(:sms_type => key).where(:status => 'delivered').count %></td>
129
147
  <td><strong><%= number_to_percentage(100.0 * sms_count / val, :precision => 2) %></strong></td>
130
148
  </tr>
131
149
  <% end %>
@@ -30,6 +30,12 @@
30
30
  }
31
31
  hr { margin-top: 20px; margin-bottom: 10px; }
32
32
 
33
+ .selection_links { font-weight: strong; }
34
+ .selection_links a { font-size: 12px; font-weight: normal; padding-left: 10px; padding-right: 10px;}
35
+ .selection_links a.selected { font-size: 14px; font-weight: bold; color: black; }
36
+ li.selected {background-color: #ddd;}
37
+
38
+
33
39
  .menu { margin-top: 30px; }
34
40
  .menu a { margin-right: 20px; font-size: 16px; }
35
41
 
@@ -40,7 +40,7 @@ class ActionSmser::Base
40
40
  ##################################################################
41
41
  ## INSTANCE METHODS
42
42
 
43
- attr_accessor :body, :to, :from, :sms_type, :re_delivery_of_delivery_report_id
43
+ attr_accessor :body, :to, :from, :sms_type, :re_delivery_of_delivery_report_id, :ttl
44
44
 
45
45
  # Initialized to duplicate of ActionSmser.delivery_options
46
46
  attr_accessor :delivery_options
@@ -131,6 +131,10 @@ class ActionSmser::Base
131
131
  from.to_s.gsub(/^(\+|0)/, "")
132
132
  end
133
133
 
134
+ def ttl_to_i
135
+ ttl.blank? ? ActionSmser.delivery_options[:default_ttl] : ttl.to_i
136
+ end
137
+
134
138
  def logger
135
139
  ActionSmser::Logger
136
140
  end
@@ -12,45 +12,48 @@ module ActionSmser::DeliveryMethods
12
12
  logger.info "Delivering sms by https"
13
13
 
14
14
  options = sms.delivery_options[:nexmo] || {}
15
+ options = options.dup
15
16
 
16
17
  options[:server] = 'rest.nexmo.com'
17
18
  options[:use_ssl] = true
18
- options[:ttl] ||= 60*1000
19
19
  options[:status_report_req] ||= sms.delivery_options[:save_delivery_reports]
20
20
 
21
- deliver_path = self.deliver_path(sms, options)
21
+ logger.info("Nexmo delivery with #{sms.to_numbers_array.count} recipients")
22
+ to_original = sms.to
22
23
 
23
- response = self.deliver_http_request(sms, options, deliver_path)
24
+ sms.delivery_info = []
25
+ delivery_reports = []
24
26
 
25
- logger.info "SimpleHttp delivery ||| #{deliver_path} ||| #{response.inspect}"
26
- logger.info response.body if !response.blank?
27
- sms.delivery_info = response
27
+ sms.to_numbers_array.each do |to|
28
+ deliver_path = self.deliver_path(sms, to, options)
29
+ response = self.deliver_http_request(sms, options, deliver_path)
28
30
 
29
- # Results include sms_id or error code in each line
31
+ logger.info "Nexmo delivery http ||| #{deliver_path} ||| #{response.inspect}"
32
+ logger.info response.body if !response.blank?
30
33
 
31
- results = JSON.parse(response.body)["messages"]
32
- if sms.delivery_options[:save_delivery_reports]
33
- delivery_reports = []
34
- sms.to_numbers_array.each_with_index do |to, i|
35
- result = results[i]
34
+ sms.delivery_info.push(response)
35
+
36
+ result = JSON.parse(response.body)["messages"].first
37
+
38
+ # Results include sms_id or error code in each line
39
+ if sms.delivery_options[:save_delivery_reports]
36
40
  dr = ActionSmser::DeliveryReport.build_from_sms(sms, to, result["message-id"])
37
41
  if result["status"].to_i > 0
38
42
  dr.status = "SENT_ERROR_#{result["status"]}"
39
43
  dr.log += "nexmo_error: #{result["error-text"]}"
40
44
  end
41
45
  dr.save
42
-
43
46
  delivery_reports << dr
44
47
  end
45
- return delivery_reports
46
- else
47
- return results
48
48
  end
49
49
 
50
+ sms.to = to_original
51
+
52
+ sms.delivery_options[:save_delivery_reports] ? delivery_reports : sms.delivery_info
50
53
  end
51
54
 
52
- def self.deliver_path(sms, options)
53
- "/sms/json?username=#{options[:username]}&password=#{options[:password]}&ttl=#{options[:ttl]}&status-report-req=#{options[:status_report_req]}&from=#{sms.from_encoded}&to=#{sms.to_encoded}&text=#{sms.body_escaped}"
55
+ def self.deliver_path(sms, to, options)
56
+ "/sms/json?username=#{options[:username]}&password=#{options[:password]}&ttl=#{sms.ttl_to_i*1000}&status-report-req=#{options[:status_report_req]}&from=#{sms.from_encoded}&to=#{to}&text=#{sms.body_escaped}"
54
57
  end
55
58
 
56
59
  # Callback message status handling
@@ -1,3 +1,3 @@
1
1
  module ActionSmser
2
- VERSION = "1.1.1"
2
+ VERSION = "1.2.0"
3
3
  end
data/lib/action_smser.rb CHANGED
@@ -8,7 +8,7 @@ require "action_smser/delivery_methods/nexmo"
8
8
  module ActionSmser
9
9
 
10
10
  mattr_accessor :delivery_options
11
- self.delivery_options= {:delivery_method => :test_array, :save_delivery_reports => false}
11
+ self.delivery_options= {:delivery_method => :test_array, :save_delivery_reports => false, :default_ttl => (24*60*60) }
12
12
  self.delivery_options[:gateway_commit] = {}
13
13
  self.delivery_options[:gateway_commit_observers] = []
14
14