mobility 1.0.0.alpha → 1.0.1

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 (76) 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 +54 -1
  5. data/Gemfile +5 -16
  6. data/Gemfile.lock +30 -82
  7. data/README.md +24 -29
  8. data/lib/mobility.rb +67 -9
  9. data/lib/mobility/backend.rb +8 -10
  10. data/lib/mobility/backends.rb +1 -1
  11. data/lib/mobility/backends/active_record.rb +1 -1
  12. data/lib/mobility/backends/active_record/column.rb +1 -1
  13. data/lib/mobility/backends/active_record/container.rb +6 -9
  14. data/lib/mobility/backends/active_record/hstore.rb +4 -4
  15. data/lib/mobility/backends/active_record/json.rb +3 -3
  16. data/lib/mobility/backends/active_record/jsonb.rb +3 -3
  17. data/lib/mobility/backends/active_record/key_value.rb +27 -11
  18. data/lib/mobility/backends/active_record/serialized.rb +4 -0
  19. data/lib/mobility/backends/active_record/table.rb +12 -7
  20. data/lib/mobility/backends/container.rb +10 -2
  21. data/lib/mobility/backends/hash_valued.rb +4 -0
  22. data/lib/mobility/backends/jsonb.rb +1 -1
  23. data/lib/mobility/backends/key_value.rb +12 -15
  24. data/lib/mobility/backends/sequel.rb +34 -2
  25. data/lib/mobility/backends/sequel/container.rb +8 -8
  26. data/lib/mobility/backends/sequel/hstore.rb +1 -1
  27. data/lib/mobility/backends/sequel/json.rb +1 -0
  28. data/lib/mobility/backends/sequel/key_value.rb +79 -12
  29. data/lib/mobility/backends/sequel/pg_hash.rb +6 -6
  30. data/lib/mobility/backends/sequel/serialized.rb +4 -0
  31. data/lib/mobility/backends/sequel/table.rb +18 -8
  32. data/lib/mobility/backends/table.rb +29 -29
  33. data/lib/mobility/pluggable.rb +21 -1
  34. data/lib/mobility/plugin.rb +2 -2
  35. data/lib/mobility/plugins.rb +2 -0
  36. data/lib/mobility/plugins/active_model/dirty.rb +11 -5
  37. data/lib/mobility/plugins/active_record.rb +3 -0
  38. data/lib/mobility/plugins/active_record/backend.rb +2 -0
  39. data/lib/mobility/plugins/active_record/query.rb +7 -7
  40. data/lib/mobility/plugins/active_record/uniqueness_validation.rb +5 -1
  41. data/lib/mobility/plugins/arel.rb +125 -0
  42. data/lib/mobility/plugins/arel/nodes.rb +15 -0
  43. data/lib/mobility/plugins/arel/nodes/pg_ops.rb +134 -0
  44. data/lib/mobility/plugins/attribute_methods.rb +1 -0
  45. data/lib/mobility/plugins/attributes.rb +17 -15
  46. data/lib/mobility/plugins/backend.rb +45 -22
  47. data/lib/mobility/plugins/cache.rb +12 -5
  48. data/lib/mobility/plugins/default.rb +1 -1
  49. data/lib/mobility/plugins/fallbacks.rb +4 -4
  50. data/lib/mobility/plugins/fallthrough_accessors.rb +5 -6
  51. data/lib/mobility/plugins/locale_accessors.rb +2 -5
  52. data/lib/mobility/plugins/presence.rb +1 -1
  53. data/lib/mobility/plugins/reader.rb +2 -2
  54. data/lib/mobility/plugins/sequel/dirty.rb +2 -2
  55. data/lib/mobility/plugins/writer.rb +1 -1
  56. data/lib/mobility/version.rb +2 -2
  57. data/lib/rails/generators/mobility/templates/create_string_translations.rb +0 -1
  58. data/lib/rails/generators/mobility/templates/create_text_translations.rb +0 -1
  59. data/lib/rails/generators/mobility/templates/initializer.rb +11 -3
  60. metadata +14 -20
  61. metadata.gz.sig +0 -0
  62. data/lib/mobility/active_record/model_translation.rb +0 -14
  63. data/lib/mobility/active_record/string_translation.rb +0 -10
  64. data/lib/mobility/active_record/text_translation.rb +0 -10
  65. data/lib/mobility/active_record/translation.rb +0 -14
  66. data/lib/mobility/arel.rb +0 -49
  67. data/lib/mobility/arel/nodes.rb +0 -13
  68. data/lib/mobility/arel/nodes/pg_ops.rb +0 -132
  69. data/lib/mobility/arel/visitor.rb +0 -61
  70. data/lib/mobility/sequel/column_changes.rb +0 -28
  71. data/lib/mobility/sequel/hash_initializer.rb +0 -21
  72. data/lib/mobility/sequel/model_translation.rb +0 -20
  73. data/lib/mobility/sequel/sql.rb +0 -16
  74. data/lib/mobility/sequel/string_translation.rb +0 -10
  75. data/lib/mobility/sequel/text_translation.rb +0 -10
  76. data/lib/mobility/sequel/translation.rb +0 -53
@@ -15,6 +15,7 @@ attributes only.
15
15
  extend Plugin
16
16
 
17
17
  default true
18
+ requires :attributes
18
19
 
19
20
  initialize_hook do |*names|
20
21
  include InstanceMethods
@@ -32,8 +32,15 @@ for aggregating attributes.
32
32
  end
33
33
 
34
34
  included_hook do |klass|
35
- klass.extend ClassMethods
36
- @names.each { |name| klass.register_mobility_attribute(name) }
35
+ names = @names
36
+
37
+ klass.class_eval do
38
+ extend ClassMethods
39
+ names.each { |name| mobility_attributes << name.to_s }
40
+ mobility_attributes.uniq!
41
+ rescue FrozenError
42
+ raise FrozenAttributesError, "Attempting to translate these attributes on #{klass}, which has already been subclassed: #{names.join(', ')}."
43
+ end
37
44
  end
38
45
 
39
46
  module ClassMethods
@@ -44,25 +51,20 @@ for aggregating attributes.
44
51
  mobility_attributes.include?(name.to_s)
45
52
  end
46
53
 
47
- # Register a new attribute name. Public, but treat as internal.
48
- # @param [String, Symbol] Attribute name
49
- def register_mobility_attribute(name)
50
- (self.mobility_attributes << name.to_s).uniq!
51
- end
52
-
53
- def inherited(klass)
54
- super
55
- mobility_attributes.each { |name| klass.register_mobility_attribute(name) }
56
- end
57
-
58
- protected
59
-
60
54
  # Return translated attribute names on this model.
61
55
  # @return [Array<String>] Attribute names
62
56
  def mobility_attributes
63
57
  @mobility_attributes ||= []
64
58
  end
59
+
60
+ def inherited(klass)
61
+ super
62
+ attrs = mobility_attributes.freeze # ensure attributes are not modified after being inherited
63
+ klass.class_eval { @mobility_attributes = attrs.dup }
64
+ end
65
65
  end
66
+
67
+ class FrozenAttributesError < Error; end
66
68
  end
67
69
 
68
70
  register_plugin(:attributes, Attributes)
@@ -32,18 +32,12 @@ Defines:
32
32
 
33
33
  def initialize(*args, **original_options)
34
34
  super
35
- return unless Plugins::Backend.dependencies_satisfied?(self.class)
36
35
 
37
- case options[:backend]
38
- when String, Symbol, Class
39
- @backend, @backend_options = options[:backend], options
40
- when Array
41
- @backend, @backend_options = options[:backend]
42
- @backend_options = @backend_options.merge(original_options)
43
- when NilClass
44
- @backend = @backend_options = nil
45
- else
46
- raise ArgumentError, "backend must be either a backend name, a backend class, or a two-element array"
36
+ # Validate that the default backend from config has valid keys
37
+ if (default = self.class.defaults[:backend])
38
+ name, backend_options = default
39
+ extra_keys = backend_options.keys - backend.valid_keys
40
+ raise InvalidOptionKey, "These are not valid #{name} backend keys: #{extra_keys.join(', ')}." unless extra_keys.empty?
47
41
  end
48
42
 
49
43
  include InstanceMethods
@@ -58,13 +52,15 @@ Defines:
58
52
  klass.extend ClassMethods
59
53
 
60
54
  if backend
61
- @backend_class = load_backend(backend).
62
- build_subclass(klass, backend_options)
55
+ @backend_class = backend.build_subclass(klass, backend_options)
63
56
 
64
57
  backend_class.setup_model(klass, names)
65
58
 
66
- @names.each do |name|
67
- klass.register_mobility_backend_class(name, @backend_class)
59
+ names = @names
60
+ backend_class = @backend_class
61
+
62
+ klass.class_eval do
63
+ names.each { |name| mobility_backend_classes[name.to_sym] = backend_class }
68
64
  end
69
65
 
70
66
  backend_class
@@ -83,10 +79,38 @@ Defines:
83
79
  raise e, "could not find a #{backend} backend. Did you forget to include an ORM plugin like active_record or sequel?"
84
80
  end
85
81
 
82
+ private
83
+
84
+ # Override to extract backend options from options hash.
85
+ def initialize_options(original_options)
86
+ super
87
+
88
+ case options[:backend]
89
+ when String, Symbol, Class
90
+ @backend, @backend_options = options[:backend], options
91
+ when Array
92
+ @backend, @backend_options = options[:backend]
93
+ @backend_options = @backend_options.merge(original_options)
94
+ when NilClass
95
+ @backend = @backend_options = nil
96
+ else
97
+ raise ArgumentError, "backend must be either a backend name, a backend class, or a two-element array"
98
+ end
99
+
100
+ @backend = load_backend(backend)
101
+ end
102
+
103
+ # Override default validation to exclude backend options, which may be
104
+ # mixed in with plugin options.
105
+ def validate_options(options)
106
+ return super unless backend
107
+ super(options.slice(*(options.keys - backend.valid_keys)))
108
+ end
109
+
86
110
  # Override default argument-handling in DSL to store kwargs passed along
87
111
  # with plugin name.
88
- def self.configure_default(defaults, key, *args, **kwargs)
89
- defaults[key] = [args[0], kwargs] unless args.empty?
112
+ def self.configure_default(defaults, key, backend = nil, backend_options = {})
113
+ defaults[key] = [backend, backend_options] if backend
90
114
  end
91
115
 
92
116
  module InstanceMethods
@@ -116,12 +140,9 @@ Defines:
116
140
  raise KeyError, "No backend for: #{name}"
117
141
  end
118
142
 
119
- def register_mobility_backend_class(name, backend_class)
120
- mobility_backend_classes[name.to_sym] = backend_class
121
- end
122
-
123
143
  def inherited(klass)
124
- klass.mobility_backend_classes.merge!(@mobility_backend_classes)
144
+ parent_classes = mobility_backend_classes.freeze # ensure backend classes are not modified after being inherited
145
+ klass.class_eval { @mobility_backend_classes = parent_classes.dup }
125
146
  super
126
147
  end
127
148
 
@@ -131,6 +152,8 @@ Defines:
131
152
  @mobility_backend_classes ||= {}
132
153
  end
133
154
  end
155
+
156
+ class InvalidOptionKey < Error; end
134
157
  end
135
158
 
136
159
  register_plugin(:backend, Backend)
@@ -7,8 +7,7 @@ module Mobility
7
7
  Caches values fetched from the backend so subsequent fetches can be performed
8
8
  more quickly. The cache stores cached values in a simple hash, which is not
9
9
  optimal for some storage strategies, so some backends (KeyValue, Table) use a
10
- custom module through the {Mobility::Backend::Setup#apply_plugin} hook. For
11
- details see the documentation for these backends.
10
+ custom module by defining a method, +include_cache+, on the backend class.
12
11
 
13
12
  The cache is reset when one of a set of events happens (saving, reloading,
14
13
  etc.). See {BackendResetter} for details.
@@ -28,12 +27,20 @@ Values are added to the cache in two ways:
28
27
  # Applies cache plugin to attributes.
29
28
  included_hook do |_, backend_class|
30
29
  if options[:cache]
31
- backend_class.include(BackendMethods) unless backend_class.apply_plugin(:cache)
30
+ if backend_class.respond_to?(:include_cache)
31
+ backend_class.include_cache
32
+ else
33
+ include_cache(backend_class)
34
+ end
32
35
  end
33
36
  end
34
37
 
35
38
  private
36
39
 
40
+ def include_cache(backend_class)
41
+ backend_class.include BackendMethods
42
+ end
43
+
37
44
  # Used in ORM cache plugins
38
45
  def define_cache_hooks(klass, *reset_methods)
39
46
  mod = self
@@ -55,11 +62,11 @@ Values are added to the cache in two ways:
55
62
  # @!method read(locale, value, options = {})
56
63
  # @option options [Boolean] cache *false* to disable cache.
57
64
  def read(locale, **options)
58
- return super(locale, options) if options.delete(:cache) == false
65
+ return super(locale, **options) if options.delete(:cache) == false
59
66
  if cache.has_key?(locale)
60
67
  cache[locale]
61
68
  else
62
- cache[locale] = super(locale, options)
69
+ cache[locale] = super(locale, **options)
63
70
  end
64
71
  end
65
72
 
@@ -90,7 +90,7 @@ The proc can accept zero to three arguments (see examples below)
90
90
  # *false* to disable presence filter.
91
91
  def read(locale, accessor_options = {})
92
92
  default = accessor_options.has_key?(:default) ? accessor_options.delete(:default) : options[:default]
93
- if (value = super(locale, accessor_options)).nil?
93
+ if (value = super(locale, **accessor_options)).nil?
94
94
  Default[default, locale: locale, accessor_options: accessor_options, model: model, attribute: attribute]
95
95
  else
96
96
  value
@@ -47,7 +47,7 @@ the current locale was +nil+.
47
47
  Mobility.locale = :ja
48
48
  post.title
49
49
  #=> "foo"
50
-
50
+
51
51
  post.title = "bar"
52
52
  post.title
53
53
  #=> "bar"
@@ -144,15 +144,15 @@ the current locale was +nil+.
144
144
 
145
145
  def define_read(fallbacks)
146
146
  define_method :read do |locale, fallback: true, **options|
147
- return super(locale, options) if !fallback || options[:locale]
147
+ return super(locale, **options) if !fallback || options[:locale]
148
148
 
149
149
  locales = fallback == true ? fallbacks[locale] : [locale, *fallback]
150
150
  locales.each do |fallback_locale|
151
- value = super(fallback_locale, options)
151
+ value = super(fallback_locale, **options)
152
152
  return value if Util.present?(value)
153
153
  end
154
154
 
155
- super(locale, options)
155
+ super(locale, **options)
156
156
  end
157
157
  end
158
158
 
@@ -24,14 +24,11 @@ model class is generated.
24
24
 
25
25
  default true
26
26
 
27
- requires :reader
28
- requires :writer
29
-
30
27
  # Apply fallthrough accessors plugin to attributes.
31
28
  # @param [Translations] translations
32
29
  # @param [Boolean] option
33
30
  initialize_hook do
34
- if options[:fallthrough_accessors] && options[:reader] && options[:writer]
31
+ if options[:fallthrough_accessors]
35
32
  define_fallthrough_accessors(names)
36
33
  end
37
34
  end
@@ -47,9 +44,11 @@ model class is generated.
47
44
  locale, suffix = $2.split('_')
48
45
  locale = "#{locale}-#{suffix.upcase}" if suffix
49
46
  if $4 == '=' # writer
50
- public_send(attribute_method, args[0], **(args[1] || {}), locale: locale)
47
+ kwargs = args[1].is_a?(Hash) ? args[1] : {}
48
+ public_send(attribute_method, args[0], **kwargs, locale: locale)
51
49
  else # reader
52
- public_send(attribute_method, **(args[0] || {}), locale: locale)
50
+ kwargs = args[0].is_a?(Hash) ? args[0] : {}
51
+ public_send(attribute_method, **kwargs, locale: locale)
53
52
  end
54
53
  else
55
54
  super(method_name, *args, &block)
@@ -19,9 +19,6 @@ available locales for a Rails application) will be used by default.
19
19
 
20
20
  default true
21
21
 
22
- requires :reader
23
- requires :writer
24
-
25
22
  # Apply locale accessors plugin to attributes.
26
23
  # @param [Translations] translations
27
24
  # @param [Boolean] option
@@ -30,8 +27,8 @@ available locales for a Rails application) will be used by default.
30
27
  locales = Mobility.available_locales if locales == true
31
28
  names.each do |name|
32
29
  locales.each do |locale|
33
- define_locale_reader(name, locale) if options[:reader]
34
- define_locale_writer(name, locale) if options[:writer]
30
+ define_locale_reader(name, locale)
31
+ define_locale_writer(name, locale)
35
32
  end
36
33
  end
37
34
  end
@@ -39,7 +39,7 @@ backend.
39
39
  if options.delete(:presence) == false
40
40
  super
41
41
  else
42
- super(locale, Presence[value], options)
42
+ super(locale, Presence[value], **options)
43
43
  end
44
44
  end
45
45
  # @!endgroup
@@ -19,13 +19,13 @@ Defines attribute reader that delegates to +Mobility::Backend#read+.
19
19
  class_eval <<-EOM, __FILE__, __LINE__ + 1
20
20
  def #{name}(locale: nil, **options)
21
21
  #{Reader.setup_source}
22
- mobility_backends[:#{name}].read(locale, options)
22
+ mobility_backends[:#{name}].read(locale, **options)
23
23
  end
24
24
  EOM
25
25
  class_eval <<-EOM, __FILE__, __LINE__ + 1
26
26
  def #{name}?(locale: nil, **options)
27
27
  #{Reader.setup_source}
28
- mobility_backends[:#{name}].present?(locale, options)
28
+ mobility_backends[:#{name}].present?(locale, **options)
29
29
  end
30
30
  EOM
31
31
  end
@@ -51,12 +51,12 @@ Automatically includes dirty plugin in model class when enabled.
51
51
  # @!group Backend Accessors
52
52
  # @!macro backend_writer
53
53
  # @param [Hash] options
54
- def write(locale, value, options = {})
54
+ def write(locale, value, **options)
55
55
  locale_accessor = Mobility.normalize_locale_accessor(attribute, locale).to_sym
56
56
  if model.column_changes.has_key?(locale_accessor) && model.initial_values[locale_accessor] == value
57
57
  super
58
58
  [model.changed_columns, model.initial_values].each { |h| h.delete(locale_accessor) }
59
- elsif read(locale, options.merge(fallback: false)) != value
59
+ elsif read(locale, **options.merge(fallback: false)) != value
60
60
  model.will_change_column(locale_accessor)
61
61
  super
62
62
  end
@@ -19,7 +19,7 @@ Defines attribute writer that delegates to +Mobility::Backend#write+.
19
19
  class_eval <<-EOM, __FILE__, __LINE__ + 1
20
20
  def #{name}=(value, locale: nil, **options)
21
21
  #{Writer.setup_source}
22
- mobility_backends[:#{name}].write(locale, value, options)
22
+ mobility_backends[:#{name}].write(locale, value, **options)
23
23
  end
24
24
  EOM
25
25
  end
@@ -8,8 +8,8 @@ module Mobility
8
8
  module VERSION
9
9
  MAJOR = 1
10
10
  MINOR = 0
11
- TINY = 0
12
- PRE = "alpha"
11
+ TINY = 1
12
+ PRE = nil
13
13
 
14
14
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
15
15
  end
@@ -1,5 +1,4 @@
1
1
  class CreateStringTranslations < <%= activerecord_migration_class %>
2
-
3
2
  def change
4
3
  create_table :mobility_string_translations do |t|
5
4
  t.string :locale, null: false
@@ -1,5 +1,4 @@
1
1
  class CreateTextTranslations < <%= activerecord_migration_class %>
2
-
3
2
  def change
4
3
  create_table :mobility_text_translations do |t|
5
4
  t.string :locale, null: false
@@ -1,7 +1,6 @@
1
- Mobility.configure do |config|
2
-
1
+ Mobility.configure do
3
2
  # PLUGINS
4
- config.plugins do
3
+ plugins do
5
4
  # Backend
6
5
  #
7
6
  # Sets the default backend to use in models. This can be overridden in models
@@ -104,5 +103,14 @@ Mobility.configure do |config|
104
103
  #
105
104
  # Or define specific defaults by uncommenting line below
106
105
  # locale_accessors [:en, :ja]
106
+
107
+ # Attribute Methods
108
+ #
109
+ # Adds translated attributes to +attributes+ hash, and defines methods
110
+ # +translated_attributes+ and +untranslated_attributes+ which return hashes
111
+ # with translated and untranslated attributes, respectively. Be aware that
112
+ # this plugin can create conflicts with other gems.
113
+ #
114
+ # attribute_methods
107
115
  end
108
116
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mobility
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.alpha
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Salzberg
@@ -34,7 +34,7 @@ cert_chain:
34
34
  gSQml7TqcC6dZRsZRwYqzD9kUwdAJoCqno2CBUKs2l0yQAjFT36lRrVJznb7uWwa
35
35
  xpPFnsrtyaZW6Dty8TSG3qzmeGpmpIotA8x1VA==
36
36
  -----END CERTIFICATE-----
37
- date: 2020-10-25 00:00:00.000000000 Z
37
+ date: 2020-12-21 00:00:00.000000000 Z
38
38
  dependencies:
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: request_store
@@ -156,14 +156,6 @@ files:
156
156
  - README.md
157
157
  - Rakefile
158
158
  - lib/mobility.rb
159
- - lib/mobility/active_record/model_translation.rb
160
- - lib/mobility/active_record/string_translation.rb
161
- - lib/mobility/active_record/text_translation.rb
162
- - lib/mobility/active_record/translation.rb
163
- - lib/mobility/arel.rb
164
- - lib/mobility/arel/nodes.rb
165
- - lib/mobility/arel/nodes/pg_ops.rb
166
- - lib/mobility/arel/visitor.rb
167
159
  - lib/mobility/backend.rb
168
160
  - lib/mobility/backends.rb
169
161
  - lib/mobility/backends/active_record.rb
@@ -209,6 +201,9 @@ files:
209
201
  - lib/mobility/plugins/active_record/dirty.rb
210
202
  - lib/mobility/plugins/active_record/query.rb
211
203
  - lib/mobility/plugins/active_record/uniqueness_validation.rb
204
+ - lib/mobility/plugins/arel.rb
205
+ - lib/mobility/plugins/arel/nodes.rb
206
+ - lib/mobility/plugins/arel/nodes/pg_ops.rb
212
207
  - lib/mobility/plugins/attribute_methods.rb
213
208
  - lib/mobility/plugins/attributes.rb
214
209
  - lib/mobility/plugins/backend.rb
@@ -228,13 +223,6 @@ files:
228
223
  - lib/mobility/plugins/sequel/dirty.rb
229
224
  - lib/mobility/plugins/sequel/query.rb
230
225
  - lib/mobility/plugins/writer.rb
231
- - lib/mobility/sequel/column_changes.rb
232
- - lib/mobility/sequel/hash_initializer.rb
233
- - lib/mobility/sequel/model_translation.rb
234
- - lib/mobility/sequel/sql.rb
235
- - lib/mobility/sequel/string_translation.rb
236
- - lib/mobility/sequel/text_translation.rb
237
- - lib/mobility/sequel/translation.rb
238
226
  - lib/mobility/translations.rb
239
227
  - lib/mobility/util.rb
240
228
  - lib/mobility/version.rb
@@ -259,7 +247,13 @@ metadata:
259
247
  homepage_uri: https://github.com/shioyama/mobility
260
248
  source_code_uri: https://github.com/shioyama/mobility
261
249
  changelog_uri: https://github.com/shioyama/mobility/blob/master/CHANGELOG.md
262
- post_install_message:
250
+ post_install_message: |2
251
+
252
+ Warning: Mobility v1.0 includes backwards-incompatible changes (mostly around configuration).
253
+
254
+ If you are upgrading from an earlier version, please see:
255
+ - https://github.com/shioyama/mobility/releases/tag/v1.0.0
256
+ - https://github.com/shioyama/mobility/wiki/Introduction-to-Mobility-v1.0
263
257
  rdoc_options: []
264
258
  require_paths:
265
259
  - lib
@@ -270,9 +264,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
270
264
  version: '2.5'
271
265
  required_rubygems_version: !ruby/object:Gem::Requirement
272
266
  requirements:
273
- - - ">"
267
+ - - ">="
274
268
  - !ruby/object:Gem::Version
275
- version: 1.3.1
269
+ version: '0'
276
270
  requirements: []
277
271
  rubygems_version: 3.1.2
278
272
  signing_key: