c80_map 0.1.0 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fd89e83da9ff01fcdbab1ebff4e3e4b66279b254
4
- data.tar.gz: 9130f925242ae7cf4dafc4d0f59e27d639c3ba53
3
+ metadata.gz: 45604d02c597521234df05dd9a4e5b6d6f102bad
4
+ data.tar.gz: 3f5b26bce2ab3ade46ebac5bedd3e7381a0b91e0
5
5
  SHA512:
6
- metadata.gz: 12ce4d2c50b665134b914ba23ca51ff30976b117325a06d1887f24706ce6e0f51ce1d995589484675d08b8cf6267415268fbc7b4c7503f323e35d7ae86c07e86
7
- data.tar.gz: 5ca2a0b5ccc59e366e1628f03ed8ce12b4181024fa2301e614c63289b2fcccab09d8d8e637375e81dc4f7e01713f5716c1fa38cf52e03b9da2426cfa6bd83641
6
+ metadata.gz: 6a05585ebb025b8e3ef2f8ceadd2e5dea6adaedd5ff6cdede468d65a41a333bd254573cfc03eebe875f2a93a4c6e93172146c869201109a284dba1a6835d8ef2
7
+ data.tar.gz: bcaecce4a5783e6eec963d47e8e3cef0ddf577b3f42d542d3028c0dd86f40f65b403375783c76ff282062a215e44040e881ed0c6bbad2559edecc627e06a1b57
data/.gitignore CHANGED
@@ -7,4 +7,5 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
- .idea
10
+ .idea
11
+ *.gem
@@ -0,0 +1,37 @@
1
+ ActiveAdmin.register C80Map::Building, as: 'Building' do
2
+
3
+ menu :label => "Buildings", :parent => 'Карта'
4
+
5
+ before_filter :skip_sidebar!, :only => :index
6
+
7
+ permit_params :img_bg, :img_overlay, :coords, :tag
8
+
9
+ config.sort_order = 'id_asc'
10
+
11
+ index do
12
+ column :tag
13
+ # column :coords
14
+ column 'img_bg' do |sp|
15
+ "#{ link_to image_tag(sp.img_bg.thumb.url, :style => 'background-color: #cfcfcf;'), sp.img_bg.url, :target => '_blank' }<br>
16
+ ".html_safe
17
+ end
18
+ # column 'img_overlay' do |sp|
19
+ # "#{ link_to image_tag(sp.img_overlay.thumb.url), sp.img_overlay.url, :target => '_blank' }<br>
20
+ # ".html_safe
21
+ # end
22
+ actions
23
+ end
24
+
25
+ form(:html => {:multipart => true}) do |f|
26
+
27
+ f.inputs 'Properties' do
28
+ f.input :tag
29
+ f.input :coords
30
+ f.input :img_bg, :hint => "#{image_tag(f.object.img_bg.thumb.url)}".html_safe
31
+ f.input :img_overlay, :hint => "#{image_tag(f.object.img_overlay.thumb.url)}".html_safe
32
+ end
33
+
34
+ f.actions
35
+ end
36
+
37
+ end
@@ -56,6 +56,11 @@ function Area() {
56
56
  _this._options["id"] = Math.ceil((Math.random()*100000));
57
57
  }
58
58
 
59
+ // [56dfaw1]
60
+ for (var i=0; i<_this._options.coords.length; i++) {
61
+ _this._options.coords[i] = Number(_this._options.coords[i]);
62
+ }
63
+
59
64
  _this._options.parent_building_hash = parent_building_hash;
60
65
  //clog(_this._options.parent_building_hash);
61
66
 
@@ -201,6 +201,11 @@ function Building() {
201
201
  _options = options;
202
202
  _this.options = options;
203
203
 
204
+ // [56dfaw1]
205
+ for (var i=0; i<_this.options.coords.length; i++) {
206
+ _this.options.coords[i] = Number(_this.options.coords[i]);
207
+ }
208
+
204
209
  // [4ddl5df]: в случае, если это только что отрисованное Здание - генерим временный случайный id
205
210
  if (_this.options["id"] == undefined) {
206
211
  _this.options["id"] = Math.ceil((Math.random()*100000));
@@ -474,8 +474,9 @@ var clog = function () {
474
474
  }
475
475
  }
476
476
 
477
- /* если находимся в режиме просмотра здания - входим в площадь*/
478
- else if (self.mode == 'view_building') {
477
+ /* если находимся в режиме просмотра здания - входим в площадь */
478
+ /* если находится в режиме просмотра площади - переключаемся на другую площадь */
479
+ else if (self.mode == 'view_building' || self.mode == 'view_area') {
479
480
 
480
481
  // добираемся до объекта класса Area, который обслуживает полигон
481
482
  p = $(event.target).parent()[0];
@@ -2,11 +2,18 @@ module C80Map
2
2
  class MapAjaxController < ApplicationController
3
3
 
4
4
  def save_map_data
5
- puts "<MapAjaxController.save_map_data> #{params[:buildings]}"
5
+ Rails.logger.debug "<MapAjaxController.save_map_data> params = #{params}"
6
6
 
7
7
  #{ "buildings"=>{"0"=>{"coords"=>["2496.5894495412845",...]}} }
8
8
  #{ "areas"=>{"0"=>{"coords"=>["2496.5894495412845",...]}} }
9
9
 
10
+ # ЗДАНИЯ
11
+ # в случае успеха - вернём id созданного здания,
12
+ # тогда js обновит id и перенесёт здание из массива "новые здания" (drawn_buildings).
13
+ # в случае неудачи - вернём описание ошибки
14
+ # завершаем всё обновленным locations.json, который Map возьмёт
15
+ # и положит в data
16
+
10
17
  result = {
11
18
  areas: [],
12
19
  buildings: [],
@@ -16,37 +23,42 @@ module C80Map
16
23
  if params[:buildings].present?
17
24
  params[:buildings].each_key do |key|
18
25
  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]}"
26
+ # puts "<MapAjaxController.save_map_data> new_building_options = #{new_building_options}"
27
+ # puts "<MapAjaxController.save_map_data> new_building_options[:coords] = #{new_building_options[:coords]}"
21
28
  b = Building.new({ coords: new_building_options[:coords].join(',') })
22
29
 
23
- # в случае успеха - вернём id созданного здания,
24
- # тогда js обновит id и перенесёт здание из массива "новые здания" (drawn_buildings).
25
- # в случае неудачи - вернём описание ошибки
26
- # завершаем всё обновленным locations.json, который Map возьмёт
27
- # и положит в data
28
-
29
30
  if b.valid?
30
31
  b.save
31
- result[:buildings] << { id: b.id }
32
+ result[:buildings] << { id: b.id, old_temp_id: new_building_options["id"] }
32
33
  else
33
34
  result[:buildings] << { id: new_building_options.id, status: 'error' }
34
35
  end
35
36
  end
36
37
  end
37
38
 
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
39
+ if params[:areas].present?
40
+ params[:areas].each_key do |key|
41
+ new_area_options = params[:areas][key]
42
+ # Rails.logger.debug "<MapAjaxController.save_map_data> new_area_options = #{new_area_options}"
43
+ # puts "<MapAjaxController.save_map_data> new_area_options[:coords] = #{new_area_options[:coords]}"
44
+ a = Area.new({
45
+ coords: new_area_options[:coords].join(','),
46
+ building_id: new_area_options[:parent_building_id]
47
+ })
48
+
49
+ if a.valid?
50
+ a.save
51
+ result[:areas] << { id: a.id, old_temp_id: new_area_options["id"] }
52
+ else
53
+ result[:areas] << { id: new_area_options.id, status: 'error' }
54
+ end
55
+ end
56
+ end
57
+
46
58
  puts "<MapAjaxController.save_map_data> result = #{result.to_json}"
47
59
 
48
60
  respond_to do |format|
49
- format.json { render json: params }
61
+ format.json { render json: result }
50
62
  end
51
63
  end
52
64
 
@@ -1,5 +1,14 @@
1
1
  module C80Map
2
2
  class Area < ActiveRecord::Base
3
3
  belongs_to :building
4
+ validates :coords, uniqueness: true
5
+ after_save :update_json
6
+
7
+ protected
8
+
9
+ def update_json
10
+ MapJson.update_json
11
+ end
12
+
4
13
  end
5
14
  end
@@ -3,70 +3,13 @@ module C80Map
3
3
  has_many :areas, :class_name => 'C80Map::Area', :dependent => :destroy
4
4
  validates :coords, uniqueness: true
5
5
  after_save :update_json
6
+ mount_uploader :img_bg, C80Map::BuildingImageUploader
7
+ mount_uploader :img_overlay, C80Map::BuildingImageUploader
6
8
 
7
9
  private
8
10
 
9
11
  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
-
12
+ MapJson.update_json
70
13
  end
71
14
 
72
15
  end
@@ -0,0 +1,85 @@
1
+ module C80Map
2
+
3
+ class MapJson < ActiveRecord::Base
4
+
5
+ def self.update_json
6
+ locations_path = Rails.root.join("public", "locations.json")
7
+ locs = File.read(locations_path)
8
+ # puts "<MapJson.update_json> #{ Rails.root.join("public", "locations.json") }"
9
+
10
+ locs_hash = JSON.parse(locs)
11
+
12
+ # обходим все Building и составляем массив вида
13
+ # [{id, object_type=object_type, coords, building_hash, img, childs:[<areas>]},..]
14
+ buildings_to_location_json = []
15
+ Building.all.each do |b|
16
+
17
+ # сначала соберём детей - Area
18
+ childs = []
19
+ b.areas.each do |area|
20
+ Rails.logger.debug "<MapJson.update_json> area #{area}"
21
+
22
+ ab = {
23
+ id: area.id,
24
+ object_type: 'area',
25
+ coords: area.coords.split(','),
26
+ area_hash: {
27
+ id: 2,
28
+ title: "Площадь #{area.id}.#{area.id}",
29
+ is_free: true,
30
+ props: {
31
+ square: "124 кв.м.",
32
+ floor_height: "6 кв. м",
33
+ column_step: "2 м",
34
+ gate_type: "распашные",
35
+ communications: "Интернет, электричество, водоснабжение",
36
+ price: "от 155 руб/кв.м в месяц"
37
+ }
38
+ }
39
+ }
40
+ childs << ab
41
+ end
42
+
43
+ ob = {
44
+ id: b.id,
45
+ object_type: 'building',
46
+ coords: b.coords.split(","),
47
+ building_hash: {
48
+ id: 2,
49
+ title: "Здание 2",
50
+ props: {
51
+ square: "1234 кв.м.",
52
+ square_free: "124 кв. м",
53
+ floor_height: "6 кв. м",
54
+ column_step: "2 м",
55
+ gate_type: "рaспашные",
56
+ communications: "Интернет, электричество, водоснабжение",
57
+ price: "от 155 руб/кв.м в месяц"
58
+ }
59
+ },
60
+ img: {
61
+ bg: {
62
+ src: b.img_bg.url
63
+ },
64
+ overlay: {
65
+ src: b.img_overlay.url
66
+ }
67
+ },
68
+ childs: childs
69
+ }
70
+ buildings_to_location_json << ob
71
+ end
72
+
73
+ # просто заменяем всех детей
74
+ locs_hash["childs"] = buildings_to_location_json
75
+
76
+ Rails.logger.debug "<MapJson.update_json> #{locs_hash}"
77
+
78
+ File.open(locations_path, 'w') do |f|
79
+ f.write(locs_hash.to_json)
80
+ end
81
+ end
82
+
83
+ end
84
+
85
+ end
@@ -0,0 +1,31 @@
1
+ module C80Map
2
+
3
+ class BuildingImageUploader < 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/buildings"
15
+ end
16
+
17
+ def filename
18
+ if original_filename
19
+ "img_#{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
@@ -1,7 +1,10 @@
1
1
  class CreateC80MapBuildings < ActiveRecord::Migration
2
2
  def change
3
3
  create_table :c80_map_buildings, :options => 'COLLATE=utf8_unicode_ci' do |t|
4
- t.string :coords
4
+ t.string :tag
5
+ t.text :coords
6
+ t.string :img_bg
7
+ t.string :img_overlay
5
8
  t.timestamps
6
9
  end
7
10
  end
@@ -1,3 +1,3 @@
1
1
  module C80Map
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.0.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: c80_map
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - C80609A
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-20 00:00:00.000000000 Z
11
+ date: 2016-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,7 @@ files:
66
66
  - LICENSE.txt
67
67
  - README.md
68
68
  - Rakefile
69
+ - app/admin/c80_map/buildings.rb
69
70
  - app/admin/c80_map/settings.rb
70
71
  - app/assets/javascripts/buttons/admin_buttons/button_back_to_map.js
71
72
  - app/assets/javascripts/buttons/admin_buttons/button_cancel_create.js
@@ -93,7 +94,9 @@ files:
93
94
  - app/helpers/c80_map/application_helper.rb
94
95
  - app/models/c80_map/area.rb
95
96
  - app/models/c80_map/building.rb
97
+ - app/models/c80_map/map_json.rb
96
98
  - app/models/c80_map/setting.rb
99
+ - app/uploaders/c80_map/building_image_uploader.rb
97
100
  - app/uploaders/c80_map/map_image_uploader.rb
98
101
  - app/views/c80_map/_map_row.html.erb
99
102
  - app/views/c80_map/_map_row_index.html.erb
@@ -104,7 +107,7 @@ files:
104
107
  - config/routes.rb
105
108
  - db/migrate/20160617130000_create_c80_map_settings.rb
106
109
  - db/migrate/20160620040202_create_c80_map_areas.rb
107
- - db/migrate/20160620040204_create_c80_map_buildings.rb
110
+ - db/migrate/20160620040206_create_c80_map_buildings.rb
108
111
  - db/seeds/801_fill_map_settings.rb
109
112
  - lib/c80_map.rb
110
113
  - lib/c80_map/engine.rb