Class: Clir::PrecedencedList

Inherits:
Array
  • Object
show all
Defined in:
lib/clir/data_manager/PrecedencedList.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(liste, list_name) ⇒ PrecedencedList

Instantiation

Parameters:

  • liste (Array)

    La liste des items

  • list_name (String)

    Un nom unique pour cette liste de valeur. Si ce n’est pas un nom unique, des comportements inattendus se produiront.



16
17
18
19
20
21
# File 'lib/clir/data_manager/PrecedencedList.rb', line 16

def initialize(liste, list_name)
  super(liste)
  liste.first.is_a?(Hash) || raise("Pour pouvoir gérer les précédences d'une liste, il faut que les éléments soit des dictionnaires (Hash).")
  liste.first.key?(:value) || raise("Pour pouvoir gérer les précédences d'une liste, il faut que les éléments définissent l'attribut unique :value.")
  @list_name = list_name
end

Class Method Details

.folderObject

Note:

En mode test, il faut le refaire chaque fois



90
91
92
93
94
95
96
# File 'lib/clir/data_manager/PrecedencedList.rb', line 90

def self.folder
  if test?
    mkdir(File.join(Dir.home, 'TESTS', '.precedences'))
  else
    @@folder ||= mkdir(File.join(Dir.home, '.precedences'))
  end
end

Instance Method Details

#pathObject



84
85
86
# File 'lib/clir/data_manager/PrecedencedList.rb', line 84

def path
  @path ||= File.join(self.class.folder, "#{@list_name}.precedences")
end

#precedence_exist?Boolean

Returns:

  • (Boolean)


80
81
82
# File 'lib/clir/data_manager/PrecedencedList.rb', line 80

def precedence_exist?
  File.exist?(path)
end

#precedencesObject



70
71
72
73
74
75
76
77
78
# File 'lib/clir/data_manager/PrecedencedList.rb', line 70

def precedences
  @precedences ||= begin
    if precedence_exist?
      # puts "Je lis le fichier de précédence : #{path}".orange
      # sleep 4
      File.read(path).split("\n")
    else [] end
  end
end

#saveObject



66
67
68
# File 'lib/clir/data_manager/PrecedencedList.rb', line 66

def save
  File.write(path, precedences.join("\n"))
end

#set_last(value) ⇒ Object

main =

Méthode principale pour enregistrer le dernier item choisi



51
52
53
54
55
# File 'lib/clir/data_manager/PrecedencedList.rb', line 51

def set_last(value)
  precedences.delete(value)
  @precedences.unshift(value)
  save
end

#tableObject



58
59
60
61
62
63
64
# File 'lib/clir/data_manager/PrecedencedList.rb', line 58

def table
  @table ||= begin
    tbl = {}
    self.each { |ditem| tbl.merge!(ditem[:value] => ditem) }
    tbl
  end
end

#to_precObject

main =

Méthode principale qui retourne les items gérés au niveau de la précédence.



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/clir/data_manager/PrecedencedList.rb', line 28

def to_prec
  if precedence_exist?
    @table = nil # Pour forcer 
    liste = precedences.map do |value|
      table.delete(value)
    end.compact # les items supprimés
    # 
    # On ajoute les items restants
    # 
    table.each do |value, ditem|
      liste << ditem
    end
    return liste
  else
    return self
  end
end