feidee_utils 0.0.4.1 → 0.0.4.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 293b859c218934656fc1b096076284f44fe7e17b
4
- data.tar.gz: bf5e50c65f90d910f75b39bc667f63d9ff61fbf3
3
+ metadata.gz: f30f41d070995fbe8c9f6b7de1b2d777f3a6e674
4
+ data.tar.gz: 82c6dbf50bf2922e6852304e0ecd699139413a64
5
5
  SHA512:
6
- metadata.gz: 30ee3bc1c7e4b1fa59ec6a2a5e29b5750261f08f2f335e0dbf3fc6e3fd462c5958803df7e07fc04c162750dcee5a8482dd16ce851bc5533a63363fda0613286f
7
- data.tar.gz: 101e8d20b5db4048f9f9f994d35fe285f65d0f0b2881a7e236f5fc16e9fbc6fbb7fa2afbc5f58a80643c6794931e05b999624ca0f2e675c07f0df3dd9958787f
6
+ metadata.gz: 374fe584c1e52e9f0afde15512f1c1b476a8c37a3b5fbeed640e1f3058216709e5a228417196a137d32e364f1da23b789b30b3503a7dcc690d3611461109635b
7
+ data.tar.gz: bacc8d82f893a130eef2a84d2ce5e4ffd07b606881a90c270343812b587d0a6be6d32ec7a124380101be599b1bbf7f491291e149ce66bf6d894202a9e7db75ef
@@ -5,7 +5,7 @@ require 'bigdecimal'
5
5
  module FeideeUtils
6
6
  class Account < Record
7
7
  def validate_integrity
8
- raise "Account type should always be 0, but it's #{field["type"]}.\n" + inspect unless field["type"] == 0
8
+ raise "Account type should always be 0, but it's #{field["type"]}.\n" + inspect unless not field["type"] or field["type"] == 0
9
9
  raise "Account usedCount should always be 0, but it's #{field["usedCount"]}.\n" + inspect unless field["usedCount"] == 0
10
10
  raise "Account uuid should always be empty, but it's #{field["uuid"]}.\n" + inspect unless field["uuid"].to_s.empty?
11
11
  raise "Account hierachy contains more than 2 levels.\n" + inspect unless flat_parent_hierachy?
@@ -19,6 +19,8 @@ module FeideeUtils
19
19
  end
20
20
  end
21
21
 
22
+ NullPOID = 0
23
+
22
24
  FieldMappings = {
23
25
  name: "name",
24
26
  raw_balance: "balance",
@@ -35,9 +37,12 @@ module FeideeUtils
35
37
 
36
38
  IgnoredFields = [
37
39
  "tradingEntityPOID",
40
+ # TODO: Field type is removed from database_version 73. Not sure about
41
+ # earlier versions.
38
42
  "type", # Always 0
39
43
  "usedCount", # Always 0
40
44
  "uuid", # Always empty.
45
+ # TODO: code is also removed.
41
46
  "code", # WTF
42
47
  "clientID", # WTF
43
48
  ].freeze
@@ -75,7 +80,7 @@ module FeideeUtils
75
80
  end
76
81
 
77
82
  def has_parent?
78
- parent_poid != 0 && !flagged_as_parent?
83
+ parent_poid != NullPOID && !flagged_as_parent?
79
84
  end
80
85
 
81
86
  def flagged_as_parent?
@@ -4,6 +4,8 @@ module FeideeUtils
4
4
  # instance methods: poid, parent_poid, raw_path
5
5
  # class methods: find_by_id
6
6
  module ParentAndPath
7
+ NullPOID = 0
8
+
7
9
  class InconsistentDepthException < Exception
8
10
  end
9
11
 
@@ -62,7 +64,7 @@ module FeideeUtils
62
64
  end
63
65
 
64
66
  def has_parent?
65
- parent_poid != 0
67
+ parent_poid != NullPOID
66
68
  end
67
69
  end
68
70
  end
@@ -16,6 +16,24 @@ module FeideeUtils
16
16
  define_method name do field[key] end
17
17
  end
18
18
  end
19
+
20
+ def define_entity_accessor poid_callback_name, target_class_name = nil
21
+ accessor_name = poid_callback_name.to_s.chomp!("_poid")
22
+ if accessor_name == nil
23
+ raise "No trailing 'poid' in callback name #{poid_callback_name}."
24
+ end
25
+
26
+ if not target_class_name
27
+ target_class_name = accessor_name
28
+ end
29
+ target_class_name = target_class_name.to_s.clone
30
+ target_class_name.gsub!(/(^|_)(.)/) { $2.upcase }
31
+
32
+ define_method accessor_name do
33
+ poid = method(poid_callback_name).call
34
+ self.class.environment.const_get(target_class_name).find(poid)
35
+ end
36
+ end
19
37
  end
20
38
  end
21
39
  end
@@ -14,7 +14,9 @@ module FeideeUtils
14
14
  end
15
15
 
16
16
  id_field_name = entity_name.sub(/^[A-Z]/) { $&.downcase } + "POID"
17
- table_name = "t_" + entity_name.gsub(/([a-z\d])([A-Z\d])/, '\1_\2').downcase
17
+ entity_name_underscore =
18
+ entity_name.gsub(/([a-z\d])([A-Z\d])/, '\1_\2').downcase
19
+ table_name = "t_" + entity_name_underscore
18
20
  subclass.class_exec do
19
21
  define_singleton_method :entity_name do entity_name end
20
22
  define_singleton_method :id_field_name do id_field_name end
@@ -11,7 +11,7 @@ module FeideeUtils
11
11
  class TransferWithCategoryException < Exception
12
12
  end
13
13
 
14
- class InconsistentBuyerAndSellerSetException < Exception
14
+ class InconsistentBuyerAndSellerException < Exception
15
15
  end
16
16
 
17
17
  class InconsistentCategoryException < Exception
@@ -36,7 +36,7 @@ module FeideeUtils
36
36
  end
37
37
  else
38
38
  unless (buyer_account_poid == 0) ^ (seller_account_poid == 0)
39
- raise InconsistentBuyerAndSellerSetException,
39
+ raise InconsistentBuyerAndSellerException,
40
40
  "Exactly one of buyer and seller should be set in a non-transfer transaction. " +
41
41
  "Buyer account POID: #{buyer_account_poid}. Seller account POID: #{seller_account_poid}.\n" +
42
42
  inspect
@@ -98,6 +98,8 @@ module FeideeUtils
98
98
  raw_seller_addition: "sellerMoney",
99
99
  uuid: "relation",
100
100
  }.freeze
101
+ define_entity_accessor :buyer_account_poid, :account
102
+ define_entity_accessor :seller_account_poid, :account
101
103
 
102
104
  IgnoredFields = [
103
105
  "creatorTradingEntityPOID",
@@ -141,6 +143,7 @@ module FeideeUtils
141
143
  # At least one of those two must be 0.
142
144
  buyer_category_poid + seller_category_poid
143
145
  end
146
+ define_entity_accessor :category_poid
144
147
 
145
148
  # Amount accessors
146
149
 
@@ -174,6 +177,7 @@ module FeideeUtils
174
177
  buyer_account_poid + seller_account_poid
175
178
  end
176
179
  end
180
+ define_entity_accessor :revised_account_poid, :account
177
181
 
178
182
  def revised_amount
179
183
  account_poid = revised_account_poid
@@ -202,6 +206,14 @@ module FeideeUtils
202
206
 
203
207
  private
204
208
  def sign_by_type num
209
+ # This is awkward. For transactions of type positive_initial_balance, the
210
+ # buyer is always 0, but the seller have to **add** the amount shown as
211
+ # sellerMoney, which is consistent with other type of transactions.
212
+ #
213
+ # Whereas for transactions of type negative_initial_balance (9), the
214
+ # buyer is always 0, and the seller will have to **deduct** the amount
215
+ # shown as sellerMoney from balance. Here the sign of
216
+ # negative_initial_balance is reversed to reflect this awkwardness.
205
217
  raw_type == 9 ? -num : num
206
218
  end
207
219
 
@@ -1,3 +1,3 @@
1
1
  module FeideeUtils
2
- VERSION = '0.0.4.1'
2
+ VERSION = '0.0.4.2'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feidee_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4.1
4
+ version: 0.0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Liqing Muyi