maplibre-preview 1.1.4 → 1.2.6

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: 880bdf4635bf0ab9f3164d52eaa89b30af2158b92d7f18a66ae3826eb6b038d9
4
- data.tar.gz: f83cd22d094dd39d8be2e5eee0e0b8b41e15f7f4456e4d78e21f94016265d957
3
+ metadata.gz: '0698bfdbdb73c31f1003d492304e6fbea7e5b83d732cd75b8e41c89eb0845a4b'
4
+ data.tar.gz: 3ebf48952e34b7280d5c5fc639303010b96c77aacd9c23934fee303af386b2df
5
5
  SHA512:
6
- metadata.gz: 28419d7377ec6f75213f617d5fbe33d35ba85392373e0db9eb8b430bb474d636095b4373b3f51ccd3a99d4057ee5a1b8af098700d3540c55d58a2a12987ab00e
7
- data.tar.gz: 17418dbe1c8e87bab566c75102435e3cde668ec59345a65eda810b55c844b7bb02c0a85d4aabfd8d57e10c23693344e2a7096ce3fea64abd4e40eb73b0b7152e
6
+ metadata.gz: 70523766f55c3d27ea2b2fa2040baf6594538035e1a0a4fceed4aaf981e7536980b1794f20e79209d1f94bd25558a20253e7adc2dedb0c32e2b1cd70112ea000
7
+ data.tar.gz: 0b7aa828bf336435f1f12fc71ca1114afadecca53d7dc811daa03e4eadc3ba2b41d4172324318d8f23cf4be6ea156cbc8fb2fd8724d4332f1e930701710afef4
data/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.2.6] - 2025-10-07
4
+
5
+ ### Added
6
+ - **Version info panel** in bottom-right corner with gem name and version link to GitHub
7
+
8
+ ## [1.2.5] - 2025-10-07
9
+
10
+ ### Added
11
+ - **Development server startup** with `if __FILE__ == $0` pattern for direct gem execution
12
+ - **IntelliJ IDEA integration** support for running gem from source code during development
13
+
14
+ ### Technical Changes
15
+ - **Direct execution support** - gem can now be run directly with `ruby lib/maplibre-preview.rb`
16
+ - **Development workflow improvement** - no need to build gem for testing changes
17
+ - **Port configuration** - development server runs on port 9292 by default
18
+
19
+ ## [1.2.4] - 2025-10-05
20
+
21
+ ### Added
22
+ - **CLI executable** - completely new `bin/maplibre-preview` command-line interface
23
+ - **Server management commands** with `--up`, `--down`, `--port` options
24
+ - **Help system** with `--help` and `--version` commands
25
+ - **Process management** with PID file tracking and server control
26
+ - **Puma dependency** for reliable server operation
27
+ - **Ruby 3.0+ requirement** for modern Ruby features
28
+
29
+ ### New CLI Features
30
+ - **`maplibre-preview --up`** - start server with default or custom port
31
+ - **`maplibre-preview --up --port 9292`** - start server on specific port
32
+ - **`maplibre-preview --down`** - stop running server
33
+ - **`maplibre-preview --help`** - show usage information
34
+ - **`maplibre-preview --version`** - show version information
35
+ - **Unknown command validation** - proper error messages for invalid arguments
36
+
3
37
  ## [1.1.4] - 2025-10-03
4
38
 
5
39
  ### Fixed
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'maplibre-preview'
5
+ require 'optparse'
6
+ require 'json'
7
+ require 'fileutils'
8
+
9
+ class MapLibrePreviewCLI
10
+ PID_FILE = File.join(Dir.home, '.maplibre-preview.pid')
11
+
12
+ def initialize
13
+ @options = { port: 4567, up: false }
14
+ setup_parser
15
+ end
16
+
17
+ def run
18
+ @parser.parse!
19
+
20
+ unless ARGV.empty?
21
+ puts "Error: Unknown argument(s): #{ARGV.join(', ')}"
22
+ puts "Use 'maplibre-preview --help' for available options"
23
+ exit 1
24
+ end
25
+
26
+ return handle_server_stop if @options[:stop]
27
+ return handle_already_running if server_running?
28
+
29
+ if @options[:up]
30
+ start_server
31
+ else
32
+ puts "MapLibre Preview v#{MapLibrePreview::VERSION}"
33
+ puts "Use 'maplibre-preview --up' to start the server"
34
+ puts "Use 'maplibre-preview --help' for more options"
35
+ exit 0
36
+ end
37
+ rescue OptionParser::InvalidOption => e
38
+ puts "Error: #{e.message}"
39
+ puts "Use 'maplibre-preview --help' for available options"
40
+ exit 1
41
+ rescue Interrupt
42
+ puts "\nShutting down server"
43
+ cleanup_server_info
44
+ exit 0
45
+ end
46
+
47
+ private
48
+
49
+ def setup_parser
50
+ @parser = OptionParser.new do |opts|
51
+ opts.banner = "MapLibre Preview v#{MapLibrePreview::VERSION}"
52
+ opts.separator ""
53
+ opts.separator "Usage: maplibre-preview [OPTIONS]"
54
+ opts.separator ""
55
+ opts.separator "Options:"
56
+
57
+ opts.on("--up", "Start the server") { @options[:up] = true }
58
+ opts.on("-p", "--port PORT", Integer, "Port to run on (default: 4567)") { |port| @options[:port] = port }
59
+ opts.on("--down", "Stop the running server") { @options[:stop] = true }
60
+ opts.on("-h", "--help", "Show this help message") { puts opts; exit 0 }
61
+ opts.on("--version", "Show version information") { puts "MapLibre Preview v#{MapLibrePreview::VERSION}"; exit 0 }
62
+ end
63
+ end
64
+
65
+ def handle_server_stop
66
+ return puts("No server is currently running") unless server_running?
67
+
68
+ puts "Stopping server on port #{server_info&.dig('port')}"
69
+ kill_server_process ? puts("Server stopped successfully") : puts("Could not stop server automatically")
70
+ cleanup_server_info
71
+ end
72
+
73
+ def handle_already_running
74
+ puts "Server already running on port #{server_info&.dig('port')}"
75
+ puts "Use 'maplibre-preview --down' to stop it first"
76
+ exit 1
77
+ end
78
+
79
+ def start_server
80
+ puts "MapLibre Preview v#{MapLibrePreview::VERSION}"
81
+ puts "Starting server on port #{@options[:port]}"
82
+ puts "Open: http://localhost:#{@options[:port]}"
83
+ puts "Press Ctrl+C to stop"
84
+ puts ""
85
+
86
+ save_server_info(@options[:port])
87
+ MapLibrePreview::App.run!(port: @options[:port], host: '0.0.0.0')
88
+ end
89
+
90
+ def server_running?
91
+ return false unless File.exist?(PID_FILE)
92
+
93
+ process_exists?(server_info&.dig('pid'))
94
+ rescue
95
+ cleanup_server_info
96
+ false
97
+ end
98
+
99
+ def server_info
100
+ @server_info ||= begin
101
+ return nil unless File.exist?(PID_FILE)
102
+ JSON.parse(File.read(PID_FILE))
103
+ rescue
104
+ cleanup_server_info
105
+ nil
106
+ end
107
+ end
108
+
109
+ def save_server_info(port)
110
+ server_info = { 'port' => port, 'pid' => Process.pid, 'started_at' => Time.now.to_i }
111
+ File.write(PID_FILE, JSON.pretty_generate(server_info))
112
+ end
113
+
114
+ def cleanup_server_info
115
+ File.delete(PID_FILE) if File.exist?(PID_FILE)
116
+ @server_info = nil
117
+ end
118
+
119
+ def kill_server_process
120
+ return false unless server_info&.dig('pid')
121
+
122
+ pid = server_info['pid']
123
+ return false unless process_exists?(pid)
124
+
125
+ Process.kill('TERM', pid)
126
+ sleep(1)
127
+ Process.kill('KILL', pid) if process_exists?(pid)
128
+ true
129
+ rescue => e
130
+ puts "Warning: Could not kill process: #{e.message}"
131
+ false
132
+ end
133
+
134
+ def process_exists?(pid)
135
+ return false unless pid
136
+
137
+ Process.kill(0, pid)
138
+ true
139
+ rescue Errno::ESRCH
140
+ false
141
+ end
142
+ end
143
+
144
+ MapLibrePreviewCLI.new.run
@@ -1,3 +1,3 @@
1
1
  module MapLibrePreview
2
- VERSION = '1.1.4'
2
+ VERSION = '1.2.6'
3
3
  end
@@ -324,6 +324,25 @@ html
324
324
  | .profile-tooltip-line { stroke: #ff0000; stroke-width: 1; stroke-dasharray: 3,3; }
325
325
  | .profile-tooltip-circle { fill: #ff0000; r: 4; }
326
326
  | .profile-tooltip-text { text-anchor: middle; fill: #ff0000; font-size: 14px; }
327
+ | .version-info {
328
+ | position: fixed; bottom: 10px; right: 10px; z-index: 1000;
329
+ | color: #a9b7c6; font-size: 13px; line-height: 1.3;
330
+ | text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8);
331
+ | user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none;
332
+ | }
333
+ | .version-info-title {
334
+ | color: #ffc66d; font-weight: bold;
335
+ | font-size: 12px;
336
+ | }
337
+ | .version-info-version {
338
+ | color: #6897bb; font-family: 'Courier New', monospace; text-decoration: none;
339
+ | transition: color 0.2s ease;
340
+ | font-size: 13px;
341
+ | user-select: auto; -webkit-user-select: auto; -moz-user-select: auto; -ms-user-select: auto;
342
+ | }
343
+ | .version-info-version:hover {
344
+ | color: #7aa8cc; text-decoration: underline;
345
+ | }
327
346
  body
328
347
  .container
329
348
  == yield
@@ -34,6 +34,10 @@ ruby:
34
34
  #map-container
35
35
  #map.map-layer data-style-url="#{style_url}"
36
36
 
37
+ #version-info.version-info
38
+ span.version-info-title MapLibre Preview
39
+ a.version-info-version href="https://github.com/artyomb/maplibre-preview" target="_blank" v#{MapLibrePreview::VERSION}
40
+
37
41
  #performance-panel.performance-overlay
38
42
  button.performance-toggle onclick="togglePerformancePanel()" ×
39
43
  .performance-content
@@ -429,7 +433,7 @@ javascript:
429
433
  document.body.appendChild(elevationTooltip);
430
434
  }
431
435
 
432
- elevationTooltip.textContent = `${elevation.toFixed(1)} m`;
436
+ elevationTooltip.textContent = `${elevation.toFixed(1)}m`;
433
437
  elevationTooltip.style.left = `${e.clientX}px`;
434
438
  elevationTooltip.style.top = `${e.clientY}px`;
435
439
  elevationTooltip.style.display = 'block';
@@ -52,3 +52,9 @@ module MapLibrePreview
52
52
  end
53
53
 
54
54
  Sinatra.register MapLibrePreview::Extension
55
+
56
+ # Development server startup
57
+ if __FILE__ == $0
58
+ puts "Starting MapLibre Preview development server..."
59
+ MapLibrePreview::App.run!(port: 9292, host: '0.0.0.0')
60
+ end
metadata CHANGED
@@ -1,15 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maplibre-preview
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Ludov
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2025-10-03 00:00:00.000000000 Z
11
+ date: 2025-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: puma
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '6.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '7.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '6.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '7.0'
13
33
  - !ruby/object:Gem::Dependency
14
34
  name: rack
15
35
  requirement: !ruby/object:Gem::Requirement
@@ -145,7 +165,8 @@ description: A Ruby gem providing development tools for MapLibre GL JS styles, i
145
165
  monitoring.
146
166
  email:
147
167
  - efraam@gmail.com
148
- executables: []
168
+ executables:
169
+ - maplibre-preview
149
170
  extensions: []
150
171
  extra_rdoc_files: []
151
172
  files:
@@ -157,6 +178,7 @@ files:
157
178
  - LICENSE
158
179
  - README.md
159
180
  - Rakefile
181
+ - bin/maplibre-preview
160
182
  - docs/README_RU.md
161
183
  - lib/maplibre-preview.rb
162
184
  - lib/maplibre-preview/public/js/contour.js
@@ -181,7 +203,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
181
203
  requirements:
182
204
  - - ">="
183
205
  - !ruby/object:Gem::Version
184
- version: 2.7.0
206
+ version: 3.0.0
185
207
  required_rubygems_version: !ruby/object:Gem::Requirement
186
208
  requirements:
187
209
  - - ">="