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.
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: