winds-up-client 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: cef1d2da6173822aaf711029a41f25628ff2f54460a755d080a5db3321095609
4
+ data.tar.gz: 0e962660ffc012b7351e8a44b4ec38d0db883f27a407a77ce357838a33ae0267
5
+ SHA512:
6
+ metadata.gz: 4154869c1906230e6d66058efe0502f938ee51314b13eb204fefd48fd9902ebd63f2044b20719dd70964a04b19d703bb6be1a67c99a624310ebd83ed00256209
7
+ data.tar.gz: 6b813cb69e32c9cc7d03df04c19e45a53e397feeb6bf022e19ffc0c0f361973ebda2ba6767ab88206884026fac011cdbb1e98cef58d0c7d712d72dcdb4b1b196
@@ -0,0 +1,9 @@
1
+ #!/bin/env ruby
2
+ require 'winds-up-client'
3
+ require 'trollop'
4
+ WindsUpClient.new(Trollop::options do
5
+ opt :short
6
+ opt :lpass
7
+ opt :user, "user", :type => :string
8
+ opt :password, "password", :type => :string
9
+ end).display_favorite_spots
@@ -0,0 +1,99 @@
1
+ #!/bin/env ruby
2
+ require 'mechanize'
3
+ require 'date'
4
+ require 'json'
5
+ require 'terminal-table'
6
+
7
+ class WindsUpClient
8
+
9
+ def lpass what
10
+ `lpass show --#{what} winds-up.com`.chomp
11
+ end
12
+
13
+ def initialize options
14
+ @options = options
15
+ @options.merge!({username: lpass(:username), password: lpass(:password)}) if @options[:lpass]
16
+ end
17
+
18
+ def parse_series spot
19
+ Hash[[:actual, :expected].zip(spot.search("script").map do |script|
20
+ JSON.parse(script.children[0].text.match(/data: \[.*\]/)[0].gsub("data:", "").gsub(",}", "}").gsub(/(\w+):/, '"\1":'))
21
+ end)]
22
+ end
23
+
24
+ def parse_spot spot
25
+ {
26
+ title: spot.search("a.title").map { |title| title.children.text },
27
+ wind: spot.search("div.infosvent2").map { |info| info.children[1].text }[0],
28
+ series: parse_series(spot)
29
+ }
30
+ end
31
+
32
+ def favorites_spots
33
+ agent = Mechanize.new
34
+ website = 'https://www.winds-up.com'
35
+ page = agent.get(website)
36
+ form = page.form('formu_login')
37
+ form["login_pseudo"] = @options[:username]
38
+ form["login_passwd"] = @options[:password]
39
+ agent.submit(form)
40
+ page = agent.get(website + '/index.php?p=favoris')
41
+ spots = page.search("div.mt3").reverse.map { |spot| parse_spot spot }
42
+ end
43
+
44
+ def series_handlers
45
+ {
46
+ actual: (-> (x) {"#{"=" * x["low"]}#{"-" * (x["high"] - x["low"])} #{(x["high"] + x["low"])/2}"}),
47
+ expected: (-> (x) {"#{ "*" * x["y"]} #{x["y"]} #{x["o"]}"})
48
+ }
49
+ end
50
+
51
+ def spot_row spot
52
+ title = [spot[:title], spot[:wind]]
53
+ i = 0
54
+ sampling = 2
55
+ rows = []
56
+ rows << title
57
+ series_handlers.each do |kind, handler|
58
+ spot[:series][kind].each do |value|
59
+ rows << [Time.at(value["x"] / 1000).to_datetime.to_s.gsub(/\+.*/, ""), handler.call(value)] if i % sampling == 0
60
+ i += 1
61
+ end
62
+ end
63
+ rows << title
64
+ end
65
+
66
+ def join_rows_ordered a, b
67
+ a.each_with_index.map do |a_row, i|
68
+ i < b.size ? a_row + b[i] : a_row
69
+ end
70
+ end
71
+
72
+ def join_rows a, b
73
+ a.size > b.size ? join_rows_ordered(a, b) : join_rows_ordered(b, a)
74
+ end
75
+
76
+ def display_favorite_spots
77
+ spots = favorites_spots
78
+ previous_rows = []
79
+ spots.each_with_index do |spot, i|
80
+ if @options[:short]
81
+ puts "#{spot[:title]}: #{spot[:wind]}"
82
+ else
83
+ rows = spot_row spot
84
+ if i % 2 == 1
85
+ puts Terminal::Table.new :rows => join_rows(previous_rows, rows)
86
+ end
87
+ previous_rows = rows
88
+ end
89
+ end
90
+ puts Terminal::Table.new :rows => previous_rows if spots.size % 2 == 1 and !@options[:short]
91
+ end
92
+ end
93
+
94
+ WindsUp.new(Trollop::options do
95
+ opt :short
96
+ opt :lpass
97
+ opt :user, "user", :type => :string
98
+ opt :password, "password", :type => :string
99
+ end).display_favorite_spots
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: winds-up-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Olivier Abdesselam
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-08-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mechanize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.7'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: date
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: json
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: terminal-table
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.8'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: trollop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.1'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.1'
83
+ description: Allows to access winds-up.com on the CLI
84
+ email:
85
+ executables:
86
+ - winds-up-client
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - bin/winds-up-client
91
+ - lib/winds-up-client.rb
92
+ homepage: http://github.com/yazgoo/winds-up-client
93
+ licenses:
94
+ - MIT
95
+ metadata: {}
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubyforge_project:
112
+ rubygems_version: 2.7.7
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: client for winds-up.com
116
+ test_files: []