z4blockchain 0.1.1 → 0.1.3

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
  SHA256:
3
- metadata.gz: b55d837ace4ec467fd48cf456c006f8499da8d68565bda22af52fdb7dfcadf81
4
- data.tar.gz: 277ac0a93fd53621b7905fbfa1e22439b97f9ae329c58a80cde87e3f8f9cfbfa
3
+ metadata.gz: ba2b348422bb80bbf15cda06a7e954f9a157a639af4046fa8f98a59e4c34b41e
4
+ data.tar.gz: 01a700eedcd7bc9f7563889ff5613aaded34d8999e803b424e6ecc0274d22a10
5
5
  SHA512:
6
- metadata.gz: e091511be45693f9b613e2bd51c4ede33a97a35366fe51e8e9cd959100bbfaa621ae50dde90850ba39025d894a7471d63883e7699c5d3e5eaa82cbc10df7a32f
7
- data.tar.gz: cf98306f43b3f6aa4557835dec9eddd29ade91c29ae0fc2f444fa38a4edefedf0e48728e7e018816f28a56638a76c4e4785855da68fdd6e9fe05d4215bd2f9b7
6
+ metadata.gz: b67adef24419014deb07a683a179ae104964c12509dcf91cf0e09286a3b7d334a6feead248f1fb718334d38c1077d20a554d687281d03ed4b538754f405cfc9b
7
+ data.tar.gz: e991ac8b22dfaff8dff5f71b7528b3c6be806e8194c3ef20726ad4779093828291692492f6d20a7fc73e7bbda2b1d05a1850ef0a204e965c346b43e0fcdef7b8
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Z4blockchain
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.3"
5
5
  COMMIT = `git log --format="%H" -n 1`.strip
6
6
  end
data/lib/z4blockchain.rb CHANGED
@@ -25,6 +25,16 @@ module Z4BC
25
25
  BANKS = PStore.new("db/banks.pstore")
26
26
 
27
27
  BANK = Hash.new { |h,k| h[k] = Bank.new(k) }
28
+
29
+ GAMES = PStore.new("db/games.pstore")
30
+
31
+ GAME = Hash.new { |h,k| h[k] = Game.new(k) }
32
+
33
+ LVLS = PStore.new("db/lvls.pstore")
34
+
35
+ LVL = Hash.new { |h,k| h[k] = Lvls.new(k) }
36
+
37
+ USER = Hash.new { |h,k| h[k] = User.new(k) }
28
38
 
29
39
  class Error < StandardError; end
30
40
 
@@ -76,6 +86,12 @@ module Z4BC
76
86
  return h
77
87
  end
78
88
 
89
+ def self.balance u
90
+ x = 0
91
+ BANK.each_pair { |k,v| x += v[u] }
92
+ return x
93
+ end
94
+
79
95
  def self.bank b
80
96
  BANK[b]
81
97
  end
@@ -98,6 +114,105 @@ module Z4BC
98
114
  BLOCKCHAIN << JSON.generate(h)
99
115
  return nil
100
116
  end
117
+
118
+ def self.game
119
+ GAME
120
+ end
121
+
122
+ def self.user
123
+ USER
124
+ end
125
+
126
+ def self.level
127
+ LVLS
128
+ end
129
+
130
+ def self.lvls
131
+ LVL
132
+ end
133
+
134
+ class User
135
+
136
+ attr_accessor :id
137
+
138
+ attr_reader :game, :wins, :lvls
139
+
140
+ def initialize i
141
+ @id = i
142
+ @game = PStore.new("db/player-game-#{i}.pstore")
143
+ @wins = PStore.new("db/player-wins-#{i}.pstore")
144
+ @lvls = PStore.new("db/player-lvls-#{i}.pstore")
145
+ end
146
+
147
+ def to_h
148
+ h = { game: {}, wins: {}, lvls: {} }
149
+ @game.transaction { |db| db.keys.each { |e| h[:game][e] = db[e] } }
150
+ @wins.transaction { |db| db.keys.each { |e| h[:wins][e] = db[e] } }
151
+ @lvls.transaction { |db| db.keys.each { |e| h[:lvls][e] = db[e] } }
152
+ return h
153
+ end
154
+ end
155
+
156
+ class Game
157
+
158
+ attr_accessor :id
159
+
160
+ attr_reader :game, :wins, :lvls
161
+
162
+ def initialize i
163
+ @id = i
164
+ @game = PStore.new("db/game-game-#{i}.pstore")
165
+ @wins = PStore.new("db/game-wins-#{i}.pstore")
166
+ @lvls = PStore.new("db/game-lvls-#{i}.pstore")
167
+ end
168
+
169
+ def key k
170
+ #Z4blockchain.digest(%[#{@id}:#{k}])
171
+ %[#{@id}:#{k}]
172
+ end
173
+
174
+ def play h={}
175
+ GAMES.transaction { |db| x = db[@id].to_i; db[@id] = x + 1 }
176
+ @wins.transaction { |db|
177
+ x = db[h[:winner]].to_i;
178
+ db[h[:winner]] = x + 1;
179
+ u = USER[h[:winner]]
180
+ u.wins.transaction { |ddb| x = ddb[@id].to_i; ddb[@id] = x + 1; }
181
+ }
182
+ @game.transaction { |db|
183
+ [h[:players]].flatten.each { |e|
184
+ x = db[e].to_i;
185
+ db[e] = x + 1;
186
+ u = USER[e]
187
+ u.game.transaction { |ddb| x = ddb[@id].to_i; ddb[@id] = x + 1; }
188
+ }
189
+ }
190
+ if h.has_key? :award
191
+ @lvls.transaction { |db|
192
+ db[h[:award]] = h[:winner]
193
+ u = User.new(h[:winner])
194
+ u.lvls.transaction { |ddb|
195
+ LVL[h[:award]].incr h[:winner]
196
+ }
197
+ }
198
+ end
199
+ end
200
+ end
201
+
202
+ class Lvls
203
+ attr_accessor :id
204
+
205
+ attr_reader :user
206
+
207
+ def initialize i
208
+ @id = i
209
+ @user = PStore.new("lvls-user-#{i}")
210
+ end
211
+ def incr u
212
+ @user.transaction { |db| x = db[u].to_i; db[u] = x + 1; }
213
+ LVLS.transaction { |db| x = db[@id].to_i; db[@id] = x + 1 }
214
+ end
215
+ end
101
216
 
102
217
  class Bank
103
218
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: z4blockchain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Olson