cybermots 0.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 57e6fb50e969c6953874326031dd84680f2928295361b664c32b3f1c19b59feb
4
+ data.tar.gz: c1b954ecaf94252fbfbb2daf83d71324afda30c4d64ca82fba55454d98026433
5
+ SHA512:
6
+ metadata.gz: 3b704831433566b55633cd7294057f16d3fc85e1ddb40115e5552a51b31367cfa4f64ab69208461f44489d1bd3605ac9cc3d681deef6001f57148418db79887d
7
+ data.tar.gz: 9cdec3303c5f071989c947580cb28bc2ca0d4724e4f4a8b4b5e318e90fe06d87b672a235a952a14bcb5534444d107dc72293acc725ebbe8961a96cff22e9290e
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Dépendances natives
4
+ require 'json'
5
+
6
+ module CyberMots
7
+ # Cherche un mot pour donner sa traduction
8
+ class Cherche
9
+ # Cherche un mot (insensible à la case) français pour donner sa traduction en anglais
10
+ # @param [String] mot mot français à rechercher
11
+ # @return [String|nil] mot traduit en anglais
12
+ def self.fren(mot)
13
+ cherche(:fren, mot)
14
+ end
15
+
16
+ # Cherche un mot (insensible à la case) anglais pour donner sa traduction en français
17
+ # @param [String] mot mot anglais à rechercher
18
+ # @return [String|nil] mot traduit en français
19
+ def self.enfr(mot)
20
+ cherche(:enfr, mot)
21
+ end
22
+
23
+ class << self
24
+ private
25
+
26
+ # Cherche un mot (insensible à la case) pour donner sa traduction
27
+ # @param [Symbol] lang +:fren+, +:enfr+
28
+ # @param [String] mot_cible mot à rechercher
29
+ # @return [String|nil] mot traduit
30
+ def cherche(lang, mot_cible)
31
+ JSON.load_file(CyberMots::BASE_MOTS, symbolize_names: true).each do |mot|
32
+ case lang
33
+ when :fren
34
+ return mot[:anglais] if mot[:français].downcase == mot_cible.downcase
35
+ when :enfr
36
+ return mot[:français] if mot[:anglais].downcase == mot_cible.downcase
37
+ end
38
+ end
39
+ nil
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tty/option'
4
+ require_relative 'défaut'
5
+ require_relative '../cherche'
6
+
7
+ module CyberMots
8
+ module ILC
9
+ # Cherche un mot pour donner sa traduction
10
+ class Cherche < Défaut
11
+ usage do
12
+ command 'cherche'
13
+ desc 'Cherche un mot à traduire'
14
+ end
15
+
16
+ argument :lang do
17
+ permit %w[fren enfr]
18
+ desc 'Sens de la traduction'
19
+ end
20
+
21
+ argument :mot do
22
+ validate '^[[[:word:]] ()-]+$'
23
+ desc 'Mot à traduire'
24
+ end
25
+
26
+ def lance
27
+ if params[:lang] && params[:mot]
28
+ # send évite un case switch pour chaque valeur et est sûr car il y a une liste blanche pour la valeur de
29
+ # l'argument avec la commande permit
30
+ mot = CyberMots::Cherche.send(params[:lang], params[:mot])
31
+ puts mot.nil? ? 'Aucune traduction trouvée' : mot
32
+ else
33
+ print help(width: ILC::LARGEUR_TERM)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tty/option'
4
+ require_relative '../version'
5
+ require_relative 'maj'
6
+ require_relative 'liste'
7
+ require_relative 'cherche'
8
+
9
+ module CyberMots
10
+ # Module utilisé pour créer l'ILC de l'exécutable
11
+ module ILC
12
+ # Commande racine, aiguille vers les autres commandes
13
+ class Commandes
14
+ include TTY::Option
15
+
16
+ usage do
17
+ no_command
18
+ program 'cybermots'
19
+ desc 'ILC pour CyberMots'
20
+ end
21
+
22
+ flag :aide do
23
+ short '-a'
24
+ long '--aide'
25
+ desc "Affiche l'aide"
26
+ end
27
+
28
+ flag :version do
29
+ short '-v'
30
+ long '--version'
31
+ desc 'Affiche la version'
32
+ end
33
+
34
+ def lance
35
+ if params.errors.any?
36
+ puts params.errors.summary
37
+ else
38
+ cmd, args = case ARGV[0]
39
+ when 'maj'
40
+ [Maj.new, ARGV[1..]]
41
+ when 'liste'
42
+ [Liste.new, ARGV[1..]]
43
+ when 'cherche'
44
+ [Cherche.new, ARGV[1..]]
45
+ end
46
+
47
+ if cmd.nil?
48
+ if params[:version]
49
+ puts "CyberMots version #{CyberMots::VERSION}"
50
+ else
51
+ h = help(width: ILC::LARGEUR_TERM) do |sections|
52
+ sections.add_after :description, :commandes, <<~COMMANDES.chomp
53
+
54
+ Commandes :
55
+ #{Cherche.command.first} : #{Cherche.desc.first.first}
56
+ #{Liste.command.first} : #{Liste.desc.first.first}
57
+ #{Maj.command.first} : #{Maj.desc.first.first}
58
+ COMMANDES
59
+ end
60
+ print h
61
+ end
62
+ else
63
+ cmd.parse args
64
+ cmd.lance
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tty/option'
4
+ require 'cybermots/version'
5
+
6
+ module CyberMots
7
+ # Module utilisé pour créer l'ILC de l'exécutable
8
+ module ILC
9
+ # Commande par défaut pour faire hériter des propriétés
10
+ class Défaut
11
+ include TTY::Option
12
+
13
+ usage do
14
+ program 'cybermots'
15
+ end
16
+
17
+ flag :aide do
18
+ short '-a'
19
+ long '--aide'
20
+ desc "Affiche l'aide"
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tty/option'
4
+ require_relative 'défaut'
5
+
6
+ module CyberMots
7
+ module ILC
8
+ # Liste les mots d'une langue donnée ou donne la correspondance entre deux langues
9
+ class Fzf < Défaut
10
+ usage do
11
+ no_command
12
+ program 'cybermots-fzf'
13
+ desc 'Cherche un traduction avec fzf'
14
+ end
15
+
16
+ argument :lang do
17
+ permit %w[fren enfr]
18
+ desc 'Langage à lister'
19
+ end
20
+
21
+ def lance
22
+ if params[:lang] == 'fren'
23
+ puts `cybermots cherche fren "$(cybermots liste fr | fzf)"`
24
+ elsif params[:lang] == 'enfr'
25
+ puts `cybermots cherche enfr "$(cybermots liste en | fzf)"`
26
+ else
27
+ print help(width: ILC::LARGEUR_TERM)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tty/screen'
4
+ require_relative 'commandes'
5
+ require_relative 'nom_sections'
6
+
7
+ module CyberMots
8
+ # Module utilisé pour créer l'ILC de l'exécutable
9
+ module ILC
10
+ LARGEUR_TERM = TTY::Screen.width
11
+ end
12
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tty/option'
4
+ require_relative 'défaut'
5
+ require_relative '../liste'
6
+
7
+ module CyberMots
8
+ module ILC
9
+ # Liste les mots d'une langue donnée ou donne la correspondance entre deux langues
10
+ class Liste < Défaut
11
+ usage do
12
+ command 'liste'
13
+ desc 'Liste tous les mots'
14
+ end
15
+
16
+ argument :lang do
17
+ permit %w[fr en fren enfr]
18
+ desc 'Langage à lister'
19
+ end
20
+
21
+ def lance
22
+ if params[:lang]
23
+ # send évite un case switch pour chaque valeur et est sûr car il y a une liste blanche pour la valeur de
24
+ # l'argument avec la commande permit
25
+ CyberMots::Liste.send(params[:lang]).each do |mot|
26
+ puts mot
27
+ end
28
+ else
29
+ print help(width: ILC::LARGEUR_TERM)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tty/option'
4
+ require_relative 'défaut'
5
+ require_relative '../maj'
6
+
7
+ module CyberMots
8
+ module ILC
9
+ # Mise à jour des données
10
+ class Maj < Défaut
11
+ usage do
12
+ command 'maj'
13
+ desc 'Met à jour le dictionnaire'
14
+ end
15
+
16
+ option :base do
17
+ short '-b'
18
+ long '--base chemin'
19
+ desc 'Chemin vers la base de mots (défaut : données/mots.json à partir de la racine du projet)'
20
+ end
21
+
22
+ def lance
23
+ if params[:aide]
24
+ print help(width: ILC::LARGEUR_TERM)
25
+ else
26
+ params[:base] ? CyberMots::MiseAJour.maj(params[:base]) : CyberMots::MiseAJour.maj
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ # correction de singe afin de pouvoir traduire le nom des sections
4
+ # https://github.com/piotrmurach/tty-option/issues/11
5
+ module TTY
6
+ module Option
7
+ # correction de singe
8
+ class Formatter
9
+ # correction de singe
10
+ def initialize(parameters, usage, param_display: DEFAULT_PARAM_DISPLAY,
11
+ width: DEFAULT_WIDTH, order: DEFAULT_ORDER, indent: 0)
12
+ @parameters = parameters
13
+ @usage = usage
14
+ @param_display = param_display
15
+ @order = order
16
+ @width = width
17
+ @indent = indent
18
+ @space_indent = SPACE * indent
19
+ @param_indent = indent + 2
20
+ @section_names = {
21
+ usage: 'Utilisation :',
22
+ arguments: 'Arguments :',
23
+ keywords: 'Mots clés :',
24
+ options: 'Options :',
25
+ env: 'Environement :',
26
+ examples: 'Exemples :'
27
+ }
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Dépendances natives
4
+ require 'json'
5
+ require_relative '../cybermots'
6
+
7
+ module CyberMots
8
+ # Liste les mots d'une langue donnée ou donne la correspondance entre deux langues
9
+ class Liste
10
+ # Liste les mots français dans l'ordre alphabétique
11
+ # @return [Array<String>] mots
12
+ def self.fr
13
+ liste(:fr)
14
+ end
15
+
16
+ # Liste les mots anglais dans l'ordre alphabétique
17
+ # @return [Array<String>] mots
18
+ def self.en
19
+ liste(:en)
20
+ end
21
+
22
+ # Liste les correspondances français vers anglais dans l'ordre alphabétique
23
+ # @return [Array<String>] mots et leur traduction
24
+ def self.fren
25
+ liste(:fren)
26
+ end
27
+
28
+ # Liste les correspondances anglais vers français dans l'ordre alphabétique
29
+ # @return [Array<String>] mots et leur traduction
30
+ def self.enfr
31
+ liste(:enfr)
32
+ end
33
+
34
+ class << self
35
+ private
36
+
37
+ # Liste les mots dans l'ordre alphabétique (insensible à la case)
38
+ # @param [Symbol] lang +:fr+, +:en+, +:fren+, +:enfr+
39
+ # @return [Array<String>] mots
40
+ def liste(lang)
41
+ mots = []
42
+ JSON.load_file(CyberMots::BASE_MOTS, symbolize_names: true).each do |mot|
43
+ case lang
44
+ when :fr
45
+ mots << mot[:français]
46
+ when :en
47
+ mots << mot[:anglais]
48
+ when :fren
49
+ mots << "#{mot[:français]} [#{mot[:classe]}] : #{mot[:anglais]}"
50
+ when :enfr
51
+ mots << "#{mot[:anglais]} : #{mot[:français]} [#{mot[:classe]}]"
52
+ end
53
+ end
54
+ mots.sort { |a, b| a.downcase <=> b.downcase }
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Dépendances natives
4
+ require 'json'
5
+ require 'tmpdir'
6
+ require 'yaml'
7
+
8
+ module CyberMots
9
+ # Mise à jour des données
10
+ class MiseAJour
11
+ # URL du dépôt git de CyberMots
12
+ CYBERMOTS_URL = 'https://github.com/IDLFAC/CyberMots.git'
13
+
14
+ # Met à jour la base de mots
15
+ # @param [String] base chemin vers le fichier de la base de mots
16
+ # (par défaut +données/mots.json+ à partir de la racine du projet)
17
+ def self.maj(base = CyberMots::BASE_MOTS)
18
+ rep_tmp = git_clone
19
+ mots_données = génère_json(rep_tmp)
20
+ File.write(base, mots_données.to_json)
21
+ end
22
+
23
+ class << self
24
+ private
25
+
26
+ # Clone le dépôt git de CyberMots contenant les données dans un répertoire temporaire
27
+ # @return [String] chemin du répertoire temporaire
28
+ def git_clone
29
+ rep_tmp = Dir.mktmpdir
30
+ `git clone --depth 1 #{CYBERMOTS_URL} #{rep_tmp}`
31
+ rep_tmp
32
+ end
33
+
34
+ # Génère les méta-données des mots
35
+ # @param [String] dossier le chemin racine où se trouve le dépôt de CyberMots
36
+ # @return [Objet] données sous forme d'objet Ruby
37
+ def génère_json(dossier)
38
+ données = []
39
+
40
+ Dir.glob("#{dossier}/mots/*.md").each do |mot|
41
+ données << YAML.load_file(mot)
42
+ end
43
+
44
+ données
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CyberMots
4
+ # Version de la bibliothèque et de l'application CyberMots
5
+ VERSION = '0.0.1'
6
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cybermots/cherche'
4
+ require 'cybermots/liste'
5
+ require 'cybermots/maj'
6
+ require 'cybermots/version'
7
+
8
+ module CyberMots
9
+ BASE_MOTS = File.expand_path('../données/mots.json', __dir__)
10
+ COULEURS = {
11
+ anglais: '#3e8ed0',
12
+ français: '#f14668'
13
+ }.freeze
14
+ end
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'cybermots/ilc/ilc'
5
+
6
+ ilc = CyberMots::ILC::Commandes.new
7
+ ilc.parse(ARGV)
8
+ ilc.lance
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'cybermots/ilc/ilc'
5
+ require 'cybermots/ilc/fzf'
6
+
7
+ ilc = CyberMots::ILC::Fzf.new
8
+ ilc.parse(ARGV)
9
+ ilc.lance
@@ -0,0 +1 @@
1
+ [{"anglais":"CLI","français":"ILC","classe":"abr.","chemin":"ILC-abréviation"},{"anglais":"library","français":"bibliothèque","classe":"n. f.","chemin":"bibliothèque-nom"},{"anglais":"encrypt (to)","français":"chiffrer","classe":"v.","chemin":"chiffrer-verbe"},{"anglais":"switch","français":"commutateur","classe":"n. m.","chemin":"commutateur-nom"},{"anglais":"email","français":"courriel","classe":"n. m.","chemin":"courriel-nom"},{"anglais":"slideshow","français":"diaporama","classe":"n. m.","chemin":"diaporama-nom"},{"anglais":"whitelist","français":"liste blanche","classe":"n. f.","chemin":"liste-blanche-nom"},{"anglais":"blacklist","français":"liste noire","classe":"n. f.","chemin":"liste-noire-nom"},{"anglais":"malicious","français":"malveillant","classe":"adj.","chemin":"malveillant-adjectif"},{"anglais":"update (to)","français":"mettre à jour","classe":"v.","chemin":"mettre-à-jour-verbe"},{"anglais":"upgrade (to)","français":"mettre à niveau","classe":"v.","chemin":"mettre-à-niveau-verbe"},{"anglais":"update (an)","français":"mise à jour","classe":"n. f.","chemin":"mise-à-jour-nom"},{"anglais":"upgrade (an)","français":"mise à niveau","classe":"n. f.","chemin":"mise-à-niveau-nom"},{"anglais":"disruptive","français":"novateur","classe":"adj.","chemin":"novateur-adjectif"},{"anglais":"digital","français":"numérique","classe":"adj.","chemin":"numérique-adjectif"},{"anglais":"crash","français":"plantage","classe":"n. m.","chemin":"plantage-nom"},{"anglais":"spam (to)","français":"polluposter","classe":"v.","chemin":"polluposter-verbe"},{"anglais":"spam","français":"pourriel","classe":"n. m.","chemin":"pourriel-nom"},{"anglais":"process","français":"processus","classe":"n. m.","chemin":"processus-nom"},{"anglais":"drive-by download","français":"téléchargement furtif","classe":"n. m.","chemin":"téléchargement-furtif-nom"},{"anglais":"download (to)","français":"télécharger","classe":"v.","chemin":"télécharger-verbe"},{"anglais":"upload (to)","français":"téléverser","classe":"v.","chemin":"téléverser-verbe"}]
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cybermots
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Alexandre ZANNI
8
+ autorequire:
9
+ bindir: binaires
10
+ cert_chain: []
11
+ date: 2023-11-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tty-option
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.3.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.3.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: tty-screen
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.8.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.8.1
41
+ description: CyberMots est le dictionnaire francophone de la cybersécurité ; cet outil
42
+ en ligne de commande permet de chercher et lister des traductions disponibles sur
43
+ le site
44
+ email: alexandre.zanni@europe.com
45
+ executables:
46
+ - cybermots
47
+ - cybermots-fzf
48
+ extensions: []
49
+ extra_rdoc_files: []
50
+ files:
51
+ - biliothèque/cybermots.rb
52
+ - biliothèque/cybermots/cherche.rb
53
+ - biliothèque/cybermots/ilc/cherche.rb
54
+ - biliothèque/cybermots/ilc/commandes.rb
55
+ - biliothèque/cybermots/ilc/défaut.rb
56
+ - biliothèque/cybermots/ilc/fzf.rb
57
+ - biliothèque/cybermots/ilc/ilc.rb
58
+ - biliothèque/cybermots/ilc/liste.rb
59
+ - biliothèque/cybermots/ilc/maj.rb
60
+ - biliothèque/cybermots/ilc/nom_sections.rb
61
+ - biliothèque/cybermots/liste.rb
62
+ - biliothèque/cybermots/maj.rb
63
+ - biliothèque/cybermots/version.rb
64
+ - binaires/cybermots
65
+ - binaires/cybermots-fzf
66
+ - données/mots.json
67
+ homepage: https://idlfac.github.io/CyberMots-ILC/
68
+ licenses:
69
+ - MIT
70
+ metadata:
71
+ yard.run: yard
72
+ bug_tracker_uri: https://github.com/IDLFAC/CyberMots-ILC/issues
73
+ changelog_uri: https://github.com/IDLFAC/CyberMots-ILC/blob/master/JOURNAL-DES-MODIFICATIONS.md
74
+ documentation_uri: https://www.rubydoc.info/gems/cybermots
75
+ homepage_uri: https://idlfac.github.io/CyberMots-ILC/
76
+ source_code_uri: https://github.com/IDLFAC/CyberMots-ILC/
77
+ rubygems_mfa_required: 'true'
78
+ post_install_message:
79
+ rdoc_options: []
80
+ require_paths:
81
+ - biliothèque
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 3.0.0
87
+ - - "<"
88
+ - !ruby/object:Gem::Version
89
+ version: '4.0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubygems_version: 3.4.10
97
+ signing_key:
98
+ specification_version: 4
99
+ summary: ILC pour CyberMots
100
+ test_files: []