bigqueryid 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +69 -0
- data/lib/bigqueryid/attributes.rb +70 -0
- data/lib/bigqueryid/base/initializable.rb +20 -0
- data/lib/bigqueryid/base.rb +59 -0
- data/lib/bigqueryid/criteria/queryable.rb +25 -0
- data/lib/bigqueryid/criteria.rb +8 -0
- data/lib/bigqueryid/errors/bigquery_error.rb +6 -0
- data/lib/bigqueryid/timestamps.rb +10 -0
- data/lib/bigqueryid/version.rb +5 -0
- data/lib/bigqueryid.rb +14 -0
- metadata +95 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: ebd0bdb293a7eb11391a3da70f46f3b084301088
         | 
| 4 | 
            +
              data.tar.gz: 0c7664612aa35d696e37bc303b257b8ed260df08
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 6fc71e931b932fb59d56a9c73c48d7ca0b86b9cb73a59d5d87942d02e2578ecd7214b04f11723c709b493e8468e722720f4956163a61fd2c09886ad8f55e3e53
         | 
| 7 | 
            +
              data.tar.gz: 8573c4e24e1bdad7b1a177dfc534e7f8199821577bc60fb73cb154de5ba9c5d18464675bf07ba2a30452a04f610157cb0758de9bd50447432c3d9ca58db7162c
         | 
    
        data/README.md
    ADDED
    
    | @@ -0,0 +1,69 @@ | |
| 1 | 
            +
            # BigQueryID
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            BigQueryID is an ORM (Object-Relational-Mapper) framework for Google BigQuery in Ruby.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Install
         | 
| 6 | 
            +
            -------
         | 
| 7 | 
            +
            ```sh
         | 
| 8 | 
            +
            gem build bigqueryid.gem
         | 
| 9 | 
            +
            gem install bigqueryid-<version>.gem
         | 
| 10 | 
            +
            ```
         | 
| 11 | 
            +
            or
         | 
| 12 | 
            +
            ```ruby
         | 
| 13 | 
            +
            gem 'bigqueryid', :git => 'git://github.com/fabiotomio/bigqueryid.git'
         | 
| 14 | 
            +
            ```
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            Configure
         | 
| 17 | 
            +
            ---------
         | 
| 18 | 
            +
            ```sh
         | 
| 19 | 
            +
            export GCLOUD_PROJECT=my-todo-project-id
         | 
| 20 | 
            +
            export GCLOUD_KEYFILE_JSON=/path/to/keyfile.json
         | 
| 21 | 
            +
            ```
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            Use
         | 
| 24 | 
            +
            -------
         | 
| 25 | 
            +
            ```ruby
         | 
| 26 | 
            +
            # Define product model product.rb
         | 
| 27 | 
            +
            class Product
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              include Bigquery::Base
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              dataset 'core'
         | 
| 32 | 
            +
              table 'products'
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              def self.create_table
         | 
| 35 | 
            +
                bigquery.dataset(self.dataset_name).create_table self.table_name do |schema|
         | 
| 36 | 
            +
                  schema.string 'barcode'
         | 
| 37 | 
            +
                  schema.timestamp 'created_at'
         | 
| 38 | 
            +
                  schema.integer 'id'
         | 
| 39 | 
            +
                  schema.string 'name'
         | 
| 40 | 
            +
                  schema.float 'price'
         | 
| 41 | 
            +
                  schema.timestamp 'updated_at'
         | 
| 42 | 
            +
                end unless table_exist?
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              def self.fetch_all
         | 
| 46 | 
            +
                sql = <<-SQL.squish
         | 
| 47 | 
            +
                  SELECT
         | 
| 48 | 
            +
                   *
         | 
| 49 | 
            +
                  FROM core.products
         | 
| 50 | 
            +
                  ORDER BY
         | 
| 51 | 
            +
                    P.name
         | 
| 52 | 
            +
                SQL
         | 
| 53 | 
            +
                fetch sql
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
            end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            # Return if table exists
         | 
| 58 | 
            +
            Product.table_exist?
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            # Delete table
         | 
| 61 | 
            +
            Product.delete_table
         | 
| 62 | 
            +
             | 
| 63 | 
            +
            # Delete and create table
         | 
| 64 | 
            +
            Product.flush
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            # Fetch all rows
         | 
| 67 | 
            +
            Product.fetch_all
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            ```
         | 
| @@ -0,0 +1,70 @@ | |
| 1 | 
            +
            module Bigqueryid
         | 
| 2 | 
            +
              # Define behaviour to attributes of entity.
         | 
| 3 | 
            +
              module Attributes
         | 
| 4 | 
            +
                extend ActiveSupport::Concern
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                included do
         | 
| 7 | 
            +
                  class_attribute :attributes
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  self.attributes = {}
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  field :id
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  def attributes=(attributes)
         | 
| 14 | 
            +
                    if attributes.is_a? ::Hash
         | 
| 15 | 
            +
                      attributes.each_pair { |key, value| send("#{key}=", value) }
         | 
| 16 | 
            +
                    else
         | 
| 17 | 
            +
                      raise Bigqueryid::Errors::BigqueryError.new 'Attributes params need is Hash'
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
                  rescue
         | 
| 20 | 
            +
                    raise Bigqueryid::Errors::BigqueryError.new 'Attribute invalid'
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def properties_names
         | 
| 24 | 
            +
                    attributes.keys
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  def set_default_values
         | 
| 28 | 
            +
                    attributes.each_pair do |name, options|
         | 
| 29 | 
            +
                      next unless options.key? :default
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                      default = options[:default]
         | 
| 32 | 
            +
                      # Default might be a lambda
         | 
| 33 | 
            +
                      value = default.respond_to?(:call) ? default.call : default
         | 
| 34 | 
            +
                      send("#{name}=", value)
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  def to_hash
         | 
| 39 | 
            +
                    hash = {}
         | 
| 40 | 
            +
                    properties_names.each do |property|
         | 
| 41 | 
            +
                      hash[property] = send(property)
         | 
| 42 | 
            +
                    end
         | 
| 43 | 
            +
                    hash.sort.to_h
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                class_methods do
         | 
| 48 | 
            +
                  protected
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  def field(name, options = {})
         | 
| 51 | 
            +
                    add_field(name.to_s, options)
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  def add_field(name, options)
         | 
| 55 | 
            +
                    attributes[name] = options
         | 
| 56 | 
            +
                    create_accessors(name)
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  # https://www.leighhalliday.com/ruby-metaprogramming-creating-methods
         | 
| 60 | 
            +
                  def create_accessors(name)
         | 
| 61 | 
            +
                    define_method(name) do # Define get method
         | 
| 62 | 
            +
                      instance_variable_get("@#{name}")
         | 
| 63 | 
            +
                    end
         | 
| 64 | 
            +
                    define_method("#{name}=") do |value| # Define set method
         | 
| 65 | 
            +
                      instance_variable_set("@#{name}", value)
         | 
| 66 | 
            +
                    end
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
              end
         | 
| 70 | 
            +
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            module Bigqueryid
         | 
| 2 | 
            +
              module Base
         | 
| 3 | 
            +
                # Define behaviour for initialization of Base.
         | 
| 4 | 
            +
                module Initializable
         | 
| 5 | 
            +
                  extend ActiveSupport::Concern
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  included do
         | 
| 8 | 
            +
                    def initialize(options = nil)
         | 
| 9 | 
            +
                      set_default_values
         | 
| 10 | 
            +
                      if options.is_a? Google::Cloud::Bigquery::Data
         | 
| 11 | 
            +
                        properties_names.each { |a| send("#{a}=", options[a.to_s]) }
         | 
| 12 | 
            +
                        send('id=', options.key.id)
         | 
| 13 | 
            +
                      elsif options.is_a? ::Hash
         | 
| 14 | 
            +
                        options.each_pair { |key, value| send("#{key}=", value) }
         | 
| 15 | 
            +
                      end
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| @@ -0,0 +1,59 @@ | |
| 1 | 
            +
            require 'active_support/concern'
         | 
| 2 | 
            +
            # BigQuery DSL
         | 
| 3 | 
            +
            module Bigqueryid
         | 
| 4 | 
            +
              # Inject class methods in BigQuery Model
         | 
| 5 | 
            +
              module Base
         | 
| 6 | 
            +
                extend ActiveSupport::Concern
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                include Attributes
         | 
| 9 | 
            +
                include Criteria
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                include Base::Initializable
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                included do
         | 
| 14 | 
            +
                  class_attribute :dataset_name
         | 
| 15 | 
            +
                  class_attribute :table_name
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  def self.dataset(name)
         | 
| 18 | 
            +
                    self.dataset_name = name
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  def self.table(name)
         | 
| 22 | 
            +
                    self.table_name = name
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def self.gcloud
         | 
| 26 | 
            +
                    Google::Cloud.new
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def self.bigquery
         | 
| 30 | 
            +
                    @bigquery_connection ||= gcloud.bigquery
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  def self.gcloud_table
         | 
| 34 | 
            +
                    bigquery.dataset(dataset_name).table(table_name)
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  def self.table_exist?
         | 
| 38 | 
            +
                    gcloud_table ? true : false
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  def self.delete_table
         | 
| 42 | 
            +
                    gcloud_table.delete if table_exist?
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  def self.flush
         | 
| 46 | 
            +
                    delete_table
         | 
| 47 | 
            +
                    create_table
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  def self.load_data_from_csv(gs_url)
         | 
| 51 | 
            +
                    job = gcloud_table.load gs_url
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  def self.run(query_string)
         | 
| 55 | 
            +
                    bigquery.query query_string
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            module Bigqueryid
         | 
| 2 | 
            +
              module Criteria
         | 
| 3 | 
            +
                # Defines behaviour for query operations.
         | 
| 4 | 
            +
                module Queryable
         | 
| 5 | 
            +
                  extend ActiveSupport::Concern
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  class_methods do
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                    def run(query)
         | 
| 10 | 
            +
                      result = bigquery.query query
         | 
| 11 | 
            +
                      new(result.first) if result.count == 1
         | 
| 12 | 
            +
                    end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    def fetch(query)
         | 
| 15 | 
            +
                      result = bigquery.query query
         | 
| 16 | 
            +
                      if result.count > 0
         | 
| 17 | 
            +
                        result.map { |element| new(element) }
         | 
| 18 | 
            +
                      else
         | 
| 19 | 
            +
                        []
         | 
| 20 | 
            +
                      end
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
    
        data/lib/bigqueryid.rb
    ADDED
    
    | @@ -0,0 +1,14 @@ | |
| 1 | 
            +
            module Bigqueryid
         | 
| 2 | 
            +
              require 'google/cloud/bigquery'
         | 
| 3 | 
            +
              require 'active_support/concern'
         | 
| 4 | 
            +
              require 'active_model'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              require 'bigqueryid/errors/bigquery_error'
         | 
| 7 | 
            +
              require 'bigqueryid/attributes'
         | 
| 8 | 
            +
              require 'bigqueryid/criteria/queryable'
         | 
| 9 | 
            +
              require 'bigqueryid/criteria'
         | 
| 10 | 
            +
              require 'bigqueryid/base/initializable'
         | 
| 11 | 
            +
              require 'bigqueryid/base'
         | 
| 12 | 
            +
              require 'bigqueryid/timestamps'
         | 
| 13 | 
            +
              require 'bigqueryid/version'
         | 
| 14 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,95 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: bigqueryid
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.4.0
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Fabio Tomio
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2016-11-24 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: google-cloud-bigquery
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - "~>"
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '0.20'
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - "~>"
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: '0.20'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: activesupport
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - "~>"
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '4.2'
         | 
| 34 | 
            +
              type: :runtime
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - "~>"
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '4.2'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: activemodel
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - "~>"
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '4.2'
         | 
| 48 | 
            +
              type: :runtime
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - "~>"
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '4.2'
         | 
| 55 | 
            +
            description: Simple ORM to Google BigQuery
         | 
| 56 | 
            +
            email: fabiotomio@gmail.com
         | 
| 57 | 
            +
            executables: []
         | 
| 58 | 
            +
            extensions: []
         | 
| 59 | 
            +
            extra_rdoc_files: []
         | 
| 60 | 
            +
            files:
         | 
| 61 | 
            +
            - README.md
         | 
| 62 | 
            +
            - lib/bigqueryid.rb
         | 
| 63 | 
            +
            - lib/bigqueryid/attributes.rb
         | 
| 64 | 
            +
            - lib/bigqueryid/base.rb
         | 
| 65 | 
            +
            - lib/bigqueryid/base/initializable.rb
         | 
| 66 | 
            +
            - lib/bigqueryid/criteria.rb
         | 
| 67 | 
            +
            - lib/bigqueryid/criteria/queryable.rb
         | 
| 68 | 
            +
            - lib/bigqueryid/errors/bigquery_error.rb
         | 
| 69 | 
            +
            - lib/bigqueryid/timestamps.rb
         | 
| 70 | 
            +
            - lib/bigqueryid/version.rb
         | 
| 71 | 
            +
            homepage: http://github.com/fabiotomio/bigqueryid
         | 
| 72 | 
            +
            licenses:
         | 
| 73 | 
            +
            - MIT
         | 
| 74 | 
            +
            metadata: {}
         | 
| 75 | 
            +
            post_install_message: 
         | 
| 76 | 
            +
            rdoc_options: []
         | 
| 77 | 
            +
            require_paths:
         | 
| 78 | 
            +
            - lib
         | 
| 79 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 80 | 
            +
              requirements:
         | 
| 81 | 
            +
              - - ">="
         | 
| 82 | 
            +
                - !ruby/object:Gem::Version
         | 
| 83 | 
            +
                  version: 2.3.0
         | 
| 84 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 85 | 
            +
              requirements:
         | 
| 86 | 
            +
              - - ">="
         | 
| 87 | 
            +
                - !ruby/object:Gem::Version
         | 
| 88 | 
            +
                  version: '0'
         | 
| 89 | 
            +
            requirements: []
         | 
| 90 | 
            +
            rubyforge_project: 
         | 
| 91 | 
            +
            rubygems_version: 2.6.7
         | 
| 92 | 
            +
            signing_key: 
         | 
| 93 | 
            +
            specification_version: 4
         | 
| 94 | 
            +
            summary: Google BigQuery ORM
         | 
| 95 | 
            +
            test_files: []
         |