Sha256: 98c9663c1635d2793f6ce1b0dafdce9aeb3cd074386de4e536413e3622f799cd

Contents?: true

Size: 2 KB

Versions: 4

Compression:

Stored size: 2 KB

Contents

module ExtJS
  module Model
    def self.included(model)
      model.send(:extend, ClassMethods)
      model.send(:include, InstanceMethods)
    end

    ##
    # InstanceMethods
    #
    module InstanceMethods
      def to_record
        data = {self.class.primary_key => self.send(self.class.primary_key)}
        self.class.extjs_fields.each do |f|
          data[f] = self.send(f)
        end
        data
      end
    end
    ##
    # ClassMethods
    #
    module ClassMethods
      @@fields = []
      ##
      # Defines the subset of AR columns used to create Ext.data.Record def'n.
      # @param {Array/Hash} list-of-fields to include, :only, or :exclude
      #
      def extjs_fields(*params)
        options = params.extract_options!
        if !options.keys.empty?
          if options[:only]
            @@fields = options[:only]
          elsif options[:exclude]
            @@fields = self.columns.reject {|c| options[:exclude].find {|ex| c.name.to_sym === ex}}.collect {|c| c.name.to_sym}
          end
        elsif !params.empty?
          @@fields = params
        else
          @@fields
        end
      end

      ##
      # render AR columns to Ext.data.Record.create format
      # eg: {name:'foo', type: 'string'}
      #
      def extjs_record
        @@fields = self.columns.collect {|c| c.name.to_sym } if @@fields.empty?
        {
          "fields" => @@fields.collect {|f|
            col = self.columns.find {|c| c.name.to_sym === f}
            type = col.type
            case col.type
              when :datetime || :date || :time || :timestamp
                type = :date
              when :text
                type = :string
              when :integer
                type = :int
            end
            field = {:name => col.name, :allowBlank => col.null, :type => type}
            field[:dateFormat] = "c" if col.type === :datetime || col.type === :date  # <-- ugly hack for date
            field
          },
          "idProperty" => self.primary_key
        }
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
extjs-extjs-mvc-0.1.8 lib/active_record/model.rb
extjs-mvc-0.1.5 lib/active_record/model.rb
extjs-mvc-0.1.6 lib/active_record/model.rb
extjs-mvc-0.1.7 lib/active_record/model.rb