Class: Sparrow::Base

Inherits:
Object
  • Object
show all
Extended by:
ActiveModel::Callbacks, ActiveModel::Translation, ClassMethods
Includes:
ActiveModel::Dirty, ActivemodelObjectInfo::Base
Defined in:
lib/sparrow/base.rb

Overview

对麻雀实体类进行基础类定义和设置通用的属性方法等。所有实际使用的实体类都要基于此类进行设置。

Author:

Constant Summary

Constants included from ClassMethods

ClassMethods::DEFAULT_PRIMARY_KEY_NAME

Instance Attribute Summary

Attributes included from ClassMethods

#primary_key

Instance Method Summary collapse

Methods included from ClassMethods

attribute_keys, define_object_attribute, define_object_attributes

Constructor Details

#initialize(**attribute_settings) ⇒ Base

初始化基本实体类。

Parameters:

  • attribute_settings (Hash)

    一个包含字段名称和对应值的散列。



26
27
28
29
30
31
32
33
34
# File 'lib/sparrow/base.rb', line 26

def initialize(**attribute_settings)
  run_callbacks(:initialize) do
    attribute_settings.each do |key, value|
      # puts "key=#{key}, value=#{value}, respond=#{respond_to?(key.to_s + '=')}"
      __send__("#{key}=", value) if respond_to?("#{key}=")
    end
    true # 这里必须保证为true让block值为真,确保回调会被调用
  end
end

Instance Method Details

#attribute_namesArray<Symbol>

获取当前实例中通过类方法 ClassMethods#define_object_attribute 设定的属性。

Returns:

  • (Array<Symbol>)

    返回一个数组,每个元素均为当前实例对应的类中设定的属性名。



50
51
52
# File 'lib/sparrow/base.rb', line 50

def attribute_names
  self.class.attribute_keys.compact_blank.map(&:to_sym)
end

#attributesHash

获取当前实例中通过类设定属性的键值对,键名为属性名,值为对应属性的值。

Returns:

  • (Hash)

    返回对应的属性名和属性值的键值对。



41
42
43
# File 'lib/sparrow/base.rb', line 41

def attributes
  attribute_names.index_with { |attribute_name| __send__(attribute_name) }
end

#i18n(name, type: :label, scope: nil, options: {}) ⇒ String

提供实例中快速获取 I18n 文本的方法。会根据当前类自动选择路径查找。详情参照对应同名类方法。

Parameters:

  • name (Symbol, String)

    对应 I18n 文件中的最终名称。

  • type (Symbol, String) (defaults to: :label)

    可选的。对应 I18n 文件中该名称所属的上一级命名空间,默认为 :label 值。

  • scope (String, Symbol) (defaults to: nil)

    可选的。对应 I18n 文件中上一级命名空间之前,sparrow 命名空间之下的所有命名空间。 每个命名空间之间用半角符号 . 隔开。没有给出则默认使用当前类以及类的命名空间作为路径。

  • options (Hash) (defaults to: {})

    可选的。其他参数。主要用来设定模板文字中的变量使用。

Returns:

  • (String)

    返回对应的字符串。



65
66
67
# File 'lib/sparrow/base.rb', line 65

def i18n(name, type: :label, scope: nil, options: {})
  self.class.i18n(name, type: type, scope: scope, options: options)
end