drpedia_lite 0.0.12 → 0.0.13

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: 12a8ebbe6231cfdc297b2637085dbbeb278bedcc
4
- data.tar.gz: 02f19773c4ea4e046488272cc015543a573b4aad
3
+ metadata.gz: 4c74786751d402d4638cc8a4174e640618dc13f6
4
+ data.tar.gz: 0a817a22450a94a1926047d60bfa4c81cf3e6fe1
5
5
  SHA512:
6
- metadata.gz: 7d838def12a54b796ec72d6f9fa87a52b142a0ea19319c513a04018477cbb075740667fe999ce66fec57f2717f0305520937b46fa38a3462034c4d2e751b9931
7
- data.tar.gz: c2ff3c9057b3081e9d170ed4fa061bedc52b2235e9a0ff9102c348809f5137c40e42fc002822c83d13ed4d3d47c5f862009569cd04ec2c0177afe83f64443490
6
+ metadata.gz: 3bc12c2ff4e48972b82ef4b1a706d957df33a8a2b5e8b97def49758e4d6de40566ffa734b34a3c3023faa21e8e6e33f8fa209305a4ef99cd756fa4f61addda8d
7
+ data.tar.gz: 13c176bffa38a49722bc7a0ac9fc4c8dd4fc000f0b275b22f039456d3edfcd80341b682c94e2d4511b9340f9ab1a6aab4381d5ee5741c443209417514c7da59f
data/lib/Builder.rb CHANGED
@@ -12,7 +12,9 @@ class Builder
12
12
  strains: raw_reader.strains,
13
13
  professions: raw_reader.professions,
14
14
  strain_stats: raw_reader.strain_stats,
15
- strain_specs: raw_reader.strain_specs
15
+ strain_specs: raw_reader.strain_specs,
16
+ profession_concentrations: raw_reader.profession_concentrations,
17
+ profession_advanced: raw_reader.profession_advanced
16
18
 
17
19
  File.open(File.join(base_output_path, 'strains.json'), 'w') { |f| f.write raw_reader.strains.to_a.to_json }
18
20
  File.open(File.join(base_output_path, 'professions.json'), 'w') { |f| f.write raw_reader.professions.to_a.to_json }
@@ -22,5 +24,7 @@ class Builder
22
24
  File.open(File.join(base_output_path, 'skill_list.json'), 'w') { |f| f.write raw_reader.skill_list.to_json }
23
25
  File.open(File.join(base_output_path, 'strain_stats.json'), 'w') { |f| f.write raw_reader.strain_stats.to_json }
24
26
  File.open(File.join(base_output_path, 'strain_specs.json'), 'w') { |f| f.write raw_reader.strain_specs.to_json }
27
+ File.open(File.join(base_output_path, 'profession_concentrations.json'), 'w') { |f| f.write raw_reader.profession_concentrations.to_json }
28
+ File.open(File.join(base_output_path, 'profession_advanced.json'), 'w') { |f| f.write raw_reader.profession_advanced.to_json }
25
29
  end
26
30
  end
data/lib/RawReader.rb CHANGED
@@ -1,12 +1,17 @@
1
1
  require 'set'
2
2
 
3
3
  class RawReader
4
- attr_reader :skill_list, :skill_cat, :strains, :professions, :strain_restrictions, :skill_group, :strain_stats, :strain_specs
4
+ attr_reader :skill_list, :skill_cat, :skill_group,
5
+ :strains, :strain_restrictions, :strain_stats, :strain_specs,
6
+ :professions, :profession_concentrations, :profession_advanced
7
+
5
8
  STATE_TRANSITION = {
6
9
  :undef => { pattern: /== Advantage Skill ==/, next: :innate },
7
10
  :innate => { pattern: /== Disadvantage Skill ==/, next: :strain_disadv },
8
11
  :strain_disadv => { pattern: /== Innate Skill Prerequisite ==/, next: :innate_preq },
9
- :innate_preq => { pattern: /== Strain Profession Restriction ==/, next: :strain_rtrs },
12
+ :innate_preq => { pattern: /== Profession Concentration ==/, next: :prof_concent },
13
+ :prof_concent => { pattern: /== Advanced Profession ==/, next: :adv_prof },
14
+ :adv_prof => { pattern: /== Strain Profession Restriction ==/, next: :strain_rtrs },
10
15
  :strain_rtrs => { pattern: /== Strain Stats ==/, next: :strain_stats },
11
16
  :strain_stats => { pattern: /== Strain Specific Skills ==/, next: :strain_specs },
12
17
  :strain_specs => { pattern: /== Open Skill ==/, next: :open },
@@ -26,6 +31,10 @@ class RawReader
26
31
  @strain_specs = Hash.new
27
32
  @strain_stats = Hash.new
28
33
  @professions = Set.new
34
+ @profession_concentrations = Hash.new
35
+ @profession_advanced = Hash.new
36
+
37
+ @mutiline_state = nil
29
38
 
30
39
  begin
31
40
  f = File.read(filepath)
@@ -87,6 +96,8 @@ private
87
96
  when :innate then process_innate_skills line: line
88
97
  when :strain_disadv then process_innate_skills line: line, disadvantage: true
89
98
  when :innate_preq then process_innate_preqs line: line
99
+ when :prof_concent then process_profession_concentration line: line
100
+ when :adv_prof then process_advanced_professions line: line
90
101
  when :strain_rtrs then process_strain_restrictions line: line
91
102
  when :strain_stats then process_strain_stats line: line
92
103
  when :strain_specs then process_strain_specs line: line
@@ -129,6 +140,30 @@ private
129
140
  end
130
141
  end
131
142
 
143
+ def process_profession_concentration line:
144
+ clusters = line.split(/:/)
145
+ right_cluster = clusters[1].split(/\,/)
146
+
147
+ @profession_concentrations[clusters[0].strip.to_sym] = right_cluster.collect{ |x| x.strip.to_sym }
148
+ end
149
+
150
+ def process_advanced_professions line:
151
+ if line.strip.length == 0
152
+ @multiline_state = nil
153
+ else
154
+ clusters = line.split(/:/)
155
+ case clusters.length
156
+ when 2
157
+ @multiline_state = clusters[0].strip.to_sym
158
+ @profession_advanced[@multiline_state] = ''
159
+ when 1
160
+ @profession_advanced[@multiline_state] += clusters[0]
161
+ else
162
+ raise RuntimeError, "#{clusters.length} clusters in multiline processing. Expected 1 or 2: #{line}"
163
+ end
164
+ end
165
+ end
166
+
132
167
  def process_strain_specs line:
133
168
  clusters = line.split(/:/)
134
169
  right_cluster = clusters[1].split(/\|/)
data/lib/Validator.rb CHANGED
@@ -8,7 +8,9 @@ class Validator
8
8
  strains:,
9
9
  professions:,
10
10
  strain_stats:,
11
- strain_specs:
11
+ strain_specs:,
12
+ profession_concentrations:,
13
+ profession_advanced:
12
14
  @skill_list = skill_list
13
15
  @skill_group = skill_group
14
16
  @skill_cat = skill_cat
@@ -16,14 +18,26 @@ class Validator
16
18
  @professions = professions
17
19
  @strain_stats = strain_stats
18
20
  @strain_specs = strain_specs
21
+ @profession_concentrations = profession_concentrations
22
+ @profession_advanced = profession_advanced
19
23
 
20
24
  validate_non_empty
21
25
  validate_skill_name_matches
22
26
  validate_stats
23
27
  validate_strain_specs
28
+ validate_profession_concentrations
29
+ validate_profession_advanced
24
30
  end
25
31
 
26
32
  private
33
+ def validate_profession_concentrations
34
+ assert(@profession_concentrations.length > 0)
35
+ end
36
+
37
+ def validate_profession_advanced
38
+ assert(@profession_advanced.length > 0)
39
+ end
40
+
27
41
  def validate_non_empty
28
42
  assert(@skill_list.length > 0, "Empty skill list")
29
43
  assert(@skill_cat.length > 0, "Empty processed skills")
data/lib/input/input.txt CHANGED
@@ -27,6 +27,160 @@ Natural Ones: Bolt Action
27
27
  == Innate Skill Prerequisite ==
28
28
  Iron Slaves: Iron Fists: Brawling
29
29
 
30
+ == Profession Concentration ==
31
+ Combat: Assassin, Guard, Gun Slinger, Hunter, Martial Artist, Officer, Primitive, Pugilist, Sniper, Solider, Thug
32
+ Civilized Society: Caravan Driver, Charlatan, Doctor, Entertainer, Gambler, Hookup, Merchant, Politician, Priest, Publican, Ring Leader, Sawbones, Scoundrel, Spy, Teacher, Thief
33
+ Crafting and Production: Cook, Distiller, Engineer, Mad Scientist, Printer, Scavenger, Tinker
34
+
35
+ == Advanced Profession ==
36
+ Apocatastian Templar:
37
+ (and ((xp_sum 100)
38
+ (stat_sum hp_or_mp 50)
39
+ (p Priest)
40
+ (p (Guard Officer))))
41
+
42
+ Avontuur:
43
+ (and ((xp_sum 100)
44
+ (stat_sum hp_or_mp 50)
45
+ (p (Gambler Scavenger Teacher Jones))))
46
+
47
+ Bone Breaker:
48
+ (and ((xp_sum 100)
49
+ (stat_sum hp_or_mp 50)
50
+ (p (Thug Pugilist))))
51
+
52
+ Entrepreneur:
53
+ (and ((not (s "The Red Star"))
54
+ (xp_sum 100)
55
+ (stat_sum hp_or_mp 50)
56
+ (p (Caravan Driver "Hook-Up" Merchant Publican))))
57
+
58
+ Free Radical:
59
+ (and ((s Retrograde)
60
+ (xp_sum 100)
61
+ (stat_sum hp_or_mp 50)))
62
+
63
+ G-Man:
64
+ (and ((or ((s "Pure Blood")
65
+ (k "Lore - Strain - Pure Blood")))
66
+ (xp_sum 100)
67
+ (stat_sum hp_or_mp 50)
68
+ (k Literacy)
69
+ (k "Lore - Pre-Fall History Modern")
70
+ (k (Torture Interrogate))))
71
+
72
+ Gear Head:
73
+ (and ((xp_sum 100)
74
+ (stat_sum hp_or_mp 50)
75
+ ((or (p (Caravan Driver "Hook-Up" Merchant Engineer "Mad Scientist"))
76
+ (s ("Diesel Jock" Rover))))
77
+ (k ("Building Tomorrow" Brewing "Forging the Future"))))
78
+
79
+ Grave Robber:
80
+ (and ((xp_sum 100)
81
+ (stat_sum hp_or_mp 50)
82
+ (p (Doctor Sawbones))
83
+ (p (Scavenger Thief Assassin Jones))))
84
+
85
+ Marksman:
86
+ (and ((xp_sum 100)
87
+ (stat_sum hp_or_mp 50)
88
+ (p (Sniper "Gun Slinger"))))
89
+
90
+ Mercenary:
91
+ (and ((xp_sum 100)
92
+ (stat_sum hp_or_mp 50)
93
+ (p (Soldier Guard Officer Hunter))))
94
+
95
+ Merican Ba-das:
96
+ (and ((xp_sum 100)
97
+ (stat_sum hp 50)
98
+ (s Merican)
99
+ (p Priest)
100
+ (p (Guard Officer "Gun Slinger" Hunter Primitive Pugilist Soldier Thug))))
101
+
102
+ Mind Killer:
103
+ (and ((xp_sum 200)
104
+ (stat_sum hp_or_mp 50)
105
+ (k "Mind Resistance")))
106
+
107
+ Monk:
108
+ (and ((xp_sum 100)
109
+ (stat_sum hp_or_mp 50)
110
+ (p ("Martial Artist" Priest))))
111
+
112
+ Mountebank:
113
+ (and ((xp_sum 100)
114
+ (stat_sum mp 100)
115
+ (p (Charlatan Gambler Merchant Politician))))
116
+
117
+ Nephilim:
118
+ (and ((xp_sum 200)
119
+ (stat_sum mp 50)
120
+ (s ("Nation of Accensor" Remnant))))
121
+
122
+ Oni:
123
+ (and ((xp_sum 100)
124
+ (stat_sum hp_or_mp 50)
125
+ (s "Red Star")
126
+ (p Priest)
127
+ (p (Guard Officer "Gun Slinger" Primitive Soldier))))
128
+
129
+ Overlord:
130
+ (and ((xp_sum 100)
131
+ (stat_sum hp_or_mp 50)
132
+ (p (Assassin Doctor Gambler "Mad Scientist" "Ring Leader" Engineer))
133
+ (p (Charlatan Entertainer Politician Priest Teacher))))
134
+
135
+ Reaper:
136
+ (and ((xp_sum 100)
137
+ (p ("Gun Slinger" Hunter Primitive Soldier))))
138
+
139
+ Sage:
140
+ (and ((xp_sum 100)
141
+ (stat_sum mp 50)
142
+ (p (Jones Printer Teacher))
143
+ (k (lore_type 4))))
144
+ Saint:
145
+ (and ((xp_sum 100)
146
+ (or ((p (Cook Doctor Priest Teacher))
147
+ (s "Nation of Accensor")))
148
+ ((not (s "The Red Star")))))
149
+
150
+ Shadow:
151
+ (and ((xp_sum 200)
152
+ (stat_sum hp_or_mp 50)
153
+ (p (Assassin Thief Spy))))
154
+
155
+ Shepherd of the Land:
156
+ (and ((xp_sum 200)
157
+ (stat_sum hp_or_mp 100)
158
+ (p (Cook Brewer Teacher Entertainer Farmer Fishmonger))))
159
+
160
+ Survivor:
161
+ (and ((xp_sum 200)
162
+ (stat_sum hp_and_mp 100)))
163
+
164
+ Techno Savant:
165
+ (and ((xp_sum 100)
166
+ (stat_sum hp_or_mp 50)
167
+ (p ("Mad Scientist" Tinker Engineer))))
168
+
169
+ Thought Bender:
170
+ (and ((xp_sum 100)
171
+ (stat_sum mp 50)
172
+ (p Psionist)
173
+ (k (psionic_type advanced 2))))
174
+
175
+ Veteran:
176
+ (and ((xp_sum 200)
177
+ (k "Lore - Local Area")))
178
+
179
+ Villon:
180
+ (and ((xp_sum 100)
181
+ (p (Thief Assassin Spy))))
182
+
183
+
30
184
  == Strain Profession Restriction ==
31
185
  Baywalkers: Sawbones, Primitive, Thug
32
186
  Diesel Jocks: Farmer, Politician, Publican
@@ -1034,4 +1188,4 @@ HM Trap Making
1034
1188
  HN Unlock
1035
1189
  HO Vanish
1036
1190
  HP Weld
1037
- HQ Wide Strike
1191
+ HQ Wide Strike
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drpedia_lite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gloria Budiman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-21 00:00:00.000000000 Z
11
+ date: 2016-12-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Extracts skills, strains, profession, and requirement trees into JSON
14
14
  email: wahyu.g@gmail.com