fide_xml_parser 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 706820b647cf190a5e17304d1cb22c7af1921b8e84f4310cc1dee6061de51f57
4
- data.tar.gz: d64a2a33a80963bd30a7881393333f6464e1bee3b622e3e48a5831e7e0450b4f
3
+ metadata.gz: 16cf18729c304b19bc521574841ad100b5aed0b9bd95dedb93e7e6474b83d251
4
+ data.tar.gz: 10b3e2bce46890eaee461199ccda229a0cec85e11b03a1d373f361c37b47fe24
5
5
  SHA512:
6
- metadata.gz: 4515194fdf260fac89050ad6216069cdeb26a3516f5e6837e597d2af24fcad89bb6829a4a6602d02ddb9f12bb90a7d67b50c61ee35afbc5b6841654e81154f58
7
- data.tar.gz: 667235af5570310f71120607ae937102162121a0e4bd2075d86b1cb731b0c6622f6d36c76ce721735164f2e0488a17748c7386352ea5aab26e5d928836c886fe
6
+ metadata.gz: 66f43b7384936aff168df5275af752bf050a3ab9205c1dec927e410df187f904cb6e58efdb0a2456cb5f9ad27b1b765084b252e3644c7b8a7ea92a9db49e9524
7
+ data.tar.gz: '08ceb66194d7b95ee64cc6cc54759f7662aac2555ff6c00742c37142c91fccc0e54abc87c37c4c8e1d2eacf0e189436bd005c5bc1c19322fc610c62e95b64cc8'
@@ -4,4 +4,10 @@ First release.
4
4
 
5
5
  ### 0.2.0
6
6
 
7
- * API change: change last 2 write method arguments to keyword arguments.
7
+ * API change: change last 2 write method arguments to keyword arguments.
8
+
9
+ ### 0.3.0
10
+
11
+ * Parser can now be configured with array name, record name, and numeric field list.
12
+ * Interface has changed, must instantiate FideParser for FIDE files.
13
+ * Field name renames (renaming) can now be done.
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
 
18
18
  spec.metadata["homepage_uri"] = spec.homepage
19
19
  spec.metadata["source_code_uri"] = spec.homepage
20
- # spec.metadata["changelog_uri"] = '' # "TODO: Put your gem's CHANGELOG.md URL here."
20
+ spec.metadata["changelog_uri"] = 'https://github.com/keithrbennett/fide-xml-parser/blob/master/CHANGELOG.md'
21
21
 
22
22
  # Specify which files should be added to the gem when it is released.
23
23
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -29,11 +29,10 @@ Gem::Specification.new do |spec|
29
29
  spec.require_paths = ["lib"]
30
30
 
31
31
  spec.add_dependency "nokogiri", "~>1.10"
32
- spec.add_dependency "tty-cursor", "~> 0.7"
33
32
  spec.add_dependency "pry", "~> 0.12"
34
33
  spec.add_dependency "awesome_print", "~> 1.8"
35
34
 
36
35
  spec.add_development_dependency "bundler", "~> 2.0"
37
- spec.add_development_dependency "rake", "~> 10.0"
36
+ spec.add_development_dependency "rake", ">= 12.3.3"
38
37
  spec.add_development_dependency "rspec", "~> 3.0"
39
38
  end
@@ -0,0 +1,23 @@
1
+ require_relative 'processor'
2
+
3
+ module FideXmlParser
4
+
5
+ class FideProcessor < Processor
6
+
7
+ NUMERIC_FIELDS = %w[
8
+ k
9
+ blitz_k
10
+ rapid_k
11
+ rating
12
+ blitz_rating
13
+ rapid_rating
14
+ games
15
+ blitz_games
16
+ rapid_games
17
+ ].map(&:freeze)
18
+
19
+ def initialize
20
+ super('playerslist', 'player', NUMERIC_FIELDS)
21
+ end
22
+ end
23
+ end
@@ -5,12 +5,13 @@ module FideXmlParser
5
5
  class JsonWriter
6
6
 
7
7
  attr_reader :parser
8
- attr_accessor :key_filter, :record_filter
8
+ attr_accessor :key_filter, :record_filter, :field_name_renames
9
9
 
10
10
 
11
11
  def initialize
12
12
  @key_filter = nil
13
13
  @record_filter = nil
14
+ @field_name_renames = nil
14
15
  end
15
16
 
16
17
 
@@ -57,9 +58,10 @@ class JsonWriter
57
58
  # Default json_filespec will be constructed from the input file, just replacing 'xml' with 'json'.
58
59
  private
59
60
  def write_private(input_filespec, json_mode: :pretty, json_filespec: nil)
60
- @parser = FideXmlParser::Processor.new
61
+ @parser = FideXmlParser::FideProcessor.new
61
62
  parser.key_filter = key_filter
62
63
  parser.record_filter = record_filter
64
+ parser.field_name_renames = field_name_renames
63
65
  records = parser.parse(File.new(input_filespec))
64
66
  json_text = (json_mode == :pretty) ? JSON.pretty_generate(records) : records.to_json
65
67
  json_filespec ||= input_filespec.sub(/\.xml$/, '.json')
@@ -1,6 +1,5 @@
1
1
  require 'awesome_print'
2
2
  require 'nokogiri'
3
- require 'tty-cursor'
4
3
 
5
4
  module FideXmlParser
6
5
 
@@ -18,27 +17,38 @@ module FideXmlParser
18
17
  # and returns true to include it or false to exclude it,
19
18
  # e.g. to include only records with a "title", do this:
20
19
  # processor.record_filter = ->(rec) { rec.title }
20
+ # If a field name has been changed via the field_name_renames hash, the new name should be used in the filter.
21
+
22
+ # A field_name_renames hash can be provided.
23
+ # Keys are the field names in the XML input, values are the names in the output JSON, e.g.:
24
+ # {
25
+ # 'rating' => 'standard_rating',
26
+ # 'games' => 'standard_games'
27
+ # }
28
+
29
+
21
30
  class Processor < Nokogiri::XML::SAX::Document
22
31
 
23
32
  attr_reader :start_time
24
- attr_accessor :current_property_name, :record, :records, :key_filter, :record_filter,
25
- :input_record_count, :output_record_count
26
-
27
- NUMERIC_FIELDS = %w[
28
- k
29
- blitz_k
30
- rapid_k
31
- rating
32
- blitz_rating
33
- rapid_rating
34
- games
35
- blitz_games
36
- rapid_games
37
- ]
38
-
39
- def initialize
33
+
34
+ # Constructor parameters:
35
+ attr_accessor :numeric_fields, :array_name, :record_name
36
+
37
+ # User-provided callbacks:
38
+ attr_accessor :key_filter, :record_filter, :field_name_renames
39
+
40
+ # For internal use:
41
+ attr_accessor :current_property_name, :record, :records, :input_record_count, :output_record_count
42
+
43
+ ANSI_GO_TO_LINE_START = "\033[1G"
44
+
45
+ def initialize(array_name, record_name, numeric_fields)
46
+ @array_name = array_name
47
+ @record_name = record_name
48
+ @numeric_fields = numeric_fields
40
49
  @key_filter = nil
41
50
  @record_filter = nil
51
+ @field_name_renames = nil
42
52
  @current_property_name = nil
43
53
  @record = {}
44
54
  @records = []
@@ -62,7 +72,7 @@ class Processor < Nokogiri::XML::SAX::Document
62
72
 
63
73
 
64
74
  def output_status
65
- print TTY::Cursor.column(1)
75
+ print ANSI_GO_TO_LINE_START
66
76
  print "Records processed: %9d kept: %9d Seconds elapsed: %11.2f" % [
67
77
  input_record_count,
68
78
  output_record_count,
@@ -73,9 +83,9 @@ class Processor < Nokogiri::XML::SAX::Document
73
83
 
74
84
  def start_element(name, _attrs)
75
85
  case name
76
- when 'playerslist'
86
+ when array_name
77
87
  # ignore
78
- when 'player'
88
+ when record_name
79
89
  self.input_record_count += 1
80
90
  output_status if input_record_count % 1000 == 0
81
91
  else # this is a field in the players record; process it as such
@@ -86,9 +96,9 @@ class Processor < Nokogiri::XML::SAX::Document
86
96
 
87
97
  def end_element(name)
88
98
  case name
89
- when 'playerslist' # end of data, write JSON file
99
+ when array_name # end of data, write JSON file
90
100
  finish
91
- when 'player'
101
+ when record_name
92
102
  if record_filter.nil? || record_filter.(record)
93
103
  self.output_record_count += 1
94
104
  records << record
@@ -103,8 +113,15 @@ class Processor < Nokogiri::XML::SAX::Document
103
113
  def characters(string)
104
114
  if current_property_name
105
115
  if key_filter.nil? || key_filter.(current_property_name)
106
- value = NUMERIC_FIELDS.include?(current_property_name) ? Integer(string) : string
107
- record[current_property_name] = value
116
+ value = numeric_fields.include?(current_property_name) ? Integer(string) : string
117
+ key = current_property_name
118
+ if field_name_renames
119
+ new_field_name = field_name_renames[key]
120
+ if new_field_name
121
+ key = new_field_name
122
+ end
123
+ end
124
+ record[key] = value
108
125
  end
109
126
  end
110
127
  end
@@ -0,0 +1,9 @@
1
+ # Combines a standard, blitz, and rapid data set into a combined data set.
2
+
3
+ class RatingCombiner
4
+
5
+ def initialize
6
+
7
+ end
8
+
9
+ end
@@ -1,3 +1,3 @@
1
1
  module FideXmlParser
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fide_xml_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Bennett
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-29 00:00:00.000000000 Z
11
+ date: 2020-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.10'
27
- - !ruby/object:Gem::Dependency
28
- name: tty-cursor
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '0.7'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '0.7'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: pry
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -84,16 +70,16 @@ dependencies:
84
70
  name: rake
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - "~>"
73
+ - - ">="
88
74
  - !ruby/object:Gem::Version
89
- version: '10.0'
75
+ version: 12.3.3
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - "~>"
80
+ - - ">="
95
81
  - !ruby/object:Gem::Version
96
- version: '10.0'
82
+ version: 12.3.3
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: rspec
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -126,8 +112,10 @@ files:
126
112
  - Rakefile
127
113
  - fide_xml_parser.gemspec
128
114
  - lib/fide_xml_parser.rb
115
+ - lib/fide_xml_parser/fide_processor.rb
129
116
  - lib/fide_xml_parser/json_writer.rb
130
117
  - lib/fide_xml_parser/processor.rb
118
+ - lib/fide_xml_parser/rating_combiner.rb
131
119
  - lib/fide_xml_parser/version.rb
132
120
  homepage: https://github.com/keithrbennett/fide-xml-parser
133
121
  licenses:
@@ -136,6 +124,7 @@ metadata:
136
124
  allowed_push_host: https://rubygems.org
137
125
  homepage_uri: https://github.com/keithrbennett/fide-xml-parser
138
126
  source_code_uri: https://github.com/keithrbennett/fide-xml-parser
127
+ changelog_uri: https://github.com/keithrbennett/fide-xml-parser/blob/master/CHANGELOG.md
139
128
  post_install_message:
140
129
  rdoc_options: []
141
130
  require_paths: