Sha256: 5d378485ef89347c1b6030ba0217ee6b171adc2374fcdd651ac92886fef1747d

Contents?: true

Size: 1.88 KB

Versions: 1

Compression:

Stored size: 1.88 KB

Contents

require "active_support"
require "active_support/core_ext"
require "bq_factory/version"
require "bq_factory/attribute"
require "bq_factory/record"
require "bq_factory/client"
require "bq_factory/configuration"
require "bq_factory/dsl"
require "bq_factory/errors"
require "bq_factory/query_builder"
require "bq_factory/record"
require "bq_factory/registory"
require "bq_factory/registory_decorator"

module BqFactory
  class << self
    delegate :client, :project_id, :keyfile_path, :schemas, to: :configuration

    def configure
      yield configuration if block_given?
      configuration
    end

    def configuration
      @configuration ||= Configuration.new
    end

    def define(&block)
      DSL.run(block)
    end

    def create_view(dataset_name, factory_name, rows)
      query = build_query(factory_name, rows)
      client.create_view(dataset_name, factory_name, query)
    end

    def build_query(factory_name, rows)
      rows = [rows] unless rows.instance_of? Array
      schema = schema_by_name(factory_name)
      records = rows.flatten.map { |row| Record.new(schema, row) }
      QueryBuilder.new(records).build
    end

    def schema_by_name(factory_name)
      schemas.find(factory_name)
    end

    def create_dataset!(dataset_name)
      client.create_dataset!(dataset_name)
    end

    def create_table!(dataset_name, table_name, schema)
      client.create_table!(dataset_name, table_name, schema)
    end

    def delete_dataset!(dataset_name)
      client.delete_dataset!(dataset_name)
    end

    def delete_table!(dataset_name, table_name)
      client.delete_table!(dataset_name, table_name)
    end

    def fetch_schema_from_bigquery(dataset_name, table_name)
      client.fetch_schema(dataset_name, table_name)
    end

    def query(query)
      client.query(query)
    end

    def register(factory_name, schema)
      schemas.register(factory_name, schema)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bq_factory-0.1.0 lib/bq_factory.rb