c80_push 0.1.0.2 → 0.1.0.3

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: b4d991e9e1a4d40ab4a2788f801fc5bda42e61d2
4
- data.tar.gz: 37d7c1a99822e278f8b2b4db16255fdd29a187a8
3
+ metadata.gz: b2bc7b9516f5f7edb8dffce344f1c2465c7dca6d
4
+ data.tar.gz: 5684422a46e41045c3de9a5ba094c8a8b9c2ab3c
5
5
  SHA512:
6
- metadata.gz: c88589031569da99e0158285b792473c6b0c1a580106b6830ad1ffaee861546c219a760983054d5d126da6acf185fb4bdfb8060ad8c2a6eceb171381de09d5f1
7
- data.tar.gz: 9a7b1e94d5105aed752b535222df57341519ae0e7fde738650edda28ccc362185b010eea44616551fbc6b039440b050f3d2bffdb2a59b05609be3d9bd67f595c
6
+ metadata.gz: 5bbd6b017f98a1d3c469f237d1aef3d936749e7a757db8c07f318e9375f6ada96b699a3d441f8566cc2674787bdca379187d9b5e5fe27a119afbe025116a8f9a
7
+ data.tar.gz: 1b5bcdc9f2b603a910bf9209ba040d0853dd91a5c7a9639a994b8f0e2aeae26f124dabd3154b0b0c25e0de116d0fdb43c9158f16234b60e56f21f881e6fd99a8
data/README.md CHANGED
@@ -2,13 +2,14 @@
2
2
 
3
3
  Добавляет функционал дилеров и офисов продаж.
4
4
  Это *ActiveAdmin* plugin.
5
- Использует *Bootstrap* и *Bootstrap Select*.
5
+ Использует *Bootstrap* и *Bootstrap Select*: как во *frontend*,
6
+ так и в *backend*.
6
7
 
7
8
  Содержит модели:
8
9
 
9
- * Дилер
10
- * Офис
11
- * Регион
10
+ * *Регион* (habtm Dealers)
11
+ * *Дилер* (has_many Offices)
12
+ * *Офис* (belongs_to Dealer)
12
13
 
13
14
  Добавляет пункт меню:
14
15
 
@@ -21,7 +22,7 @@
21
22
  Available helpers:
22
23
 
23
24
  * `c80_push_render_page_dealers`: отрисует js-компонент с yandex картой
24
- и фильтруемым списком дилеров слева.
25
+ и фильтруемым, кликабельным списком офисов слева.
25
26
 
26
27
  ## Installation
27
28
 
@@ -36,6 +37,8 @@ And then execute:
36
37
  ```bash
37
38
  $ bundle
38
39
  $ rake db:migrate
40
+ $ rails generate c80_push:install
41
+ $ rake db:seed:c80_push_02_fill_presets
39
42
  ```
40
43
 
41
44
  Add this line to host app's `application_controller.rb`:
@@ -49,7 +52,6 @@ Add these lines to host app's `active_admin.js.coffee`:
49
52
  ```js
50
53
  #= require bootstrap
51
54
  #= require bootstrap-select
52
- #= require c80_yax
53
55
  #= require c80_push_backend
54
56
  ```
55
57
 
@@ -67,10 +69,61 @@ Add these lines to host app's 'application.scss':
67
69
  @import "bootstrap-sprockets";
68
70
  @import "bootstrap";
69
71
  @import "bootstrap-select";
70
- @include "c80_push";
72
+ @import "c80_push";
71
73
  ```
72
74
 
73
- ## Процесс разработки JS функционала
75
+ ## Customization
76
+
77
+ Т.к. исходя из ТЗ было не ясно, есть ли у *Офисов* такие поля, как
78
+ сайт, email и регион, они были добавлены (на всякий случай), и поля
79
+ сделаны необязательными. И их можно "отключить", добавив в host app
80
+ такой файл `app/assets/stylesheets/custom/backend/c80_push/dealers.scss`:
81
+
82
+ ```scss
83
+ /* у Офисов скроем неиспользуемые поля */
84
+ body.admin_dealers {
85
+ &.edit, &.new {
86
+
87
+ li[id*='dealer_offices_attributes_'] {
88
+ &[id*='site_input'] {
89
+ display: none;
90
+ }
91
+ &[id*='email_input'] {
92
+ display: none;
93
+ }
94
+ &[id*='regions_input'] {
95
+ display: none;
96
+ }
97
+ }
98
+ }
99
+ }
100
+ ```
101
+
102
+ А сам файл подключить в `active_admin.scss`:
103
+
104
+ ```scss
105
+ @import "custom/backend/**/*";
106
+ ```
107
+
108
+ # TODO
109
+
110
+ * [X] Добавить валидацию поля `gps` модели *Office*.
111
+
112
+ - [ ] Попробовать подключить к `backend` *client side validation*.
113
+
114
+ * [X] Реализовать функционал цветных маркеров.
115
+
116
+ - [ ] Внутри `bootstrap selectpicker` должны рисоваться цветные прямоугольники:
117
+ [/formtastic/inputs/select_input.rb](https://github.com/justinfrench/formtastic/blob/master/lib/formtastic/inputs/select_input.rb),
118
+ [bootstrap selectpicker: option with data-content](https://stackoverflow.com/questions/26069286/bootstrap-with-select-list-that-contains-only-images)
119
+
120
+ * [ ] Вынести `*.rb` файлы, подлежащие кастомизации в `templates` (предварительно
121
+ определив, что может еще быть кастомизировано), наваять инсталлятор,
122
+ отметить это в `README`.
123
+
124
+ - [X] seeds
125
+
126
+ # Процесс разработки JS функционала
74
127
 
75
128
  Теперь пора заняться js.
76
129
 
@@ -92,13 +145,36 @@ Add these lines to host app's 'application.scss':
92
145
  * [X] При наведении/клике на `.li_office` - должна подсвечиваться соответствующая
93
146
  точка на карте.
94
147
 
95
- * [ ] Вставить из `psd` синий маркер.
148
+ * [X] Реализовать функционал цветных маркеров.
96
149
 
97
150
  * [X] Когда меняется регион:
98
151
 
99
152
  * [X] Должны отобразиться релевантные `.li_office`
100
153
  * [X] Должны отобразиться релевантные точки на карте.
101
154
 
155
+ ## Процесс добавления функционала "Цвет маркеров дилеров"
156
+
157
+ * [X] добавляем таблицу `Presets` с полями `preset_name`
158
+ и `color`, причём `color` я должен забить руками с помощью color picker
159
+ со страницы докуметации Яндекс.карты (`color` используется только в админке
160
+ для иллюстрации "что такое preset").
161
+
162
+ * [X] Таблица `Presets` должна быть habtm-связана с таблицей `:dealers`
163
+
164
+ * [X] Таблицу заполнить содержимым с помощью seed файла, пункт в админке не делать.
165
+
166
+ * [X] при сборке хеша для Яндекс.карт - собираем в него свойства меток
167
+
168
+ - [X] Если цвет не задан - по-умолчанию добавляем голубой
169
+
170
+ * в админке:
171
+
172
+ - [ ] в форме редактирования/создания: у каждого дилера должен быть селект, в котором видно как
173
+ и название `preset-а`, так и его цвет
174
+
175
+ * [X] на индексной странице: должен быть столбец, в котором выводится название
176
+ `preset-a` и его цвет
177
+
102
178
  ## Цитата из ТЗ
103
179
 
104
180
  > Данный раздел представляет собой список компаний, у которых указаны
@@ -114,11 +190,11 @@ Add these lines to host app's 'application.scss':
114
190
  > Выбрав тот или иной регион, пользователь видит слева от
115
191
  > интерактивной карты список компаний, а также адреса их офисов продаж.
116
192
  >
117
- > Офисы продаж ORIMA и копании-дилеры (и адреса их офисов продаж)
193
+ > Офисы продаж компании и копании-дилеры (и адреса их офисов продаж)
118
194
  > разграничены на интерактивной карте маркерами разного цвета.
119
195
  >
120
196
  > В списке слева от интерактивной карты сначала отображаются офисы
121
- > продаж компании ORIMA, а затем список компаний-дилеров
197
+ > продаж компании, а затем список компаний-дилеров
122
198
  > (и адресов их офисов продаж).
123
199
  >
124
200
  > С помощью инструментов панели управления сайтом можно создавать
@@ -8,6 +8,7 @@ ActiveAdmin.register C80Push::Dealer, as: 'Dealer' do
8
8
  :ord,
9
9
  :site,
10
10
  :email,
11
+ :preset_ids => [],
11
12
  :region_ids => [],
12
13
  :offices_attributes => [
13
14
  :id,
@@ -49,8 +50,8 @@ ActiveAdmin.register C80Push::Dealer, as: 'Dealer' do
49
50
  f.inputs 'Свойства' do
50
51
  f.input :title
51
52
  f.input :ord
52
- f.input :site, hint: I18n.t('c80_push.active_admin.hints.site')
53
- f.input :email, hint: I18n.t('c80_push.active_admin.hints.email')
53
+ f.input :site, hint: I18n.t('c80_push.active_admin.hints.dealer.site')
54
+ f.input :email, hint: I18n.t('c80_push.active_admin.hints.dealer.email')
54
55
  f.input :regions,
55
56
  :as => :select,
56
57
  :input_html => {
@@ -63,6 +64,24 @@ ActiveAdmin.register C80Push::Dealer, as: 'Dealer' do
63
64
  :multiple => false
64
65
  },
65
66
  :include_blank => true
67
+ f.input :presets,
68
+ :as => :select,
69
+ :collection => C80Push::Preset.all.map {|p| [p.title, p.id]},
70
+ # :collection => C80Push::Preset.all.map { |p|
71
+ # "<option value='#{p.id}'>#{p.title}</option>".html_safe
72
+ # },
73
+ # :collection => "<option></option>",
74
+ :input_html => {
75
+ :title => '',
76
+ :class => 'selectpicker',
77
+ :data => {
78
+ :size => 10,
79
+ :width => '600px'
80
+ },
81
+ :multiple => false
82
+ },
83
+ :include_blank => true,
84
+ :hint => "<a href='https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/option.presetStorage-docpage/' target='_blank'>Справка по цветам</a>".html_safe
66
85
 
67
86
  f.has_many :offices,
68
87
  :allow_destroy => true,
@@ -71,9 +90,9 @@ ActiveAdmin.register C80Push::Dealer, as: 'Dealer' do
71
90
  office.input :ord
72
91
  office.input :addr
73
92
  office.input :gps
74
- office.input :tel, hint: I18n.t('c80_push.active_admin.hints.tel')
75
- office.input :site, hint: I18n.t('c80_push.active_admin.hints.site')
76
- office.input :email, hint: I18n.t('c80_push.active_admin.hints.email')
93
+ office.input :tel, hint: I18n.t('c80_push.active_admin.hints.office.tel')
94
+ office.input :site, hint: I18n.t('c80_push.active_admin.hints.office.site')
95
+ office.input :email, hint: I18n.t('c80_push.active_admin.hints.office.email')
77
96
  office.input :regions,
78
97
  :as => :select,
79
98
  :input_html => {
@@ -9,11 +9,13 @@ function map_set_objects(region_id) {
9
9
 
10
10
  // соберём коллекцию точек
11
11
  var c = new ymaps.GeoObjectCollection();
12
- var icoords, iprops; // loop vars
12
+ var icoords, iprops, isetts; // loop vars
13
13
  for (var i = 0; i < n; i++) {
14
14
  icoords = arr['coords'][i];
15
15
  iprops = arr['props'][i];
16
- c.add(new ymaps.Placemark(icoords, iprops));
16
+ isetts = arr['setts'][i];
17
+ console.log(isetts);
18
+ c.add(new ymaps.Placemark(icoords, iprops, isetts));
17
19
  }
18
20
 
19
21
  // сначала уберём все точки
@@ -0,0 +1,5 @@
1
+ span.dealer_preset_span {
2
+ display: inline-block;
3
+ width: 100px;
4
+ height: 25px;
5
+ }
@@ -2,4 +2,4 @@
2
2
  *= require_self
3
3
  */
4
4
 
5
- //@import "c80_push/backend/**/*";
5
+ @import "c80_push/backend/**/*";
@@ -42,10 +42,11 @@ module C80Push
42
42
  res = "#{dealer.title}"
43
43
  res += "<br><sub>email: #{format_val(dealer.email)}</sub>"
44
44
  res += "<br><sub>site: #{format_val(dealer.site)}</sub>"
45
+ res += "<br><sub>цвет: #{format_dealer_preset_val(dealer)}</sub>"
45
46
  res.html_safe
46
47
  end
47
48
 
48
- private
49
+ # private
49
50
 
50
51
  def format_val(val)
51
52
  res = '-'
@@ -55,6 +56,19 @@ module C80Push
55
56
  "<span class='c80_md_link_color'>#{res}</span>".html_safe
56
57
  end
57
58
 
59
+ def format_dealer_preset_val(dealer)
60
+ res = '-'
61
+ if dealer.presets.count > 0
62
+ p = dealer.presets.first
63
+ res = format_preset_val(p)
64
+ end
65
+ res.html_safe
66
+ end
67
+
68
+ def format_preset_val(preset)
69
+ "<span class='dealer_preset_span' style='background-color:#{preset.color}'></span>"
70
+ end
71
+
58
72
  end
59
73
 
60
74
  end
@@ -32,12 +32,14 @@ module C80Push
32
32
  #
33
33
  # {
34
34
  # all: { - здесь собираем все офисы всех регионов (для лаконичности js)
35
- # coords: [],
36
- # props: []
35
+ # coords: [], - массив двух координат, например: [12.345, 12.345]
36
+ # props: [], - свойства объекта (офиса): тот текст, который выводится в balloon-e
37
+ # setts: [] - свойства метки (цвет)
37
38
  # }
38
39
  # <region_id>: [ - данные офисов разложены по регионам
39
40
  # coords: [],
40
- # props: []
41
+ # props: [],
42
+ # setts: []
41
43
  # ]
42
44
  # }
43
45
  #
@@ -46,14 +48,15 @@ module C80Push
46
48
  res = {
47
49
  all: {
48
50
  coords: [],
49
- props: []
51
+ props: [],
52
+ setts: []
50
53
  }
51
54
  }
52
55
 
53
56
  rdo.each do |region|
54
57
  region.dealers.each do |dealer|
55
58
  dealer.offices.each do |office|
56
- res[region.id] = { coords:[], props:[] } if res[region.id].nil?
59
+ res[region.id] = { coords:[], props:[], setts:[] } if res[region.id].nil?
57
60
 
58
61
  # координаты точки (это массив двух точек)
59
62
  gps = office.gps_arr
@@ -66,13 +69,20 @@ module C80Push
66
69
  id: office.id
67
70
  }
68
71
 
72
+ # свойства метки - цвет
73
+ setts = {
74
+ preset: "islands##{prepare_dealer_preset(dealer)}"
75
+ }
76
+
69
77
  # фиксируем в хэше региона
70
78
  res[region.id][:coords] << gps
71
79
  res[region.id][:props] << props
80
+ res[region.id][:setts] << setts
72
81
 
73
82
  # фиксируем в all-хэше
74
83
  res[:all][:coords] << gps
75
84
  res[:all][:props] << props
85
+ res[:all][:setts] << setts
76
86
 
77
87
  end
78
88
  # для удобства в js: зафиксируем кол-во офисов региона
@@ -104,5 +114,16 @@ module C80Push
104
114
  res
105
115
  end
106
116
 
117
+ # сформировать название preset-а Дилера
118
+ # для цветного маркера.
119
+ # По умолчанию вернёт `blueDotIcon`
120
+ def prepare_dealer_preset(dealer)
121
+ res = 'blueDotIcon'
122
+ unless dealer.presets.count.zero?
123
+ res = dealer.presets.first.title
124
+ end
125
+ res
126
+ end
127
+
107
128
  end
108
129
  end
@@ -1,6 +1,7 @@
1
1
  module C80Push
2
2
  class Dealer < ActiveRecord::Base
3
3
  has_and_belongs_to_many :regions
4
+ has_and_belongs_to_many :presets
4
5
  has_many :offices, :dependent => :destroy
5
6
  accepts_nested_attributes_for :offices,
6
7
  :reject_if => lambda { |attributes|
@@ -15,7 +15,8 @@ module C80Push
15
15
  :presence => true
16
16
 
17
17
  validates :gps,
18
- :presence => true
18
+ :presence => true,
19
+ :format => { with: /\A\d+\.\d+,\s*\d+\.\d+\z/ }
19
20
 
20
21
  validates :tel,
21
22
  :presence => true
@@ -0,0 +1,5 @@
1
+ module C80Push
2
+ class Preset < ActiveRecord::Base
3
+ has_and_belongs_to_many :dealer
4
+ end
5
+ end
@@ -24,4 +24,4 @@
24
24
  var offices = <%= ymap_hash.to_json.html_safe %>;
25
25
  </script>
26
26
 
27
- <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
27
+ <script src="https://api-maps.yandex.ru/2.1/?load=package.standard&lang=ru-RU" type="text/javascript"></script>
@@ -2,8 +2,9 @@ ru:
2
2
  c80_push:
3
3
  active_admin:
4
4
  hints:
5
- site: 'Если сайтов несколько, перечислите их через запятую'
6
- email: 'Если адресов несколько, перечислите их через запятую'
5
+ dealer:
6
+ site: 'Если сайтов несколько, перечислите их через запятую'
7
+ email: 'Если адресов несколько, перечислите их через запятую'
7
8
  menu:
8
9
  dealer: 'Список дилеров'
9
10
  activerecord:
@@ -19,4 +20,13 @@ ru:
19
20
  site: 'Сайт(ы)'
20
21
  email: 'Email адрес(а)'
21
22
  regions: 'Регион'
22
- offices: 'Офисы'
23
+ presets: 'Цвет маркера на карте'
24
+ offices: 'Офисы'
25
+ errors:
26
+ models:
27
+ c80_push/dealer:
28
+ attributes:
29
+ ord:
30
+ blank: 'Не может быть пустым'
31
+ title:
32
+ blank: 'Не может быть пустым'
@@ -2,9 +2,10 @@ ru:
2
2
  c80_push:
3
3
  active_admin:
4
4
  hints:
5
- tel: 'Если номеров несколько, перечислите их через запятую'
6
- site: 'Если сайтов несколько, перечислите их через запятую'
7
- email: 'Если адресов несколько, перечислите их через запятую'
5
+ office:
6
+ tel: 'Если номеров несколько, перечислите их через запятую'
7
+ site: 'Если сайтов несколько, перечислите их через запятую'
8
+ email: 'Если адресов несколько, перечислите их через запятую'
8
9
  activerecord:
9
10
  models:
10
11
  office:
@@ -20,3 +21,18 @@ ru:
20
21
  site: 'Сайт(ы)'
21
22
  email: 'Email адрес(а)'
22
23
  regions: 'Регион'
24
+ errors:
25
+ models:
26
+ c80_push/office:
27
+ attributes:
28
+ ord:
29
+ blank: 'Не может быть пустым'
30
+ title:
31
+ blank: 'Не может быть пустым'
32
+ addr:
33
+ blank: 'Не может быть пустым'
34
+ gps:
35
+ blank: 'Не может быть пустым'
36
+ invalid: 'Неверный формат. Пример правильного значения: 12.1234,12.1234'
37
+ tel:
38
+ blank: 'Не может быть пустым'
@@ -0,0 +1,9 @@
1
+ class CreateC80PushPresets < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :c80_push_presets do |t|
4
+ t.string :title, null: false, limit: 90
5
+ t.string :color, null: false, limit: 10
6
+ t.timestamps null: false
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ class CreateC80PushJoinTableDealersPresets < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :c80_push_dealers_presets, :id => false do |t|
4
+ t.integer :dealer_id, :null => false
5
+ t.integer :preset_id, :null => false
6
+ end
7
+
8
+ add_index :c80_push_dealers_presets, [:dealer_id, :preset_id], name: 'too_long_push11'
9
+ add_index :c80_push_dealers_presets, [:preset_id, :dealer_id], name: 'too_long_push12'
10
+
11
+ end
12
+ end
@@ -1,3 +1,3 @@
1
1
  module C80Push
2
- VERSION = '0.1.0.2'
2
+ VERSION = '0.1.0.3'
3
3
  end
@@ -0,0 +1,20 @@
1
+ require 'rails/generators/base'
2
+ require 'rails/generators/resource_helpers'
3
+
4
+ module C80Push
5
+ module Generators
6
+ class InstallGenerator < Rails::Generators::Base
7
+ source_root File.expand_path('../templates', __FILE__)
8
+
9
+ def create_root_folder
10
+ # empty_directory 'app/helpers/c80_yax'
11
+ end
12
+
13
+ def copy_template_file
14
+ template 'seeds/c80_push_02_fill_presets.rb',
15
+ File.join('db/seeds', 'c80_push_02_fill_presets.rb')
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ # rake db:seed:c80_push_02_fill_presets
2
+
3
+ C80Push::Preset.delete_all
4
+ C80Push::Preset.create!([
5
+ {title:'blueDotIcon', color:'#1E98FF'},
6
+ {title:'redDotIcon', color:'#ED4543'},
7
+ {title:'darkOrangeDotIcon', color:'#E6761B'},
8
+ {title:'nightDotIcon', color:'#0E4779'},
9
+ {title:'darkBlueDotIcon', color:'#177BC9'},
10
+ {title:'pinkDotIcon', color:'#F371D1'},
11
+ {title:'grayDotIcon', color:'#B3B3B3'},
12
+ {title:'brownDotIcon', color:'#793D0E'},
13
+ {title:'darkGreenDotIcon', color:'#1BAD03'},
14
+ {title:'violetDotIcon', color:'#B51EFF'},
15
+ {title:'blackDotIcon', color:'#595959'},
16
+ {title:'yellowDotIcon', color:'#FFD21E'},
17
+ {title:'greenDotIcon', color:'#56DB40'},
18
+ {title:'orangeDotIcon', color:'#FF931E'},
19
+ {title:'lightBlueDotIcon', color:'#82CDFF'},
20
+ {title:'oliveDotIcon', color:'#97A100'}
21
+ ])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: c80_push
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.2
4
+ version: 0.1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - C80609A
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-28 00:00:00.000000000 Z
11
+ date: 2017-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activeadmin
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description: Добавляет функционал дилеров и офисов продаж
28
42
  email:
29
43
  - c080609a@gmail.com
@@ -49,6 +63,7 @@ files:
49
63
  - app/assets/javascripts/c80_push/lib_backend/init_select_picker.js
50
64
  - app/assets/javascripts/c80_push_backend.js.coffee
51
65
  - app/assets/stylesheets/c80_push.scss
66
+ - app/assets/stylesheets/c80_push/backend/dealer_preset_span.scss
52
67
  - app/assets/stylesheets/c80_push/c80_push_page_dealers/_layout.scss
53
68
  - app/assets/stylesheets/c80_push/c80_push_page_dealers/_style.scss
54
69
  - app/assets/stylesheets/c80_push/c80_push_page_dealers/map_dealers_list.scss
@@ -59,6 +74,7 @@ files:
59
74
  - app/models/c80_push/application_record.rb
60
75
  - app/models/c80_push/dealer.rb
61
76
  - app/models/c80_push/office.rb
77
+ - app/models/c80_push/preset.rb
62
78
  - app/models/c80_push/region.rb
63
79
  - app/views/c80_push/shared/_page_dealers.html.erb
64
80
  - app/views/c80_push/shared/_select_region.html.erb
@@ -72,9 +88,13 @@ files:
72
88
  - db/migrate/20170626125858_create_c80_push_regions.rb
73
89
  - db/migrate/20170626130000_create_c80_push_join_table_dealers_regions.rb
74
90
  - db/migrate/20170626130303_create_c80_push_join_table_offices_regions.rb
91
+ - db/migrate/20170630061313_create_c80_push_presets.rb
92
+ - db/migrate/20170630061515_create_c80_push_join_table_dealers_presets.rb
75
93
  - lib/c80_push.rb
76
94
  - lib/c80_push/engine.rb
77
95
  - lib/c80_push/version.rb
96
+ - lib/generators/c80_push/install_generator.rb
97
+ - lib/generators/c80_push/templates/seeds/c80_push_02_fill_presets.rb
78
98
  - lib/tasks/c80_push_tasks.rake
79
99
  homepage: https://github.com/c80609a/c80_push
80
100
  licenses: