action_smser 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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