rateaux 2.0.0 → 2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 83add348cf984a12112d1b43d1b5311062fe76e9c96b70ea11a9c187848f2319
4
- data.tar.gz: bce392df04ca3321a3096c77f0fb56a5c75a7ba64b4213473255ebd692b9f713
3
+ metadata.gz: a99a590fe7f149a351599a6b4b37c49b51c7de1b10b95900a3410c24bce20ca0
4
+ data.tar.gz: d09b6b5a682589c29fc8ddfaf001cd420f6ebbc75e3c25ed48405a5fcc0a7a45
5
5
  SHA512:
6
- metadata.gz: 7838b9980e77d57d20ba7e90c8c38c8fbff6feb33334889200b41464fa4cc488a818ba20bbf81a9419b78bb5951288e8c3ffa8ea9689944f079aafbb1938d811
7
- data.tar.gz: 9983ea851dedcdf0a4575e8fab405f9240462c23022383889a27f7200586bc95623ed1779041c4a21d54881aacba76e8c5b1782e1f21c697cc40fd0cf9e88e3b
6
+ metadata.gz: 6fb58245762852ea2e90b6d0bfe236be451e43c0bfd0d5c906d9d9309e1234f34a14f7cf7ab7b7aed8b5fa03d2307179581f1b7ab2ce6ec261b5638a3356dd6e
7
+ data.tar.gz: 6005f2d8433ef0bffb4e0f35b8b38420a285560bc4e0a86b735e5454f50813c0cbc8b20413a74e6711a26197577a01672c4dec5a95a955f60116f37cef0acbe2
data/README.md CHANGED
@@ -17,7 +17,6 @@ gem "rateaux"
17
17
 
18
18
  Then call `bundle install`.
19
19
 
20
-
21
20
  ## Tasks
22
21
 
23
22
  ### DB Truncate
@@ -37,6 +36,31 @@ Delete all data and tables from the current database. This is similar to
37
36
  $ rake db:drop_tables
38
37
  ```
39
38
 
39
+ ### DB Migrate Delete Orphaned
40
+
41
+ When your migration errors with "No migration with version number" you can call
42
+ this to delete all migrations that don’t have associated files anymore.
43
+
44
+ ```sh
45
+ $ rake db:migrate:delete_orphaned
46
+ ```
47
+
48
+ ### DB schema view
49
+
50
+ View the database structure.
51
+
52
+ ```sh
53
+ $ rake db:schema:view
54
+ ```
55
+
56
+ ### I18n word count
57
+
58
+ Show the number of translated words in every available locale.
59
+
60
+ ```sh
61
+ $ rake i18n:word_count
62
+ ```
63
+
40
64
  ### Checkout
41
65
 
42
66
  Remove migrations then checkout a git branch.
@@ -79,22 +103,32 @@ to their non-digested form (for example `application.css`).
79
103
  $ rake assets:copy_non_digested
80
104
  ```
81
105
 
82
- ### DB schema view
106
+ ### Frozen string literal
83
107
 
84
- View the database structure.
108
+ Add the `# frozen_string_literal: true` header to all Ruby files in the project.
85
109
 
86
110
  ```sh
87
- $ rake db:schema:view
111
+ $ rake add_frozen_string_literal_headers
88
112
  ```
89
113
 
90
- ### Frozen string literal
91
114
 
92
- Add the `# frozen_string_literal: true` header to all Ruby files in the project.
115
+ ## Release
116
+
117
+ To release a new version, update `CHANGELOG.md`, update the version in
118
+ `lib/rateaux/version.rb`.
119
+
120
+ Then:
93
121
 
94
122
  ```sh
95
- $ rake add_frozen_string_literal_headers
123
+ git add CHANGELOG.md lib/rateaux/version.rb
124
+ git commit -m v`ruby -r./lib/rateaux/version <<< 'puts Rateaux::VERSION'`
125
+ bin/rake release
96
126
  ```
97
127
 
128
+ ## License
129
+
130
+ The gem is available as open source under the terms of the [MIT License].
131
+
98
132
  ## The name
99
133
 
100
134
  In French _rateaux_ means _rakes_.
data/Rakefile CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env rake
2
2
  # frozen_string_literal: true
3
3
 
4
- # bundler
4
+ # Bundler
5
+
5
6
  begin
6
7
  require "bundler/setup"
7
8
  rescue LoadError
@@ -10,7 +11,8 @@ end
10
11
 
11
12
  Bundler::GemHelper.install_tasks
12
13
 
13
- # rdoc
14
+ # RDoc
15
+
14
16
  begin
15
17
  require "rdoc/task"
16
18
  rescue LoadError
@@ -27,7 +29,15 @@ RDoc::Task.new(:rdoc) do |rdoc|
27
29
  rdoc.rdoc_files.include("lib/**/*.rb")
28
30
  end
29
31
 
30
- # rspec
32
+ # RSpec
33
+
31
34
  require "rspec/core/rake_task"
32
35
  RSpec::Core::RakeTask.new(:spec)
33
- task default: :spec
36
+
37
+ # RuboCop
38
+
39
+ require "rubocop/rake_task"
40
+
41
+ RuboCop::RakeTask.new
42
+
43
+ task default: %i[spec rubocop]
@@ -30,8 +30,8 @@ module Rateaux
30
30
  # end
31
31
  #
32
32
  module FileTask
33
- def file_task(path, definition, &block)
34
- t = task(definition, &block)
33
+ def file_task(path, definition, &)
34
+ t = task(definition, &)
35
35
 
36
36
  file(path) do
37
37
  Rake::Task[t.name].invoke
@@ -13,7 +13,7 @@ module Rateaux
13
13
  #
14
14
  # desc "Export everything"
15
15
  # namespaced :export do
16
- # default: [:a, :b]
16
+ # task default: [:a, :b]
17
17
  #
18
18
  # ...
19
19
  # end
@@ -34,7 +34,7 @@ module Rateaux
34
34
  # task export: ["export:a", "export:b"]
35
35
  #
36
36
  module Namespaced
37
- def namespaced(name, defaults = :default, &block)
37
+ def namespaced(name, defaults = :default, &)
38
38
  case defaults
39
39
  when Symbol, String
40
40
  task name => "#{name}:#{defaults}"
@@ -44,7 +44,7 @@ module Rateaux
44
44
  task name => defaults.to_a.map { |t| "#{name}:#{t}" }
45
45
  end
46
46
 
47
- namespace name, &block
47
+ namespace(name, &)
48
48
  end
49
49
  end
50
50
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rateaux
4
- VERSION = "2.0.0"
4
+ VERSION = "2.1.0"
5
5
  end
@@ -14,14 +14,14 @@ task add_frozen_string_literal_headers: :environment do
14
14
  header = "# frozen_string_literal: true\n"
15
15
 
16
16
  files.each do |file|
17
+ next if file.end_with?("db/schema.rb")
18
+
17
19
  content = File.read(file)
18
20
  next if content[0..header.length] == header
19
21
 
20
22
  content = content.gsub(/^# (frozen_string_literal: true)\n/i, "")
21
23
  content = "#{header}#{content}"
22
24
 
23
- new_file = File.open(file, "w")
24
- new_file.write(content)
25
- new_file.close
25
+ File.write(file, content)
26
26
  end
27
27
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Delete orhphaned migrations.
4
+ #
5
+ # $ rake db:migrate:delete_orphaned
6
+ namespace :db do
7
+ namespace :migrate do
8
+ desc "Delete migrations that don’t have associated files anymore"
9
+ task delete_orphaned: :environment do
10
+ removed_file_versions =
11
+ ActiveRecord::Base
12
+ .connection_pool
13
+ .migration_context
14
+ .migrations_status
15
+ .filter_map { |_, version, name| version if name.include?("NO FILE") }
16
+
17
+ removed_file_versions.each do |version|
18
+ puts "Deleting orphaned version #{version}"
19
+ sql = "DELETE FROM schema_migrations WHERE version = '#{version}'"
20
+ ActiveRecord::Base.connection.execute(sql)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -7,19 +7,18 @@ require "terminal-table"
7
7
  namespace :db do
8
8
  namespace :schema do
9
9
  desc "View database schema"
10
- task :view do
11
- @environment = ENV["RACK_ENV"] || "development"
12
- @dbconfig = YAML.load_file("config/database.yml")
13
- ActiveRecord::Base.establish_connection @dbconfig[@environment]
14
- tables = ActiveRecord::Base.connection.tables.reject do |t|
15
- t == "schema_migrations"
16
- end
17
- tables.each do |table|
10
+ task view: :environment do
11
+ ActiveRecord::Base.connection.tables.each do |table|
12
+ next if table == "schema_migrations"
13
+
18
14
  rows = ActiveRecord::Base.connection.columns(table).map do |column|
19
15
  [column.name, column.type]
20
16
  end
21
- table = Terminal::Table.new title: table.capitalize.to_s,
22
- headings: %w[Name Type], rows: rows
17
+ table = Terminal::Table.new(
18
+ title: table,
19
+ headings: %w[Name Type],
20
+ rows: rows
21
+ )
23
22
  puts table
24
23
  end
25
24
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Show the number of translated words in every available locale.
4
+ #
5
+ # $ rake i18n:word_count
6
+
7
+ require "unicode/emoji"
8
+
9
+ class RateauxI18nWordCount
10
+ include ActionView::Helpers::SanitizeHelper
11
+
12
+ def words_for_locale(locale)
13
+ translations = I18n.t(".", locale: locale)
14
+ words = hash_string_values(translations).flat_map do |translation|
15
+ strip_tags(translation).split(/\s+/)
16
+ end
17
+ words.reject do |word|
18
+ word.blank? ||
19
+ word.size == 1 ||
20
+ word.start_with?("%") ||
21
+ word.match?(Unicode::Emoji::REGEX_VALID_INCLUDE_TEXT)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def hash_string_values(hash)
28
+ hash.inject([]) do |array, (_key, value)|
29
+ case value
30
+ when Hash then array + hash_string_values(value)
31
+ when String then array + [value]
32
+ else array
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ namespace :i18n do
39
+ desc "Show the number of translated words in every available locale"
40
+ task word_count: :environment do
41
+ counter = RateauxI18nWordCount.new
42
+
43
+ I18n.available_locales.each do |locale|
44
+ words = counter.words_for_locale(locale)
45
+ puts "#{locale}: #{words.count} (#{words.uniq.count} unique)"
46
+ end
47
+ end
48
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rateaux
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sunny Ripert
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-03-20 00:00:00.000000000 Z
10
+ date: 2026-07-22 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: database_cleaner
@@ -52,90 +52,20 @@ dependencies:
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0'
54
54
  - !ruby/object:Gem::Dependency
55
- name: jquery-rails
55
+ name: unicode-emoji
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
- type: :development
62
- prerelease: false
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: '0'
68
- - !ruby/object:Gem::Dependency
69
- name: rspec-rails
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- version: '0'
75
- type: :development
76
- prerelease: false
77
- version_requirements: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- version: '0'
82
- - !ruby/object:Gem::Dependency
83
- name: rubocop
84
- requirement: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: '0'
89
- type: :development
90
- prerelease: false
91
- version_requirements: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- version: '0'
96
- - !ruby/object:Gem::Dependency
97
- name: rubocop-rspec
98
- requirement: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- version: '0'
103
- type: :development
104
- prerelease: false
105
- version_requirements: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: rubocop-rspec_rails
112
- requirement: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: '0'
117
- type: :development
118
- prerelease: false
119
- version_requirements: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- version: '0'
124
- - !ruby/object:Gem::Dependency
125
- name: sqlite3
126
- requirement: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - ">="
129
- - !ruby/object:Gem::Version
130
- version: '0'
131
- type: :development
61
+ type: :runtime
132
62
  prerelease: false
133
63
  version_requirements: !ruby/object:Gem::Requirement
134
64
  requirements:
135
65
  - - ">="
136
66
  - !ruby/object:Gem::Version
137
67
  version: '0'
138
- description: A collection of usefull Rake tasks for Rails.
68
+ description: A collection of useful Rake tasks for Rails.
139
69
  email:
140
70
  - sunny@sunfox.org
141
71
  executables: []
@@ -153,8 +83,10 @@ files:
153
83
  - lib/tasks/rateaux_cache_clear.rake
154
84
  - lib/tasks/rateaux_copy_non_digested_assets.rake
155
85
  - lib/tasks/rateaux_db.rake
86
+ - lib/tasks/rateaux_db_migrate.rake
156
87
  - lib/tasks/rateaux_db_schema_view.rake
157
88
  - lib/tasks/rateaux_git_checkout.rake
89
+ - lib/tasks/rateaux_i18n_word_count.rake
158
90
  - lib/tasks/rateaux_notes_mine.rake
159
91
  - lib/tasks/rateaux_sidekiq_flush.rake
160
92
  homepage: http://github.com/sunny/rateaux
@@ -168,7 +100,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
168
100
  requirements:
169
101
  - - ">="
170
102
  - !ruby/object:Gem::Version
171
- version: 2.7.0
103
+ version: '3.2'
172
104
  required_rubygems_version: !ruby/object:Gem::Requirement
173
105
  requirements:
174
106
  - - ">="
@@ -177,5 +109,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
109
  requirements: []
178
110
  rubygems_version: 3.6.2
179
111
  specification_version: 4
180
- summary: A collection of usefull Rake tasks for Rails.
112
+ summary: A collection of useful Rake tasks for Rails.
181
113
  test_files: []