cybermots 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []