Module: DingSDK::MetadataFields
  
  
  
Defined Under Namespace
  
    
      Modules: ClassMethods
    
  
    
      Classes: Field
    
  
  
    
      Class Method Summary
      collapse
    
    
  
    
      Instance Method Summary
      collapse
    
    
  
  
  
    Class Method Details
    
      
  
  
    .included(base)  ⇒ Object 
  
  
  
  
    
      
101
102
103 
     | 
    
      # File 'lib/ding_sdk/utils/metadata_fields.rb', line 101
def self.included(base)
  base.extend(ClassMethods)
end 
     | 
  
 
    
   
  
    Instance Method Details
    
      
  
  
    #field(field_name)  ⇒ Object 
  
  
  
  
    
      
109
110
111
112
113 
     | 
    
      # File 'lib/ding_sdk/utils/metadata_fields.rb', line 109
def field(field_name)
  fields.each do |f|
    return f if f.name == field_name
  end
end
     | 
  
 
    
      
  
  
    #fields  ⇒ Object 
  
  
  
  
    
      
105
106
107 
     | 
    
      # File 'lib/ding_sdk/utils/metadata_fields.rb', line 105
def fields
  self.class.fields
end 
     | 
  
 
    
      
  
  
    #initialize  ⇒ Object 
  
  
  
  
    
      
95
96
97
98
99 
     | 
    
      # File 'lib/ding_sdk/utils/metadata_fields.rb', line 95
def initialize
  instance = allocate
  fields.each { |mod| instance.singleton_class.include(mod) }
  instance.send(:initialize)
end
     | 
  
 
    
      
  
  
    #marshal_json(encode: true)  ⇒ Object 
  
  
  
  
    
      
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148 
     | 
    
      # File 'lib/ding_sdk/utils/metadata_fields.rb', line 123
def marshal_json(encode: true)
  d = {}
  fields.sort_by(&:name).each do |field|
    f = send(field.name)
    next if f.nil?
    format_json_meta = field.metadata[:format_json]
    if !format_json_meta.nil? && format_json_meta.include?(:letter_case)
      key = format_json_meta[:letter_case].call(field.name)
    else
      key = field.name
    end
    if f.is_a? Array
      d[key] = f.map { |o| marshal_single(o) }
    elsif f.is_a? Hash
      d[key] = f.map { |k, v| [k, marshal_single(v)] }
    else
      d[key] = marshal_single(f)
    end
  end
  if encode
    JSON.dump(d)
  else
    d
  end
end
     | 
  
 
    
      
  
  
    #marshal_single(field)  ⇒ Object 
  
  
  
  
    
      
115
116
117
118
119
120
121 
     | 
    
      # File 'lib/ding_sdk/utils/metadata_fields.rb', line 115
def marshal_single(field)
  if field.respond_to? :marshal_json
    field.marshal_json(encode: false)
  else
    Utils.val_to_string(field, primitives: false)
  end
end
     |