Module: MyActiveFile::ClassMethods

Defined in:
lib/my_active_file.rb

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/my_active_file.rb', line 43

def method_missing(name, *args, &block)
  field = name.to_s.split('_').last
  super if @fields.map(&:name).include? field
  load_all.select do |object|
    object.send(field) == args.first
  end
end

Instance Method Details

#field(name, required: false, default: '') ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/my_active_file.rb', line 18

def field(name, required: false, default: '')
  @fields ||= []
  @fields << Field.new(name, required, default)
  class_eval %$
      attr_accessor *#{@fields.map(&:name)}
      attr_reader :id, :destroyed, :new_record
      def initialize(#{@fields.map(&:to_argument).join(', ')})
          @id = self.class.next_id
          @destroyed = false
          @new_record = true
          #{@fields.map(&:to_assign).join("\n")}
      end    $
end

#find(id) ⇒ Object



32
33
34
35
36
37
# File 'lib/my_active_file.rb', line 32

def find(id)
  unless File.exist?("db/revistas/#{id}.yml")
    raise DocumentNotFound, "Arquivo #{id} não encontrado.", caller
  end
  YAML.load File.open("db/revistas/#{id}.yml", 'r')
end

#next_idObject



39
40
41
# File 'lib/my_active_file.rb', line 39

def next_id
  Dir.glob('db/revistas/*.yml').size + 1
end