From 64f4669302bff7871eadaaa5ac9623e43f852f8e Mon Sep 17 00:00:00 2001 From: Daniel Puglisi Date: Fri, 16 Aug 2019 09:13:57 +0200 Subject: [PATCH 1/9] remove spec.has_rdoc --- textris.gemspec | 1 - 1 file changed, 1 deletion(-) diff --git a/textris.gemspec b/textris.gemspec index 9d34a16..df1ad22 100644 --- a/textris.gemspec +++ b/textris.gemspec @@ -16,7 +16,6 @@ Gem::Specification.new do |spec| spec.description = "Implement texter classes for sending SMS messages in similar way to how e-mails are sent with ActionMailer-based mailers. Take advantage of e-mail proxying and enhanced phone number parsing, among others." spec.files = Dir["lib/**/*.rb"] - spec.has_rdoc = false spec.extra_rdoc_files = ["README.md"] spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] From 76135e3928c7f0d69640f289faa19303097f9f94 Mon Sep 17 00:00:00 2001 From: Daniel Puglisi Date: Fri, 16 Aug 2019 09:52:53 +0200 Subject: [PATCH 2/9] replace render_anywhere gem with Rails native ActionController::Renderer --- lib/textris/base.rb | 29 ++++++++++++----------------- textris.gemspec | 1 - 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/lib/textris/base.rb b/lib/textris/base.rb index 92c0070..553c282 100644 --- a/lib/textris/base.rb +++ b/lib/textris/base.rb @@ -1,16 +1,5 @@ -require 'render_anywhere' - module Textris class Base - class RenderingController < RenderAnywhere::RenderingController - layout false - - def default_url_options - ActionMailer::Base.default_url_options || {} - end - end - - include RenderAnywhere extend Textris::Delay::Sidekiq class << self @@ -53,9 +42,15 @@ def call_action end def render_content - set_instance_variables_for_rendering - - render(:template => template_name, :formats => ['text'], :locale => @locale) + renderer = ::ApplicationController.renderer.new + + renderer.render( + template: template_name, + layout: false, + formats: [:html], + locale: @locale, + assigns: set_instance_variables_for_rendering + ) end protected @@ -84,9 +79,9 @@ def template_name end def set_instance_variables_for_rendering - instance_variables.each do |var| - set_instance_variable(var.to_s.sub('@', ''), instance_variable_get(var)) - end + instance_variables.map do |var| + [var.to_s.sub('@', ''), instance_variable_get(var)] + end.to_h end end end diff --git a/textris.gemspec b/textris.gemspec index df1ad22..dfdfc58 100644 --- a/textris.gemspec +++ b/textris.gemspec @@ -35,5 +35,4 @@ Gem::Specification.new do |spec| spec.add_runtime_dependency 'activejob', '>= 4.2' spec.add_runtime_dependency 'activesupport', '>= 4.2' spec.add_runtime_dependency 'phony', '~> 2.8' - spec.add_runtime_dependency 'render_anywhere', '~> 0.0' end From 083f2f2c9803e76d05734c1626d23c0562a4e355 Mon Sep 17 00:00:00 2001 From: Daniel Puglisi Date: Fri, 16 Aug 2019 14:47:36 +0200 Subject: [PATCH 3/9] use bundler 2.0 --- textris.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/textris.gemspec b/textris.gemspec index dfdfc58..d68b10f 100644 --- a/textris.gemspec +++ b/textris.gemspec @@ -20,7 +20,7 @@ Gem::Specification.new do |spec| spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] - spec.add_development_dependency 'bundler', '~> 1.6' + spec.add_development_dependency 'bundler', '~> 2.0' spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.4' spec.add_development_dependency 'rake', '~> 10.0' spec.add_development_dependency 'rspec', '~> 3.1' From aaa723df733dcf1ac78e639e32a0289fefa73a44 Mon Sep 17 00:00:00 2001 From: Daniel Puglisi Date: Fri, 16 Aug 2019 15:39:36 +0200 Subject: [PATCH 4/9] fix tests --- spec/textris/base_spec.rb | 23 +---------------------- spec/textris/message_spec.rb | 2 +- 2 files changed, 2 insertions(+), 23 deletions(-) diff --git a/spec/textris/base_spec.rb b/spec/textris/base_spec.rb index 651591b..3580200 100644 --- a/spec/textris/base_spec.rb +++ b/spec/textris/base_spec.rb @@ -116,7 +116,7 @@ def set_instance_variable(key, value) it 'defers template rendering when :body not provided' do render_options = {} - expect_any_instance_of(MyTexter).not_to receive(:render) + expect_any_instance_of(MyTexter).not_to receive(:render_content) MyTexter.action_with_template end @@ -151,25 +151,4 @@ def my_action(p) expect(MyTexter.respond_to?(:fake_action)).to eq false end end - - describe Textris::Base::RenderingController do - before do - class Textris::Base::RenderingController - def initialize(*args) - end - end - - class ActionMailer::Base - def self.default_url_options - 'x' - end - end - end - - it 'maps default_url_options to ActionMailer configuration' do - rendering_controller = Textris::Base::RenderingController.new - - expect(rendering_controller.default_url_options).to eq 'x' - end - end end diff --git a/spec/textris/message_spec.rb b/spec/textris/message_spec.rb index b44ef1a..60c25c3 100644 --- a/spec/textris/message_spec.rb +++ b/spec/textris/message_spec.rb @@ -186,7 +186,7 @@ class SomeSampleTexter; end describe '#content' do before do - class Textris::Base::RenderingController + class ApplicationController < ActionController::Base def initialize(*args) end end From ab02b2d32b3b1432f881b1e9c71fee9534baefca Mon Sep 17 00:00:00 2001 From: Daniel Puglisi Date: Fri, 16 Aug 2019 15:53:17 +0200 Subject: [PATCH 5/9] update README --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index 66d37e5..62e125b 100644 --- a/README.md +++ b/README.md @@ -297,6 +297,21 @@ You can add optional interpolation modifiers using the `%{variable:modifiers}` s - `h`: humanize (for instance, `user_name` becomes `User name`) - `p`: format phone (for instance, `48111222333` becomes `+48 111 222 333`) +### URL Defaults + +Textris uses `ActionController::Renderer` behind the scenes. Add or modify `config/initializers/application_controller_renderer.rb` in your Rails to change the default settings: + +``` +# Be sure to restart your server when you modify this file. + +ActiveSupport::Reloader.to_prepare do + ApplicationController.renderer.defaults.merge!( + http_host: ENV['CANONICAL_HOST'], # or ActionMailer::Base.default_url_options[:host] to use the same host as ActionMailer + https: Rails.env.production? + ) +end +``` + ## Example project [Here](https://github.com/visualitypl/textris/tree/master/example/rails-4.2) you can find a simple example project that demonstrates **textris** usage with Rails 4.2. In order to see how it works or experiment with it, just go to project's directory and invoke: From 37cfc715dc2e10cc5e6c685f17df9e6e5fe0c6b8 Mon Sep 17 00:00:00 2001 From: Daniel Puglisi Date: Tue, 20 Aug 2019 10:06:16 +0200 Subject: [PATCH 6/9] add rails/engine and Textris::RenderingController --- app/controllers/textris/rendering_controller.rb | 2 ++ lib/textris.rb | 1 + lib/textris/base.rb | 2 +- lib/textris/engine.rb | 6 ++++++ spec/spec_helper.rb | 1 + spec/textris/message_spec.rb | 5 ----- textris.gemspec | 1 + 7 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 app/controllers/textris/rendering_controller.rb create mode 100644 lib/textris/engine.rb diff --git a/app/controllers/textris/rendering_controller.rb b/app/controllers/textris/rendering_controller.rb new file mode 100644 index 0000000..799cf3c --- /dev/null +++ b/app/controllers/textris/rendering_controller.rb @@ -0,0 +1,2 @@ +class Textris::RenderingController < ActionController::Base +end diff --git a/lib/textris.rb b/lib/textris.rb index 6ca4c3e..fced34c 100644 --- a/lib/textris.rb +++ b/lib/textris.rb @@ -21,6 +21,7 @@ require 'textris/delay/sidekiq/worker' end +require 'textris/engine' require 'textris/base' require 'textris/phone_formatter' require 'textris/message' diff --git a/lib/textris/base.rb b/lib/textris/base.rb index 553c282..b45b812 100644 --- a/lib/textris/base.rb +++ b/lib/textris/base.rb @@ -42,7 +42,7 @@ def call_action end def render_content - renderer = ::ApplicationController.renderer.new + renderer = Textris::RenderingController.renderer.new renderer.render( template: template_name, diff --git a/lib/textris/engine.rb b/lib/textris/engine.rb new file mode 100644 index 0000000..a7faaf2 --- /dev/null +++ b/lib/textris/engine.rb @@ -0,0 +1,6 @@ +require 'rails/engine' + +module Seiten + class Engine < ::Rails::Engine + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b3d6efe..03d957c 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -30,6 +30,7 @@ end require_relative '../lib/textris' +require_relative '../app/controllers/textris/rendering_controller' RSpec.configure do |config| config.expect_with :rspec do |expectations| diff --git a/spec/textris/message_spec.rb b/spec/textris/message_spec.rb index 60c25c3..4ea86d1 100644 --- a/spec/textris/message_spec.rb +++ b/spec/textris/message_spec.rb @@ -186,11 +186,6 @@ class SomeSampleTexter; end describe '#content' do before do - class ApplicationController < ActionController::Base - def initialize(*args) - end - end - class RenderingTexter < Textris::Base def action_with_template text :to => '48 600 700 800' diff --git a/textris.gemspec b/textris.gemspec index d68b10f..418bf32 100644 --- a/textris.gemspec +++ b/textris.gemspec @@ -20,6 +20,7 @@ Gem::Specification.new do |spec| spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] + spec.add_development_dependency "rails", ">= 4.2" spec.add_development_dependency 'bundler', '~> 2.0' spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.4' spec.add_development_dependency 'rake', '~> 10.0' From 13111d6d3ce3e2b76f2bad5b4b2388dd7756e764 Mon Sep 17 00:00:00 2001 From: Daniel Puglisi Date: Mon, 24 Aug 2020 14:48:25 +0200 Subject: [PATCH 7/9] directly use ActionController::Base --- app/controllers/textris/rendering_controller.rb | 2 -- lib/textris.rb | 1 - lib/textris/base.rb | 2 +- lib/textris/engine.rb | 6 ------ spec/spec_helper.rb | 1 - 5 files changed, 1 insertion(+), 11 deletions(-) delete mode 100644 app/controllers/textris/rendering_controller.rb delete mode 100644 lib/textris/engine.rb diff --git a/app/controllers/textris/rendering_controller.rb b/app/controllers/textris/rendering_controller.rb deleted file mode 100644 index 799cf3c..0000000 --- a/app/controllers/textris/rendering_controller.rb +++ /dev/null @@ -1,2 +0,0 @@ -class Textris::RenderingController < ActionController::Base -end diff --git a/lib/textris.rb b/lib/textris.rb index fced34c..6ca4c3e 100644 --- a/lib/textris.rb +++ b/lib/textris.rb @@ -21,7 +21,6 @@ require 'textris/delay/sidekiq/worker' end -require 'textris/engine' require 'textris/base' require 'textris/phone_formatter' require 'textris/message' diff --git a/lib/textris/base.rb b/lib/textris/base.rb index b45b812..5d9ed51 100644 --- a/lib/textris/base.rb +++ b/lib/textris/base.rb @@ -42,7 +42,7 @@ def call_action end def render_content - renderer = Textris::RenderingController.renderer.new + renderer = ActionController::Base.renderer.new renderer.render( template: template_name, diff --git a/lib/textris/engine.rb b/lib/textris/engine.rb deleted file mode 100644 index a7faaf2..0000000 --- a/lib/textris/engine.rb +++ /dev/null @@ -1,6 +0,0 @@ -require 'rails/engine' - -module Seiten - class Engine < ::Rails::Engine - end -end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 03d957c..b3d6efe 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -30,7 +30,6 @@ end require_relative '../lib/textris' -require_relative '../app/controllers/textris/rendering_controller' RSpec.configure do |config| config.expect_with :rspec do |expectations| From 2f9a48aabf25db577e9af646bd837dc044245101 Mon Sep 17 00:00:00 2001 From: Daniel Puglisi Date: Mon, 24 Aug 2020 14:56:13 +0200 Subject: [PATCH 8/9] fix deprecation warnings when running specs --- lib/textris/delivery/mail.rb | 2 +- textris.gemspec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/textris/delivery/mail.rb b/lib/textris/delivery/mail.rb index 6c71255..e07d798 100644 --- a/lib/textris/delivery/mail.rb +++ b/lib/textris/delivery/mail.rb @@ -79,7 +79,7 @@ def get_template_interpolation(key, variables) def get_rails_variable(var) case var when 'app' - Rails.application.class.parent_name + Rails.application.class.module_parent_name when 'env' Rails.env end diff --git a/textris.gemspec b/textris.gemspec index 418bf32..7a9418e 100644 --- a/textris.gemspec +++ b/textris.gemspec @@ -23,7 +23,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency "rails", ">= 4.2" spec.add_development_dependency 'bundler', '~> 2.0' spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.4' - spec.add_development_dependency 'rake', '~> 10.0' + spec.add_development_dependency 'rake', '~> 12' spec.add_development_dependency 'rspec', '~> 3.1' spec.add_development_dependency 'rspec-sidekiq', '~> 2.0' spec.add_development_dependency 'scrutinizer-ocular', '~> 1.0' From 18c086e199c6f947e7c81fb2c27c53671e7eecec Mon Sep 17 00:00:00 2001 From: Daniel Puglisi Date: Mon, 24 Aug 2020 14:56:26 +0200 Subject: [PATCH 9/9] fix #delay_until test --- spec/spec_helper.rb | 3 +++ spec/textris/delay/sidekiq_spec.rb | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b3d6efe..5a72840 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -5,6 +5,7 @@ require "sidekiq/testing" require 'textris/delay/active_job/missing' require 'textris/delay/sidekiq/missing' +require 'active_support/testing/time_helpers' CodeClimate::TestReporter.configuration.logger = Logger.new("/dev/null") @@ -32,6 +33,8 @@ require_relative '../lib/textris' RSpec.configure do |config| + config.include ActiveSupport::Testing::TimeHelpers + config.expect_with :rspec do |expectations| expectations.include_chain_clauses_in_custom_matcher_descriptions = true end diff --git a/spec/textris/delay/sidekiq_spec.rb b/spec/textris/delay/sidekiq_spec.rb index ab454ac..6cc8dc3 100644 --- a/spec/textris/delay/sidekiq_spec.rb +++ b/spec/textris/delay/sidekiq_spec.rb @@ -154,18 +154,20 @@ class XRelation < ActiveRecord::Relation; end describe '#delay_until' do it 'schedules action with proper params and execution time' do - MyTexter.delay_until(Time.new(2020, 1, 1)).delayed_action( - '48111222333', 'Hi') + travel_to(Date.new(2019,1,1)) do + MyTexter.delay_until(Time.new(2020, 1, 1)).delayed_action( + '48111222333', 'Hi') - expect_any_instance_of(MyTexter).to receive(:text).with( - :to => "48111222333", :body => "Hi").and_call_original - expect_any_instance_of(Textris::Message).to receive(:deliver) + expect_any_instance_of(MyTexter).to receive(:text).with( + :to => "48111222333", :body => "Hi").and_call_original + expect_any_instance_of(Textris::Message).to receive(:deliver) - scheduled_at = Time.at(Textris::Delay::Sidekiq::Worker.jobs.last['at']) + scheduled_at = Time.at(Textris::Delay::Sidekiq::Worker.jobs.last['at']) - expect(scheduled_at).to eq Time.new(2020, 1, 1) + expect(scheduled_at).to eq Time.new(2020, 1, 1) - Textris::Delay::Sidekiq::Worker.drain + Textris::Delay::Sidekiq::Worker.drain + end end it 'raises with wrong timestamp' do