X-Git-Url: https://nos-oignons.net/gitweb/gestion-adh.git/blobdiff_plain/3e57bb279787236b1349f6b1da2ecf61ed4211e0..4c730203fde2eb1d6fdcbe11542c6730d11124ae:/lib/nos_oignons/subscriptions.rb diff --git a/lib/nos_oignons/subscriptions.rb b/lib/nos_oignons/subscriptions.rb deleted file mode 100644 index de4ddf0..0000000 --- a/lib/nos_oignons/subscriptions.rb +++ /dev/null @@ -1,65 +0,0 @@ -require 'safe_yaml' -SafeYAML::OPTIONS[:default_mode] = :safe - -module NosOignons - SUBSCRIPTIONS_ROOT = 'Membres' - SUBSCRIPTION_FIELDS = [:name, :address, :email, :membership_fee_paid_on] - SUBSCRIPTION_MANDATORY_FIELDS = [:name, :email] - - class Subscription < Struct.new(*SUBSCRIPTION_FIELDS) - class << self - def all - Dir.glob("#{SUBSCRIPTIONS_ROOT}/*.mdwn").sort.collect do |file| - subscription_id = File.basename(file).gsub(/\.mdwn$/, '') - Subscription.new(subscription_id) - end - end - - def filename_for_id(subscription_id) - "Membres/%06d.mdwn" % subscription_id - end - - def read_from_git(ref, file) - IO.popen(['git', 'show', "#{ref}:#{file}"]) do |f| - subscription_id = File.basename(file).gsub(/\.mdwn$/, '') - Subscription.new(subscription_id, f.read) - end - end - end - - attr_reader :subscription_id - - def initialize(subscription_id, page_content=nil) - unless subscription_id =~ /\A\d{6}\z/ - raise ArgumentError.new('bad subscription id format') - end - @subscription_id = subscription_id - unless page_content - page_content = File.open(Subscription.filename_for_id(subscription_id)).read - end - unless page_content.start_with?("---\n") - raise ArgumentError.new('content is not a proper YAML document') - end - data = YAML.load(page_content) - SUBSCRIPTION_FIELDS.each do |field| - self[field] = data[field.to_s] - end - # Immutability for the win - SUBSCRIPTION_FIELDS.each do |field| - instance_eval{ undef :"#{field}=" } - end - SUBSCRIPTION_MANDATORY_FIELDS.each do |sym| - raise ArgumentError.new('missing mandatory fields') unless self[sym] - end - if membership_fee_paid_on && !membership_fee_paid_on.is_a?(Date) - raise ArgumentError.new('membership_fee_paid_on is not a date') - end - end - - def up_to_date? - now = Time.now - last_year = Time.new(now.year - 1, now.month, now.day).to_date - membership_fee_paid_on && last_year < membership_fee_paid_on - end - end -end