c80_map 0.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.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +3 -0
  4. data/CODE_OF_CONDUCT.md +13 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +51 -0
  8. data/Rakefile +1 -0
  9. data/app/admin/c80_map/settings.rb +32 -0
  10. data/app/assets/javascripts/buttons/admin_buttons/button_back_to_map.js +48 -0
  11. data/app/assets/javascripts/buttons/admin_buttons/button_cancel_create.js +21 -0
  12. data/app/assets/javascripts/buttons/admin_buttons/button_complete_create.js +22 -0
  13. data/app/assets/javascripts/buttons/admin_buttons/button_edit.js +80 -0
  14. data/app/assets/javascripts/buttons/admin_buttons/button_new.js +46 -0
  15. data/app/assets/javascripts/buttons/admin_buttons/button_save.js +83 -0
  16. data/app/assets/javascripts/buttons/zoom_buttons.js +61 -0
  17. data/app/assets/javascripts/c80_map.js.coffee +11 -0
  18. data/app/assets/javascripts/events/app_event.js +15 -0
  19. data/app/assets/javascripts/map_objects/area.js +221 -0
  20. data/app/assets/javascripts/map_objects/building.js +309 -0
  21. data/app/assets/javascripts/map_objects/dot.js +14 -0
  22. data/app/assets/javascripts/src/main.js +992 -0
  23. data/app/assets/javascripts/src/state_controller.js +220 -0
  24. data/app/assets/javascripts/src/utils.js +127 -0
  25. data/app/assets/javascripts/svg_elements/helper.js +36 -0
  26. data/app/assets/javascripts/svg_elements/polygon.js +192 -0
  27. data/app/assets/javascripts/view/save_preloader.js +30 -0
  28. data/app/assets/stylesheets/c80_map.scss +2 -0
  29. data/app/assets/stylesheets/map.scss +1435 -0
  30. data/app/assets/stylesheets/view/save_preloader.scss +206 -0
  31. data/app/controllers/c80_map/application_controller.rb +6 -0
  32. data/app/controllers/c80_map/map_ajax_controller.rb +54 -0
  33. data/app/helpers/c80_map/application_helper.rb +33 -0
  34. data/app/models/c80_map/area.rb +5 -0
  35. data/app/models/c80_map/building.rb +73 -0
  36. data/app/models/c80_map/setting.rb +30 -0
  37. data/app/uploaders/c80_map/map_image_uploader.rb +31 -0
  38. data/app/views/c80_map/_map_row.html.erb +15 -0
  39. data/app/views/c80_map/_map_row_index.html.erb +39 -0
  40. data/app/views/c80_map/shared/_save_preloader.html.erb +3 -0
  41. data/bin/console +14 -0
  42. data/bin/setup +7 -0
  43. data/c80_map.gemspec +25 -0
  44. data/config/routes.rb +3 -0
  45. data/db/migrate/20160617130000_create_c80_map_settings.rb +8 -0
  46. data/db/migrate/20160620040202_create_c80_map_areas.rb +9 -0
  47. data/db/migrate/20160620040204_create_c80_map_buildings.rb +8 -0
  48. data/db/seeds/801_fill_map_settings.rb +6 -0
  49. data/lib/c80_map/engine.rb +23 -0
  50. data/lib/c80_map/version.rb +3 -0
  51. data/lib/c80_map.rb +8 -0
  52. metadata +136 -0
@@ -0,0 +1,206 @@
1
+ div#savePreloader {
2
+ position: absolute;
3
+ z-index: 100000;
4
+ top: 0;
5
+ left: 0;
6
+ bottom: 0;
7
+ right: 0;
8
+ background-color: rgba(0, 0, 0, .01);
9
+ display: none;
10
+ opacity: 0;
11
+ text-align: center; /*!*/
12
+ white-space: nowrap; /*!*/
13
+
14
+ transition: all 0.4s ease-in-out;
15
+ -webkit-transition: all 0.4s ease-in-out;
16
+ -moz-transition: all 0.4s ease-in-out;
17
+ -ms-transition: all 0.4s ease-in-out;
18
+ -o-transition: all 0.4s ease-in-out;
19
+
20
+ &.shown {
21
+ background-color: rgba(0, 0, 0, .4);
22
+ opacity: 1;
23
+ }
24
+
25
+ span.helper {
26
+ display: inline-block; /*!*/
27
+ vertical-align: middle; /*!*/
28
+ height: 100%; /*!*/
29
+ }
30
+
31
+ .uil-ring-css {
32
+ background: none;
33
+ position: relative;
34
+ width: 200px;
35
+ height: 200px;
36
+ vertical-align: middle; /*!*/
37
+ display: inline-block;
38
+ transform:scale(0.5);
39
+
40
+ > div {
41
+ position: absolute;
42
+ display: block;
43
+ width: 160px;
44
+ height: 160px;
45
+ top: 20px;
46
+ left: 20px;
47
+ border-radius: 80px;
48
+ box-shadow: 0 6px 0 0 #59ebff;
49
+ -ms-animation: uil-ring-anim 1s linear infinite;
50
+ -moz-animation: uil-ring-anim 1s linear infinite;
51
+ -webkit-animation: uil-ring-anim 1s linear infinite;
52
+ -o-animation: uil-ring-anim 1s linear infinite;
53
+ animation: uil-ring-anim 1s linear infinite;
54
+ }
55
+
56
+ &:before {
57
+ display:block;
58
+ position: absolute;
59
+ top:0;
60
+ left:0;
61
+ bottom:0;
62
+ right:0;
63
+ content: 'wait';
64
+ font-size:26px;
65
+ color: white;
66
+ margin-top: 80px;
67
+ }
68
+ }
69
+
70
+ }
71
+
72
+ @-webkit-keyframes uil-ring-anim {
73
+ 0% {
74
+ -ms-transform: rotate(0deg);
75
+ -moz-transform: rotate(0deg);
76
+ -webkit-transform: rotate(0deg);
77
+ -o-transform: rotate(0deg);
78
+ transform: rotate(0deg);
79
+ }
80
+ 100% {
81
+ -ms-transform: rotate(360deg);
82
+ -moz-transform: rotate(360deg);
83
+ -webkit-transform: rotate(360deg);
84
+ -o-transform: rotate(360deg);
85
+ transform: rotate(360deg);
86
+ }
87
+ }
88
+
89
+ @-webkit-keyframes uil-ring-anim {
90
+ 0% {
91
+ -ms-transform: rotate(0deg);
92
+ -moz-transform: rotate(0deg);
93
+ -webkit-transform: rotate(0deg);
94
+ -o-transform: rotate(0deg);
95
+ transform: rotate(0deg);
96
+ }
97
+ 100% {
98
+ -ms-transform: rotate(360deg);
99
+ -moz-transform: rotate(360deg);
100
+ -webkit-transform: rotate(360deg);
101
+ -o-transform: rotate(360deg);
102
+ transform: rotate(360deg);
103
+ }
104
+ }
105
+
106
+ @-moz-keyframes uil-ring-anim {
107
+ 0% {
108
+ -ms-transform: rotate(0deg);
109
+ -moz-transform: rotate(0deg);
110
+ -webkit-transform: rotate(0deg);
111
+ -o-transform: rotate(0deg);
112
+ transform: rotate(0deg);
113
+ }
114
+ 100% {
115
+ -ms-transform: rotate(360deg);
116
+ -moz-transform: rotate(360deg);
117
+ -webkit-transform: rotate(360deg);
118
+ -o-transform: rotate(360deg);
119
+ transform: rotate(360deg);
120
+ }
121
+ }
122
+
123
+ @-ms-keyframes uil-ring-anim {
124
+ 0% {
125
+ -ms-transform: rotate(0deg);
126
+ -moz-transform: rotate(0deg);
127
+ -webkit-transform: rotate(0deg);
128
+ -o-transform: rotate(0deg);
129
+ transform: rotate(0deg);
130
+ }
131
+ 100% {
132
+ -ms-transform: rotate(360deg);
133
+ -moz-transform: rotate(360deg);
134
+ -webkit-transform: rotate(360deg);
135
+ -o-transform: rotate(360deg);
136
+ transform: rotate(360deg);
137
+ }
138
+ }
139
+
140
+ @-moz-keyframes uil-ring-anim {
141
+ 0% {
142
+ -ms-transform: rotate(0deg);
143
+ -moz-transform: rotate(0deg);
144
+ -webkit-transform: rotate(0deg);
145
+ -o-transform: rotate(0deg);
146
+ transform: rotate(0deg);
147
+ }
148
+ 100% {
149
+ -ms-transform: rotate(360deg);
150
+ -moz-transform: rotate(360deg);
151
+ -webkit-transform: rotate(360deg);
152
+ -o-transform: rotate(360deg);
153
+ transform: rotate(360deg);
154
+ }
155
+ }
156
+
157
+ @-webkit-keyframes uil-ring-anim {
158
+ 0% {
159
+ -ms-transform: rotate(0deg);
160
+ -moz-transform: rotate(0deg);
161
+ -webkit-transform: rotate(0deg);
162
+ -o-transform: rotate(0deg);
163
+ transform: rotate(0deg);
164
+ }
165
+ 100% {
166
+ -ms-transform: rotate(360deg);
167
+ -moz-transform: rotate(360deg);
168
+ -webkit-transform: rotate(360deg);
169
+ -o-transform: rotate(360deg);
170
+ transform: rotate(360deg);
171
+ }
172
+ }
173
+
174
+ @-o-keyframes uil-ring-anim {
175
+ 0% {
176
+ -ms-transform: rotate(0deg);
177
+ -moz-transform: rotate(0deg);
178
+ -webkit-transform: rotate(0deg);
179
+ -o-transform: rotate(0deg);
180
+ transform: rotate(0deg);
181
+ }
182
+ 100% {
183
+ -ms-transform: rotate(360deg);
184
+ -moz-transform: rotate(360deg);
185
+ -webkit-transform: rotate(360deg);
186
+ -o-transform: rotate(360deg);
187
+ transform: rotate(360deg);
188
+ }
189
+ }
190
+
191
+ @keyframes uil-ring-anim {
192
+ 0% {
193
+ -ms-transform: rotate(0deg);
194
+ -moz-transform: rotate(0deg);
195
+ -webkit-transform: rotate(0deg);
196
+ -o-transform: rotate(0deg);
197
+ transform: rotate(0deg);
198
+ }
199
+ 100% {
200
+ -ms-transform: rotate(360deg);
201
+ -moz-transform: rotate(360deg);
202
+ -webkit-transform: rotate(360deg);
203
+ -o-transform: rotate(360deg);
204
+ transform: rotate(360deg);
205
+ }
206
+ }
@@ -0,0 +1,6 @@
1
+ module C80Map
2
+ class ApplicationController < ActionController::Base
3
+ protect_from_forgery with: :exception
4
+ before_filter :authenticate_admin_user!
5
+ end
6
+ end
@@ -0,0 +1,54 @@
1
+ module C80Map
2
+ class MapAjaxController < ApplicationController
3
+
4
+ def save_map_data
5
+ puts "<MapAjaxController.save_map_data> #{params[:buildings]}"
6
+
7
+ #{ "buildings"=>{"0"=>{"coords"=>["2496.5894495412845",...]}} }
8
+ #{ "areas"=>{"0"=>{"coords"=>["2496.5894495412845",...]}} }
9
+
10
+ result = {
11
+ areas: [],
12
+ buildings: [],
13
+ updated_locations_json: nil
14
+ }
15
+
16
+ if params[:buildings].present?
17
+ params[:buildings].each_key do |key|
18
+ new_building_options = params[:buildings][key]
19
+ puts "<MapAjaxController.save_map_data> new_building_options = #{new_building_options}"
20
+ puts "<MapAjaxController.save_map_data> new_building_options[:coords] = #{new_building_options[:coords]}"
21
+ b = Building.new({ coords: new_building_options[:coords].join(',') })
22
+
23
+ # в случае успеха - вернём id созданного здания,
24
+ # тогда js обновит id и перенесёт здание из массива "новые здания" (drawn_buildings).
25
+ # в случае неудачи - вернём описание ошибки
26
+ # завершаем всё обновленным locations.json, который Map возьмёт
27
+ # и положит в data
28
+
29
+ if b.valid?
30
+ b.save
31
+ result[:buildings] << { id: b.id }
32
+ else
33
+ result[:buildings] << { id: new_building_options.id, status: 'error' }
34
+ end
35
+ end
36
+ end
37
+
38
+ # if params[:areas].present?
39
+ # params[:areas].each_with_key do |new_area_options,key|
40
+ #
41
+ # if b.present?
42
+ #
43
+ # end
44
+ # end
45
+ # end
46
+ puts "<MapAjaxController.save_map_data> result = #{result.to_json}"
47
+
48
+ respond_to do |format|
49
+ format.json { render json: params }
50
+ end
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,33 @@
1
+ module C80Map
2
+ module ApplicationHelper
3
+
4
+ def render_map(page_tag)
5
+ if page_tag == 'index'
6
+
7
+
8
+ # map_settings = C80Map::Setting.first
9
+
10
+
11
+ # т.к. в json попадают строки вида
12
+ # /home/scout/git/bitbucket/vorsa/public/uploads/map/map.jpg
13
+ # извлечём эту строку, затем во вью обработаем её image_path
14
+
15
+ p = Rails.root.join("public", "locations.json")
16
+ locs = File.read(p)
17
+ locs_hash = JSON.parse(locs)
18
+ locs_hash["img"] = image_path(locs_hash["img"])
19
+
20
+ render :partial => 'c80_map/map_row_index',
21
+ :locals => {
22
+ locs_hash: locs_hash,
23
+ mapwidth:locs_hash["mapwidth"],
24
+ mapheight:locs_hash["mapheight"]
25
+ }
26
+
27
+ else
28
+ render :partial => 'c80_map/map_row'
29
+ end
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,5 @@
1
+ module C80Map
2
+ class Area < ActiveRecord::Base
3
+ belongs_to :building
4
+ end
5
+ end
@@ -0,0 +1,73 @@
1
+ module C80Map
2
+ class Building < ActiveRecord::Base
3
+ has_many :areas, :class_name => 'C80Map::Area', :dependent => :destroy
4
+ validates :coords, uniqueness: true
5
+ after_save :update_json
6
+
7
+ private
8
+
9
+ def update_json
10
+
11
+ locations_path = Rails.root.join("public", "locations.json")
12
+ locs = File.read(locations_path)
13
+ puts "<update_json> #{ Rails.root.join("public", "locations.json") }"
14
+
15
+ locs_hash = JSON.parse(locs)
16
+
17
+
18
+ # и заполняем объектами из собранного массива
19
+
20
+ # обходим все Building и составляем массив вида
21
+ # [{id, object_type=object_type, coords, building_hash, img, childs:[<areas>]},..]
22
+ buildings_to_location_json = []
23
+ Building.all.each do |b|
24
+ ob = {
25
+ id: b.id,
26
+ object_type: 'building',
27
+ coords: b.coords,
28
+ building_hash: {
29
+ id: 2,
30
+ title: "Здание 2",
31
+ props: {
32
+ square: "1234 кв.м.",
33
+ square_free: "124 кв. м",
34
+ floor_height: "6 кв. м",
35
+ column_step: "2 м",
36
+ gate_type: "рaспашные",
37
+ communications: "Интернет, электричество, водоснабжение",
38
+ price: "от 155 руб/кв.м в месяц"
39
+ }
40
+ },
41
+ img: {
42
+ bg: {
43
+ src: "/assets/sample_bg-e36f4b42acde72d4ff05376498e5834423165d43e73650dd24a342ecb20779b9.gif"
44
+ },
45
+ overlay: {
46
+ src: "/assets/sample_overlay-f99419a8904207a6ac74288bccac16c76b388b7162bf2629a2a8dd825746f49b.gif"
47
+ }
48
+ },
49
+ childs: []
50
+ }
51
+ buildings_to_location_json << ob
52
+ end
53
+
54
+ # после чего удаляем из locs_hash все object_type=building
55
+ # locs_hash["childs"].each do |child|
56
+ # if child["object_type"] == 'building'
57
+ # delete locs_hash["childs"]
58
+ # end
59
+ # end
60
+
61
+ # просто заменяем всех детей
62
+ locs_hash["childs"] = buildings_to_location_json
63
+
64
+ puts "<Building.update_json> #{locs_hash}"
65
+
66
+ # File.open(locations_path, 'w') do |f|
67
+ # f.write(locs_hash.to_json)
68
+ # end
69
+
70
+ end
71
+
72
+ end
73
+ end
@@ -0,0 +1,30 @@
1
+ module C80Map
2
+ class Setting < ActiveRecord::Base
3
+ mount_uploader :map_image, C80Map::MapImageUploader
4
+ after_save :update_json
5
+
6
+ def map_img
7
+ MiniMagick::Image.open(map_image.path)
8
+ end
9
+
10
+ protected
11
+
12
+ def update_json
13
+
14
+ locations_path = Rails.root.join("public", "locations.json")
15
+ locs = File.read(locations_path)
16
+ puts "<update_json> #{ Rails.root.join("public", "locations.json") }"
17
+
18
+ locs_hash = JSON.parse(locs)
19
+ locs_hash["mapwidth"] = map_img["width"].to_s
20
+ locs_hash["mapheight"] = map_img["height"].to_s
21
+ locs_hash["img"] = map_image.url.to_s
22
+
23
+ File.open(locations_path,'w') do |f|
24
+ f.write(locs_hash.to_json)
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,31 @@
1
+ module C80Map
2
+
3
+ class MapImageUploader < CarrierWave::Uploader::Base
4
+
5
+ include CarrierWave::MiniMagick
6
+
7
+ storage :file
8
+
9
+ version :thumb do
10
+ process :resize_to_fit => [500,500]
11
+ end
12
+
13
+ def store_dir
14
+ "uploads/map/"
15
+ end
16
+
17
+ def filename
18
+ if original_filename
19
+ "map_#{secure_token(4)}.#{file.extension}"
20
+ end
21
+ end
22
+
23
+ protected
24
+ def secure_token(length=16)
25
+ var = :"@#{mounted_as}_secure_token"
26
+ model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.hex(length/2))
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -0,0 +1,15 @@
1
+ <div class="container-fluid" id="row_under_header">
2
+ <div class="container" id="under_header">
3
+ <div id="left_side">
4
+ <div class="clearfix"><span id="pbrown">Площади от</span></div>
5
+ <span id="pnavy"><%= @spro.header_price %></span>
6
+ <span id="pdark">рублей/кв.м.</span>
7
+ </div>
8
+ <div id="right_side">
9
+ <p id="ptele"><%= @spro.address_telephone_1 %></p>
10
+ <p id="paddress"><%= @spro.address_locality %><br>
11
+ <%= @spro.address_street %></p>
12
+ </div>
13
+
14
+ </div>
15
+ </div>
@@ -0,0 +1,39 @@
1
+ <script>
2
+ var LOCS_HASH = <%= locs_hash.to_json.html_safe %>;
3
+ var MAP_WIDTH = <%= mapwidth %>;
4
+ var MAP_HEIGHT = <%= mapheight %>;
5
+ </script>
6
+
7
+ <div class="container" id="container_left_side">
8
+ <div id="left_side">
9
+ <div class="clearfix"><span id="pbrown">Площади от</span></div>
10
+ <span id="pnavy"><%= @spro.header_price %></span>
11
+ <span id="pdark">рублей/кв.м.</span>
12
+ </div>
13
+ <div id="right_side">
14
+ <p id="ptele"><%= @spro.address_telephone_1 %></p>
15
+ <p id="paddress"><%= @spro.address_locality %><br>
16
+ <%= @spro.address_street %></p>
17
+ </div>
18
+ </div>
19
+
20
+ <div id="map_wrapper">
21
+ <%= render "c80_map/shared/save_preloader" %>
22
+ <div class="mcontainer">
23
+ <div class="mmap">
24
+ <div class="layers"></div>
25
+ <div id="masked" style="-webkit-clip-path:polygon(0 0, 0 1px)"></div>
26
+ <svg id='svg' xmlns="http://www.w3.org/2000/svg" version="1.2" viewbox='0 0 <%= mapwidth %> <%=mapheight%>' baseProfile="tiny" preserveAspectRatio="xMaxYMax"></svg>
27
+ <div class="overlay_layers"></div>
28
+ <svg id='svg_overlay' xmlns="http://www.w3.org/2000/svg" version="1.2" viewbox='0 0 <%= mapwidth %> <%=mapheight%>' baseProfile="tiny" preserveAspectRatio="xMaxYMax"></svg>
29
+ </div>
30
+ <div class="container" id="ui">
31
+ <%= render "layouts/shared/map_row/building_info" %>
32
+ <%= render "layouts/shared/map_row/area_order_button" %>
33
+ </div>
34
+ <div class="container" id="container_buttons">
35
+ <div class="mzoom_buttons"></div>
36
+ <div class="status_bar"></div>
37
+ </div>
38
+ </div>
39
+ </div>
@@ -0,0 +1,3 @@
1
+ <div id="savePreloader">
2
+ <span class="helper"></span><div class='uil-ring-css'><div></div></div>
3
+ </div>
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "c80_map"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
data/c80_map.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'c80_map/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "c80_map"
8
+ spec.version = C80Map::VERSION
9
+ spec.authors = ["C80609A"]
10
+ spec.email = ["c080609a@gmail.com"]
11
+
12
+ spec.summary = 'Map'
13
+ spec.description = 'Map + map editor'
14
+ spec.homepage = 'http://www.vorsa-park.ru'
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.9"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_dependency 'activesupport', ['>= 3.0.0']
25
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+ C80Map::Engine.routes.draw do
2
+ match '/save_map_data', to: 'map_ajax#save_map_data', via: :post
3
+ end
@@ -0,0 +1,8 @@
1
+ class CreateC80MapSettings < ActiveRecord::Migration
2
+ def change
3
+ create_table :c80_map_settings, :options => 'COLLATE=utf8_unicode_ci' do |t|
4
+ t.string :map_image
5
+ t.timestamps
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ class CreateC80MapAreas < ActiveRecord::Migration
2
+ def change
3
+ create_table :c80_map_areas, :options => 'COLLATE=utf8_unicode_ci' do |t|
4
+ t.string :coords
5
+ t.references :building, index: true
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ class CreateC80MapBuildings < ActiveRecord::Migration
2
+ def change
3
+ create_table :c80_map_buildings, :options => 'COLLATE=utf8_unicode_ci' do |t|
4
+ t.string :coords
5
+ t.timestamps
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ # rake db:seed:801_fill_map_settings
2
+
3
+ C80Map::Setting.delete_all
4
+ C80Map::Setting.create({
5
+ map_image:nil
6
+ })
@@ -0,0 +1,23 @@
1
+ module C80Map
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace C80Map
4
+
5
+ initializer :c80_map do
6
+ if defined?(ActiveAdmin)
7
+ ActiveAdmin.application.load_paths += Dir["#{config.root}/app/models/**/"]
8
+ #ActiveAdmin.application.load_paths += Dir["#{config.root}/app/models/concerns/**/"]
9
+ ActiveAdmin.application.load_paths += Dir["#{config.root}/app/admin/c80_map/**/"]
10
+ # ActiveAdmin.application.load_paths += Dir["#{config.root}/app/jobs/**/"]
11
+ end
12
+ end
13
+
14
+ initializer :append_migrations do |app|
15
+ unless app.root.to_s.match root.to_s
16
+ config.paths["db/migrate"].expanded.each do |expanded_path|
17
+ app.config.paths["db/migrate"] << expanded_path
18
+ end
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ module C80Map
2
+ VERSION = "0.1.0"
3
+ end
data/lib/c80_map.rb ADDED
@@ -0,0 +1,8 @@
1
+ require "c80_map/version"
2
+ require "c80_map/engine"
3
+
4
+ module C80Map
5
+ def self.table_name_prefix
6
+ 'c80_map_'
7
+ end
8
+ end