ensuppar 0.1.0 → 1.0.0
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 +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +52 -0
- data/README.md +22 -4
- data/lib/ensuppar/configuration.rb +15 -0
- data/lib/ensuppar/db/cities.json +7 -0
- data/lib/ensuppar/detectors/city_detector.rb +30 -0
- data/lib/ensuppar/entities/building.rb +18 -0
- data/lib/ensuppar/entities/energy_schedule.rb +16 -0
- data/lib/ensuppar/errors/configuration.rb +5 -0
- data/lib/ensuppar/services/energy_suply_service/client.rb +15 -0
- data/lib/ensuppar/services/energy_suply_service/parser.rb +35 -0
- data/lib/ensuppar/version.rb +1 -1
- data/lib/ensuppar.rb +39 -2
- metadata +53 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b07e512171277fff8347b3eeb9f108d23f71dcb8b9ce1552648234b0abbec391
|
4
|
+
data.tar.gz: 01d611a95d88ba81698f48ca41ef449105c19b7b095039defd9f942bb9c253eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9bed5ae50dea3f07b02648a536b25e25bc8c2248770ae195ef82ad84234f8175bf6dc86536ff35fea21b8c0db75608d6b48a9f980a196932d5e113ff8faaee5
|
7
|
+
data.tar.gz: 21c1700cba1f813aa3afb3160a43f1b080d24c7a5b88714bce41342cf0c5e21bfdc8836663644896c878b4a1d5b17c41b6f7cbd0bd0a7d67b4549360d8b45b7f
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [1.0.0] - 2022-11-26
|
4
|
+
|
5
|
+
- Added database
|
6
|
+
- Added logic for fetching result from server
|
7
|
+
- Added parcing logic
|
8
|
+
- Buildings can have many energy schedules
|
9
|
+
- Added filtering by street and number
|
10
|
+
|
3
11
|
## [0.1.0] - 2022-11-26
|
4
12
|
|
5
13
|
- Initial release
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
ensuppar (1.0.0)
|
5
|
+
httparty
|
6
|
+
nokogiri
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
coderay (1.1.3)
|
12
|
+
diff-lcs (1.5.0)
|
13
|
+
httparty (0.20.0)
|
14
|
+
mime-types (~> 3.0)
|
15
|
+
multi_xml (>= 0.5.2)
|
16
|
+
method_source (1.0.0)
|
17
|
+
mime-types (3.4.1)
|
18
|
+
mime-types-data (~> 3.2015)
|
19
|
+
mime-types-data (3.2022.0105)
|
20
|
+
multi_xml (0.6.0)
|
21
|
+
nokogiri (1.13.9-x86_64-linux)
|
22
|
+
racc (~> 1.4)
|
23
|
+
pry (0.13.1)
|
24
|
+
coderay (~> 1.1)
|
25
|
+
method_source (~> 1.0)
|
26
|
+
racc (1.6.0)
|
27
|
+
rake (13.0.6)
|
28
|
+
rspec (3.11.0)
|
29
|
+
rspec-core (~> 3.11.0)
|
30
|
+
rspec-expectations (~> 3.11.0)
|
31
|
+
rspec-mocks (~> 3.11.0)
|
32
|
+
rspec-core (3.11.0)
|
33
|
+
rspec-support (~> 3.11.0)
|
34
|
+
rspec-expectations (3.11.0)
|
35
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
36
|
+
rspec-support (~> 3.11.0)
|
37
|
+
rspec-mocks (3.11.1)
|
38
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
39
|
+
rspec-support (~> 3.11.0)
|
40
|
+
rspec-support (3.11.0)
|
41
|
+
|
42
|
+
PLATFORMS
|
43
|
+
x86_64-linux
|
44
|
+
|
45
|
+
DEPENDENCIES
|
46
|
+
ensuppar!
|
47
|
+
pry (~> 0.13.1)
|
48
|
+
rake (~> 13.0)
|
49
|
+
rspec (~> 3.0)
|
50
|
+
|
51
|
+
BUNDLED WITH
|
52
|
+
2.3.24
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# Ensuppar
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
3
|
+
Ensuppar is a gem that allows fetch data from energy website, parse it and return collection of objects for manipulating of them.
|
6
4
|
|
7
5
|
## Installation
|
8
6
|
|
@@ -16,7 +14,27 @@ If bundler is not being used to manage dependencies, install the gem by executin
|
|
16
14
|
|
17
15
|
## Usage
|
18
16
|
|
19
|
-
|
17
|
+
#### Put this gem at your Gemfile
|
18
|
+
|
19
|
+
```
|
20
|
+
gem 'ensuppar'
|
21
|
+
```
|
22
|
+
|
23
|
+
#### Configure it
|
24
|
+
|
25
|
+
```
|
26
|
+
Ensuppar.confiure do |conf|
|
27
|
+
host = "host/to/server"
|
28
|
+
end
|
29
|
+
```
|
30
|
+
|
31
|
+
#### Get entities
|
32
|
+
|
33
|
+
```
|
34
|
+
Ensuppar.get_schedule(city: "Івано-Франківськ", street: "Незалежності", number: 40)
|
35
|
+
```
|
36
|
+
|
37
|
+
Parameters `street` and `number` is not required.
|
20
38
|
|
21
39
|
## Development
|
22
40
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Ensuppar
|
2
|
+
module Detectors
|
3
|
+
class CityDetector
|
4
|
+
DB_PATH = 'lib/ensuppar/db/cities.json'
|
5
|
+
|
6
|
+
attr_reader :city
|
7
|
+
|
8
|
+
def initialize(city:)
|
9
|
+
@city = city
|
10
|
+
end
|
11
|
+
|
12
|
+
def city_data
|
13
|
+
@city_data ||= (get_db_cities.find do |city_data|
|
14
|
+
city_data['city'] == city
|
15
|
+
end || {}).transform_keys(&:to_sym)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def get_db_cities
|
21
|
+
file = File.open DB_PATH
|
22
|
+
data = JSON.load file
|
23
|
+
|
24
|
+
file.close
|
25
|
+
|
26
|
+
data
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Ensuppar
|
2
|
+
module Entities
|
3
|
+
class Building
|
4
|
+
attr_reader :city, :street, :number, :energy_schedules
|
5
|
+
|
6
|
+
def initialize(city:, street:, number:, energy_schedules: [])
|
7
|
+
@city = city
|
8
|
+
@street = street
|
9
|
+
@number = number
|
10
|
+
@energy_schedules = energy_schedules
|
11
|
+
end
|
12
|
+
|
13
|
+
def info
|
14
|
+
"#{city}, #{street} #{number}: #{energy_schedules.map(&:info).join(", ")}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Ensuppar
|
2
|
+
module Entities
|
3
|
+
class EnergySchedule
|
4
|
+
attr_reader :start_date, :end_date
|
5
|
+
|
6
|
+
def initialize(start_date: nil, end_date: nil)
|
7
|
+
@start_date = start_date
|
8
|
+
@end_date = end_date
|
9
|
+
end
|
10
|
+
|
11
|
+
def info
|
12
|
+
" [ #{start_date} - #{end_date} ] "
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Ensuppar
|
2
|
+
module Services
|
3
|
+
module EnergySuplyService
|
4
|
+
class Client
|
5
|
+
def self.city_filter_report(city_id:, rem_id:)
|
6
|
+
path = "GAVTurnOff/CityFilterPReport"
|
7
|
+
options = "cityList=#{city_id}&remList=#{rem_id}&dBegin=&dEnd=&allRem=false"
|
8
|
+
response = HTTParty.get("https://#{Ensuppar.configuration.host}/#{path}?#{options}")
|
9
|
+
|
10
|
+
Ensuppar::Services::EnergySuplyService::Parser.new(body: response.body).entities
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Ensuppar
|
2
|
+
module Services
|
3
|
+
module EnergySuplyService
|
4
|
+
class Parser
|
5
|
+
attr_reader :body
|
6
|
+
|
7
|
+
def initialize(body: "")
|
8
|
+
@body = body
|
9
|
+
end
|
10
|
+
|
11
|
+
def parsed_body
|
12
|
+
@parsed_body ||= Nokogiri::HTML.parse(body) || ""
|
13
|
+
end
|
14
|
+
|
15
|
+
def entities
|
16
|
+
@entities ||= begin
|
17
|
+
parsed_body.xpath("//tbody").first.children.select do
|
18
|
+
|c| c.name == "tr"
|
19
|
+
end.map{|c| c.children}.map do |td|
|
20
|
+
data = td.select{|c| c.name == "td"}.map do |tdd|
|
21
|
+
tdd.children.first.text
|
22
|
+
end
|
23
|
+
|
24
|
+
energy_schedule = Ensuppar::Entities::EnergySchedule.new(start_date: data[4], end_date: data[5])
|
25
|
+
|
26
|
+
Ensuppar::Entities::Building.new(
|
27
|
+
city: data[1], street: data[2], number: data[3], energy_schedules: [energy_schedule]
|
28
|
+
)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/ensuppar/version.rb
CHANGED
data/lib/ensuppar.rb
CHANGED
@@ -1,8 +1,45 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'json'
|
4
|
+
require 'httparty'
|
5
|
+
require 'nokogiri'
|
6
|
+
|
3
7
|
require_relative "ensuppar/version"
|
8
|
+
require_relative "ensuppar/configuration"
|
9
|
+
require_relative "ensuppar/errors/configuration"
|
10
|
+
require_relative "ensuppar/detectors/city_detector"
|
11
|
+
require_relative "ensuppar/entities/energy_schedule"
|
12
|
+
require_relative "ensuppar/entities/building"
|
13
|
+
require_relative "ensuppar/services/energy_suply_service/parser"
|
14
|
+
require_relative "ensuppar/services/energy_suply_service/client"
|
4
15
|
|
5
16
|
module Ensuppar
|
6
|
-
class
|
7
|
-
|
17
|
+
class << self
|
18
|
+
def get_schedule(city:, street: "", number: nil)
|
19
|
+
city_data = Detectors::CityDetector.new(city: city).city_data
|
20
|
+
|
21
|
+
entities = Services::EnergySuplyService::Client.city_filter_report(
|
22
|
+
city_id: city_data[:city_id],
|
23
|
+
rem_id: city_data[:rem_id]
|
24
|
+
)
|
25
|
+
|
26
|
+
entities.select do |b|
|
27
|
+
cond = b.street == street || street == ""
|
28
|
+
|
29
|
+
(number.nil? && cond) || (number.to_s == b.number && cond)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def configuration
|
34
|
+
@configuration ||= Configuration.new
|
35
|
+
end
|
36
|
+
|
37
|
+
def reset
|
38
|
+
@configuration = Configuration.new
|
39
|
+
end
|
40
|
+
|
41
|
+
def configure
|
42
|
+
yield(configuration)
|
43
|
+
end
|
44
|
+
end
|
8
45
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ensuppar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Misha Marusyk
|
@@ -9,7 +9,49 @@ autorequire:
|
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
11
|
date: 2022-11-26 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: httparty
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.13.1
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.13.1
|
13
55
|
description: Ensuppar is a parser for energy supplying website.
|
14
56
|
email:
|
15
57
|
- misha.marusyk@gmail.com
|
@@ -21,10 +63,19 @@ files:
|
|
21
63
|
- CHANGELOG.md
|
22
64
|
- CODE_OF_CONDUCT.md
|
23
65
|
- Gemfile
|
66
|
+
- Gemfile.lock
|
24
67
|
- LICENSE.txt
|
25
68
|
- README.md
|
26
69
|
- Rakefile
|
27
70
|
- lib/ensuppar.rb
|
71
|
+
- lib/ensuppar/configuration.rb
|
72
|
+
- lib/ensuppar/db/cities.json
|
73
|
+
- lib/ensuppar/detectors/city_detector.rb
|
74
|
+
- lib/ensuppar/entities/building.rb
|
75
|
+
- lib/ensuppar/entities/energy_schedule.rb
|
76
|
+
- lib/ensuppar/errors/configuration.rb
|
77
|
+
- lib/ensuppar/services/energy_suply_service/client.rb
|
78
|
+
- lib/ensuppar/services/energy_suply_service/parser.rb
|
28
79
|
- lib/ensuppar/version.rb
|
29
80
|
- sig/ensuppar.rbs
|
30
81
|
homepage: https://github.com/mmarusyk/ensuppar
|