maplibre-preview 0.0.2 → 1.1.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.
@@ -1,3 +1,78 @@
1
- require 'maplibre-preview/version'
2
- require 'maplibre-preview/sinatra_ext'
1
+ # frozen_string_literal: true
3
2
 
3
+ require 'sinatra/base'
4
+ require 'slim'
5
+ require_relative 'maplibre-preview/version'
6
+
7
+ module MapLibrePreview
8
+ # Fixed versions for guaranteed compatibility
9
+ MAPLIBRE_VERSION = '5.7.3'
10
+ CONTOUR_VERSION = '0.1.0'
11
+ D3_VERSION = '7'
12
+
13
+ # Sinatra extension for map development tools
14
+ module Extension
15
+ module AddPublic
16
+ def static!(options={})
17
+ super
18
+ path = File.expand_path "#{__dir__}/maplibre-preview/public/#{Sinatra::Base::URI_INSTANCE.unescape(request.path_info)}"
19
+ return unless File.file?(path)
20
+
21
+ env['sinatra.static_file'] = path
22
+ cache_control(*settings.static_cache_control) if settings.static_cache_control?
23
+ send_file path, options.merge(disposition: nil)
24
+ end
25
+ end
26
+
27
+ module FindTemplate
28
+ def find_template(views, name, engine, &block)
29
+ super
30
+ yield File.expand_path "#{__dir__}/maplibre-preview/views/#{name}.#{@preferred_extension}"
31
+ end
32
+ end
33
+
34
+ def self.registered(app)
35
+ Sinatra::Templates.prepend FindTemplate
36
+ Sinatra::Base.prepend AddPublic
37
+ app.set :static, true
38
+ app.set :maplibre_preview_options, {}
39
+
40
+ app.get '/maplibre_preview' do
41
+ slim :maplibre_map, layout: :maplibre_layout
42
+ end
43
+ end
44
+ end
45
+
46
+ # Standalone Sinatra application for map development
47
+ class App < Sinatra::Base
48
+ register Extension
49
+
50
+ configure do
51
+ set :views, File.expand_path('maplibre-preview/views', __dir__)
52
+ set :public_folder, File.expand_path('maplibre-preview/public', __dir__)
53
+ end
54
+
55
+ get '/js/:file' do
56
+ serve_js_file(params[:file])
57
+ end
58
+
59
+ get '/map' do
60
+ slim :maplibre_map, layout: :maplibre_layout, locals: { options: {} }
61
+ end
62
+
63
+ private
64
+
65
+ def serve_js_file(filename)
66
+ gem_js_path = File.expand_path("maplibre-preview/public/js/#{filename}", __dir__)
67
+ if File.exist?(gem_js_path)
68
+ content_type 'application/javascript'
69
+ File.read(gem_js_path)
70
+ else
71
+ status 404
72
+ 'File not found'
73
+ end
74
+ end
75
+ end
76
+ end
77
+
78
+ Sinatra.register MapLibrePreview::Extension
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe MapLibrePreview do
6
+ describe 'App functionality' do
7
+ let(:app) { Class.new(MapLibrePreview::App) { set :environment, :test } }
8
+
9
+ it 'provides complete map development interface' do
10
+ get '/map'
11
+ expect(last_response).to be_ok
12
+
13
+ expect(last_response.body).to include('map-container')
14
+ expect(last_response.body).to include('maplibre-gl')
15
+ expect(last_response.body).to include('maplibre-contour')
16
+ expect(last_response.body).to include('d3')
17
+ end
18
+
19
+ it 'serves all required JavaScript modules' do
20
+ %w[filters.js contour.js].each do |js_file|
21
+ get "/js/#{js_file}"
22
+ expect(last_response).to be_ok
23
+ expect(last_response.content_type).to include('javascript')
24
+ expect(last_response.body).not_to be_empty
25
+ end
26
+ end
27
+ end
28
+
29
+ describe 'External dependencies' do
30
+ let(:app) { Class.new(MapLibrePreview::App) { set :environment, :test } }
31
+
32
+ it 'includes proper external dependencies' do
33
+ get '/map'
34
+ body = last_response.body
35
+
36
+ expect(body).to include('unpkg.com/maplibre-gl')
37
+ expect(body).to include('unpkg.com/maplibre-contour')
38
+ expect(body).to include('d3js.org/d3')
39
+ end
40
+ end
41
+
42
+ describe 'Extension integration' do
43
+ it 'provides extension for Sinatra integration' do
44
+ test_app = Class.new(Sinatra::Base) do
45
+ register MapLibrePreview::Extension
46
+ end
47
+
48
+ expect(test_app.ancestors).to include(MapLibrePreview::Extension)
49
+ expect(test_app.settings.maplibre_preview_options).to be_a(Hash)
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
4
+ require 'maplibre-preview'
5
+ require 'rspec'
6
+ require 'rack/test'
7
+
8
+ RSpec.configure do |config|
9
+ config.include Rack::Test::Methods
10
+ config.before { ENV['RACK_ENV'] = 'test' }
11
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maplibre-preview
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - Artyom B
7
+ - Alexander Ludov
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2025-09-28 00:00:00.000000000 Z
11
+ date: 2025-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -16,111 +16,163 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '2.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '4.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: '0'
29
+ version: '2.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '4.0'
27
33
  - !ruby/object:Gem::Dependency
28
- name: rake
34
+ name: sinatra
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - "~>"
37
+ - - ">="
32
38
  - !ruby/object:Gem::Version
33
- version: '13.0'
34
- type: :development
39
+ version: '2.1'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '5.0'
43
+ type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
38
- - - "~>"
47
+ - - ">="
39
48
  - !ruby/object:Gem::Version
40
- version: '13.0'
49
+ version: '2.1'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '5.0'
41
53
  - !ruby/object:Gem::Dependency
42
- name: rspec
54
+ name: slim
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '4.1'
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '6.0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '4.1'
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '6.0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: bundler
43
75
  requirement: !ruby/object:Gem::Requirement
44
76
  requirements:
45
77
  - - "~>"
46
78
  - !ruby/object:Gem::Version
47
- version: '3.10'
79
+ version: '2.0'
48
80
  type: :development
49
81
  prerelease: false
50
82
  version_requirements: !ruby/object:Gem::Requirement
51
83
  requirements:
52
84
  - - "~>"
53
85
  - !ruby/object:Gem::Version
54
- version: '3.10'
86
+ version: '2.0'
55
87
  - !ruby/object:Gem::Dependency
56
- name: rubocop
88
+ name: rack-test
57
89
  requirement: !ruby/object:Gem::Requirement
58
90
  requirements:
59
91
  - - "~>"
60
92
  - !ruby/object:Gem::Version
61
- version: 1.63.2
93
+ version: '2.0'
62
94
  type: :development
63
95
  prerelease: false
64
96
  version_requirements: !ruby/object:Gem::Requirement
65
97
  requirements:
66
98
  - - "~>"
67
99
  - !ruby/object:Gem::Version
68
- version: 1.63.2
100
+ version: '2.0'
69
101
  - !ruby/object:Gem::Dependency
70
- name: rubocop-rake
102
+ name: rake
71
103
  requirement: !ruby/object:Gem::Requirement
72
104
  requirements:
73
105
  - - "~>"
74
106
  - !ruby/object:Gem::Version
75
- version: 0.6.0
107
+ version: '13.0'
76
108
  type: :development
77
109
  prerelease: false
78
110
  version_requirements: !ruby/object:Gem::Requirement
79
111
  requirements:
80
112
  - - "~>"
81
113
  - !ruby/object:Gem::Version
82
- version: 0.6.0
114
+ version: '13.0'
83
115
  - !ruby/object:Gem::Dependency
84
- name: rubocop-rspec
116
+ name: rspec
85
117
  requirement: !ruby/object:Gem::Requirement
86
118
  requirements:
87
119
  - - "~>"
88
120
  - !ruby/object:Gem::Version
89
- version: 2.14.2
121
+ version: '3.10'
90
122
  type: :development
91
123
  prerelease: false
92
124
  version_requirements: !ruby/object:Gem::Requirement
93
125
  requirements:
94
126
  - - "~>"
95
127
  - !ruby/object:Gem::Version
96
- version: 2.14.2
128
+ version: '3.10'
97
129
  - !ruby/object:Gem::Dependency
98
- name: rspec_junit_formatter
130
+ name: rubocop
99
131
  requirement: !ruby/object:Gem::Requirement
100
132
  requirements:
101
133
  - - "~>"
102
134
  - !ruby/object:Gem::Version
103
- version: 0.5.1
135
+ version: '1.0'
104
136
  type: :development
105
137
  prerelease: false
106
138
  version_requirements: !ruby/object:Gem::Requirement
107
139
  requirements:
108
140
  - - "~>"
109
141
  - !ruby/object:Gem::Version
110
- version: 0.5.1
111
- description:
142
+ version: '1.0'
143
+ description: A Ruby gem providing development tools for MapLibre GL JS styles, including
144
+ advanced layer filtering, terrain visualization, elevation profiles, and performance
145
+ monitoring.
112
146
  email:
147
+ - efraam@gmail.com
113
148
  executables: []
114
149
  extensions: []
115
150
  extra_rdoc_files: []
116
151
  files:
152
+ - ".github/workflows/release.yml"
153
+ - ".rspec"
154
+ - ".rubocop.yml"
155
+ - ".ruby-version"
156
+ - CHANGELOG.md
157
+ - LICENSE
158
+ - README.md
159
+ - Rakefile
160
+ - docs/README_RU.md
117
161
  - lib/maplibre-preview.rb
118
- - lib/maplibre-preview/sinatra_ext.rb
162
+ - lib/maplibre-preview/public/js/contour.js
163
+ - lib/maplibre-preview/public/js/filters.js
119
164
  - lib/maplibre-preview/version.rb
120
- - lib/maplibre-preview/views/maplibre_preview.slim
121
- homepage:
122
- licenses: []
123
- metadata: {}
165
+ - lib/maplibre-preview/views/maplibre_layout.slim
166
+ - lib/maplibre-preview/views/maplibre_map.slim
167
+ - spec/maplibre_preview_spec.rb
168
+ - spec/spec_helper.rb
169
+ homepage: https://github.com/artyomb/maplibre-preview
170
+ licenses:
171
+ - MIT
172
+ metadata:
173
+ homepage_uri: https://github.com/artyomb/maplibre-preview
174
+ source_code_uri: https://github.com/artyomb/maplibre-preview
175
+ changelog_uri: https://github.com/artyomb/maplibre-preview/blob/main/CHANGELOG.md
124
176
  post_install_message:
125
177
  rdoc_options: []
126
178
  require_paths:
@@ -129,7 +181,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
129
181
  requirements:
130
182
  - - ">="
131
183
  - !ruby/object:Gem::Version
132
- version: 3.3.1
184
+ version: 2.7.0
133
185
  required_rubygems_version: !ruby/object:Gem::Requirement
134
186
  requirements:
135
187
  - - ">="
@@ -139,5 +191,6 @@ requirements: []
139
191
  rubygems_version: 3.5.9
140
192
  signing_key:
141
193
  specification_version: 4
142
- summary: Common files
194
+ summary: Development tools for MapLibre GL JS styles with advanced filtering and terrain
195
+ features
143
196
  test_files: []
@@ -1,27 +0,0 @@
1
- if Bundler.definition.specs.any? { |spec| spec.name == 'sinatra' }
2
- require 'sinatra/base'
3
-
4
- module Sinatra
5
- module MapLibrePreview
6
- module FindTemplate
7
- def find_template(views, name, engine, &block)
8
- super
9
- yield File.expand_path "#{__dir__}/views/#{name}.#{@preferred_extension}"
10
- end
11
- end
12
-
13
- module MyHelpers
14
- # include ::HelperFunctions
15
- end
16
-
17
- def self.registered(app)
18
- # app.helpers MyHelpers
19
- Sinatra::Templates.prepend FindTemplate
20
- app.get '/maplibre_preview' do
21
- slim :maplibre_preview
22
- end
23
- end
24
- end
25
- register MapLibrePreview
26
- end
27
- end
@@ -1,3 +0,0 @@
1
- h1 SSBase info
2
- p
3
- | version = #{StackServiceBase::VERSION}