tsm-accounting 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/HISTORY +5 -0
  2. data/lib/tsm-accounting.rb +33 -26
  3. metadata +4 -4
data/HISTORY CHANGED
@@ -1,3 +1,8 @@
1
+ == 1.1.0 ==
2
+ * The item ID is now parsed (in the case of random-enchantment items, the ID
3
+ is parsed but the enchantment data is discarded) and emitted during CSV
4
+ creation.
5
+
1
6
  == 1.0.1 ==
2
7
  * Worst QA engineer. Worst.
3
8
 
@@ -28,7 +28,7 @@
28
28
  require 'csv'
29
29
 
30
30
  module TSMAccounting
31
- VERSION = '1.0.1'
31
+ VERSION = '1.1.0'
32
32
 
33
33
  class Database
34
34
  class InvalidDatabaseFileException < RuntimeError
@@ -53,7 +53,7 @@ module TSMAccounting
53
53
 
54
54
  def to_csv(output_file)
55
55
  CSV.open(output_file, 'w') do |f|
56
- f << ['Realm','Faction','Transaction Type','Time','Item','Quantity','Stack Size','Price (g)','Price (c)','Buyer','Seller']
56
+ f << ['Realm','Faction','Transaction Type','Time','Item ID','Item Name','Quantity','Stack Size','Price (g)','Price (c)','Buyer','Seller']
57
57
 
58
58
  @data.each do |realm,factions|
59
59
  factions.each do |faction,ropes|
@@ -62,6 +62,7 @@ module TSMAccounting
62
62
  item.transactions.each do |tx|
63
63
  row = [realm,faction,type]
64
64
  row << tx.datetime.strftime('%Y-%m-%d %k:%M:%S')
65
+ row << item.id
65
66
  row << item.name
66
67
  row << tx.quantity
67
68
  row << tx.stack_size
@@ -190,15 +191,15 @@ module TSMAccounting
190
191
  end # Database
191
192
 
192
193
  class Item
193
- attr_reader :name, :transactions
194
+ attr_reader :id, :name, :transactions
194
195
 
195
196
  def initialize(item,type)
196
197
  encoded_item, encoded_records = item.split '!'
197
198
 
198
199
  if encoded_item[0,1] == 'x'
199
- @name = decode_code(encoded_item)
200
+ @id, @name = decode_code(encoded_item)
200
201
  else
201
- @name = decode_link(encoded_item)
202
+ @id, @name = decode_link(encoded_item)
202
203
  end
203
204
  @transactions = encoded_records.split('@').map {|record| Transaction.new(record,type) }
204
205
  @transactions ||= []
@@ -207,8 +208,14 @@ module TSMAccounting
207
208
  protected
208
209
  def decode_link(text)
209
210
  colour, code, name = text.split '|'
211
+
212
+ # In the case of items with random enchantments (ie
213
+ # Jasper Ring of the Bedrock), the item ID is the same for
214
+ # all rings (52310) but there is an additional attribute
215
+ # seperated by a colon to identify the enchantment.
210
216
 
211
- return name
217
+ id, ench = code.split ':'
218
+ return [TSMAccounting.decode(id), name]
212
219
  end # decode_link
213
220
 
214
221
  # I _think_ this will only get called if the item link cannot
@@ -217,7 +224,7 @@ module TSMAccounting
217
224
  #
218
225
  # In theory, this shouldn't get called...
219
226
  def decode_code(text)
220
- return text
227
+ return [nil, text]
221
228
  end # decode_string
222
229
  end # item
223
230
 
@@ -227,10 +234,10 @@ module TSMAccounting
227
234
  def initialize(encoded_string,type)
228
235
  d = encoded_string.split('#')
229
236
 
230
- @stack_size = decode(d[0])
231
- @quantity = decode(d[1])
232
- @datetime = Time.at(decode(d[2]))
233
- @price = decode(d[3])
237
+ @stack_size = TSMAccounting.decode(d[0])
238
+ @quantity = TSMAccounting.decode(d[1])
239
+ @datetime = Time.at(TSMAccounting.decode(d[2]))
240
+ @price = TSMAccounting.decode(d[3])
234
241
 
235
242
  if type == 'purchase'
236
243
  @buyer = d[5]
@@ -261,21 +268,21 @@ module TSMAccounting
261
268
  return "#{parts['gold']}.#{parts['silver']}".to_f
262
269
  end
263
270
 
264
- protected
265
- def decode(value)
266
- alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_="
267
- base = alpha.length
268
-
269
- i = value.length - 1
270
- result = 0
271
- value.each_char do |w|
272
- if w.match(/([A-Za-z0-9_=])/)
273
- result += (alpha.index(w)) * (base**i)
274
- i -= 1
275
- end
271
+ end # Transaction
272
+
273
+ def self.decode(value)
274
+ alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_="
275
+ base = alpha.length
276
+
277
+ i = value.length - 1
278
+ result = 0
279
+ value.each_char do |w|
280
+ if w.match(/([A-Za-z0-9_=])/)
281
+ result += (alpha.index(w)) * (base**i)
282
+ i -= 1
276
283
  end
284
+ end
277
285
 
278
- return result
279
- end # decode
280
- end # Transaction
286
+ return result
287
+ end # decode
281
288
  end # TSMAccounting
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tsm-accounting
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
- - 0
9
8
  - 1
10
- version: 1.0.1
9
+ - 0
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - owlmanatt
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-11 00:00:00 +00:00
18
+ date: 2011-09-29 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies: []
21
21