Sha256: 3e9d6fab8f7eddc004a290c393877552076c7f666bf2dc801f2da76bbc36cfd0

Contents?: true

Size: 1.5 KB

Versions: 3

Compression:

Stored size: 1.5 KB

Contents

module TaskHelper
  class Form < Base
    data_member :app_id, :name, :desc, :post_action, :position, :sort_by, :asc,
                :per_page, :allow_delete, :new_widget, :records_widget,
                :target_page, :allow_database, :send_emails, :settings

    def self.all
      Database.all.lazy.flat_map { |db| db.forms }
    end

    def self.find_by(search)
      if response = get(route: 'apps/search/entities/search.json', params: search)
        new response['form'] if response['form']
      end
    end

    def self.find(database:, form:)
      if response = get(route: "apps/#{database}/entities/#{form}.json")
        new response['form'] if response['form']
      end
    end

    def initialize(args = {}, database: nil, **params)
      @database = database
      super(args.merge(params))
    end

    def database
      @database ||= Database.find(app_id)
    end

    def fields
      @fields ||= Field.get(
        route: "apps/#{app_id}/entities/#{id}/properties.json")['fields']
          .map { |field| Field.new(field, form: self) }
    end

    def records
      if fields.any?
        @records ||= (1..page_count).lazy.flat_map do |page|
          record_page(page).lazy.map { |record| Record.new(record, form: self) }
        end
      end
    end

    private

    def page_count
      database.dtypes_count / per_page + 1
    end

    def record_page(page = 1)
      Record.get(route: "apps/#{app_id}/dtypes/entity/#{id}.json",
                 params: { page: page })['records']
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
task_helper-0.0.3 lib/task_helper/form.rb
task_helper-0.0.2 lib/task_helper/form.rb
task_helper-0.0.1 lib/task_helper/form.rb