digital_heroes_startkit 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (189) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +37 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/config/digital_heroes_startkit_manifest.js +0 -0
  6. data/app/assets/javascripts/authorization.coffee +79 -0
  7. data/app/assets/javascripts/avatar.coffee +16 -0
  8. data/app/assets/javascripts/datepicker.js +2 -0
  9. data/app/assets/javascripts/digital_heroes_startkit/cable.js +13 -0
  10. data/app/assets/javascripts/digital_heroes_startkit/channels/pills.coffee +23 -0
  11. data/app/assets/javascripts/digital_heroes_startkit/input.coffee +5 -0
  12. data/app/assets/javascripts/digital_heroes_startkit/pills.coffee +2 -0
  13. data/app/assets/javascripts/digital_heroes_startkit/snap.svg-min.js +21 -0
  14. data/app/assets/javascripts/digital_heroes_startkit.js +26 -0
  15. data/app/assets/javascripts/profile.coffee +53 -0
  16. data/app/assets/javascripts/profile_geodata.coffee +68 -0
  17. data/app/assets/javascripts/reg_fields_checkup.coffee +96 -0
  18. data/app/assets/javascripts/registration.coffee +35 -0
  19. data/app/assets/javascripts/resurrection.coffee +20 -0
  20. data/app/channels/application_cable/channel.rb +4 -0
  21. data/app/channels/application_cable/connection.rb +4 -0
  22. data/app/channels/pills_channel.rb +10 -0
  23. data/app/controllers/avatars_controller.rb +11 -0
  24. data/app/controllers/clients_controller.rb +62 -0
  25. data/app/controllers/email_access_cards_controller.rb +28 -0
  26. data/app/controllers/geodata_controller.rb +84 -0
  27. data/app/controllers/nickname_access_cards_controller.rb +30 -0
  28. data/app/controllers/oauth_controller.rb +178 -0
  29. data/app/controllers/openid_controller.rb +124 -0
  30. data/app/controllers/phone_access_cards_controller.rb +28 -0
  31. data/app/controllers/profile_controller.rb +114 -0
  32. data/app/controllers/response_controller.rb +17 -0
  33. data/app/controllers/start_kit_controller.rb +86 -0
  34. data/app/controllers/user_cards_controller.rb +305 -0
  35. data/app/jobs/log_analyzer_job.rb +50 -0
  36. data/app/jobs/password_resurrection_kill_job.rb +9 -0
  37. data/app/mailers/admin_mailer.rb +9 -0
  38. data/app/mailers/client_mailer.rb +3 -0
  39. data/app/mailers/kreator_mailer.rb +9 -0
  40. data/app/mailers/manager_mailer.rb +9 -0
  41. data/app/mailers/prometeus_mailer.rb +16 -0
  42. data/app/mailers/user_cards_mailer.rb +9 -0
  43. data/app/models/admin.rb +3 -0
  44. data/app/models/avatar.rb +23 -0
  45. data/app/models/city.rb +7 -0
  46. data/app/models/client.rb +31 -0
  47. data/app/models/country.rb +7 -0
  48. data/app/models/delayed_job.rb +20 -0
  49. data/app/models/email_access_card.rb +30 -0
  50. data/app/models/kreator.rb +3 -0
  51. data/app/models/log_error.rb +56 -0
  52. data/app/models/log_error_type.rb +3 -0
  53. data/app/models/manager.rb +3 -0
  54. data/app/models/nickname_access_card.rb +18 -0
  55. data/app/models/oauth_access_card.rb +38 -0
  56. data/app/models/phone_access_card.rb +19 -0
  57. data/app/models/prometeus.rb +50 -0
  58. data/app/models/user_card.rb +158 -0
  59. data/app/views/admin_mailer/greetings_email.html.erb +191 -0
  60. data/app/views/client_mailer/greetings_email.html.erb +191 -0
  61. data/app/views/kreator_mailer/greetings_email.html.erb +191 -0
  62. data/app/views/manager_mailer/greetings_email.html.erb +191 -0
  63. data/app/views/oauth/verify.slim +1 -0
  64. data/app/views/profile/_add_avatar.slim +12 -0
  65. data/app/views/profile/_user_profile.slim +95 -0
  66. data/app/views/profile/index.slim +12 -0
  67. data/app/views/user_cards/authorization.slim +72 -0
  68. data/app/views/user_cards/confirmation_but_access_code.slim +7 -0
  69. data/app/views/user_cards/confirmation_complete.slim +7 -0
  70. data/app/views/user_cards/registration.slim +86 -0
  71. data/app/views/user_cards/resurrection.slim +19 -0
  72. data/app/views/user_cards/resurrection_but_access_code.slim +7 -0
  73. data/app/views/user_cards/resurrection_no_access_code.slim +7 -0
  74. data/app/views/user_cards_mailer/email.html.erb +191 -0
  75. data/app/views/user_cards_mailer/resurrection.html.erb +191 -0
  76. data/config/initializers/session_manager.rb +2 -0
  77. data/config/routes.rb +53 -0
  78. data/lib/access_control.rb +3 -0
  79. data/lib/digital_heroes_startkit/engine.rb +25 -0
  80. data/lib/digital_heroes_startkit/version.rb +3 -0
  81. data/lib/digital_heroes_startkit.rb +5 -0
  82. data/lib/generators/digital_heroes_startkit/install_generator.rb +61 -0
  83. data/lib/generators/project/Capfile +36 -0
  84. data/lib/generators/project/Procfile +3 -0
  85. data/lib/generators/project/app/assets/stylesheets/application.scss +16 -0
  86. data/lib/generators/project/app/assets/stylesheets/base/_auth.scss +37 -0
  87. data/lib/generators/project/app/assets/stylesheets/base/_buttons.scss +62 -0
  88. data/lib/generators/project/app/assets/stylesheets/base/_checkbox.scss +71 -0
  89. data/lib/generators/project/app/assets/stylesheets/base/_datepicker.scss +620 -0
  90. data/lib/generators/project/app/assets/stylesheets/base/_form.scss +81 -0
  91. data/lib/generators/project/app/assets/stylesheets/base/_notice.scss +14 -0
  92. data/lib/generators/project/app/assets/stylesheets/base/_pills.scss +39 -0
  93. data/lib/generators/project/app/assets/stylesheets/base/_profile.scss +67 -0
  94. data/lib/generators/project/app/assets/stylesheets/base/_reset.scss +49 -0
  95. data/lib/generators/project/app/assets/stylesheets/base/_social.scss +52 -0
  96. data/lib/generators/project/app/assets/stylesheets/base/_user.scss +0 -0
  97. data/lib/generators/project/app/assets/stylesheets/base/_user_avatar.scss +18 -0
  98. data/lib/generators/project/app/assets/stylesheets/base/styles.scss.txt +35 -0
  99. data/lib/generators/project/app/assets/stylesheets/plugins/sumoselect.scss +296 -0
  100. data/lib/generators/project/app/controllers/application_controller.rb +3 -0
  101. data/lib/generators/project/app/views/layouts/_counts.html.erb +29 -0
  102. data/lib/generators/project/app/views/layouts/_footer.slim +6 -0
  103. data/lib/generators/project/app/views/layouts/_head.slim +7 -0
  104. data/lib/generators/project/app/views/layouts/_header.slim +47 -0
  105. data/lib/generators/project/app/views/layouts/_mobile_menu.slim +11 -0
  106. data/lib/generators/project/app/views/layouts/application.slim +26 -0
  107. data/lib/generators/project/app/views/layouts/mailer.html.erb +13 -0
  108. data/lib/generators/project/app/views/layouts/mailer.text.erb +1 -0
  109. data/lib/generators/project/config/application.access.yml +66 -0
  110. data/lib/generators/project/config/application.db.yml +5 -0
  111. data/lib/generators/project/config/application.google.yml +3 -0
  112. data/lib/generators/project/config/application.oauth.yml +135 -0
  113. data/lib/generators/project/config/application.robokassa.yml +10 -0
  114. data/lib/generators/project/config/application.sendgrid.yml +3 -0
  115. data/lib/generators/project/config/application.telegram.yml +22 -0
  116. data/lib/generators/project/config/application.yml +28 -0
  117. data/lib/generators/project/config/cable.yml +6 -0
  118. data/lib/generators/project/config/capistrano.yml +78 -0
  119. data/lib/generators/project/config/database.yml +52 -0
  120. data/lib/generators/project/config/deploy/application.secrets.yml +4 -0
  121. data/lib/generators/project/config/deploy/domain.crt +92 -0
  122. data/lib/generators/project/config/deploy/domain.key +51 -0
  123. data/lib/generators/project/config/deploy/nginx.conf +50 -0
  124. data/lib/generators/project/config/deploy/production.rb +67 -0
  125. data/lib/generators/project/config/deploy/secrets.yml +32 -0
  126. data/lib/generators/project/config/deploy/secrets.yml.enc +1 -0
  127. data/lib/generators/project/config/deploy/secrets.yml.key +1 -0
  128. data/lib/generators/project/config/deploy/staging.rb +61 -0
  129. data/lib/generators/project/config/deploy/virgin_conf/database.yml +42 -0
  130. data/lib/generators/project/config/deploy/virgin_conf/nginx_site.conf +47 -0
  131. data/lib/generators/project/config/deploy/virgin_conf/nginx_site_ssl.conf +57 -0
  132. data/lib/generators/project/config/deploy/virgin_conf/postfix.cf +685 -0
  133. data/lib/generators/project/config/deploy/virgin_conf/production.rb +67 -0
  134. data/lib/generators/project/config/deploy/virgin_conf/puma.rb +66 -0
  135. data/lib/generators/project/config/deploy/virgin_sh/capistrano.sh +18 -0
  136. data/lib/generators/project/config/deploy/virgin_sh/foreman.sh +19 -0
  137. data/lib/generators/project/config/deploy/virgin_sh/rvm_install.sh +10 -0
  138. data/lib/generators/project/config/deploy.rb +377 -0
  139. data/lib/generators/project/config/environments/development.rb +91 -0
  140. data/lib/generators/project/config/environments/production.rb +142 -0
  141. data/lib/generators/project/config/initializers/session_store.rb +3 -0
  142. data/lib/generators/project/config/locales/ru.yml +444 -0
  143. data/lib/generators/project/db/migrate/10_create_user_cards.rb +19 -0
  144. data/lib/generators/project/db/migrate/12_create_email_access_cards.rb +15 -0
  145. data/lib/generators/project/db/migrate/13_create_nickname_access_cards.rb +15 -0
  146. data/lib/generators/project/db/migrate/14_create_phone_access_cards.rb +16 -0
  147. data/lib/generators/project/db/migrate/15_create_oauth_access_cards.rb +19 -0
  148. data/lib/generators/project/db/migrate/1_create_kreators.rb +9 -0
  149. data/lib/generators/project/db/migrate/21_create_avatars.rb +12 -0
  150. data/lib/generators/project/db/migrate/30_create_countries.rb +12 -0
  151. data/lib/generators/project/db/migrate/32_create_cities.rb +12 -0
  152. data/lib/generators/project/db/migrate/3_create_admins.rb +9 -0
  153. data/lib/generators/project/db/migrate/44_add_sessions_table.rb +12 -0
  154. data/lib/generators/project/db/migrate/4_create_managers.rb +10 -0
  155. data/lib/generators/project/db/migrate/5_create_clients.rb +17 -0
  156. data/lib/generators/project/db/migrate/60_create_log_error_types.rb +9 -0
  157. data/lib/generators/project/db/migrate/61_create_log_errors.rb +12 -0
  158. data/lib/generators/project/db/migrate/78_create_delayed_jobs.rb +22 -0
  159. data/lib/generators/project/db/seeds.rb +27 -0
  160. data/lib/generators/project/geodata/cities.csv +25305 -0
  161. data/lib/generators/project/geodata/countries.csv +250 -0
  162. data/lib/generators/project/public/401.html +75 -0
  163. data/lib/generators/project/public/404.html +67 -0
  164. data/lib/generators/project/public/422.html +67 -0
  165. data/lib/generators/project/public/500.html +66 -0
  166. data/lib/generators/project/public/_receiver.html +10 -0
  167. data/lib/generators/project/public/apple-touch-icon-precomposed.png +0 -0
  168. data/lib/generators/project/public/apple-touch-icon.png +0 -0
  169. data/lib/generators/project/public/favicon.ico +0 -0
  170. data/lib/generators/project/public/robots.txt +1 -0
  171. data/lib/happy_birthday.rb +5 -0
  172. data/lib/link.rb +16 -0
  173. data/lib/oauth/oauth.rb +72 -0
  174. data/lib/oauth/oauth_fb.rb +48 -0
  175. data/lib/oauth/oauth_gg.rb +50 -0
  176. data/lib/oauth/oauth_im.rb +51 -0
  177. data/lib/oauth/oauth_mr.rb +53 -0
  178. data/lib/oauth/oauth_vk.rb +3 -0
  179. data/lib/oauth/oauth_yx.rb +51 -0
  180. data/lib/openid/openid.rb +46 -0
  181. data/lib/openid/openid_st.rb +2 -0
  182. data/lib/phone_cutter.rb +9 -0
  183. data/lib/response.rb +51 -0
  184. data/lib/session_manager.rb +47 -0
  185. data/lib/sms_lib.rb +30 -0
  186. data/lib/social_networks.rb +328 -0
  187. data/lib/tasks/digital_heroes_startkit_tasks.rake +83 -0
  188. data/lib/telegram.rb +33 -0
  189. metadata +497 -0
@@ -0,0 +1,53 @@
1
+ #
2
+ # записано fearlessstar / shadows.of.unevenness@gmail.com уже осень
3
+ #
4
+
5
+ document.addEventListener 'turbolinks:load', ->
6
+ $ ->
7
+ console.log 'профиль на связи'
8
+
9
+ # установка текущей даты
10
+ $('#birthday').datepicker().val($('.datepicker-here').data('date'))
11
+ # $('#birthday').datepicker('defaultViewDate', $('.datepicker-here').data('default-view'))
12
+
13
+ $('#save-profile').click ->
14
+ data = {user: {}, user_card: {}}
15
+ # все филды
16
+ for field in $('.js-profile .fields')
17
+ data['user'][field.id] = field.value
18
+ # все чекбоксы
19
+ for field in $('.js-profile .checkboxes')
20
+ data['user'][field.id] = field.checked
21
+
22
+ # все селект листы
23
+ for field in $('.js-profile .select-lists')
24
+ data['user'][field.id] = field.value
25
+
26
+ # отдельная упаковка для юзеркарт которых может быть несколько
27
+ cards = ['email', 'phone', 'nickname']
28
+ for cardname in cards
29
+ data['user_card'][cardname] = []
30
+ for field in $(".js-profile input[name=field-#{cardname}")
31
+ data['user_card'][cardname].push {id: $(field).data('id'), value: field.value}
32
+ # пароль
33
+ data['user_card']['password'] = $('.js-profile input[name=field-password]').val()
34
+ # JSON обёртка
35
+ data['user_card'] = JSON.stringify data['user_card']
36
+
37
+ $.ajax(
38
+ method: 'POST'
39
+ url: '/profile_update'
40
+ data: data).done (response) ->
41
+ console.log response.state
42
+ console.log response.details
43
+ $('.enter-notice').removeClass 'active'
44
+ switch response.state
45
+ when 'ok'
46
+ $().user_feedback("blue", 'Данные профиля успешно сохранены')
47
+ when 'bad'
48
+ $().reg_errors_default_all()
49
+ for detail in response.details
50
+ $('#' + detail + '-notice .enter-notice').addClass 'active'
51
+ $().user_feedback("red", response.details[0])
52
+ when 'shit'
53
+ $().user_feedback("red", response.details[0])
@@ -0,0 +1,68 @@
1
+ document.addEventListener 'turbolinks:load', ->
2
+ $ ->
3
+ console.log 'геодата профиля на связи'
4
+
5
+ delay = 300
6
+
7
+ geodata_link = (request, callback, type) ->
8
+ $.ajax(
9
+ method: 'POST'
10
+ url: "/geodata_#{type}"
11
+ data:
12
+ name: request.term
13
+ ).done (response) ->
14
+ switch response.state
15
+ when 'ok'
16
+ callback response.haystack
17
+ when 'shit'
18
+ console.log response.details[0]
19
+ $().user_feedback("red", response.details[0])
20
+
21
+ country_select = (event, ui) ->
22
+ $.ajax(
23
+ method: 'POST'
24
+ url: "/geodata_set_country"
25
+ data:
26
+ country:
27
+ name: ui.item.value
28
+ ).done (response) ->
29
+ switch response.state
30
+ when 'ok'
31
+ $("#js-autocomplete-cities").val(response.city);
32
+ $().user_feedback("blue", 'геоданные учтены')
33
+ when 'shit'
34
+ console.log response.details[0]
35
+ $().user_feedback("red", response.details[0])
36
+ when 'bad'
37
+ console.log response.details[0]
38
+ $().user_feedback("red", response.details[0])
39
+
40
+ city_select = (event, ui) ->
41
+ $.ajax(
42
+ method: 'POST'
43
+ url: "/geodata_set_city"
44
+ data:
45
+ city:
46
+ name: ui.item.value
47
+ ).done (response) ->
48
+ switch response.state
49
+ when 'ok'
50
+ console.log 'геоданные учтены'
51
+ # корректировка страны
52
+ $("#js-autocomplete-countries").val(response.country);
53
+ $().user_feedback("blue", 'геоданные учтены')
54
+ when 'shit'
55
+ console.log response.details[0]
56
+ $().user_feedback("red", response.details[0])
57
+
58
+ $("#js-autocomplete-countries").autocomplete {source: (request, callback) ->
59
+ geodata_link(request, callback, 'countries')
60
+ delay: delay
61
+ select: country_select
62
+ }
63
+
64
+ $("#js-autocomplete-cities").autocomplete {source: (request, callback) ->
65
+ geodata_link(request, callback, 'cities')
66
+ delay: delay
67
+ select: city_select
68
+ }
@@ -0,0 +1,96 @@
1
+ #
2
+ # записано fearlessstar / shadows.of.unevenness@gmail.com уже осень
3
+ #
4
+
5
+ document.addEventListener 'turbolinks:load', ->
6
+ $ ->
7
+ console.log 'проверки полей на связи'
8
+
9
+ $.fn.reg_fields = [
10
+ 'nickname',
11
+ 'email',
12
+ 'phone'
13
+ ]
14
+
15
+ $.fn.reg_errors_default_all = ->
16
+ for name in $().reg_fields
17
+ $().reg_errors_default name
18
+ $().password_default()
19
+
20
+ $.fn.password_default = ->
21
+ $('#password-notice .error-notice').removeClass 'active'
22
+ $('#password-notice .warning-notice').removeClass 'active'
23
+ $('#password-notice .enter-notice').removeClass 'active'
24
+ $('#password-notice input').removeClass 'success'
25
+
26
+ $.fn.reg_errors_default = (name) ->
27
+ $("##{name}-notice .error-notice").removeClass 'active'
28
+ $("##{name}-notice .warning-notice").removeClass 'active'
29
+ $("##{name}-notice .enter-notice").removeClass 'active'
30
+ $("##{name}-notice input").removeClass 'success'
31
+
32
+ delay = 1100
33
+ password_delay = 1200
34
+ to = undefined
35
+
36
+ password_check = ->
37
+ $().password_default()
38
+
39
+ target = $('input[name="field-password"]')
40
+
41
+ $.ajax(
42
+ method: 'POST'
43
+ url: '/check_password_line'
44
+ data:
45
+ value: target.val()
46
+ ).done (response) ->
47
+ console.log response.state
48
+ switch response.state
49
+ when 'ok'
50
+ $().password_default()
51
+ $('#password-notice input').addClass 'success'
52
+ when 'bad'
53
+ $('#password-notice .warning-notice').addClass 'active'
54
+ when 'shit'
55
+ $('#password-notice .warning-notice').addClass 'active'
56
+ $().user_feedback("red", response.details[0])
57
+
58
+ field_check = (name) ->
59
+ $().reg_errors_default name
60
+ target = $("input[name='field-#{name}']")
61
+ console.log name
62
+ console.log target.val()
63
+ $.ajax(
64
+ method: 'POST'
65
+ url: '/check_login_by'
66
+ data:
67
+ by: name
68
+ value: target.val()).done (response) ->
69
+ console.log response
70
+ switch response.state
71
+ when 'login'
72
+ $("##{response.fieldname}-notice .warning-notice").addClass 'active'
73
+ when 'reg'
74
+ $().reg_errors_default response.fieldname
75
+ $("##{response.fieldname}-notice input").addClass 'success'
76
+ when 'bad_login'
77
+ $("##{response.fieldname}-notice .error-notice").addClass 'active'
78
+
79
+ # камон
80
+ for name in $().reg_fields
81
+ $().reg_errors_default name
82
+ $("input[name='field-#{name}']").unbind 'keyup'
83
+
84
+ $("input[name='field-#{name}']").keyup ->
85
+ name = $(this).data('name')
86
+ unless typeof to == 'undefined'
87
+ clearTimeout(to)
88
+ to = setTimeout (->
89
+ field_check name
90
+ ), delay
91
+
92
+ $('input[name="field-password"]').keyup ->
93
+ unless typeof password_check.to == 'undefined'
94
+ clearTimeout(password_check.to)
95
+
96
+ password_check.to = setTimeout(password_check, password_delay)
@@ -0,0 +1,35 @@
1
+ #
2
+ # записано fearlessstar / shadows.of.unevenness@gmail.com холодным летом 2017, за бортом + 13
3
+ #
4
+
5
+ document.addEventListener 'turbolinks:load', ->
6
+ $ ->
7
+
8
+ console.log 'привет, регистрация на связи'
9
+
10
+ $('#reg-button').unbind 'click'
11
+ $('#reg-button').click ->
12
+ nickname = $('input[name="field-nickname"]').val()
13
+ email = $('input[name="field-email"]').val()
14
+ phone = $('input[name="field-phone"]').val()
15
+ password = $('input[name="field-password"]').val()
16
+
17
+ $.ajax(
18
+ method: 'POST'
19
+ url: '/clients'
20
+ data:
21
+ client:
22
+ email: email
23
+ nickname: nickname
24
+ phone: phone
25
+ password: password).done (response) ->
26
+ console.log "response#{response}"
27
+ switch response.state
28
+ when 'ok'
29
+ window.location.href = response.url
30
+ when 'bad'
31
+ $().reg_errors_default_all
32
+ for detail in response.details
33
+ $('#' + detail + '-notice .enter-notice').addClass 'active'
34
+ when 'shit'
35
+ $().user_feedback("red", response.details[0])
@@ -0,0 +1,20 @@
1
+ document.addEventListener 'turbolinks:load', ->
2
+ $ ->
3
+
4
+ console.log 'привет, это вкусный кофе со страницы восстановления пароля.)'
5
+
6
+ password_default = ->
7
+ $('#password-notice .error-notice').removeClass 'active'
8
+
9
+ $('#sign-resurrection-button').click ->
10
+ password_default()
11
+ $.ajax(
12
+ method: 'POST'
13
+ url: '/resurrection_password_update'
14
+ data:
15
+ password: $('input[name="field-password"]').val()
16
+ resurrection_code: $('input[name="resurrection-code"]').val()
17
+ ).done (response) ->
18
+ switch response.state
19
+ when 'bad_password' then $('#password-notice .error-notice').addClass 'active'
20
+ when 'login' then window.location.href = response.url
@@ -0,0 +1,4 @@
1
+ module ApplicationCable
2
+ class Channel < ActionCable::Channel::Base
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ApplicationCable
2
+ class Connection < ActionCable::Connection::Base
3
+ end
4
+ end
@@ -0,0 +1,10 @@
1
+ # Be sure to restart your server when you modify this file. Action Cable runs in a loop that does not support auto reloading.
2
+ class PillsChannel < ApplicationCable::Channel
3
+ def subscribed
4
+ stream_from "pills"
5
+ end
6
+
7
+ def unsubscribed
8
+ # Any cleanup needed when channel is unsubscribed
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ class AvatarsController < ApplicationController
2
+
3
+ def create
4
+
5
+ Avatar.create params.require(:avatar).permit(:uploaded_file)
6
+
7
+ redirect_to request.referer, change: 'avatar'
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,62 @@
1
+ class ClientsController < ResponseController
2
+
3
+ before_action :set_client, only: [:destroy]
4
+ before_action :set_params, only: [:create]
5
+
6
+ def show
7
+ @client = Client.find_by(id: params[:id])
8
+ end
9
+
10
+ def create
11
+
12
+ begin
13
+
14
+ @response.add_detail 'nickname' unless NicknameAccessCard.new({value: @params[:nickname]}).valid?
15
+ @response.add_detail 'email' unless EmailAccessCard.new({value: @params[:email]}).valid?
16
+ @response.add_detail 'phone' unless PhoneAccessCard.new({value: @params[:phone]}).valid?
17
+ @response.add_detail 'password' if @params[:password].to_s.length < 8
18
+
19
+ unless @response.details?
20
+ client = Client.create
21
+ ActiveRecord::Base.logger.info("client.user_card #{client.user_card}")
22
+ client.update({name: @params[:name]})
23
+
24
+ client.user_card.email_access_cards.create({value: @params[:email]})
25
+ client.user_card.nickname_access_cards.create({value: @params[:nickname]})
26
+ client.user_card.phone_access_cards.create({value: @params[:phone]})
27
+
28
+ client.user_card.update({password: @params[:password]})
29
+ # require 'authorizer'
30
+ # authorizer = Authorizer.new
31
+ # authorizer.authorize! client.user_card, client.user_card.email_access_cards.first
32
+ client.user_card.authorize! client.user_card.email_access_cards.first
33
+ current_user
34
+
35
+ @response.set_url profile_path
36
+
37
+ end
38
+
39
+ rescue Exception => error
40
+ p error
41
+ @response.error_state error.message
42
+ @response.set_url root_path
43
+ end
44
+
45
+ send_response
46
+
47
+ end
48
+
49
+ def destroy
50
+ @client.destroy
51
+ redirect_to request.referer
52
+ end
53
+
54
+ def set_client
55
+ @client = Client.find(params[:id])
56
+ end
57
+
58
+ def set_params
59
+ @params = params.require(:client).permit(:name, :phone, :email, :nickname, :password)
60
+ end
61
+
62
+ end
@@ -0,0 +1,28 @@
1
+ class EmailAccessCardsController < ApplicationController
2
+ layout false, only: [:create, :update]
3
+ before_action :set_access_card, only: [:update, :destroy]
4
+
5
+ def create
6
+ @access_card = EmailAccessCard.new(access_card_params)
7
+ if @access_card.save
8
+ @result = :ok
9
+ else
10
+ @result = :fail
11
+ end
12
+ end
13
+
14
+ def destroy
15
+ @access_card.destroy
16
+ end
17
+
18
+ private
19
+ # Use callbacks to share common setup or constraints between actions.
20
+ def set_access_card
21
+ @access_card = EmailAccessCard.find(params[:id])
22
+ end
23
+
24
+ # Never trust parameters from the scary internet, only allow the white list through.
25
+ def access_card_params
26
+ params.require(:email_access_card).permit(:user_id, :value, :active)
27
+ end
28
+ end
@@ -0,0 +1,84 @@
1
+ class GeodataController < ResponseController
2
+ def countries
3
+ begin
4
+ raw_haystack = Country.where(["match (name) against (? in boolean mode)", "#{params[:name]}*"]).limit(5)
5
+ # raw_haystack = Country.where("name LIKE '#{params[:name]}%'").limit(10)
6
+ haystack = raw_haystack.pluck(:name)
7
+
8
+ @response.set_state 'ok'
9
+ @response.add_var({haystack: haystack})
10
+ rescue Exception => error
11
+ @response.error_state error
12
+ end
13
+
14
+ send_response
15
+
16
+ end
17
+
18
+ def cities
19
+ begin
20
+ country = @current_user.country
21
+ if country
22
+ raw_haystack = country.cities.where(["match (name) against (? in boolean mode)", "#{params[:name]}*"]).limit(5)
23
+ else
24
+ raw_haystack = City.where(["match (name) against (? in boolean mode)", "#{params[:name]}*"]).limit(5)
25
+ end
26
+ haystack = raw_haystack.pluck(:name)
27
+
28
+ @response.set_state 'ok'
29
+ @response.add_var({haystack: haystack})
30
+ rescue Exception => error
31
+ @response.error_state error
32
+ end
33
+
34
+ send_response
35
+ end
36
+
37
+ def set_country
38
+ begin
39
+ country = Country.find_by(name: params.require(:country)[:name])
40
+
41
+ if country
42
+ @current_user.update(country: country)
43
+ # обнуление города если страна его не содержит
44
+ city = nil
45
+ if @current_user.city.present?
46
+ if country.cities.ids.include?(@current_user.city.id)
47
+ city = @current_user.city.name
48
+ else
49
+ @current_user.update(city: city)
50
+ end
51
+ end
52
+ @response.add_var ({city: city})
53
+ @response.set_state 'ok'
54
+ else
55
+ @response.add_detail 'страна не найдена в базе данных'
56
+ end
57
+
58
+ rescue Exception => error
59
+ @response.error_state error
60
+ end
61
+
62
+ send_response
63
+ end
64
+
65
+ def set_city
66
+ begin
67
+ city = City.find_by(name: params.require(:city)[:name])
68
+
69
+ if city
70
+ @current_user.update(city: city)
71
+ @response.set_state 'ok'
72
+ @response.add_var ({country: @current_user.country.name})
73
+ else
74
+ @response.add_detail 'страна не найдена в базе данных'
75
+ end
76
+
77
+ rescue Exception => error
78
+ @response.error_state error
79
+ end
80
+
81
+ send_response
82
+ end
83
+
84
+ end
@@ -0,0 +1,30 @@
1
+ class NicknameAccessCardsController < ApplicationController
2
+ layout false, only: [:create, :update]
3
+ before_action :set_access_card, only: [:update, :destroy]
4
+
5
+ def create
6
+ if edit_checkout @access_card
7
+ @access_card = NicknameAccessCard.new(access_card_params)
8
+ if @access_card.save
9
+ @result = :ok
10
+ else
11
+ @result = :fail
12
+ end
13
+ end
14
+ end
15
+
16
+ def destroy
17
+ @access_card.destroy
18
+ end
19
+
20
+ private
21
+ # Use callbacks to share common setup or constraints between actions.
22
+ def set_access_card
23
+ @access_card = NicknameAccessCard.find(params[:id])
24
+ end
25
+
26
+ # Never trust parameters from the scary internet, only allow the white list through.
27
+ def access_card_params
28
+ params.require(:nickname_access_card).permit(:user_id, :value, :active)
29
+ end
30
+ end