stocker 1.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/bin/stocker +6 -0
- data/lib/stocker.rb +140 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c9312823e9ebd98c7fe14532c321feda545a5c09
|
4
|
+
data.tar.gz: 95f830ada0b19509ae1320571fe72c6b02aeedd1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6da5954defacde2e55b80ee3a03cba5de0f5aac15e70c3916d7907a8f973667694a1a0a857a3c14e3636e5a4f55da2acb740ea1beefd97e875f3db9384f2476f
|
7
|
+
data.tar.gz: bff5c63b19488c2b970cef8ebe7aa6afa6c133a1461a402ed0436d459e9a3bb427125195cdce9821c75546313e05b13a1927a7925b5df40133b252d78f6dc2fa
|
data/bin/stocker
ADDED
data/lib/stocker.rb
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'pathname'
|
4
|
+
require 'yaml'
|
5
|
+
require 'thor'
|
6
|
+
require 'titleize'
|
7
|
+
|
8
|
+
class Stocker < Thor
|
9
|
+
trap("SIGINT") { exit 0 }
|
10
|
+
|
11
|
+
@@path = nil
|
12
|
+
|
13
|
+
no_commands do
|
14
|
+
def self.check_for_dropbox
|
15
|
+
home = Dir.home
|
16
|
+
db = "#{Dir.home}/Dropbox"
|
17
|
+
home_path = Pathname.new(home)
|
18
|
+
db_path = Pathname.new(db)
|
19
|
+
@@path = db_path || home_path
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
check_for_dropbox
|
24
|
+
@@yaml = Pathname.new("#{@@path}/.stocker.yml")
|
25
|
+
`touch #{@@yaml}`
|
26
|
+
@@stock = YAML.load(@@yaml.read)
|
27
|
+
|
28
|
+
no_commands do
|
29
|
+
def match_name(item)
|
30
|
+
@@stock.each_key { |key| @@item = key if key =~ /#{item}/ }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
desc "new ITEM TOTAL", "Add ITEM with TOTAL on hand to inventory."
|
35
|
+
option :url, :aliases => :u, :default => 'https://www.amazon.co.jp/gp/subscribe-and-save/manager/viewsubscriptions\?ie\=UTF8\&ref_\=ya_subscribe_and_save'
|
36
|
+
option :minimum, :aliases => :m, :default => 1
|
37
|
+
def new(item, total)
|
38
|
+
@@stock[item] = {'total' => total.to_i, 'min' => options[:min].to_i, 'url' => options[:url], 'checked' => Time.now}
|
39
|
+
end
|
40
|
+
|
41
|
+
desc "delete ITEM", "Delete ITEM from inventory."
|
42
|
+
def delete(item)
|
43
|
+
match_name(item)
|
44
|
+
@@stock.delete(@@item)
|
45
|
+
end
|
46
|
+
|
47
|
+
desc "check", "Check for low stock items."
|
48
|
+
def check
|
49
|
+
@@stock.each do |key, value|
|
50
|
+
value["checked"] = Time.now
|
51
|
+
if value["total"] <= value["min"]
|
52
|
+
puts "You're running low on #{key}!"
|
53
|
+
buy(key)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
desc "total ITEM TOTAL", "Set TOTAL of ITEM."
|
59
|
+
def total(item, total)
|
60
|
+
match_name(item)
|
61
|
+
@@stock[@@item]["total"] = total.to_i
|
62
|
+
time(item)
|
63
|
+
end
|
64
|
+
|
65
|
+
no_commands do
|
66
|
+
def time(item)
|
67
|
+
match_name(item)
|
68
|
+
@@stock[@@item]["checked"] = Time.now
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
no_commands do
|
73
|
+
def self.save
|
74
|
+
@@yaml.write(@@stock.to_yaml)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
desc "url ITEM URL", "Set URL of ITEM."
|
79
|
+
def url(item, url)
|
80
|
+
match_name(item)
|
81
|
+
@@stock[@@item]["url"] = url
|
82
|
+
time(item)
|
83
|
+
end
|
84
|
+
|
85
|
+
desc "buy ITEM", "Open link to buy ITEM"
|
86
|
+
def buy(item)
|
87
|
+
match_name(item)
|
88
|
+
`open -a Safari #{@@stock[@@item]["url"]}`
|
89
|
+
end
|
90
|
+
|
91
|
+
desc "min ITEM MINIMUM", "Set minimum acceptable amount for ITEM."
|
92
|
+
def min(item, min)
|
93
|
+
match_name(item)
|
94
|
+
@@stock[@@item]["min"] = min.to_i
|
95
|
+
end
|
96
|
+
|
97
|
+
desc "count", "Take an interactive inventory."
|
98
|
+
def count
|
99
|
+
@@stock.each do |key, value|
|
100
|
+
value["checked"] = Time.now
|
101
|
+
value["total"] = ask("#{key.titlecase}:", *args).to_i
|
102
|
+
end
|
103
|
+
invoke :check
|
104
|
+
end
|
105
|
+
|
106
|
+
desc "csv", "Write entire inventory as CSV."
|
107
|
+
def csv
|
108
|
+
@@stock.each { |key, value| puts "#{key.titlecase},#{value['total']},#{value['min']},#{value['url']},#{value['checked']}" }
|
109
|
+
end
|
110
|
+
|
111
|
+
desc "list", "List all inventory items and total on hand."
|
112
|
+
def list
|
113
|
+
@header = [[set_color("Item", :white), set_color("Total", :white)], [set_color("=================", :white), set_color("=====", :white)]]
|
114
|
+
@green = []
|
115
|
+
@yellow = []
|
116
|
+
@yellow2 = []
|
117
|
+
@green2 = []
|
118
|
+
@red = []
|
119
|
+
@red2 = []
|
120
|
+
@@stock.each do |key, value|
|
121
|
+
if value['total'] > value['min']
|
122
|
+
@green += [[key.titlecase,value['total'], value['total']-value['min']]]
|
123
|
+
elsif value['total'] == value['min']
|
124
|
+
@yellow += [[key.titlecase,value['total'], value['total']-value['min']]]
|
125
|
+
else
|
126
|
+
@red += [[key.titlecase,value['total'], value['total']-value['min']]]
|
127
|
+
end
|
128
|
+
end
|
129
|
+
@green.sort_by! { |a,b,c| c }
|
130
|
+
@yellow.sort_by! { |a,b,c| c }
|
131
|
+
@red.sort_by! { |a,b,c| c }
|
132
|
+
@green.reverse!
|
133
|
+
@yellow.reverse!
|
134
|
+
@red.reverse!
|
135
|
+
@green.each { |a,b| @green2 += [[set_color(a, :green), set_color(b, :green)]] }
|
136
|
+
@yellow.each { |a,b| @yellow2 += [[set_color(a, :yellow), set_color(b, :yellow)]] }
|
137
|
+
@red.each { |a,b| @red2 += [[set_color(a, :red), set_color(b, :red)]] }
|
138
|
+
print_table(@header + @green2 + @yellow2 + @red2,{indent: 2})
|
139
|
+
end
|
140
|
+
end
|
metadata
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stocker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.0'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Brandon Pittman
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-02-19 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: stocker will help track how many of something you have on hand.
|
14
|
+
email: brandonpittman@gmail.com
|
15
|
+
executables:
|
16
|
+
- stocker
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- bin/stocker
|
21
|
+
- lib/stocker.rb
|
22
|
+
homepage: http://www.brandonpittman.net
|
23
|
+
licenses:
|
24
|
+
- MIT
|
25
|
+
metadata: {}
|
26
|
+
post_install_message:
|
27
|
+
rdoc_options: []
|
28
|
+
require_paths:
|
29
|
+
- lib
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
requirements: []
|
41
|
+
rubyforge_project:
|
42
|
+
rubygems_version: 2.2.2
|
43
|
+
signing_key:
|
44
|
+
specification_version: 4
|
45
|
+
summary: stocker is a lightweight home inventory application.
|
46
|
+
test_files: []
|
47
|
+
has_rdoc:
|