mobility 0.4.3 → 0.5.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.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CHANGELOG.md +11 -0
  5. data/Gemfile.lock +27 -27
  6. data/README.md +8 -8
  7. data/lib/mobility.rb +18 -5
  8. data/lib/mobility/{wrapper.rb → accumulator.rb} +2 -4
  9. data/lib/mobility/active_record.rb +1 -0
  10. data/lib/mobility/active_record/backend_resetter.rb +1 -0
  11. data/lib/mobility/active_record/string_translation.rb +1 -0
  12. data/lib/mobility/active_record/text_translation.rb +1 -0
  13. data/lib/mobility/adapter.rb +19 -0
  14. data/lib/mobility/attributes.rb +2 -1
  15. data/lib/mobility/backend.rb +1 -1
  16. data/lib/mobility/backend/orm_delegator.rb +5 -4
  17. data/lib/mobility/backend_resetter.rb +2 -0
  18. data/lib/mobility/backends/active_record/column.rb +1 -0
  19. data/lib/mobility/backends/active_record/column/query_methods.rb +1 -0
  20. data/lib/mobility/backends/active_record/container.rb +21 -4
  21. data/lib/mobility/backends/active_record/container/json_query_methods.rb +30 -0
  22. data/lib/mobility/backends/active_record/container/{query_methods.rb → jsonb_query_methods.rb} +4 -2
  23. data/lib/mobility/backends/active_record/json.rb +36 -0
  24. data/lib/mobility/backends/active_record/json/query_methods.rb +25 -0
  25. data/lib/mobility/backends/active_record/jsonb.rb +4 -4
  26. data/lib/mobility/backends/active_record/jsonb/query_methods.rb +1 -0
  27. data/lib/mobility/backends/active_record/key_value.rb +2 -2
  28. data/lib/mobility/backends/active_record/key_value/query_methods.rb +1 -0
  29. data/lib/mobility/backends/active_record/pg_hash.rb +1 -0
  30. data/lib/mobility/backends/active_record/pg_query_methods.rb +1 -1
  31. data/lib/mobility/backends/active_record/serialized.rb +1 -0
  32. data/lib/mobility/backends/active_record/serialized/query_methods.rb +1 -0
  33. data/lib/mobility/backends/active_record/table.rb +2 -2
  34. data/lib/mobility/backends/active_record/table/query_methods.rb +1 -0
  35. data/lib/mobility/backends/column.rb +2 -0
  36. data/lib/mobility/backends/json.rb +20 -0
  37. data/lib/mobility/backends/jsonb.rb +0 -1
  38. data/lib/mobility/backends/key_value.rb +1 -0
  39. data/lib/mobility/backends/sequel/column.rb +1 -0
  40. data/lib/mobility/backends/sequel/column/query_methods.rb +1 -0
  41. data/lib/mobility/backends/sequel/container.rb +19 -3
  42. data/lib/mobility/backends/sequel/container/json_query_methods.rb +34 -0
  43. data/lib/mobility/backends/sequel/container/{query_methods.rb → jsonb_query_methods.rb} +2 -1
  44. data/lib/mobility/backends/sequel/hstore/query_methods.rb +1 -0
  45. data/lib/mobility/backends/sequel/json.rb +36 -0
  46. data/lib/mobility/backends/sequel/json/query_methods.rb +27 -0
  47. data/lib/mobility/backends/sequel/jsonb/query_methods.rb +2 -1
  48. data/lib/mobility/backends/sequel/key_value.rb +3 -3
  49. data/lib/mobility/backends/sequel/key_value/query_methods.rb +1 -0
  50. data/lib/mobility/backends/sequel/pg_hash.rb +1 -0
  51. data/lib/mobility/backends/sequel/query_methods.rb +1 -0
  52. data/lib/mobility/backends/sequel/serialized.rb +1 -0
  53. data/lib/mobility/backends/sequel/serialized/query_methods.rb +1 -0
  54. data/lib/mobility/backends/sequel/table.rb +1 -0
  55. data/lib/mobility/backends/sequel/table/query_methods.rb +1 -0
  56. data/lib/mobility/backends/serialized.rb +1 -0
  57. data/lib/mobility/backends/table.rb +1 -0
  58. data/lib/mobility/configuration.rb +3 -5
  59. data/lib/mobility/fallbacks.rb +28 -0
  60. data/lib/mobility/plugins/active_model/dirty.rb +5 -5
  61. data/lib/mobility/plugins/active_record/dirty.rb +1 -1
  62. data/lib/mobility/plugins/cache.rb +1 -0
  63. data/lib/mobility/plugins/default.rb +2 -0
  64. data/lib/mobility/plugins/dirty.rb +1 -0
  65. data/lib/mobility/plugins/fallbacks.rb +3 -1
  66. data/lib/mobility/plugins/fallthrough_accessors.rb +4 -4
  67. data/lib/mobility/plugins/locale_accessors.rb +2 -2
  68. data/lib/mobility/plugins/presence.rb +1 -0
  69. data/lib/mobility/sequel/column_changes.rb +3 -1
  70. data/lib/mobility/sequel/hash_initializer.rb +2 -0
  71. data/lib/mobility/sequel/string_translation.rb +1 -0
  72. data/lib/mobility/sequel/text_translation.rb +1 -0
  73. data/lib/mobility/translates.rb +2 -0
  74. data/lib/mobility/util.rb +3 -1
  75. data/lib/mobility/version.rb +3 -1
  76. data/lib/rails/generators/mobility/active_record_migration_compatibility.rb +1 -0
  77. data/lib/rails/generators/mobility/backend_generators/base.rb +3 -3
  78. data/lib/rails/generators/mobility/generators.rb +1 -0
  79. data/lib/rails/generators/mobility/install_generator.rb +1 -0
  80. data/lib/rails/generators/mobility/templates/initializer.rb +75 -0
  81. data/lib/rails/generators/mobility/translations_generator.rb +3 -3
  82. metadata +14 -5
  83. metadata.gz.sig +0 -0
@@ -46,7 +46,7 @@ Implements the {Mobility::Backends::KeyValue} backend for Sequel models.
46
46
  super
47
47
  raise CacheRequired, "Cache required for Sequel::KeyValue backend" if options[:cache] == false
48
48
  type = options[:type]
49
- options[:class_name] ||= Mobility::Sequel.const_get("#{type.capitalize}Translation".freeze)
49
+ options[:class_name] ||= Mobility::Sequel.const_get("#{type.capitalize}Translation")
50
50
  options[:class_name] = options[:class_name].constantize if options[:class_name].is_a?(String)
51
51
  options[:association_name] ||= :"#{options[:type]}_translations"
52
52
  %i[type association_name].each { |key| options[key] = options[key].to_sym }
@@ -78,7 +78,7 @@ Implements the {Mobility::Backends::KeyValue} backend for Sequel models.
78
78
  end
79
79
  define_method :after_save do
80
80
  super()
81
- attributes.each { |attribute| mobility_backend_for(attribute).save_translations }
81
+ attributes.each { |attribute| public_send(Backend.method_name(attribute)).save_translations }
82
82
  end
83
83
  end
84
84
  include callback_methods
@@ -93,7 +93,7 @@ Implements the {Mobility::Backends::KeyValue} backend for Sequel models.
93
93
  def after_destroy
94
94
  super
95
95
  [:string, :text].freeze.each do |type|
96
- Mobility::Sequel.const_get("#{type.capitalize}Translation".freeze).
96
+ Mobility::Sequel.const_get("#{type.capitalize}Translation").
97
97
  where(translatable_id: id, translatable_type: self.class.name).destroy
98
98
  end
99
99
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/backends/sequel/query_methods"
2
3
 
3
4
  module Mobility
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/util"
2
3
  require "mobility/backends/sequel"
3
4
  require "mobility/backends/hash_valued"
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/util"
2
3
 
3
4
  module Mobility
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/backends/sequel"
2
3
  require "mobility/backends/hash_valued"
3
4
  require "mobility/backends/serialized"
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/backends/sequel/query_methods"
2
3
 
3
4
  module Mobility
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/util"
2
3
  require "mobility/backends/sequel"
3
4
  require "mobility/backends/key_value"
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/backends/sequel/query_methods"
2
3
 
3
4
  module Mobility
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/util"
2
3
 
3
4
  module Mobility
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/plugins/cache"
2
3
 
3
4
  module Mobility
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mobility
2
4
  =begin
3
5
 
@@ -101,15 +103,11 @@ default_fallbacks= will be removed in the next major version of Mobility.
101
103
  def initialize
102
104
  @accessor_method = :translates
103
105
  @query_method = :i18n
104
- @fallbacks_generator = lambda { |fallbacks| I18n::Locale::Fallbacks.new(fallbacks) }
106
+ @fallbacks_generator = lambda { |fallbacks| Mobility::Fallbacks.build(fallbacks) }
105
107
  @default_accessor_locales = lambda { I18n.available_locales }
106
108
  @default_options = Options[{
107
109
  cache: true,
108
- dirty: false,
109
- fallbacks: nil,
110
110
  presence: true,
111
- default: nil,
112
- attribute_methods: false
113
111
  }]
114
112
  @plugins = %i[
115
113
  cache
@@ -0,0 +1,28 @@
1
+ module Mobility
2
+ =begin
3
+
4
+ Subclasses +I18n::Locale::Fallbacks+ such that instances of this class
5
+ fall through to fallbacks defined in +I18n.fallbacks+. This allows models to
6
+ customize fallbacks while still falling through to any fallbacks defined
7
+ globally.
8
+
9
+ =end
10
+ class Fallbacks < ::I18n::Locale::Fallbacks
11
+ # @param [Symbol] locale
12
+ # @return [Array] locales
13
+ def [](locale)
14
+ super | I18n.fallbacks[locale]
15
+ end
16
+
17
+ # For this set of fallbacks, return a new fallbacks hash.
18
+ # @param [Hash] fallbacks
19
+ # @return [I18n::Locale::Fallbacks,Mobility::Fallbacks] fallbacks hash
20
+ def self.build(fallbacks)
21
+ if I18n.respond_to?(:fallbacks)
22
+ new(fallbacks)
23
+ else
24
+ I18n::Locale::Fallbacks.new(fallbacks)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -45,21 +45,21 @@ value of the translated attribute if passed to it.
45
45
  def initialize(*attribute_names)
46
46
  attribute_names.each do |name|
47
47
  method_suffixes.each do |suffix|
48
- define_method "#{name}#{suffix}".freeze do
49
- __send__("attribute#{suffix}".freeze, Mobility.normalize_locale_accessor(name))
48
+ define_method "#{name}#{suffix}" do
49
+ __send__("attribute#{suffix}", Mobility.normalize_locale_accessor(name))
50
50
  end
51
51
  end
52
52
 
53
- define_method "restore_#{name}!".freeze do
53
+ define_method "restore_#{name}!" do
54
54
  locale_accessor = Mobility.normalize_locale_accessor(name)
55
55
  if attribute_changed?(locale_accessor)
56
- __send__("#{name}=".freeze, changed_attributes[locale_accessor])
56
+ __send__("#{name}=", changed_attributes[locale_accessor])
57
57
  end
58
58
  end
59
59
  end
60
60
 
61
61
  define_method :restore_attribute! do |attr|
62
- attribute_names.include?(attr.to_s) ? send("restore_#{attr}!".freeze) : super(attr)
62
+ attribute_names.include?(attr.to_s) ? send("restore_#{attr}!") : super(attr)
63
63
  end
64
64
  private :restore_attribute!
65
65
  end
@@ -46,7 +46,7 @@ AR::Dirty plugin adds support for the following persistence-specific methods
46
46
 
47
47
  if ::ActiveRecord::VERSION::MAJOR == 5 && ::ActiveRecord::VERSION::MINOR == 1
48
48
  names = @attribute_names
49
- method_name_regex = /\A(#{names.join('|'.freeze)})_([a-z]{2}(_[a-z]{2})?)(=?|\??)\z/.freeze
49
+ method_name_regex = /\A(#{names.join('|')})_([a-z]{2}(_[a-z]{2})?)(=?|\??)\z/.freeze
50
50
  has_attribute = Module.new do
51
51
  define_method :has_attribute? do |attr_name|
52
52
  super(attr_name) || !!method_name_regex.match(attr_name)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/plugins/cache/translation_cacher"
2
3
 
3
4
  module Mobility
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mobility
2
4
  module Plugins
3
5
  =begin
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/backend_resetter"
2
3
  require "mobility/plugins/fallthrough_accessors"
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/util"
2
3
 
3
4
  module Mobility
@@ -118,7 +119,8 @@ the current locale was +nil+.
118
119
 
119
120
  =end
120
121
  class Fallbacks < Module
121
- # Applies fallbacks plugin to attributes.
122
+ # Applies fallbacks plugin to attributes. Completely disables fallbacks
123
+ # on model if option is +false+.
122
124
  # @param [Attributes] attributes
123
125
  # @param [Boolean] option
124
126
  def self.apply(attributes, option)
@@ -44,14 +44,14 @@ model class is generated.
44
44
 
45
45
  # @param [String] One or more attributes
46
46
  def initialize(*attributes)
47
- method_name_regex = /\A(#{attributes.join('|'.freeze)})_([a-z]{2}(_[a-z]{2})?)(=?|\??)\z/.freeze
47
+ method_name_regex = /\A(#{attributes.join('|')})_([a-z]{2}(_[a-z]{2})?)(=?|\??)\z/.freeze
48
48
 
49
49
  define_method :method_missing do |method_name, *arguments, **options, &block|
50
50
  if method_name =~ method_name_regex
51
51
  attribute = $1.to_sym
52
- locale, suffix = $2.split('_'.freeze)
53
- locale = "#{locale}-#{suffix.upcase}".freeze if suffix
54
- public_send("#{attribute}#{$4}".freeze, *arguments, **options, locale: locale.to_sym)
52
+ locale, suffix = $2.split('_')
53
+ locale = "#{locale}-#{suffix.upcase}" if suffix
54
+ public_send("#{attribute}#{$4}", *arguments, **options, locale: locale.to_sym)
55
55
  else
56
56
  super(method_name, *arguments, &block)
57
57
  end
@@ -53,7 +53,7 @@ If no locales are passed as an option to the initializer,
53
53
  private
54
54
 
55
55
  def define_reader(name, locale)
56
- warning_message = "locale passed as option to locale accessor will be ignored".freeze
56
+ warning_message = "locale passed as option to locale accessor will be ignored"
57
57
  normalized_locale = Mobility.normalize_locale(locale)
58
58
 
59
59
  define_method "#{name}_#{normalized_locale}" do |**options|
@@ -70,7 +70,7 @@ If no locales are passed as an option to the initializer,
70
70
  end
71
71
 
72
72
  def define_writer(name, locale)
73
- warning_message = "locale passed as option to locale accessor will be ignored".freeze
73
+ warning_message = "locale passed as option to locale accessor will be ignored"
74
74
  normalized_locale = Mobility.normalize_locale(locale)
75
75
 
76
76
  define_method "#{name}_#{normalized_locale}=" do |value, **options|
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/util"
2
3
 
3
4
  module Mobility
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mobility
2
4
  module Sequel
3
5
  =begin
@@ -10,7 +12,7 @@ setter method is called.
10
12
  # @param [Array<String>] attributes Backend attributes
11
13
  def initialize(*attributes)
12
14
  attributes.each do |attribute|
13
- define_method "#{attribute}=".freeze do |value, **options|
15
+ define_method "#{attribute}=" do |value, **options|
14
16
  if !options[:super] && send(attribute) != value
15
17
  locale = options[:locale] || Mobility.locale
16
18
  column = attribute.to_sym
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mobility
2
4
  module Sequel
3
5
  =begin
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/sequel/translation"
2
3
 
3
4
  module Mobility
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mobility/sequel/translation"
2
3
 
3
4
  module Mobility
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mobility
2
4
  =begin
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mobility
2
4
  =begin
3
5
 
@@ -40,7 +42,7 @@ Some useful methods on strings, borrowed in parts from Sequel and ActiveSupport.
40
42
  # @return [String]
41
43
  def camelize(str)
42
44
  call_or_yield str do
43
- str.to_s.sub(/^[a-z\d]*/) { $&.capitalize }.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub('/'.freeze, '::'.freeze)
45
+ str.to_s.sub(/^[a-z\d]*/) { $&.capitalize }.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub('/', '::')
44
46
  end
45
47
  end
46
48
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mobility
2
- VERSION = "0.4.3"
4
+ VERSION = "0.5.0"
3
5
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "rails/generators/active_record"
2
3
  require "active_record/migration"
3
4
 
@@ -53,15 +53,15 @@ module Mobility
53
53
  end
54
54
 
55
55
  def template
56
- "#{backend}_translations".freeze
56
+ "#{backend}_translations"
57
57
  end
58
58
 
59
59
  def migration_dir
60
- File.expand_path("db/migrate".freeze)
60
+ File.expand_path("db/migrate")
61
61
  end
62
62
 
63
63
  def migration_file
64
- "create_#{file_name}_#{attributes.map(&:name).join('_and_')}_translations_for_mobility_#{backend}_backend".freeze
64
+ "create_#{file_name}_#{attributes.map(&:name).join('_and_')}_translations_for_mobility_#{backend}_backend"
65
65
  end
66
66
  end
67
67
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "rails/generators"
2
3
 
3
4
  require_relative "./active_record_migration_compatibility"
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "rails/generators"
2
3
  require "rails/generators/active_record"
3
4
  require_relative "./active_record_migration_compatibility"
@@ -1,5 +1,80 @@
1
1
  Mobility.configure do |config|
2
+ # Sets the default backend to use in models. This can be overridden in models
3
+ # by passing +backend: ...+ to +translates+.
2
4
  config.default_backend = :key_value
5
+
6
+ # By default, Mobility uses the +translates+ class method in models to
7
+ # describe translated attributes, but you can configure this method to be
8
+ # whatever you like. This may be useful if using Mobility alongside another
9
+ # translation gem which uses the same method name.
3
10
  config.accessor_method = :translates
11
+
12
+ # To query on translated attributes, you need to append a scope to your
13
+ # model. The name of this scope is +i18n+ by default, but this can be changed
14
+ # to something else.
4
15
  config.query_method = :i18n
16
+
17
+ # Uncomment and remove (or add) items to (from) this list to completely
18
+ # disable/enable plugins globally (so they cannot be used and are never even
19
+ # loaded). Note that if you remove an item from the list, you will not be
20
+ # able to use the plugin at all, and any options for the plugin will be
21
+ # ignored by models. (In most cases, you probably don't want to change this.)
22
+ #
23
+ # config.plugins = %i[
24
+ # cache
25
+ # dirty
26
+ # fallbacks
27
+ # presence
28
+ # default
29
+ # attribute_methods
30
+ # fallthrough_accessors
31
+ # locale_accessors
32
+ # ]
33
+
34
+ # The translation cache is on by default, but you can turn it off by
35
+ # uncommenting this line. (This may be helpful in debugging.)
36
+ #
37
+ # config.default_options[:cache] = false
38
+
39
+ # Dirty tracking is disabled by default. Uncomment this line to enable it.
40
+ # If you enable this, you should also enable +locale_accessors+ by default
41
+ # (see below).
42
+ #
43
+ # config.default_options[:dirty] = true
44
+
45
+ # No fallbacks are used by default. To define default fallbacks, uncomment
46
+ # and set the default fallback option value here. A "true" value will use
47
+ # whatever is defined by +I18n.fallbacks+ (if defined), or alternatively will
48
+ # fallback to your +I18n.default_locale+.
49
+ #
50
+ # config.default_options[:fallbacks] = true
51
+
52
+ # The Presence plugin converts empty strings to nil when fetching and setting
53
+ # translations. By default it is on, uncomment this line to turn it off.
54
+ #
55
+ # config.default_options[:presence] = false
56
+
57
+ # Set a default value to use if the translation is nil. By default this is
58
+ # off, uncomment and set a default to use it across all models (you probably
59
+ # don't want to do that).
60
+ #
61
+ # config.default_options[:default] = ...
62
+
63
+ # Uncomment to enable locale_accessors by default on models. A true value
64
+ # will use the locales defined in I18n.available_locales. If you want
65
+ # something else, pass an array of locales instead.
66
+ #
67
+ # config.default_options[:locale_accessors] = true
68
+
69
+ # Uncomment to enable fallthrough accessors by default on models. This will
70
+ # allow you to call any method with a suffix like _en or _pt_br, and Mobility
71
+ # will catch the suffix and convert it into a locale in +method_missing+. If
72
+ # you don't need this kind of open-ended fallthrough behavior, it's better
73
+ # to use locale_accessors instead (which define methods) since method_missing
74
+ # is very slow. (You can use both fallthrough and locale accessor plugins
75
+ # together without conflict.)
76
+ #
77
+ # Note: The dirty plugin enables fallthrough_accessors by default.
78
+ #
79
+ # config.default_options[:fallthrough_accessors] = true
5
80
  end
@@ -35,7 +35,7 @@ Other backends are not supported, for obvious reasons:
35
35
  =end
36
36
  class TranslationsGenerator < ::Rails::Generators::NamedBase
37
37
  SUPPORTED_BACKENDS = %w[column table]
38
- BACKEND_OPTIONS = { type: :string, desc: "Backend to use for translations (defaults to Mobility.default_backend)".freeze }
38
+ BACKEND_OPTIONS = { type: :string, desc: "Backend to use for translations (defaults to Mobility.default_backend)" }
39
39
  argument :attributes, type: :array, default: [], banner: "field[:type][:index] field[:type][:index]"
40
40
 
41
41
  class_option(:backend, BACKEND_OPTIONS)
@@ -50,7 +50,7 @@ Other backends are not supported, for obvious reasons:
50
50
  def self.prepare_for_invocation(name, value)
51
51
  if name == :backend
52
52
  if SUPPORTED_BACKENDS.include?(value)
53
- require_relative "./backend_generators/#{value}_backend".freeze
53
+ require_relative "./backend_generators/#{value}_backend"
54
54
  Mobility::BackendGenerators.const_get("#{value}_backend".camelcase.freeze)
55
55
  else
56
56
  begin
@@ -70,7 +70,7 @@ Other backends are not supported, for obvious reasons:
70
70
 
71
71
  def say_status(status, message, *args)
72
72
  if status == :invoke && SUPPORTED_BACKENDS.include?(message)
73
- super(status, "#{message}_backend".freeze, *args)
73
+ super(status, "#{message}_backend", *args)
74
74
  else
75
75
  super
76
76
  end