
Product
Introducing Scala and Kotlin Support in Socket
Socket now supports Scala and Kotlin, bringing AI-powered threat detection to JVM projects with easy manifest generation and fast, accurate scans.
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
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)
Il y a 6 façons de sauvegarder les données avec Clir::DataManager
:
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"
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.
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"
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).
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 :
default: "Ma valeur par défafut"
default: 12
default: true
default: Proc.new() { |instance| instance.name.length }
Noter que l'instance est toujours transmise en premier argument.
class MaClasse
def valeur_default_pour_prop
return "oui"
end
end
default: :valeur_default_pour_prop
class MaClasse
def self.valeur_default_pour_prop
@@valeur_prop += 1
end
end
default: :valeur_default_pour_prop
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.
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/clir-data_manager.
FAQs
Unknown package
We found that clir-data_manager demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket now supports Scala and Kotlin, bringing AI-powered threat detection to JVM projects with easy manifest generation and fast, accurate scans.
Application Security
/Security News
Socket CEO Feross Aboukhadijeh and a16z partner Joel de la Garza discuss vibe coding, AI-driven software development, and how the rise of LLMs, despite their risks, still points toward a more secure and innovative future.
Research
/Security News
Threat actors hijacked Toptal’s GitHub org, publishing npm packages with malicious payloads that steal tokens and attempt to wipe victim systems.