modulorails 1.0.0 → 1.1.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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +239 -17
  4. data/Appraisals +6 -6
  5. data/CHANGELOG.md +19 -0
  6. data/app/helpers/modulorails/application_helper.rb +4 -2
  7. data/gemfiles/rails_52.gemfile +5 -5
  8. data/gemfiles/rails_60.gemfile +5 -5
  9. data/gemfiles/rails_61.gemfile +5 -5
  10. data/gemfiles/rails_70.gemfile +5 -5
  11. data/lib/generators/modulorails/docker/docker_generator.rb +10 -1
  12. data/lib/generators/modulorails/docker/templates/Dockerfile.prod.tt +4 -0
  13. data/lib/generators/modulorails/docker/templates/Dockerfile.tt +3 -0
  14. data/lib/generators/modulorails/docker/templates/config/database.yml.tt +1 -1
  15. data/lib/generators/modulorails/docker/templates/docker-compose.yml.tt +6 -1
  16. data/lib/generators/modulorails/docker/templates/entrypoints/docker-entrypoint.sh.tt +2 -2
  17. data/lib/generators/modulorails/gitlabci/gitlabci_generator.rb +4 -2
  18. data/lib/generators/modulorails/healthcheck/health_check_generator.rb +8 -5
  19. data/lib/generators/modulorails/rubocop/rubocop_generator.rb +8 -6
  20. data/lib/generators/modulorails/self_update/self_update_generator.rb +6 -3
  21. data/lib/generators/modulorails/service/service_generator.rb +3 -1
  22. data/lib/modulorails/configuration.rb +4 -0
  23. data/lib/modulorails/data.rb +113 -62
  24. data/lib/modulorails/error_data.rb +2 -0
  25. data/lib/modulorails/errors/invalid_format_error.rb +2 -0
  26. data/lib/modulorails/errors/invalid_value_error.rb +2 -0
  27. data/lib/modulorails/railtie.rb +5 -1
  28. data/lib/modulorails/services/base_service.rb +20 -18
  29. data/lib/modulorails/services/logs_for_method_service.rb +1 -0
  30. data/lib/modulorails/success_data.rb +2 -0
  31. data/lib/modulorails/validators/database_configuration.rb +19 -9
  32. data/lib/modulorails/version.rb +3 -1
  33. data/lib/modulorails.rb +40 -33
  34. data/modulorails.gemspec +8 -7
  35. metadata +32 -33
  36. data/lib/generators/modulorails/gitlabci/templates/config/database-ci.yml.tt +0 -8
@@ -3,11 +3,13 @@
3
3
  require 'rails/generators'
4
4
 
5
5
  class Modulorails::ServiceGenerator < Rails::Generators::NamedBase
6
+
6
7
  source_root File.expand_path('templates', __dir__)
7
8
  desc 'This generator creates a service inheriting Modulorails::BaseService'
8
9
  argument :arguments, type: :array, default: [], banner: 'argument argument'
9
10
 
10
11
  def create_service_files
11
- template "service.rb", File.join("app/services", class_path, "#{file_name}_service.rb")
12
+ template 'service.rb', File.join('app/services', class_path, "#{file_name}_service.rb")
12
13
  end
14
+
13
15
  end
@@ -1,7 +1,9 @@
1
1
  module Modulorails
2
+
2
3
  # Author: Matthieu 'ciappa_m' Ciappara
3
4
  # The configuration of the gem
4
5
  class Configuration
6
+
5
7
  # All the keys to configure the gem
6
8
  attr_accessor :_name, :_main_developer, :_project_manager, :_endpoint, :_api_key,
7
9
  :_no_auto_update, :_production_url, :_staging_url, :_review_base_url
@@ -30,5 +32,7 @@ module Modulorails
30
32
  send("_#{field}=", value)
31
33
  end
32
34
  end
35
+
33
36
  end
37
+
34
38
  end
@@ -3,47 +3,90 @@ require 'active_record'
3
3
  require 'git'
4
4
 
5
5
  module Modulorails
6
+
6
7
  # Author: Matthieu 'ciappa_m' Ciappara
7
8
  # This holds the data gathered by the gem. Some come from the configuration by the gem's user.
8
9
  # Some are fetched dynamically.
9
10
  class Data
11
+
10
12
  # All the data handled by this class
11
13
  ATTRIBUTE_KEYS = %i[
12
14
  name main_developer project_manager repository type rails_name ruby_version rails_version
13
- bundler_version modulorails_version adapter db_version adapter_version production_url
14
- staging_url review_base_url
15
+ bundler_version modulorails_version adapter db_version adapter_version webpacker_version
16
+ importmap_version jsbundling_version
17
+ production_url staging_url review_base_url
15
18
  ].freeze
16
19
 
17
20
  # Useful if the gem's user need to read one of the data
18
- attr_reader *ATTRIBUTE_KEYS
21
+ attr_reader(*ATTRIBUTE_KEYS)
19
22
 
20
23
  def initialize
24
+ initialize_from_constants
25
+ initialize_from_configuration
26
+ initialize_from_database
27
+ initialize_from_gem_specs
28
+ initialize_from_git
29
+ end
30
+
31
+ # @author Matthieu 'ciappa_m' Ciappara
32
+ # @return [String] Text version of the data
33
+ def to_s
34
+ ATTRIBUTE_KEYS.map { |key| "#{key}: #{send(key)}" }.join(', ')
35
+ end
36
+
37
+ # @author Matthieu 'ciappa_m' Ciappara
38
+ # @return [Hash] The payload for the request to the intranet
39
+ def to_params
40
+ {
41
+ 'name' => @name,
42
+ 'main_developer' => @main_developer,
43
+ 'project_manager' => @project_manager,
44
+ 'repository' => @repository,
45
+ 'app_type' => @type,
46
+ 'project_data' => to_project_data_params
47
+ }
48
+ end
49
+
50
+ private
51
+
52
+ def initialize_from_constants
53
+ # The API can handle more project types but this gem is (obviously) intended for Rails
54
+ # projects only
55
+ @type = 'rails'
56
+
57
+ # The name defined for the Rails application; it can be completely different from the usual
58
+ # name or can be the same
59
+ @rails_name = ::Rails.application.class.name&.split('::')&.first
60
+
61
+ # The Ruby version used by the application
62
+ @ruby_version = RUBY_VERSION
63
+
64
+ # The version of the gem
65
+ @modulorails_version = Modulorails::VERSION
66
+ end
67
+
68
+ def initialize_from_configuration
21
69
  # Get the gem's configuration to get the application's usual name, main dev and PM
22
70
  configuration = Modulorails.configuration
23
- # Get the database connection to identify the database used by the application
24
- # or return nil if the database does not exist
25
- db_connection = begin
26
- ActiveRecord::Base.connection
27
- rescue ActiveRecord::NoDatabaseError => e
28
- $stderr.puts("[Modulorails] Error: #{e.message}")
29
- nil
30
- end
31
- # Get the gem's specifications to fetch the versions of critical gems
32
- loaded_specs = Gem.loaded_specs
33
71
 
34
72
  # The data written by the user in the configuration
35
73
  # The name is the usual name of the project, the one used in conversations at Modulotech
36
74
  @name = configuration.name
75
+
37
76
  # The main developer, the lead developer, in short the developer to call when something's
38
77
  # wrong with the application ;)
39
78
  @main_developer = configuration.main_developer
79
+
40
80
  # The project manager of the application; the other person to call when something's wrong with
41
81
  # the application ;)
42
82
  @project_manager = configuration.project_manager
83
+
43
84
  # The URL of the production environment for the application
44
85
  @production_url = configuration.production_url
86
+
45
87
  # The URL of the staging environment for the application
46
88
  @staging_url = configuration.staging_url
89
+
47
90
  # The base URL of the review environment for the application.
48
91
  # A real review URL is built like this at Modulotech:
49
92
  # https://review-#{shortened_branch_name}-#{ci_slug}.#{review_base_url}
@@ -53,21 +96,29 @@ module Modulorails
53
96
  # ci_slug: jzzham
54
97
  # |-> https://review-786-a_sup-jzzham.dev.app.com/
55
98
  @review_base_url = configuration.review_base_url
99
+ end
56
100
 
57
- # Theorically, origin is the main repository of the project and git is the sole VCS we use
58
- # at Modulotech
59
- @repository = Git.open(::Rails.root).config('remote.origin.url')
101
+ def initialize_from_database
102
+ # Get the database connection to identify the database used by the application
103
+ # or return nil if the database does not exist
104
+ db_connection = begin
105
+ ActiveRecord::Base.connection
106
+ rescue ActiveRecord::NoDatabaseError, ActiveRecord::ConnectionNotEstablished => e
107
+ warn("[Modulorails] Error: #{e.message}")
108
+ nil
109
+ end
60
110
 
61
- # The API can handle more project types but this gem is (obviously) intended for Rails
62
- # projects only
63
- @type = 'rails'
111
+ # The name of the ActiveRecord adapter; it gives the name of the database system too
112
+ @adapter = db_connection&.adapter_name&.downcase
64
113
 
65
- # The name defined for the Rails application; it can be completely different from the usual
66
- # name or can be the same
67
- @rails_name = ::Rails.application.class.name.split('::').first
114
+ # The version of the database engine; this request works only on MySQL and PostgreSQL
115
+ # It should not be a problem since those are the sole database engines used at Modulotech
116
+ @db_version = db_connection&.select_value('SELECT version()')
117
+ end
68
118
 
69
- # The Ruby version used by the application
70
- @ruby_version = RUBY_VERSION
119
+ def initialize_from_gem_specs
120
+ # Get the gem's specifications to fetch the versions of critical gems
121
+ loaded_specs = Gem.loaded_specs
71
122
 
72
123
  # The Rails version used by the application
73
124
  @rails_version = loaded_specs['rails'].version.version
@@ -76,53 +127,53 @@ module Modulorails
76
127
  # Bundler 1 are not compatible)
77
128
  @bundler_version = loaded_specs['bundler'].version.version
78
129
 
79
- # The version of the gem
80
- @modulorails_version = Modulorails::VERSION
130
+ # The version of the ActiveRecord adapter
131
+ @adapter_version = loaded_specs[@adapter]&.version&.version
81
132
 
82
- # The name of the ActiveRecord adapter; it gives the name of the database system too
83
- @adapter = db_connection&.adapter_name&.downcase
133
+ # The version of the webpacker gem - might be nil
134
+ @webpacker_version = loaded_specs['webpacker']&.version&.version
84
135
 
85
- # The version of the database engine; this request works only on MySQL and PostgreSQL
86
- # It should not be a problem since those are the sole database engines used at Modulotech
87
- @db_version = db_connection&.select_value('SELECT version()')
136
+ # The version of the importmap-rails gem - might be nil
137
+ @importmap_version = loaded_specs['importmap-rails']&.version&.version
88
138
 
89
- # The version of the ActiveRecord adapter
90
- @adapter_version = loaded_specs[@adapter]&.version&.version
139
+ # The version of the jsbundling-rails gem - might be nil
140
+ @jsbundling_version = loaded_specs['jsbundling-rails']&.version&.version
91
141
  end
92
142
 
93
- # @author Matthieu 'ciappa_m' Ciappara
94
- # @return [String] Text version of the data
95
- def to_s
96
- ATTRIBUTE_KEYS.map { |key| "#{key}: #{send(key)}" }.join(', ')
143
+ def initialize_from_git
144
+ # Theorically, origin is the main repository of the project and git is the sole VCS we use
145
+ # at Modulotech
146
+ @repository = Git.open(::Rails.root).config('remote.origin.url')
97
147
  end
98
148
 
99
- # @author Matthieu 'ciappa_m' Ciappara
100
- # @return [Hash] The payload for the request to the intranet
101
- def to_params
149
+ def to_project_data_params
102
150
  {
103
- 'name' => @name,
104
- 'main_developer' => @main_developer,
105
- 'project_manager' => @project_manager,
106
- 'repository' => @repository,
107
- 'app_type' => @type,
108
- 'project_data' => {
109
- 'name' => @rails_name,
110
- 'ruby_version' => @ruby_version,
111
- 'rails_version' => @rails_version,
112
- 'bundler_version' => @bundler_version,
113
- 'modulorails_version' => @modulorails_version,
114
- 'database' => {
115
- 'adapter' => @adapter,
116
- 'db_version' => @db_version,
117
- 'gem_version' => @adapter_version
118
- },
119
- 'urls' => {
120
- 'production' => @production_url,
121
- 'staging' => @staging_url,
122
- 'review_base' => @review_base_url
123
- }
124
- }
151
+ 'name' => @rails_name,
152
+ 'ruby_version' => @ruby_version,
153
+ 'rails_version' => @rails_version,
154
+ 'bundler_version' => @bundler_version,
155
+ 'modulorails_version' => @modulorails_version,
156
+ 'database' => to_database_params,
157
+ 'urls' => to_urls_params
158
+ }
159
+ end
160
+
161
+ def to_database_params
162
+ {
163
+ 'adapter' => @adapter,
164
+ 'db_version' => @db_version,
165
+ 'gem_version' => @adapter_version
125
166
  }
126
167
  end
168
+
169
+ def to_urls_params
170
+ {
171
+ 'production' => @production_url,
172
+ 'staging' => @staging_url,
173
+ 'review_base' => @review_base_url
174
+ }
175
+ end
176
+
127
177
  end
178
+
128
179
  end
@@ -1,6 +1,7 @@
1
1
  # @author Matthieu Ciappara <ciappa_m@modulotech>
2
2
  # An error encountered during an operation with additional data.
3
3
  class Modulorails::ErrorData
4
+
4
5
  # @!attribute r errors
5
6
  # An error message or an array of error messages (those will be joined by a coma and a space).
6
7
  # @!attribute r exception
@@ -18,4 +19,5 @@ class Modulorails::ErrorData
18
19
  def success?
19
20
  false
20
21
  end
22
+
21
23
  end
@@ -1,6 +1,7 @@
1
1
  # @author Matthieu CIAPPARA <ciappa_m@modulotech.fr>
2
2
  # An exception representing an invalid format for a given field.
3
3
  class Modulorails::InvalidFormatError < Modulorails::BaseError
4
+
4
5
  # @!attribute r field
5
6
  # The name of the field that had a wrong format.
6
7
  attr_reader :field
@@ -11,4 +12,5 @@ class Modulorails::InvalidFormatError < Modulorails::BaseError
11
12
 
12
13
  @field = field
13
14
  end
15
+
14
16
  end
@@ -1,6 +1,7 @@
1
1
  # @author Matthieu CIAPPARA <ciappa_m@modulotech.fr>
2
2
  # An exception representing an invalid value for a given field.
3
3
  class Modulorails::InvalidValueError < Modulorails::BaseError
4
+
4
5
  # @!attribute r field
5
6
  # The name of the field that had a wrong value.
6
7
  attr_reader :field
@@ -11,4 +12,5 @@ class Modulorails::InvalidValueError < Modulorails::BaseError
11
12
 
12
13
  @field = field
13
14
  end
15
+
14
16
  end
@@ -1,8 +1,10 @@
1
1
  require_relative '../../app/helpers/modulorails/application_helper'
2
2
 
3
3
  module Modulorails
4
+
4
5
  # Bind in the Rails lifecycle
5
6
  class Railtie < ::Rails::Railtie
7
+
6
8
  # Update and add gems before we load the configuration
7
9
  config.before_configuration do
8
10
  # Currently, we limit everything to the development environment
@@ -35,7 +37,7 @@ module Modulorails
35
37
  # Currently, we limit everything to the development environment
36
38
  if Rails.env.development?
37
39
  # Load translations
38
- I18n.load_path += [File.expand_path('../../../config/locales/en.yml', __FILE__)]
40
+ I18n.load_path += [File.expand_path('../../config/locales/en.yml', __dir__)]
39
41
 
40
42
  # Effectively send the data to the intranet
41
43
  Modulorails.send_data
@@ -53,5 +55,7 @@ module Modulorails
53
55
  Modulorails.self_update
54
56
  end
55
57
  end
58
+
56
59
  end
60
+
57
61
  end
@@ -2,6 +2,7 @@
2
2
  # The base class for services. Should be implemented by ApplicationService following the model of
3
3
  # ActiveRecord::Base and ApplicationRecord.
4
4
  class Modulorails::BaseService
5
+
5
6
  # Allow to instantiate the service and call the service in one go.
6
7
  if Modulorails::COMPARABLE_RUBY_VERSION < Gem::Version.new('3.0')
7
8
  def self.call(*args, &block)
@@ -28,7 +29,7 @@ class Modulorails::BaseService
28
29
  end
29
30
 
30
31
  # Shamelessly copied from text_helper
31
- def self.pluralize(count, singular, plural_arg = nil, plural: plural_arg, locale: I18n.locale)
32
+ def self.pluralize(count, singular, plural_arg=nil, plural: plural_arg, locale: I18n.locale)
32
33
  word = if count == 1 || count =~ /^1(\.0+)?$/
33
34
  singular
34
35
  else
@@ -58,25 +59,27 @@ class Modulorails::BaseService
58
59
  data = yield
59
60
  end
60
61
 
61
- SuccessData.new(data)
62
+ ::Modulorails::SuccessData.new(data)
62
63
  rescue ActiveRecord::RecordInvalid => e
63
64
  # Known error, no need for a log, it just needs to be returned
64
- ErrorData.new(e.message, exception: e)
65
+ ::Modulorails::ErrorData.new(e.message, exception: e)
65
66
  rescue StandardError => e
66
67
  # Unknown error, log the error
67
68
  Rails.logger.error("#{self}: #{e.message}")
68
- Rails.logger.error("Local variables: #{local_variables.map! { |v| { v => eval(v.to_s, binding) } }}")
69
+ Rails.logger.error("Local variables: #{local_variables.map! { |v|
70
+ { v => binding.local_variable_get(v) }
71
+ } }")
69
72
  Rails.logger.error(e.backtrace&.join("\n"))
70
73
 
71
74
  # Return the error
72
- ErrorData.new(e.message, exception: e)
75
+ ::Modulorails::ErrorData.new(e.message, exception: e)
73
76
  end
74
77
 
75
78
  # Cast the date/datetime parameters to time with zones.
76
79
  # @param from [String,ActiveSupport::TimeWithZone] the minimum date
77
80
  # @param to [String,ActiveSupport::TimeWithZone] the maximum date
78
81
  # @return [[ActiveSupport::TimeWithZone, ActiveSupport::TimeWithZone]] The given dates casted.
79
- def params_to_time(from, to = nil)
82
+ def params_to_time(from, to=nil)
80
83
  from = from.is_a?(String) && from.present? ? from.to_time_with_zone : from
81
84
  to = if to.is_a?(String) && to.present?
82
85
  to = to.to_time_with_zone
@@ -92,7 +95,7 @@ class Modulorails::BaseService
92
95
  end
93
96
 
94
97
  # Shamelessly copied from text_helper
95
- def pluralize(count, singular, plural_arg = nil, plural: plural_arg, locale: I18n.locale)
98
+ def pluralize(count, singular, plural_arg=nil, plural: plural_arg, locale: I18n.locale)
96
99
  self.class.pluralize(count, singular, plural_arg, plural: plural, locale: locale)
97
100
  end
98
101
 
@@ -141,7 +144,9 @@ class Modulorails::BaseService
141
144
  value = params.dig(*keys)
142
145
 
143
146
  if value.respond_to?(:each)
144
- raise InvalidValueError.new(keys.join('/')) unless value.all? { |v| allowed_values.include?(v) }
147
+ raise InvalidValueError.new(keys.join('/')) unless value.all? { |v|
148
+ allowed_values.include?(v)
149
+ }
145
150
  else
146
151
  return nil if !value && allow_nil
147
152
 
@@ -162,11 +167,9 @@ class Modulorails::BaseService
162
167
  value = params.dig(*keys)
163
168
 
164
169
  unless value
165
- if allow_nil
166
- return nil
167
- else
168
- raise InvalidValueError.new(keys.join('/'))
169
- end
170
+ return nil if allow_nil
171
+
172
+ raise InvalidValueError.new(keys.join('/'))
170
173
  end
171
174
 
172
175
  result = model.find_by(field => value)
@@ -187,11 +190,9 @@ class Modulorails::BaseService
187
190
  values = params.dig(*keys)
188
191
 
189
192
  if values.blank?
190
- if allow_nil
191
- return nil
192
- else
193
- raise InvalidValueError.new(keys.join('/'))
194
- end
193
+ return nil if allow_nil
194
+
195
+ raise InvalidValueError.new(keys.join('/'))
195
196
  end
196
197
 
197
198
  results = model.where(field => values)
@@ -200,4 +201,5 @@ class Modulorails::BaseService
200
201
 
201
202
  results
202
203
  end
204
+
203
205
  end
@@ -39,4 +39,5 @@ class Modulorails::LogsForMethodService < Modulorails::BaseService
39
39
  def jsonify
40
40
  @message.to_json
41
41
  end
42
+
42
43
  end
@@ -1,6 +1,7 @@
1
1
  # @author Matthieu Ciappara <ciappa_m@modulotech>
2
2
  # A success resulting from an operation with optional additional data.
3
3
  class Modulorails::SuccessData
4
+
4
5
  # @!attribute r data
5
6
  # An object to transport some data (for instance the result of the operation). Defaults to nil.
6
7
  attr_reader :data
@@ -14,4 +15,5 @@ class Modulorails::SuccessData
14
15
  def success?
15
16
  true
16
17
  end
18
+
17
19
  end
@@ -1,8 +1,11 @@
1
1
  module Modulorails
2
+
2
3
  module Validators
4
+
3
5
  # Author: Matthieu 'ciappa_m' Ciappara
4
6
  # This holds the rules to configure the database by respecting Modulotech's norms.
5
7
  class DatabaseConfiguration
8
+
6
9
  def initialize
7
10
  # All rules are invalid by default
8
11
  @rules = {
@@ -37,19 +40,23 @@ module Modulorails
37
40
  check_rules_for_environment(database_configuration, :development)
38
41
  check_rules_for_environment(database_configuration, :test)
39
42
 
40
- get_invalid_rules
43
+ fetch_invalid_rules
41
44
  end
42
45
 
43
46
  private
44
47
 
45
- def get_invalid_rules
46
- dev = @rules[:development].select { |_k, v| v == false }.keys.map { |k| "development.#{k}" }
47
- test = @rules[:test].select { |_k, v| v == false }.keys.map { |k| "test.#{k}" }
48
- general = @rules.select { |_k, v| v == false }.keys
48
+ def fetch_invalid_rules
49
+ dev = select_invalid_keys(@rules[:development]).map { |k| "development.#{k}" }
50
+ test = select_invalid_keys(@rules[:test]).map { |k| "test.#{k}" }
51
+ general = select_invalid_keys(@rules)
49
52
 
50
53
  general + dev + test
51
54
  end
52
55
 
56
+ def select_invalid_keys(hash)
57
+ hash.select { |_k, v| v == false }.keys
58
+ end
59
+
53
60
  def check_standard_config_file_location
54
61
  # Load the configuration
55
62
  config = if Modulorails::COMPARABLE_RUBY_VERSION >= Gem::Version.new('3.1')
@@ -64,7 +71,7 @@ module Modulorails
64
71
  @rules[:standard_config_file_location] = true
65
72
 
66
73
  config
67
- rescue StandardError => e
74
+ rescue StandardError
68
75
  # An exception was raised, either the file is not a the standard location, either it just
69
76
  # cannot be read. Either way, we consider the config as invalid
70
77
  @rules[:standard_config_file_location] = false
@@ -74,13 +81,13 @@ module Modulorails
74
81
  # The database for tests MUST NOT be the same as the development database since the test
75
82
  # database is rewritten each time the tests are launched
76
83
  def check_test_database_not_equals_dev_database(config)
77
- test_eq_database = config['test']['database'] != config['development']['database']
78
- @rules[:test_database_not_equals_dev_database] = test_eq_database
84
+ @rules[:test_database_not_equals_dev_database] =
85
+ config['test']['database'] != config['development']['database']
79
86
  end
80
87
 
81
88
  # Check all rules for an environment
82
89
  def check_rules_for_environment(config, env)
83
- @rules[env].keys.each do |rule|
90
+ @rules[env].each_key do |rule|
84
91
  key = rule.to_s.gsub(/configurable_/, '')
85
92
  check_configurable_key_for_environment(config, env, key)
86
93
  end
@@ -94,6 +101,9 @@ module Modulorails
94
101
  # Use of `!!` to convert `nil` to `false` and `0` to `true`
95
102
  @rules[env][:"configurable_#{key}"] = !!valid_rule
96
103
  end
104
+
97
105
  end
106
+
98
107
  end
108
+
99
109
  end
@@ -1,6 +1,8 @@
1
1
  module Modulorails
2
- VERSION = '1.0.0'
2
+
3
+ VERSION = '1.1.0'.freeze
3
4
 
4
5
  # Useful to compare the current Ruby version
5
6
  COMPARABLE_RUBY_VERSION = Gem::Version.new(RUBY_VERSION)
7
+
6
8
  end