rateaux 2.0.0 → 2.2.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: e346b9a084dd267e02240cee8f40e665d8ac61eb56a1203e5abe45601862276b
4
+ data.tar.gz: 86450dae663250be671655bb286b507a2c79c3eb44529cf4639f239a2417e8fd
5
5
  SHA512:
6
- metadata.gz: 7838b9980e77d57d20ba7e90c8c38c8fbff6feb33334889200b41464fa4cc488a818ba20bbf81a9419b78bb5951288e8c3ffa8ea9689944f079aafbb1938d811
7
- data.tar.gz: 9983ea851dedcdf0a4575e8fab405f9240462c23022383889a27f7200586bc95623ed1779041c4a21d54881aacba76e8c5b1782e1f21c697cc40fd0cf9e88e3b
6
+ metadata.gz: f88fc1aada08f4a57170b1b5c818c01183a38d89b33473e3878c345a24c2e91ce1b54c7e43f1620f34864ff652472d914f3cd4150c6b5fd0f255e83c8df33f71
7
+ data.tar.gz: dc75de811d58084701898d3921f5e626dc4df3e84f1fbf39cff4afe07befc7d5d570abad1520566fe28b7b55a0afd0be59c186d0f2a903634856199e309d9fd8
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,9 +36,43 @@ 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 as an ascii table.
51
+
52
+ ```sh
53
+ $ rake db:schema:view
54
+ ```
55
+
56
+ ### DB schema print dump
57
+
58
+ Print the database structure as a Ruby file. Like `db:schema:dump` but printed
59
+ out instead of written to `db/schema.rb`.
60
+
61
+ ```sh
62
+ $ rake db:schema:print_dump
63
+ ```
64
+
65
+ ### I18n word count
66
+
67
+ Show the number of translated words in every available locale.
68
+
69
+ ```sh
70
+ $ rake i18n:word_count
71
+ ```
72
+
40
73
  ### Checkout
41
74
 
42
- Remove migrations then checkout a git branch.
75
+ Remove Rails migrations then checkout a git branch.
43
76
 
44
77
  ```sh
45
78
  $ rake checkout new_branch_name
@@ -79,22 +112,33 @@ to their non-digested form (for example `application.css`).
79
112
  $ rake assets:copy_non_digested
80
113
  ```
81
114
 
82
- ### DB schema view
115
+ ### Frozen string literal
83
116
 
84
- View the database structure.
117
+ Add the `# frozen_string_literal: true` header to all Ruby files in the project.
85
118
 
86
119
  ```sh
87
- $ rake db:schema:view
120
+ $ rake add_frozen_string_literal_headers
88
121
  ```
89
122
 
90
- ### Frozen string literal
91
123
 
92
- Add the `# frozen_string_literal: true` header to all Ruby files in the project.
124
+ ## Release
125
+
126
+ To release a new version, update `CHANGELOG.md`, update the version in
127
+ `lib/rateaux/version.rb`.
128
+
129
+ Then:
93
130
 
94
131
  ```sh
95
- $ rake add_frozen_string_literal_headers
132
+ git add CHANGELOG.md lib/rateaux/version.rb
133
+ git commit -m v`ruby -r./lib/rateaux/version <<< 'puts Rateaux::VERSION'`
134
+ bin/rake release
96
135
  ```
97
136
 
137
+ ## License
138
+
139
+ The gem is available as open source under the terms of the
140
+ [MIT License](http://opensource.org/licenses/MIT).
141
+
98
142
  ## The name
99
143
 
100
- In French _rateaux_ means _rakes_.
144
+ 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.2.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
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Print database schema.
4
+ #
5
+ # $ rake db:schema:print_dump
6
+ namespace :db do
7
+ namespace :schema do
8
+ desc "Print database dump"
9
+ task print_dump: :environment do
10
+ ActiveRecord::SchemaDumper.dump
11
+ end
12
+ end
13
+ end
@@ -1,25 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "terminal-table"
4
+
3
5
  # View database schema.
4
6
  #
5
7
  # $ rake db:schema:view
6
- require "terminal-table"
7
8
  namespace :db do
8
9
  namespace :schema do
9
10
  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|
11
+ task view: :environment do
12
+ ActiveRecord::Base.connection.tables.each do |table|
13
+ next if table == "schema_migrations"
14
+
18
15
  rows = ActiveRecord::Base.connection.columns(table).map do |column|
19
16
  [column.name, column.type]
20
17
  end
21
- table = Terminal::Table.new title: table.capitalize.to_s,
22
- headings: %w[Name Type], rows: rows
18
+ table = Terminal::Table.new(
19
+ title: table,
20
+ headings: %w[Name Type],
21
+ rows: rows
22
+ )
23
23
  puts table
24
24
  end
25
25
  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.2.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,11 @@ 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
87
+ - lib/tasks/rateaux_db_schema_print_dump.rake
156
88
  - lib/tasks/rateaux_db_schema_view.rake
157
89
  - lib/tasks/rateaux_git_checkout.rake
90
+ - lib/tasks/rateaux_i18n_word_count.rake
158
91
  - lib/tasks/rateaux_notes_mine.rake
159
92
  - lib/tasks/rateaux_sidekiq_flush.rake
160
93
  homepage: http://github.com/sunny/rateaux
@@ -168,7 +101,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
168
101
  requirements:
169
102
  - - ">="
170
103
  - !ruby/object:Gem::Version
171
- version: 2.7.0
104
+ version: '3.2'
172
105
  required_rubygems_version: !ruby/object:Gem::Requirement
173
106
  requirements:
174
107
  - - ">="
@@ -177,5 +110,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
110
  requirements: []
178
111
  rubygems_version: 3.6.2
179
112
  specification_version: 4
180
- summary: A collection of usefull Rake tasks for Rails.
113
+ summary: A collection of useful Rake tasks for Rails.
181
114
  test_files: []