class Object

Public Instance Methods

_groups() click to toggle source
# File lib/punk/migrations/001_punk.rb, line 38
def _groups
  create_table :groups do
    uuid :id, primary_key: true, default: Sequel.function(:gen_random_uuid)
    punk_state :state, null: false, default: "created"
    String :name, null: false, text: true
    String :icon, text: true
    jsonb :data, default: "{}"
    DateTime :created_at
    DateTime :updated_at
    foreign_key :tenant_id, :tenants, null: false, type: :uuid
  end
end
_groups_users() click to toggle source
# File lib/punk/migrations/001_punk.rb, line 51
def _groups_users
  create_table :groups_users do
    primary_key [:group_id, :user_id]
    foreign_key :group_id, :groups, null: false, type: :uuid
    foreign_key :user_id, :users, null: false, type: :uuid
    index [:group_id, :user_id]
  end
end
_hide?(name) click to toggle source
# File lib/punk/commands/list.rb, line 31
def _hide?(name)
  name.nil? || (name =~ /^PUNK/) && !opts[:all]
end
_identities() click to toggle source
# File lib/punk/migrations/001_punk.rb, line 60
def _identities
  create_enum(:claim_type, %w[email phone])
  create_table :identities do
    uuid :id, primary_key: true, default: Sequel.function(:gen_random_uuid)
    punk_state :state, null: false, default: "created"
    claim_type :claim_type, null: false
    String :claim, text: true, null: false, unique: true
    jsonb :data, default: "{}"
    DateTime :created_at
    DateTime :updated_at
    foreign_key :user_id, :users, null: true, type: :uuid
  end
end
_sessions() click to toggle source
# File lib/punk/migrations/001_punk.rb, line 74
def _sessions
  create_enum(:session_state, %w[pending created active deleted expired])
  create_table :sessions do
    uuid :id, primary_key: true, default: Sequel.function(:gen_random_uuid)
    uuid :slug, default: Sequel.function(:gen_random_uuid)
    session_state :state, null: false, default: "created"
    File :salt, text: true
    File :hash, text: true
    Integer :attempt_count, null: false, default: 0
    cidr :remote_addr, null: false, default: "127.0.0.1"
    String :user_agent, text: true, null: false, default: "Mozilla/5.0 (compatible; Punk!; +https://punk.kranzky.com)"
    jsonb :data, default: "{}"
    DateTime :created_at
    DateTime :updated_at
    foreign_key :identity_id, :identities, null: false, type: :uuid
  end
end
_tenants() click to toggle source
# File lib/punk/migrations/001_punk.rb, line 3
def _tenants
  create_table :tenants do
    uuid :id, primary_key: true, default: Sequel.function(:gen_random_uuid)
    punk_state :state, null: false, default: "created"
    String :name, null: false, text: true
    String :icon, text: true
    jsonb :data, default: "{}"
    DateTime :created_at
    DateTime :updated_at
  end
end
_tenants_users() click to toggle source
# File lib/punk/migrations/001_punk.rb, line 29
def _tenants_users
  create_table :tenants_users do
    primary_key [:tenant_id, :user_id]
    foreign_key :tenant_id, :tenants, null: false, type: :uuid
    foreign_key :user_id, :users, null: false, type: :uuid
    index [:tenant_id, :user_id]
  end
end
_users() click to toggle source
# File lib/punk/migrations/001_punk.rb, line 15
def _users
  create_table :users do
    uuid :id, primary_key: true, default: Sequel.function(:gen_random_uuid)
    punk_state :state, null: false, default: "created"
    String :name, null: false, text: true
    String :icon, text: true
    String :email, text: true, unique: true
    String :phone, text: true, unique: true
    jsonb :data, default: "{}"
    DateTime :created_at
    DateTime :updated_at
  end
end
perform(action_class, **kwargs) click to toggle source
# File lib/punk/core/pry.rb, line 3
def perform(action_class, **kwargs)
  raise PUNK::InternalServerError, "Not an action: #{action_class}" unless action_class < PUNK::Action
  action_class.perform(**kwargs)
ensure
  SemanticLogger.flush
end
present(view_class, **kwargs) click to toggle source
# File lib/punk/core/pry.rb, line 10
def present(view_class, **kwargs)
  raise PUNK::InternalServerError, "Not a view: #{view_class}" unless view_class < PUNK::View
  view_class.present(**kwargs)
ensure
  SemanticLogger.flush
end
process() click to toggle source
# File lib/punk/commands/auth.rb, line 8
def process
  claim = opts[:claim]
  SemanticLogger.flush
  claim ||= ask("Email or Phone: ")
  response =
    PUNK.app.call(
      "REQUEST_METHOD" => "POST",
      "PATH_INFO" => "/sessions",
      "CONTENT_TYPE" => "text/json",
      "SCRIPT_NAME" => "",
      "rack.input" => StringIO.new({claim: claim}.to_json)
    )
  response = ActiveSupport::JSON.decode(response[-1].first).deep_symbolize_keys
  return if response[:errors].present?
  slug = response[:slug]
  authenticated = false
  while authenticated == false
    SemanticLogger.flush
    secret = ask("Secret: ") { |q| q.echo = "*" }
    response =
      PUNK.app.call(
        "REQUEST_METHOD" => "PATCH",
        "PATH_INFO" => "/sessions/#{slug}",
        "CONTENT_TYPE" => "text/json",
        "SCRIPT_NAME" => "",
        "rack.input" => StringIO.new({secret: secret}.to_json)
      )
    response = ActiveSupport::JSON.decode(response[-1].first).deep_symbolize_keys
    break if response[:errors].present? && response[:errors].first != "Secret is incorrect"
    authenticated = response[:message].present?
  end
  response[:message]
end
reload!() click to toggle source
# File lib/punk/core/pry.rb, line 24
def reload!
  ["actions", "models", "views", "services", "workers"].each do |dir|
    path = File.join(PUNK.get.app.path, dir)
    Dir.glob(File.join(path, "**/*.rb")).each { |file| load(file) }
  end
  "Reloaded all actions, models, views, services and workers."
ensure
  SemanticLogger.flush
end
run(service_class, **kwargs) click to toggle source
# File lib/punk/core/pry.rb, line 17
def run(service_class, **kwargs)
  raise PUNK::InternalServerError, "Not a service: #{service_class}" unless service_class.superclass == PUNK::Service
  service_class.run(**kwargs).result
ensure
  SemanticLogger.flush
end