sutazekarate 0.0.6 → 0.0.8

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: f37dee7f327be824a944d61b79a96e24293a5f6cbb2cc6d4e2d3376489a7aad7
4
- data.tar.gz: beb7294cd26183345189fc9939be33b58762daa58ccffd221747d00136e12244
3
+ metadata.gz: 46c5e24e72aee40b8888d2b57ed84a7d37f9bb9888a2b704ae7ac452f079d2fd
4
+ data.tar.gz: c2b6c9b7f62a6b849c7483b2ea81deac0a36a67e09621c680c5d0e54dddc260e
5
5
  SHA512:
6
- metadata.gz: 2dd82780c2da171885b09685452f0eae0ac3ea3ec442c6f5e56b6751bbb5eacc8289be3bb3fc7ad8b89b120e80df86a47de3e12a69652e942212beca05872f58
7
- data.tar.gz: f92a70ec8a00ff6ed1b37af3c138346005fe73912859ea9169ab2231cfcfb523fa4c82a3b9cbe0caa518630f964691da56205e1b7c4a3deed6b0291e6fc69d13
6
+ metadata.gz: 56750003dfe9b909d58e32bb99c6eb3e6e35757c939f01fdbfc8a14e79d64a44e8011035fc323da998bdd5209f99b88ba12986eb3db41448241c28dc2528dba5
7
+ data.tar.gz: bd625c28c312ff1ea7b41a2573e9bc3b7630ee796fcaaa899db7d07a094ed8bbd112ccc95cb6be730ea46a62aa542e3c3b5ce519393bcad78aeaf957df99f12a
@@ -11,6 +11,7 @@ module Sutazekarate
11
11
  attribute :position
12
12
  attribute :name
13
13
  attribute :discipline
14
+ attribute :duration
14
15
  attribute :location
15
16
  attribute :location_color
16
17
  attribute :time_range
@@ -20,11 +21,11 @@ module Sutazekarate
20
21
  end
21
22
 
22
23
  def time_begin
23
- time_range.begin
24
+ time_range&.begin
24
25
  end
25
26
 
26
27
  def time_end
27
- time_range.end
28
+ time_range&.end
28
29
  end
29
30
 
30
31
  def competitors
@@ -114,7 +115,10 @@ module Sutazekarate
114
115
  id = Addressable::URI.parse(detail_element.search('a').first.attr('href')).query_values['k']
115
116
  category_element = Nokogiri::HTML5.fragment(data['kategoria'])
116
117
  category_span_elements = category_element.search('span')
117
- name = category_span_elements[0].text.strip
118
+ name_raw = category_span_elements[0].text.strip
119
+ name_match = name_raw.match(/^([^(\/]+?)\s*(?:\(([^)]+)\))?\s*(?:\/([^\/]+)\/)?$/)
120
+ name = name_match[1]
121
+ duration = name_match[3]
118
122
  detail_element = category_span_elements[1]
119
123
  location = nil
120
124
  location_color = nil
@@ -133,6 +137,7 @@ module Sutazekarate
133
137
  position: data['pc'],
134
138
  name:,
135
139
  discipline:,
140
+ duration:,
136
141
  location:,
137
142
  location_color:,
138
143
  time_range:,
@@ -44,23 +44,13 @@ module Sutazekarate
44
44
 
45
45
  def timetables
46
46
  @timetables ||= begin
47
- categories
48
- .group_by(&:location)
49
- .map do |location, location_categories|
50
- entries = location_categories
51
- .select { |category| category.time_range.present? }
52
- .sort_by { |category| category.time_range.begin }
53
- .map do |location_category|
54
- TimetableEntry.new(
55
- category: location_category,
56
- time_range: location_category.time_range,
57
- )
58
- end
47
+ logger.debug("Fetching timetable for competition #{id}")
48
+ response = HTTP.get("https://sutazekarate.sk/pdf_timetable3.php?sutaz=#{id}")
59
49
 
60
- Timetable.new(
61
- location:,
62
- entries:,
63
- )
50
+ html = Nokogiri::HTML5.fragment(response.body.to_s)
51
+
52
+ html.search('.divttm').map do |location_element|
53
+ Timetable.build(location_element, categories:)
64
54
  end
65
55
  end
66
56
  end
@@ -6,5 +6,18 @@ module Sutazekarate
6
6
 
7
7
  attribute :location
8
8
  attribute :entries
9
+
10
+ def self.build(location_element, categories: [])
11
+ location = location_element.search('.hlavicka').text.strip
12
+
13
+ entries = location_element.search('ul li').map do |entry_element|
14
+ TimetableEntry.build(entry_element, categories:)
15
+ end
16
+
17
+ Timetable.new(
18
+ location:,
19
+ entries:,
20
+ )
21
+ end
9
22
  end
10
23
  end
@@ -4,6 +4,7 @@ module Sutazekarate
4
4
  include ActiveModel::Attributes
5
5
  include ActiveModel::Serializers::JSON
6
6
 
7
+ attribute :title
7
8
  attribute :category
8
9
  attribute :time_range
9
10
 
@@ -18,5 +19,22 @@ module Sutazekarate
18
19
  def time_end
19
20
  time_range.end
20
21
  end
22
+
23
+ def self.build(entry_element, categories: [])
24
+ title = entry_element.children.first.text.strip
25
+ time_range_raw = entry_element.children.last.text.strip
26
+ time_range_match = time_range_raw.match(/(\d+:\d+) - (\d+:\d+)/)
27
+ time_range = Time.zone.parse(time_range_match[1])..Time.zone.parse(time_range_match[2])
28
+
29
+ category = categories.find do |category|
30
+ category.name == title
31
+ end
32
+
33
+ TimetableEntry.new(
34
+ category:,
35
+ title:,
36
+ time_range:,
37
+ )
38
+ end
21
39
  end
22
40
  end
@@ -1,3 +1,3 @@
1
1
  module Sutazekarate
2
- VERSION = '0.0.6'.freeze
2
+ VERSION = '0.0.8'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sutazekarate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ahmed Al Hafoudh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-16 00:00:00.000000000 Z
11
+ date: 2024-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http