stocker 1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/stocker +6 -0
  3. data/lib/stocker.rb +140 -0
  4. 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
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'stocker'
4
+
5
+ Stocker.start(ARGV)
6
+ Stocker.save
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: