action_short_message 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d1e42103d5c90cbd96e69d117d2d7599afcc2496db9a3bd7dbc4349a0857ec9a
4
+ data.tar.gz: '08ffe2747d100918ddb76ebc19930693fdc95529c469cb8812463c911bbb9742'
5
+ SHA512:
6
+ metadata.gz: 9b477d57ea7778eb8caed59d5205d21006e06110e37f649c9b09ad01cdefe1e35f2e63da9e44f690b15c0a20d68c7775391914188a23b7e876cd9e4b79f16d83
7
+ data.tar.gz: 8cafc62b55e5d476a2559c9d63cc854fefe7cf91b5bc97b80708303ca3601b17ef1f16a4ba666dec195511ba9a0feff491293c7241a6b624b118e81cb2f446db
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ actionmessage-*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.4.0
4
+ - 2.3.0
5
+ - 2.2.5
6
+ - 2.1.10
7
+ before_install: gem install bundler -v 1.11.2
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in actionmessage.gemspec
4
+ gemspec
5
+
6
+ group :test do
7
+ gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby]
8
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Diego Ballona
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,101 @@
1
+ # ActionShortMessage
2
+
3
+ ActionShortMessage reference to [dballona/actionmessage](https://github.com/dballona/actionmessage), is heavily-inspired on ActionMailer.
4
+ It's a gem for sending SMS/Text messages like we do for sending e-mails on ActionMailer.
5
+
6
+ ## Setup
7
+
8
+ Install it using bundler:
9
+
10
+ ```ruby
11
+ # Gemfile
12
+ gem 'action_short_message'
13
+ ```
14
+
15
+ ## Configuration
16
+ Place this on your environment file or application.rb
17
+
18
+ ```ruby
19
+
20
+ # Setting logger, default is Rails.logger
21
+ config.action_short_message.logger = Rails.logger
22
+
23
+ # Setting short message service provider, default is setting.
24
+ #
25
+ # Highly recommended place this on the environment files, and set
26
+ # development sms_provider to :test it can save your money
27
+ config.action_short_message.sms_provider = :test
28
+
29
+
30
+ ```
31
+
32
+ ### SMS Provider
33
+ Default provider is `test`, I also made a provider, use Mitake(山竹簡訊) api.
34
+ You can add [mitake_sms](http://) in Taiwan 🇹🇼
35
+
36
+ you also can create your provider, by implement `ActionShortMessage::SMSProviders::Base` and add provider follow by `ActionShortMessage::Base.add_provider(symbol, YourProvider, provider_setting)`
37
+
38
+ ## Usage
39
+
40
+ In order to generate your message class, you can either place this code
41
+ under app/messengers/welcome_message.rb or just use generators by running
42
+ the following command: `rails g messenger Welcome send_welcome_sms`
43
+
44
+ ```ruby
45
+ class WelcomeMessenger < ActionShortMessage::Base
46
+ def send_welcome_sms(name, phone_number_to_send_message)
47
+ @name = name
48
+ sms(to: phone_number_to_send_message)
49
+ end
50
+
51
+ # Inline message example, body parameter has preference compared
52
+ # to a text.erb template.
53
+ def welcome_with_inline_body(name, phone_number_to_send_message)
54
+ @name = name
55
+ sms(to: phone_number_to_send_message, message: 'Inline message')
56
+ end
57
+ end
58
+ ```
59
+
60
+ ### Views
61
+
62
+ If you want to use template, add this file to `app/view/messenger/{your_messenger_name}/{method_name}.erb`
63
+
64
+ ```html
65
+ Welcome, <%= @name %>!
66
+ ```
67
+
68
+ ### Callbacks
69
+ You can specify callbacks using `before_action` and `after_action` for configuring your messages.
70
+
71
+ ```ruby
72
+ class WelcomeMessenger
73
+ before_action :set_default_message
74
+ after_action :log_message
75
+
76
+ private
77
+
78
+ def set_default_message
79
+ ...
80
+ end
81
+
82
+ def log_message
83
+ ...
84
+ end
85
+ end
86
+
87
+ ```
88
+
89
+ And to send is really simple!
90
+
91
+ ```ruby
92
+ name = 'John Doe'
93
+ phone = '0987654321'
94
+
95
+ # To send right away:
96
+ WelcomeMessage.send_welcome_sms(name, phone).deliver_now
97
+
98
+ # To send through a background job
99
+ WelcomeMessage.send_welcome_sms(name, phone).deliver_later
100
+
101
+ ```
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,30 @@
1
+ lib = File.expand_path('lib', __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'action_short_message/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'action_short_message'
7
+ spec.version = ActionShortMessage::VERSION
8
+ spec.authors = ['David']
9
+ spec.email = ['z22919456@gmail.com']
10
+
11
+ spec.summary = 'Refenrence dballona/action_short_message. SMS/Text Messages gem, just like ActionShortMessage'
12
+ spec.description = 'Refenrence dballona/action_short_message. SMS/Text Messages gem, just like ActionShortMessage'
13
+ spec.homepage = 'http://github.com/z22919456/action_short_message'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = 'exe'
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_dependency 'actionpack', '>= 5.0.0'
22
+ spec.add_dependency 'actionview', '>= 5.0.0'
23
+ spec.add_dependency 'activejob', '>= 5.0.0'
24
+
25
+ spec.add_development_dependency 'bundler', '~> 2.3'
26
+ spec.add_development_dependency 'codecov', '~> 0.4.3'
27
+ spec.add_development_dependency 'rake', '~> 11.0'
28
+ spec.add_development_dependency 'rspec', '~> 3.0'
29
+ spec.add_development_dependency 'webmock', '~> 3.14'
30
+ end
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'action_short_message'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require 'irb'
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,145 @@
1
+ require 'active_support/core_ext/string/inflections'
2
+ require 'active_support/core_ext/hash/except'
3
+ require 'active_support/core_ext/module/anonymous'
4
+ require 'action_short_message/log_subscriber'
5
+
6
+ module ActionShortMessage
7
+ class Base < AbstractController::Base
8
+ include SMSProviders
9
+
10
+ abstract!
11
+
12
+ include AbstractController::Rendering
13
+ include AbstractController::Logger
14
+ include AbstractController::Callbacks
15
+
16
+ include ActionView::Layouts
17
+
18
+ class << self
19
+ def register_observers(*observers)
20
+ observers.flaten.compact.each { |observer| register_observer(observer) }
21
+ end
22
+
23
+ def unrgister_observers(*observers)
24
+ observers.flatten.compact.each { |observer| unregister_observer(observer) }
25
+ end
26
+
27
+ def register_observer(observer)
28
+ Message.register_observer(observer_class_for(observer))
29
+ end
30
+
31
+ class_attribute :default_params
32
+ self.default_params = {
33
+ adapter: {
34
+ name: :test,
35
+ credentials: {}
36
+ }
37
+ }
38
+
39
+ # Sets the defaults through app configuration:
40
+ # config.action_short_message.default()
41
+ #
42
+ # Aliased by ::default_options=
43
+ #
44
+ def default(value = nil)
45
+ self.default_params = default_params.merge(value).freeze if value
46
+ default_params
47
+ end
48
+ # Allows to set defaults through app configuration:
49
+ # config.action_short_message = { charset: 'ISO-8859-1' }
50
+ #
51
+ alias default_options= default
52
+
53
+ def base_paths
54
+ %w[
55
+ app/views
56
+ app/views/messages
57
+ app/views/mailers
58
+ app/views/application
59
+ app/views/layouts
60
+ ].freeze
61
+ end
62
+
63
+ protected
64
+
65
+ def method_missing(method_name, *args) # :nodoc:
66
+ if action_methods.include? method_name.to_s
67
+ MessageDelivery.new(self, method_name, *args)
68
+ else
69
+ super
70
+ end
71
+ end
72
+ end
73
+
74
+ attr_internal :short_message
75
+ attr_accessor :template_name, :template_path
76
+
77
+ def initialize
78
+ super
79
+ @_short_message_was_called = false
80
+ @_short_message = ShortMessage.new
81
+ end
82
+
83
+ def payload
84
+ default_options
85
+ end
86
+
87
+ def sms(params = {}, &block)
88
+ raise ArgumentError, 'You need to provide at least a receipient' if params[:to].blank?
89
+ return short_message if @_short_message_was_called && !block
90
+
91
+ self.template_name = params[:template_name].presence || template_name
92
+ self.template_path = params[:template_path].presence || template_path
93
+
94
+ @_short_message_was_called = true
95
+ wrap_sms_provider_behavior!
96
+
97
+ # elookup_context.view_paths = (lookup_context.view_paths.to_a + self.class.base_paths).flatten.uniq
98
+
99
+ short_message.to = params[:to]
100
+ short_message.debug = params[:debug]
101
+ short_message.message = params[:message] || render(full_template_path)
102
+ short_message.options = params.reject! { |p| %i[to debug message].include?(p) }
103
+ short_message
104
+ end
105
+
106
+ def process(method_name, *args)
107
+ payload = {
108
+ messenger: self.class.name,
109
+ action: method_name
110
+ }
111
+
112
+ self.template_path ||= self.class.name.underscore
113
+ self.template_name ||= method_name
114
+
115
+ ActiveSupport::Notifications.instrument('process.action_short_message', payload) do
116
+ super
117
+ @_short_message = NullMessage.new unless @_short_message_was_called
118
+ end
119
+ end
120
+
121
+ def full_template_path
122
+ [template_path, template_name].join('/')
123
+ end
124
+
125
+ class NullMessage # :nodoc:
126
+ def body
127
+ ''
128
+ end
129
+
130
+ def header
131
+ {}
132
+ end
133
+
134
+ def respond_to?(_string, _include_all = false)
135
+ true
136
+ end
137
+
138
+ def method_missing(*_args)
139
+ nil
140
+ end
141
+ end
142
+
143
+ ActiveSupport.run_load_hooks(:action_short_message, self)
144
+ end
145
+ end
@@ -0,0 +1,29 @@
1
+ require 'active_job'
2
+
3
+ module ActionShortMessage
4
+ class DeliveryJob < ActiveJob::Base
5
+ queue_as { ActionShortMessage::Base.deliver_later_queue_name }
6
+
7
+ rescue_from StandardError, with: :handle_exception_with_message_class
8
+
9
+ def perform(message, message_method, delivery_method, *args) # :nodoc:
10
+ message.constantize.public_send(message_method, *args).send(delivery_method)
11
+ end
12
+
13
+ private
14
+
15
+ def message_class
16
+ if message = Array(@serialized_arguments).first || Array(arguments).first
17
+ message.constantize
18
+ end
19
+ end
20
+
21
+ def handle_exception_with_message_class(exception)
22
+ if klass = message_class
23
+ klass.handle_exception exception
24
+ else
25
+ raise exception
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,35 @@
1
+ module ActionShortMessage
2
+ class Interceptor
3
+ cattr_accessor :blacklist
4
+ self.blacklist = {}
5
+
6
+ class << self
7
+ def register(conditions = {})
8
+ raise TypeError, 'Invalid type. Please provide a hash object' unless conditions.methods.include?(:key)
9
+
10
+ conditions.each do |attribute, condition|
11
+ @@blacklist[attribute.to_sym] ||= []
12
+ @@blacklist[attribute.to_sym].push(condition)
13
+ end
14
+ end
15
+
16
+ def registered_for?(message)
17
+ @@blacklist.each do |attribute, conditions|
18
+ value = message.send(attribute.to_sym)
19
+
20
+ conditions.each do |condition|
21
+ return true if value.send(match_method_for(condition), condition)
22
+ end
23
+ end
24
+
25
+ false
26
+ end
27
+
28
+ private
29
+
30
+ def match_method_for(condition)
31
+ condition.is_a?(Regexp) ? :=~ : :==
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,25 @@
1
+ require 'active_support/log_subscriber'
2
+
3
+ module ActionShortMessage
4
+ class LogSubscriber < ActiveSupport::LogSubscriber
5
+ def deliver(_event)
6
+ info do
7
+ # preform_adapter = event.payload[:preform_deliveries]
8
+ end
9
+ end
10
+
11
+ def process(event)
12
+ debug do
13
+ messenger = event.payload[:messenger]
14
+ action = event.payload[:action]
15
+ "#{messenger}##{action}: processed SMS in #{event.duration.round(1)}ms"
16
+ end
17
+ end
18
+
19
+ def logger
20
+ ActionShortMessage::Base.logger || Rails.logger
21
+ end
22
+ end
23
+ end
24
+
25
+ ActionShortMessage::LogSubscriber.attach_to :action_short_message
@@ -0,0 +1,37 @@
1
+ module ActionShortMessage
2
+ class MessageDelivery
3
+ attr_reader :messenger_class, :action, :args
4
+
5
+ def initialize(messenger_class, action, *args)
6
+ @messenger_class = messenger_class
7
+ @action = action
8
+ @args = args
9
+ end
10
+
11
+ def messenger_instance
12
+ processed_messenger.send(action, *@args)
13
+ end
14
+
15
+ def deliver_now
16
+ processed_messenger.send(action, *@args).deliver
17
+ end
18
+
19
+ def deliver_later(options = {})
20
+ enqueue_delivery :deliver_now, options
21
+ end
22
+
23
+ protected
24
+
25
+ def processed_messenger
26
+ # message_delivery with template and all messenger need
27
+ @processed_messenger ||= @messenger_class.new.tap do |messenger_instance|
28
+ messenger_instance.process @action, *@args
29
+ end
30
+ end
31
+
32
+ def enqueue_delivery(delivery_method, options = {})
33
+ args = @messenger_class.name, @action.to_s, delivery_method.to_s, *@args
34
+ ::ActionShortMessage::DeliveryJob.set(options).perform_later(*args)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,21 @@
1
+ require 'active_job/railtie'
2
+ require 'action_short_message'
3
+ require 'rails'
4
+
5
+ module ActionShortMessage
6
+ class Railtie < Rails::Railtie # :nodoc:
7
+ config.action_short_message = ActiveSupport::OrderedOptions.new
8
+ config.eager_load_namespaces << ActionShortMessage
9
+
10
+ initializer 'action_short_message.logger' do
11
+ ActiveSupport.on_load(:action_short_message) { self.logger ||= Rails.logger }
12
+ end
13
+
14
+ config.after_initialize do |app|
15
+ ActiveSupport.on_load(:action_short_message) do
16
+ options = app.config.action_short_message
17
+ options.each { |k, v| send("#{k}=", v) }
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,49 @@
1
+ module ActionShortMessage
2
+ # include ActionShortMessage::Adapters
3
+
4
+ class ShortMessage
5
+ attr_accessor :action, :message, :to, :debug, :options, :raise_delivery_errors
6
+ attr_reader :sms_provider
7
+
8
+ def sms_provider(method = nil, settings = {})
9
+ @sms_provider = method.new(settings)
10
+ end
11
+
12
+ # Initialize the observers and interceptors arrays
13
+ @@delivery_notification_observers = []
14
+
15
+ # You can register an object to be informed of every short message that is sent through
16
+ # this method.
17
+ #
18
+ # Your object needs to respond to a single method #delivered_message(message)
19
+ # which receives the short message that is sent.
20
+ def self.register_observer(observer)
21
+ @@delivery_notification_observers << observer unless @@delivery_notification_observers.include?(observer)
22
+ end
23
+
24
+ # Unregister the given observer, allowing short message to resume operations
25
+ # without it.
26
+ def self.unregister_observer(observer)
27
+ @@delivery_notification_observers.delete(observer)
28
+ end
29
+
30
+ def inform_observers
31
+ @@delivery_notification_observers.each do |observer|
32
+ observer.delivered_message(self)
33
+ end
34
+ end
35
+
36
+ def self.delivery_adapters; end
37
+
38
+ def debug?
39
+ !!@debug
40
+ end
41
+
42
+ def deliver
43
+ ActiveSupport::Notifications.instrument('deliver.action_short_message', { messagage: message, to: to }) do
44
+ @sms_provider.send_message(message, options.merge(to: to))
45
+ end
46
+ inform_observers
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,25 @@
1
+ module ActionShortMessage
2
+ module SMSProviders
3
+ class Base
4
+ def initialize(params = {})
5
+ @params = params
6
+ end
7
+
8
+ def send_message(_message, _params = {})
9
+ # raise ArgumentError, 'You should provide at least one phone for sending messages' unless senders.present?
10
+
11
+ # @from = pick_sender
12
+ end
13
+
14
+ def senders
15
+ @senders ||= @params[:from].present? ? @params[:from] : ActionShortMessage::Base.default_params[:from]
16
+ end
17
+
18
+ private
19
+
20
+ def pick_sender
21
+ senders.is_a?(String) ? senders : senders.shuffle.sample
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,18 @@
1
+ module ActionShortMessage
2
+ module SMSProviders
3
+ class Test < Base
4
+ def initialize(params = {})
5
+ super(params)
6
+ end
7
+
8
+ def send_message(message, params = {})
9
+ puts "SMS TEST: send short message to #{params[:to]}, context:"
10
+ puts 'options'
11
+ puts params
12
+ puts message
13
+ puts 'Completed!'
14
+ super(message, params)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,52 @@
1
+ require 'action_short_message/sms_providers/base'
2
+ require 'action_short_message/sms_providers/test'
3
+
4
+ module ActionShortMessage
5
+ module SMSProviders
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ cattr_accessor :raise_delivery_errors
10
+ cattr_accessor :perform_deliveries, default: true
11
+ cattr_accessor :deliver_later_queue_name, default: :shore_messengers
12
+
13
+ class_attribute :sms_providers, default: {}.freeze
14
+ class_attribute :sms_provider, default: :test
15
+
16
+ add_sms_provider :test, SMSProviders::Test
17
+ end
18
+
19
+ module ClassMethods
20
+ delegate :sms_providers, :sms_providers=, to: SMSProviders::Test
21
+
22
+ def add_sms_provider(symbol, klass, default_options = {})
23
+ class_attribute(:"#{symbol}_settings") unless respond_to?(:"#{symbol}_settings")
24
+ public_send(:"#{symbol}_settings=", default_options)
25
+ self.sms_providers = sms_providers.merge(symbol.to_sym => klass).freeze
26
+ end
27
+
28
+ def wrap_sms_provider_behavior(short_message) # :nodoc:
29
+ raise 'SMS provider cannot be nil' if sms_provider.nil?
30
+
31
+ case sms_provider
32
+ when NilClass
33
+ raise 'Delivery method cannot be nil'
34
+ when Symbol
35
+ if klass = sms_providers[sms_provider]
36
+ short_message.sms_provider(klass, send(:"#{sms_provider}_settings") || {})
37
+ else
38
+ raise "Invalid delivery method #{sms_provider.inspect}"
39
+ end
40
+ else
41
+ short_message.sms_provider(method)
42
+ end
43
+ # short_message.perform_deliveries = perform_deliveries
44
+ short_message.raise_delivery_errors = raise_delivery_errors
45
+ end
46
+ end
47
+
48
+ def wrap_sms_provider_behavior!
49
+ self.class.wrap_sms_provider_behavior(short_message)
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,3 @@
1
+ module ActionShortMessage
2
+ VERSION = '0.1.0'.freeze
3
+ end
@@ -0,0 +1,40 @@
1
+ require 'abstract_controller'
2
+
3
+ require 'action_short_message/sms_providers'
4
+ require 'action_short_message/base'
5
+ require 'action_short_message/delivery_job'
6
+ require 'action_short_message/interceptor'
7
+ require 'action_short_message/short_message'
8
+ require 'action_short_message/message_delivery'
9
+ require 'action_short_message/version'
10
+ require 'action_short_message/railtie'
11
+
12
+ require 'active_support'
13
+ require 'active_support/rails'
14
+ require 'active_support/core_ext/class'
15
+ require 'active_support/core_ext/module/attr_internal'
16
+ require 'active_support/core_ext/string/inflections'
17
+ require 'active_support/lazy_load_hooks'
18
+
19
+ module ActionShortMessage
20
+ extend ::ActiveSupport::Autoload
21
+
22
+ autoload :Base
23
+ autoload :DeliveryJob
24
+ autoload :MessageDelivery
25
+ autoload :Messeng
26
+
27
+ def self.eager_load!
28
+ super
29
+ Base.descendants.each do |messenger|
30
+ messenger.eager_load! unless messenger.abstract?
31
+ end
32
+ end
33
+ end
34
+
35
+ autoload :Mime, 'action_dispatch/http/mime_type'
36
+
37
+ ActiveSupport.on_load(:action_view) do
38
+ ActionView::Base.default_formats ||= Mime::SET.symbols
39
+ ActionView::Template::Types.delegate_to Mime
40
+ end
@@ -0,0 +1,12 @@
1
+ Description:
2
+ ============
3
+ Stubs out a new message class. Passes the message name, either
4
+ CamelCased or under_scored, and an optional list of emails as arguments.
5
+
6
+ This generates a message class in app/messages.
7
+
8
+ Example:
9
+ ========
10
+ rails generate message Authentication signup forgot_password lock
11
+ creates a Authentication message class under app/messages/authentication_message.rb
12
+
@@ -0,0 +1,20 @@
1
+ module Rails
2
+ module Generators
3
+ class MessageGenerator < NamedBase
4
+ source_root File.expand_path("../templates", __FILE__)
5
+
6
+ argument :actions, type: :array, default: [], banner: "method method"
7
+
8
+ check_class_collision suffix: "Messenger"
9
+
10
+ def create_message_file
11
+ template "message.rb", File.join("app/messenger", class_path, "#{file_name}_messenger.rb")
12
+ end
13
+
14
+ protected
15
+ def file_name
16
+ @_file_name ||= super.gsub(/_messag/i, '')
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,9 @@
1
+ <% module_namespacing do -%>
2
+ class <%= class_name %>Messenger < ActionShortMessage::Base
3
+ <% actions.each do |action| -%>
4
+ def <%= action %>
5
+ sms(to: '0987654321', message: "<%= action%>")
6
+ end
7
+ <% end -%>
8
+ end
9
+ <% end -%>
metadata ADDED
@@ -0,0 +1,182 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: action_short_message
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - David
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-05-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: actionpack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 5.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 5.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: actionview
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 5.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 5.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: activejob
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 5.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 5.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.3'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: codecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.4.3
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.4.3
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '11.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '11.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.14'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.14'
125
+ description: Refenrence dballona/action_short_message. SMS/Text Messages gem, just
126
+ like ActionShortMessage
127
+ email:
128
+ - z22919456@gmail.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - ".gitignore"
134
+ - ".rspec"
135
+ - ".travis.yml"
136
+ - Gemfile
137
+ - LICENSE.txt
138
+ - README.md
139
+ - Rakefile
140
+ - action_short_message.gemspec
141
+ - bin/console
142
+ - bin/setup
143
+ - lib/action_short_message.rb
144
+ - lib/action_short_message/base.rb
145
+ - lib/action_short_message/delivery_job.rb
146
+ - lib/action_short_message/interceptor.rb
147
+ - lib/action_short_message/log_subscriber.rb
148
+ - lib/action_short_message/message_delivery.rb
149
+ - lib/action_short_message/railtie.rb
150
+ - lib/action_short_message/short_message.rb
151
+ - lib/action_short_message/sms_providers.rb
152
+ - lib/action_short_message/sms_providers/base.rb
153
+ - lib/action_short_message/sms_providers/test.rb
154
+ - lib/action_short_message/version.rb
155
+ - lib/rails/generators/message/USAGE
156
+ - lib/rails/generators/message/message_generator.rb
157
+ - lib/rails/generators/message/templates/messageer.rb
158
+ homepage: http://github.com/z22919456/action_short_message
159
+ licenses:
160
+ - MIT
161
+ metadata: {}
162
+ post_install_message:
163
+ rdoc_options: []
164
+ require_paths:
165
+ - lib
166
+ required_ruby_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ required_rubygems_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ requirements: []
177
+ rubygems_version: 3.1.6
178
+ signing_key:
179
+ specification_version: 4
180
+ summary: Refenrence dballona/action_short_message. SMS/Text Messages gem, just like
181
+ ActionShortMessage
182
+ test_files: []