Clir::DataManager
- You define (deeply) the instance properties,
- you "attach" the DataManager to your class,
- you can then create, edit, remove and save your instances in command line.
Installation
Add this line to your application's Gemfile:
gem 'clir/data_manager'
En attendant que le gem soit complet, mettre le code suivant dans le programme devant l'utiliser (pas besoin de faire bundle install
etc.) :
$LOAD_PATH.unshift File.join(Dir.home,'Programmes','Gems','clir-data_manager','lib')
And then execute:
$ bundle install
Or install it yourself as:
$ gem install clir-data_manager
Usage
Pour qu'une classe quelconque puisse utiliser le gem, lui mettre :
module MonModule
class MaClasse
include ClirDataManagerConstants # <==== usefull
DATA_PROPERTIES = [...] # <== see below
@@save_system = :card # <== see below
@@save_format = :yaml # <== see below
@@save_location = '/path/to/folder' # <== see below
end
end
Clir::DataManager.new(MonModule::MaClasse)
Définition du système de sauvegarde
Il y a 6 façons de sauvegarder les données avec Clir::DataManager
:
- dans un unique fichier, au format CSV ou YAML,
- dans des fiches individuelles, au format CSV ou YAML,
- par un fichier de configuration, au format CSV ou YAML [Ce système n'est pas encore implémenté, il fonctionnera sur la base d'un fichier de configuration qui définira la façon de sauvegarder les données, toujours en CSV ou YAML]
Définition des propriétés de l'instance
Le module ClirDataManagerConstants
permet de charger les constants comme REQUIRED
, EDITABLE
, etc.
Il faut ensuite définir les propriétés des instances de cette classe, à l'aide la constante DATA_PROPERTIES
:
module MonModule
class MaClasse
DATA_PROPERTIES = [
{prop: :id, type: :id, name: "ID", specs: REQUIRED, default: :new_id},
{prop: :name, type: :string, name:"Votre nom", specs:REQUIRED|EDITABLE|DISPLAYABLE},
{prop: :name, type: :string, name:"Votre genre", specs:ALL, default: 'F'}
# ...
]
end
end
On pourrait aussi envoyer les données lors de l'installation du manager de propriétés :
pdata = [
{prop: :id, ...}
]
Clir::DataManager.new(MonModule::MaClasse, pdata)
Pour créer la première instance, il suffit ensuite de faire :
MonModule::MaClasse.new.create
Pour éditer ou afficher une instance de la classe :
i = MonModule::MaClasse.new()
i.edit
i.show
Les données sont toujours placées dans la propriété @data
de l'instance, qui peut être définie à l'instanciation, une fois qu'on a les données :
module MonModule
class MaClasse
def initialize(data)
@data = data
end
end
end
Noter qu'il n'est pas nécessaire de faire attribute_reader: :data
puisque data est automatiquement défini en accesseur.
Noter qu'il n'est pas non plus nécessaire de créer toutes les méthodes-propriété qui sont nécessaires habituellement pour récupérer et définir les valeurs.
À partir du moment où DATA_PROPERTIES
définit :
DATA_PROPERTIES = [
# ...
{prop: :maprop, ...}
# ...
]
… alors le manager de propriétés définit les méthodes :
module MonModule
class MaClasse
def maprop
return @data[:maprop]
end
def maprop=(value)
@data.merge!(maprop: value)
end
end
end
Donc, on récupère et définit les valeurs de cette manière :
i = MonModule::MaClasse.new({maprop: "Valeur courante"})
i.maprop
# => "Valeur courante"
i.maprop = "Nouvelle valeur"
i.maprop
# => "Nouvelle valeur"
Définition des propriétés
C'est donc la grosse partie pour utiliser profitablement de DataManager
. Une bonne définition des propriétés conduit à une utilisation tout à fait efficace.
Identifiant de la propriété
Cet identifiant se définit à l'aide de l'attribut :prop
.
DATA_PROPERTIES = [
{ prop: :maprop }
]
C'est par ce nom que l'instance connaitra la valeur consignée. Pour définir quelqu'un, par exemple, on aura :
DATA_PROPERTIES = [
{ prop: :prenom },
{ prop: :nom },
]
Et une instance pourra utiliser :
simone = MaClasse.new
simone.prenom
# => "Simone"
simone.nom
# => "De Beauvoir"
Question personnalisée
Par défaut, la question « Nouvelle valeur pour “<propriété>
” » est posée pour modifier une propriété.
On peut néanmoins définir une autre question avec l'attribut :quest
qui peut contenir des valeurs de template qui ne doivent utiliser que les valeurs dans les data
de l'instance.
TODO: Plus tard on pourra aussi imaginer évaluer la question ou fournir d'autres valeurs au template (par exemple un attribut :quest_values
qui pourrait être définie en dur ou par une procédure qui utiliserait l'instance en premier argument).
Valeur par défaut dans les propriétés
Une donnée propriété peut définir la valeur par défaut de cette propriété pour une instance donnée.
DATA_PROPERTIES = [
{prop: :maprop ... default: <...> }
]
Cette valeur peut être de diférent type :
- une valeur explicite :
default: "Ma valeur par défafut"
default: 12
default: true
- une procédure :
default: Proc.new() { |instance| instance.name.length }
Noter que l'instance est toujours transmise en premier argument.
- une méthode d'instance :
class MaClasse
def valeur_default_pour_prop
return "oui"
end
end
default: :valeur_default_pour_prop
- une méthode de classe :
class MaClasse
def self.valeur_default_pour_prop
@@valeur_prop += 1
end
end
default: :valeur_default_pour_prop
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake test
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/clir-data_manager.