Compare commits
3 Commits
go
...
156759d1cd
Author | SHA1 | Date | |
---|---|---|---|
156759d1cd | |||
ee0726c271 | |||
6dd3e4c7d6 |
71
.gitignore
vendored
71
.gitignore
vendored
@@ -1,8 +1,67 @@
|
|||||||
# ---> Composer
|
# ---> Ruby
|
||||||
composer.phar
|
*.gem
|
||||||
/vendor/
|
*.rbc
|
||||||
|
/.config
|
||||||
|
/coverage/
|
||||||
|
/InstalledFiles
|
||||||
|
/pkg/
|
||||||
|
/spec/reports/
|
||||||
|
/spec/examples.txt
|
||||||
|
/test/tmp/
|
||||||
|
/test/version_tmp/
|
||||||
|
/tmp/
|
||||||
|
|
||||||
# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
|
# Used by dotenv library to load environment variables.
|
||||||
# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
|
# .env
|
||||||
# composer.lock
|
|
||||||
|
|
||||||
|
# Ignore Byebug command history file.
|
||||||
|
.byebug_history
|
||||||
|
|
||||||
|
## Specific to RubyMotion:
|
||||||
|
.dat*
|
||||||
|
.repl_history
|
||||||
|
build/
|
||||||
|
*.bridgesupport
|
||||||
|
build-iPhoneOS/
|
||||||
|
build-iPhoneSimulator/
|
||||||
|
|
||||||
|
## Specific to RubyMotion (use of CocoaPods):
|
||||||
|
#
|
||||||
|
# We recommend against adding the Pods directory to your .gitignore. However
|
||||||
|
# you should judge for yourself, the pros and cons are mentioned at:
|
||||||
|
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
|
||||||
|
#
|
||||||
|
# vendor/Pods/
|
||||||
|
|
||||||
|
## Documentation cache and generated files:
|
||||||
|
/.yardoc/
|
||||||
|
/_yardoc/
|
||||||
|
/doc/
|
||||||
|
/rdoc/
|
||||||
|
|
||||||
|
## Environment normalization:
|
||||||
|
/.bundle/
|
||||||
|
/vendor/bundle
|
||||||
|
/lib/bundler/man/
|
||||||
|
|
||||||
|
# for a library or gem, you might want to ignore these files since the code is
|
||||||
|
# intended to run in multiple environments; otherwise, check them in:
|
||||||
|
# Gemfile.lock
|
||||||
|
# .ruby-version
|
||||||
|
# .ruby-gemset
|
||||||
|
|
||||||
|
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
||||||
|
.rvmrc
|
||||||
|
|
||||||
|
# Used by RuboCop. Remote config files pulled in from inherit_from directive.
|
||||||
|
# .rubocop-https?--*
|
||||||
|
|
||||||
|
# Local database storage
|
||||||
|
data/raven.db
|
||||||
|
|
||||||
|
# Node modules for Grunt.js
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Compiled CSS and JS
|
||||||
|
public/css/
|
||||||
|
public/js/
|
||||||
|
11
Gemfile
Normal file
11
Gemfile
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
|
gem 'sinatra', '~> 3.0'
|
||||||
|
gem 'puma', '~> 6.0'
|
||||||
|
|
||||||
|
gem 'sequel', '~> 5.63'
|
||||||
|
gem 'sqlite3', '~> 1.5'
|
||||||
|
|
||||||
|
# Use rerun gem to auto-reload app
|
||||||
|
gem 'rerun'
|
||||||
|
|
45
Gemfile.lock
Normal file
45
Gemfile.lock
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
ffi (1.15.5)
|
||||||
|
ffi (1.15.5-x64-mingw-ucrt)
|
||||||
|
listen (3.7.1)
|
||||||
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||||
|
rb-inotify (~> 0.9, >= 0.9.10)
|
||||||
|
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
|
||||||
|
rb-fsevent (0.11.2)
|
||||||
|
rb-inotify (0.10.1)
|
||||||
|
ffi (~> 1.0)
|
||||||
|
rerun (0.13.1)
|
||||||
|
listen (~> 3.0)
|
||||||
|
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)
|
||||||
|
sqlite3 (1.5.4-x86_64-linux)
|
||||||
|
tilt (2.0.11)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
x64-mingw-ucrt
|
||||||
|
x86_64-linux
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
puma (~> 6.0)
|
||||||
|
rerun
|
||||||
|
sequel (~> 5.63)
|
||||||
|
sinatra (~> 3.0)
|
||||||
|
sqlite3 (~> 1.5)
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
2.3.7
|
41
Gruntfile.js
Normal file
41
Gruntfile.js
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
module.exports = function(grunt) {
|
||||||
|
|
||||||
|
// Project configuration.
|
||||||
|
grunt.initConfig({
|
||||||
|
pkg: grunt.file.readJSON('package.json'),
|
||||||
|
|
||||||
|
sass: {
|
||||||
|
dist: {
|
||||||
|
options: {
|
||||||
|
style: 'compressed'
|
||||||
|
},
|
||||||
|
files: [{
|
||||||
|
expand: true,
|
||||||
|
cwd: 'assets/styles',
|
||||||
|
src: ['**/*.scss'],
|
||||||
|
dest: 'public/css',
|
||||||
|
ext: '.css'
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
watch: {
|
||||||
|
css: {
|
||||||
|
files: ['assets/styles/**/*.scss'],
|
||||||
|
tasks: ['sass'],
|
||||||
|
options: {
|
||||||
|
atBegin: true,
|
||||||
|
spawn: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Load plugins.
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-sass');
|
||||||
|
|
||||||
|
// CLI tasks.
|
||||||
|
grunt.registerTask('default', ['sass']);
|
||||||
|
|
||||||
|
};
|
2
LICENSE
2
LICENSE
@@ -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:
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
3
assets/styles/kraken.scss
Normal file
3
assets/styles/kraken.scss
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
body{
|
||||||
|
background: lightgrey;
|
||||||
|
}
|
3
data/defaults.yaml
Normal file
3
data/defaults.yaml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
database:
|
||||||
|
adapter: 'sqlite'
|
||||||
|
database: 'data/raven.db'
|
22
db/migrations/0001_add_items_table.rb
Normal file
22
db/migrations/0001_add_items_table.rb
Normal 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
20
lib/config.rb
Normal 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
5
lib/models/item.rb
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
class Item < Sequel::Model
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end
|
7
lib/routes.rb
Normal file
7
lib/routes.rb
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
get '/' do
|
||||||
|
items = Item.all
|
||||||
|
erb :index, :locals => {
|
||||||
|
:title => 'Dashboard',
|
||||||
|
:items => items
|
||||||
|
}
|
||||||
|
end
|
3064
package-lock.json
generated
Normal file
3064
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
33
package.json
Normal file
33
package.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"name": "raven",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "Self-hosted inventory tracker",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"grunt": "grunt",
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "gitea@git.metaunix.net:Metaunix/raven.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"inventory",
|
||||||
|
"tracking"
|
||||||
|
],
|
||||||
|
"author": "Gregory Ballanine <gballantine@metaunix.net>",
|
||||||
|
"uploaders": [
|
||||||
|
{
|
||||||
|
"name": "Gregory Ballantine",
|
||||||
|
"email": "gballantine@metaunix.net"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "BSD-2-Clause",
|
||||||
|
"devDependencies": {
|
||||||
|
"grunt": "^1.5.3",
|
||||||
|
"grunt-cli": "^1.4.3",
|
||||||
|
"grunt-contrib-sass": "^2.0.0",
|
||||||
|
"grunt-contrib-watch": "^1.1.0",
|
||||||
|
"sass": "^1.55.0"
|
||||||
|
}
|
||||||
|
}
|
27
raven.rb
Normal file
27
raven.rb
Normal 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
11
views/index.erb
Normal 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 %>
|
14
views/layout.erb
Normal file
14
views/layout.erb
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<!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">
|
||||||
|
<link rel="stylesheet" href="/css/kraken.css">
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<%= yield %>
|
||||||
|
</body>
|
||||||
|
</html>
|
Reference in New Issue
Block a user