Se connecter à une base sqlite3
cf http://sequel.rubyforge.org/rdoc/files/README_rdoc.html
1: %w(rubygems sequel).each do |lib| require lib end 2: 3: db = Sequel.sqlite('labintel.sqlite3')
Créer une table nommée « pers » ayant deux colonnes « p_numero_sel et name » de type Chaine de caractères
db.create_table? :pers do primary_key :id String :p_numero_sel String :name end
Créer une table nommée « pers_attr » ayant trois colonnes « pers_id, attribute et value » de type Chaine de caractères
db.create_table? :pers_attr do primary_key :id String :pers_id String :attribute String :value end
Peupler la table « pers » à partir du fichier « pers.yaml ».
cf http://sequel.rubyforge.org/rdoc/classes/Sequel/Model/ClassMethods.html
--- - id: 1 p_numero_sel: '1234567890' name: 'davinci' - id: 2 p_numero_sel: '3456789012' name: 'watson'
1: require 'yaml' 2: 3: class Person < Sequel::Model 4: set_dataset :pers # permet de choisir une table ne portant pas le même nom que le modèle 5: unrestrict_primary_key # permet de modifier la clef primaire qui est par défaut vérouillée en écriture 6: end 7: 8: persons_yaml = YAML.load_file('pers.yaml') 9: persons_yaml.each do |yaml_person| 10: person = Person.new 11: person.id = yaml_person["id"] 12: person.p_numero_sel = yaml_person["p_numero_sel"] 13: person.name = yaml_person["name"] 14: person.save 15: end
Peupler la table « pers_attr » à partir du fichier « pers_attr.json ».
cf http://sequel.rubyforge.org/rdoc-plugins/classes/Sequel/Plugins/JsonSerializer.html
[{ "id": 1, "pers_id": 1, "attribute": "email", "value": "leonardo@vinci-closluce.com" },{ "id": 2, "pers_id": 1, "attribute": "labo", "value": "umrxyz" }]
1: require 'json' 2: 3: class Attributes < Sequel::Model 4: set_dataset :pers_attr # permet de choisir une table ne portant pas le même nom que le modèle 5: unrestricted_primary_key # permet de modifier la clef primaire qui est par défaut vérouillée en écriture 6: end 7: 8: Attributes.plugin :json_serializer 9: pers_attr_json = JSON(File.read('pers_attr.json')) # tranforme un objet JSON en un objet Ruby 10: pers_attr_json.each do |json_attribute| 11: attribute = Attributes.new 12: attribute.from_json( # modifie l'instance 'attribute' du modèle 'Attributes' en fonction de l'objet JSON 13: JSON[json_attribute] # transforme un objet Ruby en objet JSON 14: ) 15: attribute.save 16: end
Lister toutes les entrées de la table pers
1: Person.each do |person| pp person end
Lister toutes les entrées de la table pers_attrs
1: Attribute.each do |attribute| pp attribute end
Pour chaque entrée de la table « pers » lister toutes les entrées associées de la table « pers_attr »
1: class Person < Sequel::Model 2: ... 3: one_to_many :attributes, :class => Attribute, :key => :pers_id 4: end 5: 6: Person.each do |person| 7: pp person.attributes 8: end
ajouter un attribut « statut=chercheur » à la personne ayant l'id 1
1: person = Person["1"] 2: attribute = Attribute.new( "attribute" => "statut", "value" => "chercheur" ) 3: person.add_attribute(attribute) 4: person.save 5: 6: Person.each do |person| 7: pp person.attributes 8: end
ajouter une contrainte d'unicité sur l'attribut « statut »
cf http://sequel.rubyforge.org/rdoc/files/doc/validations_rdoc.html
1: class Attribute < Sequel::Model 2: plugin :validation_helpers 3: def validate 4: super 5: validates_unique [ :pers_id, :attribute ] if values[:attribute] == 'statut' 6: end 7: end
lister toutes les personnes ayant le statut de chercheurs
cf http://sequel.heroku.com/2011/05/16/filtering-by-associations/
1: pp Person.filter( 2: :attributes => Attribute.filter( 3: :attribute => "statut", 4: :value => "chercheur" 5: ) 6: ).all
$Id: mardi_corrige_ruby_1.txt 637 2012-05-23 06:19:00Z delavennat $