Compare commits

...

No commits in common. "f1bd36b82720d8d58361e3c9eac14515dc205cc5" and "6dd3e4c7d6e369b988d6eeaaed32dfdbb67c5389" have entirely different histories.

13 changed files with 151 additions and 2 deletions

2
.gitignore vendored
View File

@ -56,3 +56,5 @@ build-iPhoneSimulator/
# Used by RuboCop. Remote config files pulled in from inherit_from directive.
# .rubocop-https?--*
# Local database storage
data/raven.db

7
Gemfile Normal file
View File

@ -0,0 +1,7 @@
source 'https://rubygems.org'
gem 'sinatra', '~> 3.0'
gem 'puma', '~> 6.0'
gem 'sequel', '~> 5.63'
gem 'sqlite3', '~> 1.5'

32
Gemfile.lock Normal file
View File

@ -0,0 +1,32 @@
GEM
remote: https://rubygems.org/
specs:
mustermann (3.0.0)
ruby2_keywords (~> 0.0.1)
nio4r (2.5.8)
puma (6.0.0)
nio4r (~> 2.0)
rack (2.2.4)
rack-protection (3.0.4)
rack
ruby2_keywords (0.0.5)
sequel (5.63.0)
sinatra (3.0.4)
mustermann (~> 3.0)
rack (~> 2.2, >= 2.2.4)
rack-protection (= 3.0.4)
tilt (~> 2.0)
sqlite3 (1.5.4-x64-mingw-ucrt)
tilt (2.0.11)
PLATFORMS
x64-mingw-ucrt
DEPENDENCIES
puma (~> 6.0)
sequel (~> 5.63)
sinatra (~> 3.0)
sqlite3 (~> 1.5)
BUNDLED WITH
2.3.7

View File

@ -1,4 +1,4 @@
Copyright (c) <year> <owner>
Copyright (c) 2022 Metaunix.net
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

View File

@ -1,3 +1,3 @@
# raven
Self-hosted inventory tracking web app
Inventory tracker web app

3
data/defaults.yaml Normal file
View File

@ -0,0 +1,3 @@
database:
adapter: 'sqlite'
database: 'data/raven.db'

View File

@ -0,0 +1,22 @@
Sequel.migration do
up do
create_table(:items) do
primary_key :id
String :name, null: false
String :manufacturer
String :serial_number
String :sku_number
String :type
String :purchased_from
DateTime :purchased_at
DateTime :created_at
DateTime :updated_at
end
end
down do
drop_table(:items)
end
end

20
lib/config.rb Normal file
View File

@ -0,0 +1,20 @@
require 'yaml'
class Config
def initialize(config_path)
@data = YAML::load_file(config_path)
end
def get(key, depth = 0)
bits = key.split('.')
value = @data
bits.each do |bit|
value = value[bit]
end
return value
end
end

5
lib/models/item.rb Normal file
View File

@ -0,0 +1,5 @@
class Item < Sequel::Model
end

7
lib/routes.rb Normal file
View File

@ -0,0 +1,7 @@
get '/' do
items = Item.all
erb :index, :locals => {
:title => 'Dashboard',
:items => items
}
end

27
raven.rb Normal file
View File

@ -0,0 +1,27 @@
require 'logger'
require 'sequel'
require 'sqlite3'
require 'sinatra'
require_relative 'lib/config.rb'
set :public_folder, __dir__ + '/public'
set :views, settings.root + '/views'
# Load configuration file
conf = Config.new(File.join(__dir__, 'data/defaults.yaml'))
# Initialize logging
logger = Logger.new(STDOUT)
logger.level = Logger::INFO
# Load the Sequel timestamps plugin
Sequel::Model.plugin :timestamps
# Initialize Sequel gem for database actions
DB = Sequel.connect(adapter: conf.get('database.adapter'), database: conf.get('database.database'))
# Load models
require_relative 'lib/models/item.rb'
# Register route handlers
require_relative 'lib/routes.rb'

11
views/index.erb Normal file
View File

@ -0,0 +1,11 @@
<p>This is a test.</p>
<% if items.length > 0 %>
<ul>
<% items.each do |item| %>
<li><%= item.name %></li>
<% end %>
</ul>
<% else %>
<p>There are no items to display.</p>
<% end %>

13
views/layout.erb Normal file
View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= title %> | Raven</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/skeleton/2.0.4/skeleton.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
</head>
<body>
<%= yield %>
</body>
</html>