ig3cmd 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/bin/ig3cmd +252 -0
  2. metadata +61 -0
data/bin/ig3cmd ADDED
@@ -0,0 +1,252 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Client v0.1.2 by Lode
4
+
5
+ # ----------------
6
+ # Requirements:
7
+ require 'rubygems'
8
+ require 'net/http'
9
+ require 'yaml'
10
+ require 'timeout'
11
+ require 'ig3client'
12
+
13
+ # ----------------
14
+ # Items:
15
+
16
+ ITEMS = { "cola" => "5449000000996",
17
+ "colalight" => "5449000050205",
18
+ "colalightlemon" => "5449000089229",
19
+ "fantaorange" => "5449000011527",
20
+ "fantalemon" => "5449000006004",
21
+ "minutemaid" => "90494024",
22
+ "minutemaidtropical" => "5449000018243",
23
+ "nestea" => "5449000027382",
24
+ "flescola" => "54491472",
25
+ "flescolalight" => "54492387",
26
+ "flessprite" => "54491069",
27
+ "flesfantaorange" => "40822938",
28
+ "flesfantalemon" => "54492493",
29
+ "flesfantapomelo" => "42115731",
30
+ "snickers" => "40111261",
31
+ "mars" => "50159246",
32
+ "spa" => "5410013101703",
33
+ "minicalippo" => "8722700058212",
34
+ "jempyijshoorntje" => "5400141906080"
35
+ }
36
+
37
+ # ----------------
38
+ # Code
39
+
40
+ module Ig3tool
41
+
42
+ # Maak de functies publiek
43
+ module_function
44
+
45
+ class Config
46
+ @username
47
+ def initialize
48
+ # Ask userinfo if the configfile doesn't exists
49
+ _ask_userinfo unless File.exists?(File.expand_path("~/.ig3tool"))
50
+ c = YAML::load(File.open(File.expand_path('~/.ig3tool')))
51
+ @username = c.username
52
+ # Ask a password to generate a ig3token
53
+ _ask_password unless File.exists?(File.expand_path("~/.ig3token"))
54
+ end
55
+
56
+ def username
57
+ @username
58
+ end
59
+
60
+ def username=(newu)
61
+ @username = newu
62
+ # Automatically update the config file
63
+ f = File.new(File.expand_path('~/.ig3tool'),'wb')
64
+ f.write self.to_yaml
65
+ f.close
66
+ end
67
+
68
+ private
69
+
70
+ def _ask_userinfo
71
+ print "Username: "
72
+ self.username = STDIN.gets.chomp
73
+ end
74
+
75
+ def _ask_password
76
+ # Returns the password from the cmdline
77
+ print "Password: "
78
+ `stty -echo`
79
+ password = STDIN.gets.chomp ensure `stty echo`
80
+ # Newline
81
+ puts ""
82
+ begin
83
+ # Register a token
84
+ $client.wannabe!("username" => self.username, "password" => password)
85
+ rescue
86
+ puts "Error: #{$!}"
87
+ exit 1
88
+ ensure
89
+ # Clear password for faster GC (hopefuly...)
90
+ password = nil
91
+ end
92
+ end
93
+ end
94
+
95
+ def _buy(options)
96
+ begin
97
+ puts options if options.verbose
98
+ # Create array with barcodes
99
+ # Match string with Barcode-list
100
+ # Scribble expects a list with pairs
101
+ code = ITEMS[options.item]
102
+ code = options.item if code.nil?
103
+ # If it's not a valid barcode, quit
104
+ unless code =~ /^\d+$/
105
+ puts "No a valid barcode or product: #{code}"
106
+ exit 2
107
+ end
108
+ items = [[ code, options.amount ]]
109
+ username = options.username || @config.username
110
+ $client.scribble!({ :debugger => username, :items => items})
111
+ puts "ScrriiiiiiiiiblleeeDDDDDDDDDD #{options.amount} #{_plural(options.item, options.amount)} for #{username} - oh yeah"
112
+ exit # Correct executed, exit
113
+ rescue
114
+ puts "Error: #{$!}"
115
+ end
116
+ end
117
+
118
+ # Start functie
119
+ def start ()
120
+ # Connect to ig3tool
121
+ host = ENV['IG3TOOL_HOST'] || "igwe.vub.ac.be"
122
+ port = ENV['IG3TOOL_PORT'] || 2007
123
+ $client = Ig3tool::Client.new(host, port)
124
+ # Load the config
125
+ # Automatically asks for username if config file doesn't have it filled in
126
+ @config = Config.new
127
+ # Perform the parse of the arguments
128
+ options = OptparseIg3tool.parse(ARGV)
129
+ # Buy/Scribble the items if everything is ok
130
+ _buy options if options
131
+ end
132
+
133
+ private
134
+
135
+ require 'optparse'
136
+ require 'optparse/time'
137
+ require 'ostruct'
138
+
139
+ class OptparseIg3tool
140
+
141
+ #
142
+ # Return a structure describing the options.
143
+ #
144
+ def self.parse(args)
145
+ # The options specified on the command line will be collected in *options*.
146
+ # We set default values here.
147
+ options = OpenStruct.new
148
+ options.encoding = "utf8"
149
+ options.verbose = false
150
+ options.version = "v0.1"
151
+ options.item = :none
152
+ options.amount = 1
153
+
154
+ opts = OptionParser.new do |opts|
155
+
156
+ opts.banner = "\n Ig3tool cmdline (GEEK) Interface\n" +
157
+ "----------------------------------\n" +
158
+ "#{options.version} - 24/12/2007\n" +
159
+ "Usage: ig3cmdtool [options]\n"
160
+
161
+ # Actions
162
+ opts.separator ""
163
+ opts.separator "Specific options:"
164
+
165
+ opts.on("-c","--cola","Koop een cola") do |n|
166
+ options.item = "cola"
167
+ end
168
+
169
+ # with keyword completion ! =))
170
+ opts.on("-b", "--buy ITEM", String, "Koop een ITEM {#{ITEMS.keys.sort.join(',')}}") do |item|
171
+ options.item = item
172
+ end
173
+
174
+ # Boolean switch.
175
+ opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
176
+ options.verbose = v
177
+ end
178
+
179
+ # Aantal items
180
+ opts.on("-a","--amount INTEGER", OptionParser::DecimalInteger, "Aantal items (Default 1)") do |n|
181
+ options.amount = n
182
+ end
183
+
184
+ # Username
185
+ opts.on("-u","--username STRING", String, "Scribble voor een andere user") do |u|
186
+ options.username = u
187
+ end
188
+
189
+ # Update Client -> via GEM
190
+ #opts.on("-U","--update","Update Client") do
191
+ # path = File.expand_path(__FILE__)
192
+ # puts "Executing: scp ig@igwe:/infogroep/igtool/ig3tool/client/ig3cmtool #{path}"
193
+ # puts "Need IG Password to copy file from igwe"
194
+ # `scp ig@igwe:/infogroep/igtool/ig3tool/client/ig3cmtool #{path}`
195
+ # puts "Executing: chmod 700 #{path}"
196
+ # `chmod 700 #{path}`
197
+ # puts "Ig3CmTool Update saved to #{path}!"
198
+ # exit
199
+ #end
200
+
201
+ opts.separator ""
202
+ opts.separator "Common options:"
203
+
204
+ # No argument, shows at tail. This will print an options summary.
205
+ opts.on_tail("-h", "--help", "Show this message") do
206
+ puts opts
207
+ exit
208
+ end
209
+
210
+ # Another typical switch to print the version.
211
+ opts.on_tail("-V", "--version", "Show version") do
212
+ puts options.version
213
+ exit
214
+ end
215
+ end
216
+
217
+ begin
218
+ opts.parse!(args)
219
+ if options.item == :none
220
+ puts opts
221
+ exit
222
+ else
223
+ options # Return options
224
+ end
225
+ rescue OptionParser::MissingArgument => e
226
+ puts e
227
+ rescue OptionParser::InvalidArgument => e
228
+ puts e
229
+ end
230
+
231
+ end # parse()
232
+
233
+ end # class OptparseIg3tool
234
+
235
+ def self._plural(name,number)
236
+ if number != 1 and name[-1,1] != "s"
237
+ name = name + "s"
238
+ end
239
+ name
240
+ end
241
+
242
+
243
+ end
244
+
245
+
246
+
247
+
248
+ # ----------------
249
+ # Start de commandline interface
250
+ Ig3tool::start()
251
+
252
+ # ----------------
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ig3cmd
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Lode Hoste
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-04-02 00:00:00 +02:00
13
+ default_executable: ig3cmd
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: ig3client
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.3.0
23
+ version:
24
+ description:
25
+ email: igtool@infogroep.be
26
+ executables:
27
+ - ig3cmd
28
+ extensions: []
29
+
30
+ extra_rdoc_files: []
31
+
32
+ files: []
33
+
34
+ has_rdoc: false
35
+ homepage: http://infogroep.be
36
+ post_install_message:
37
+ rdoc_options: []
38
+
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: "0"
52
+ version:
53
+ requirements: []
54
+
55
+ rubyforge_project:
56
+ rubygems_version: 1.0.1
57
+ signing_key:
58
+ specification_version: 2
59
+ summary: commandline ig3tool client
60
+ test_files: []
61
+