File: meta_def.rb

package info (click to toggle)
ruby-sequel 4.37.0-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 8,076 kB
  • ctags: 5,629
  • sloc: ruby: 91,441; makefile: 2
file content (35 lines) | stat: -rw-r--r-- 1,068 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# frozen-string-literal: true
#
# The meta_def extension is designed for backwards compatibility
# with older Sequel code that uses the meta_def method on
# Database, Dataset, and Model classes and/or instances.  It is
# not recommended for usage in new code.  To load this extension:
#
#   Sequel.extension :meta_def
#
# Related module: Sequel::Metaprogramming

#
module Sequel
  # Contains meta_def method for adding methods to objects via blocks.
  # Only recommended for backwards compatibility with existing code.
  module Metaprogramming
    # Define a method with the given name and block body on the receiver.
    #
    #   ds = DB[:items]
    #   ds.meta_def(:x){42}
    #   ds.x # => 42
    def meta_def(name, &block)
      (class << self; self end).send(:define_method, name, &block)
    end
  end

  Database.extend Metaprogramming
  Database.send(:include, Metaprogramming)
  Dataset.extend Metaprogramming
  Dataset.send(:include, Metaprogramming)
  if defined?(Model)
    Model.extend Metaprogramming
    Model.send(:include, Metaprogramming)
  end
end