bulutfon_dashboard 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +66 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.eot +0 -0
  6. data/app/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.svg +164 -0
  7. data/app/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.ttf +0 -0
  8. data/app/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.woff +0 -0
  9. data/app/assets/images/bulutfon_dashboard/screenshot-step-1.png +0 -0
  10. data/app/assets/images/bulutfon_dashboard/screenshot-step-2.png +0 -0
  11. data/app/assets/images/bulutfon_dashboard/screenshot-step-3.png +0 -0
  12. data/app/assets/javascripts/bulutfon_dashboard/application.js +13 -0
  13. data/app/assets/javascripts/bulutfon_dashboard/audiojs/audiojs-player-graphics.gif +0 -0
  14. data/app/assets/javascripts/bulutfon_dashboard/audiojs/audiojs.js.erb +695 -0
  15. data/app/assets/javascripts/bulutfon_dashboard/audiojs/audiojs.swf +0 -0
  16. data/app/assets/javascripts/bulutfon_dashboard/cdrs.js +19 -0
  17. data/app/assets/stylesheets/bulutfon_dashboard/application.css +15 -0
  18. data/app/assets/stylesheets/bulutfon_dashboard/bulutfon-fonts.css.sass +114 -0
  19. data/app/controllers/bulutfon_dashboard/application_controller.rb +28 -0
  20. data/app/controllers/bulutfon_dashboard/base_controller.rb +4 -0
  21. data/app/controllers/bulutfon_dashboard/bulutfon_users_controller.rb +59 -0
  22. data/app/controllers/bulutfon_dashboard/cdrs_controller.rb +27 -0
  23. data/app/controllers/bulutfon_dashboard/dashboards_controller.rb +15 -0
  24. data/app/helpers/bulutfon_dashboard/application_helper.rb +4 -0
  25. data/app/helpers/bulutfon_dashboard/cdrs_helper.rb +145 -0
  26. data/app/models/bulutfon_dashboard/api_user.rb +19 -0
  27. data/app/models/bulutfon_dashboard/bulutfon_user.rb +21 -0
  28. data/app/models/bulutfon_dashboard/cdr.rb +54 -0
  29. data/app/views/bulutfon_dashboard/bulutfon_users/_form.html.haml +24 -0
  30. data/app/views/bulutfon_dashboard/bulutfon_users/edit.html.haml +3 -0
  31. data/app/views/bulutfon_dashboard/bulutfon_users/new.html.haml +3 -0
  32. data/app/views/bulutfon_dashboard/bulutfon_users/show.html.haml +93 -0
  33. data/app/views/bulutfon_dashboard/cdrs/_blank.html.haml +14 -0
  34. data/app/views/bulutfon_dashboard/cdrs/_cdr.html.haml +12 -0
  35. data/app/views/bulutfon_dashboard/cdrs/_list.html.haml +24 -0
  36. data/app/views/bulutfon_dashboard/cdrs/index.html.haml +5 -0
  37. data/app/views/bulutfon_dashboard/cdrs/show.html.haml +82 -0
  38. data/app/views/bulutfon_dashboard/dashboards/index.html.haml +53 -0
  39. data/app/views/layouts/bulutfon_dashboard/application.html.erb +14 -0
  40. data/config/initializers/simple_form.rb +165 -0
  41. data/config/initializers/simple_form_bootstrap.rb +149 -0
  42. data/config/locales/models.tr.yml +201 -0
  43. data/config/locales/simple_form.en.yml +31 -0
  44. data/config/routes.rb +5 -0
  45. data/lib/bulutfon_dashboard.rb +5 -0
  46. data/lib/bulutfon_dashboard/engine.rb +6 -0
  47. data/lib/bulutfon_dashboard/version.rb +3 -0
  48. data/lib/generators/bulutfon_dashboard/assets_generator.rb +57 -0
  49. data/lib/generators/bulutfon_dashboard/controllers_generator.rb +24 -0
  50. data/lib/generators/bulutfon_dashboard/helpers_generator.rb +24 -0
  51. data/lib/generators/bulutfon_dashboard/initializers_generator.rb +14 -0
  52. data/lib/generators/bulutfon_dashboard/install/install_generator.rb +17 -0
  53. data/lib/generators/bulutfon_dashboard/migrations_generator.rb +24 -0
  54. data/lib/generators/bulutfon_dashboard/views_generator.rb +55 -0
  55. data/lib/generators/templates/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.eot +0 -0
  56. data/lib/generators/templates/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.svg +164 -0
  57. data/lib/generators/templates/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.ttf +0 -0
  58. data/lib/generators/templates/assets/fonts/fontcustom_d9192ef5338659432e550700796cc26b.woff +0 -0
  59. data/lib/generators/templates/assets/stylesheets/bulutfon-fonts.css.sass +114 -0
  60. data/lib/generators/templates/controllers/base_controller.rb +9 -0
  61. data/lib/generators/templates/helpers/application_helper.rb +5 -0
  62. data/lib/generators/templates/initializers/bulutfon_dashboard.rb +2 -0
  63. data/lib/generators/templates/migrations/create_bulutfon_dashboard_bulutfon_users.rb +14 -0
  64. data/lib/tasks/bulutfon_dashboard_tasks.rake +4 -0
  65. data/lib/templates/erb/scaffold/_form.html.erb +13 -0
  66. data/test/bulutfon_dashboard_test.rb +7 -0
  67. data/test/controllers/bulutfon_dashboard/bulutfon_users_controller_test.rb +13 -0
  68. data/test/controllers/bulutfon_dashboard/cdrs_controller_test.rb +13 -0
  69. data/test/controllers/bulutfon_dashboard/dashboards_controller_test.rb +13 -0
  70. data/test/dummy/README.rdoc +28 -0
  71. data/test/dummy/Rakefile +6 -0
  72. data/test/dummy/app/assets/javascripts/application.js +13 -0
  73. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  74. data/test/dummy/app/controllers/application_controller.rb +5 -0
  75. data/test/dummy/app/helpers/application_helper.rb +2 -0
  76. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  77. data/test/dummy/bin/bundle +3 -0
  78. data/test/dummy/bin/rails +4 -0
  79. data/test/dummy/bin/rake +4 -0
  80. data/test/dummy/bin/setup +29 -0
  81. data/test/dummy/config.ru +4 -0
  82. data/test/dummy/config/application.rb +26 -0
  83. data/test/dummy/config/boot.rb +5 -0
  84. data/test/dummy/config/database.yml +25 -0
  85. data/test/dummy/config/environment.rb +5 -0
  86. data/test/dummy/config/environments/development.rb +41 -0
  87. data/test/dummy/config/environments/production.rb +79 -0
  88. data/test/dummy/config/environments/test.rb +42 -0
  89. data/test/dummy/config/initializers/assets.rb +11 -0
  90. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  91. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  92. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  93. data/test/dummy/config/initializers/inflections.rb +16 -0
  94. data/test/dummy/config/initializers/mime_types.rb +4 -0
  95. data/test/dummy/config/initializers/session_store.rb +3 -0
  96. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  97. data/test/dummy/config/locales/en.yml +23 -0
  98. data/test/dummy/config/routes.rb +4 -0
  99. data/test/dummy/config/secrets.yml +22 -0
  100. data/test/dummy/public/404.html +67 -0
  101. data/test/dummy/public/422.html +67 -0
  102. data/test/dummy/public/500.html +66 -0
  103. data/test/dummy/public/favicon.ico +0 -0
  104. data/test/fixtures/bulutfon_dashboard/bulutfon_users.yml +11 -0
  105. data/test/integration/navigation_test.rb +8 -0
  106. data/test/models/bulutfon_dashboard/bulutfon_user_test.rb +9 -0
  107. data/test/test_helper.rb +21 -0
  108. metadata +221 -0
@@ -0,0 +1,19 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
3
+
4
+ //= require audiojs
5
+
6
+ var ready;
7
+
8
+ ready = function() {
9
+ return audiojs.events.ready(function() {
10
+ var as;
11
+ as = audiojs.createAll();
12
+ });
13
+ };
14
+
15
+ $(document).ready(ready);
16
+
17
+ $(document).on('page:load', ready);
18
+
19
+ $(window).on('page:load', ready);
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any styles
10
+ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11
+ * file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,114 @@
1
+ /*
2
+ *Icon Font: fontcustom
3
+
4
+ @font-face
5
+ font-family: "fontcustom"
6
+ src: font_url("/fonts/fontcustom_d9192ef5338659432e550700796cc26b.eot")
7
+ src: font_url("/fonts/fontcustom_d9192ef5338659432e550700796cc26b.eot?#iefix") format("embedded-opentype"), font_url("/fonts/fontcustom_d9192ef5338659432e550700796cc26b.woff") format("woff"), font_url("/fonts/fontcustom_d9192ef5338659432e550700796cc26b.ttf") format("truetype"), font_url("/fonts/fontcustom_d9192ef5338659432e550700796cc26b.svg#fontcustom") format("svg")
8
+ font-weight: normal
9
+ font-style: normal
10
+
11
+
12
+ @media screen and (-webkit-min-device-pixel-ratio: 0)
13
+ @font-face
14
+ font-family: "fontcustom"
15
+ src: font_url("/fonts/fontcustom_d9192ef5338659432e550700796cc26b.svg#fontcustom") format("svg")
16
+
17
+
18
+ .size-12
19
+ font-size: 12px
20
+
21
+ .size-14
22
+ font-size: 14px
23
+
24
+ .size-16
25
+ font-size: 16px
26
+
27
+ .size-18
28
+ font-size: 18px
29
+
30
+ .size-21
31
+ font-size: 21px
32
+
33
+ .size-24
34
+ font-size: 24px
35
+
36
+ .size-36
37
+ font-size: 36px
38
+
39
+ .size-48
40
+ font-size: 48px
41
+
42
+ .size-60
43
+ font-size: 60px
44
+
45
+ .size-72
46
+ font-size: 72px
47
+
48
+ [data-icon]:before
49
+ content: attr(data-icon)
50
+ display: inline-block
51
+ font-family: "fontcustom"
52
+ font-style: normal
53
+ font-weight: normal
54
+ font-variant: normal
55
+ line-height: 1
56
+ text-decoration: inherit
57
+ text-rendering: optimizeLegibility
58
+ text-transform: none
59
+ -moz-osx-font-smoothing: grayscale
60
+ -webkit-font-smoothing: antialiased
61
+ font-smoothing: antialiased
62
+
63
+ .icon-domestic-dark:before, .icon-domestic-light:before, .icon-local-dark:before, .icon-local-light:before, .icon-gsm-dark:before, .icon-gsm-light:before, .icon-in-dark:before, .icon-in-light:before, .icon-international-dark:before, .icon-international-light:before, .icon-out-dark:before, .icon-out-light:before
64
+ display: inline-block
65
+ font-family: "fontcustom"
66
+ font-style: normal
67
+ font-weight: normal
68
+ font-variant: normal
69
+ line-height: 1
70
+ text-decoration: inherit
71
+ text-rendering: optimizeLegibility
72
+ text-transform: none
73
+ -moz-osx-font-smoothing: grayscale
74
+ -webkit-font-smoothing: antialiased
75
+ font-smoothing: antialiased
76
+
77
+ .icon-domestic-dark:before
78
+ content: "\f13c"
79
+
80
+ .icon-domestic-light:before
81
+ content: "\f13d"
82
+
83
+ .icon-local-dark:before
84
+ content: "\f13e"
85
+
86
+ .icon-local-light:before
87
+ content: "\f13f"
88
+
89
+ .icon-gsm-dark:before
90
+ content: "\f148"
91
+
92
+ .icon-gsm-light:before
93
+ content: "\f149"
94
+
95
+ .icon-in-dark:before
96
+ content: "\f140"
97
+
98
+ .icon-in-light:before
99
+ content: "\f141"
100
+
101
+ .icon-international-dark:before
102
+ content: "\f142"
103
+
104
+ .icon-international-light:before
105
+ content: "\f143"
106
+
107
+ .icon-out-dark:before
108
+ content: "\f144"
109
+
110
+ .icon-out-light:before
111
+ content: "\f145"
112
+
113
+ .label-prim
114
+ background-color: #337ab7
@@ -0,0 +1,28 @@
1
+ module BulutfonDashboard
2
+ class ApplicationController < BaseController
3
+
4
+ protect_from_forgery with: :exception
5
+ before_action :check_current_user, :set_bulutfon
6
+ layout BulutfonDashboard.layout || 'application'
7
+
8
+ private
9
+ def check_current_user
10
+ @current_user = BulutfonDashboard.current_user
11
+ unless @current_user.present?
12
+ redirect_to main_app.root_path
13
+ return
14
+ end
15
+ end
16
+
17
+ def set_bulutfon
18
+ @token = BulutfonDashboard::BulutfonUser.find_by(user_id: @current_user.id)
19
+
20
+ unless @token.present?
21
+ redirect_to bulutfon_users_path
22
+ return
23
+ end
24
+
25
+ @bulutfon = BulutfonSDK::REST::Bulutfon.new(@token.api_token)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,4 @@
1
+ module BulutfonDashboard
2
+ class BaseController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,59 @@
1
+ require_dependency 'bulutfon_dashboard/application_controller'
2
+
3
+ module BulutfonDashboard
4
+ class BulutfonUsersController < ApplicationController
5
+ skip_before_action :set_bulutfon
6
+ before_action :set_resource, only: [:new, :show, :edit, :update, :destroy]
7
+ add_breadcrumb 'Bulutfon', BulutfonDashboard::Engine.routes.url_helpers.root_path
8
+ add_breadcrumb I18n.t('activerecord.models.bulutfon_user'), BulutfonDashboard::Engine.routes.url_helpers.bulutfon_users_path
9
+
10
+ def show
11
+ end
12
+
13
+ def new
14
+ add_breadcrumb t('view.new'), BulutfonDashboard::Engine.routes.url_helpers.new_bulutfon_users_path
15
+ if @resource.present?
16
+ redirect_to edit_bulutfon_users_path
17
+ return
18
+ end
19
+ @resource = BulutfonUser.new
20
+ end
21
+
22
+ def edit
23
+ add_breadcrumb t('view.edit'), BulutfonDashboard::Engine.routes.url_helpers.edit_bulutfon_users_path
24
+ end
25
+
26
+ def update
27
+ if @resource.update(bulutfon_user_params)
28
+ redirect_to BulutfonDashboard::Engine.routes.url_helpers.root_path
29
+ else
30
+ render :edit
31
+ end
32
+ end
33
+
34
+ def create
35
+ @resource = BulutfonUser.new(bulutfon_user_params)
36
+ @resource.user_id = BulutfonDashboard.current_user.id
37
+ if @resource.save
38
+ redirect_to BulutfonDashboard::Engine.routes.url_helpers.root_path
39
+ else
40
+ render :new
41
+ end
42
+ end
43
+
44
+ def destroy
45
+ @resource.destroy
46
+ redirect_to bulutfon_users_path
47
+ end
48
+ private
49
+
50
+ def set_resource
51
+ @resource = BulutfonUser.find_by(user_id: BulutfonDashboard.current_user.id)
52
+ end
53
+
54
+ def bulutfon_user_params
55
+ params.require(:bulutfon_user).permit(:api_token)
56
+ end
57
+
58
+ end
59
+ end
@@ -0,0 +1,27 @@
1
+ require_dependency 'bulutfon_dashboard/application_controller'
2
+
3
+ module BulutfonDashboard
4
+ class CdrsController < ApplicationController
5
+ before_action :set_cdr, only: :show
6
+
7
+ add_breadcrumb 'Bulutfon', BulutfonDashboard::Engine.routes.url_helpers.root_path
8
+ add_breadcrumb I18n.t('activerecord.models.cdr'), BulutfonDashboard::Engine.routes.url_helpers.cdrs_path
9
+
10
+ def index
11
+ page = params[:page].try(:to_i) ||1
12
+ cdr_obj = @bulutfon.cdrs.all({page: page}).to_obj
13
+ @cdrs = cdr_obj.cdrs
14
+ @pagination = cdr_obj.pagination
15
+ end
16
+
17
+ def show
18
+ add_breadcrumb @cdr.uuid, BulutfonDashboard::Engine.routes.url_helpers.cdr_path(@cdr.uuid)
19
+ end
20
+
21
+ private
22
+ def set_cdr
23
+ cdr_hash = @bulutfon.cdrs.get(params[:id])['cdr']
24
+ @cdr = BulutfonDashboard::Cdr.new(cdr_hash)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ require_dependency 'bulutfon_dashboard/application_controller'
2
+
3
+ module BulutfonDashboard
4
+ class DashboardsController < ApplicationController
5
+ add_breadcrumb 'Bulutfon', BulutfonDashboard::Engine.routes.url_helpers.root_path
6
+
7
+ def index
8
+ @details = @bulutfon.details
9
+ @content_count = 5
10
+ cdrs_open_struct = @bulutfon.cdrs.all({page: 1, limit: @content_count}).to_obj
11
+ @cdrs = cdrs_open_struct.cdrs
12
+ @user = ApiUser.new(@details)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,4 @@
1
+ module BulutfonDashboard
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,145 @@
1
+ module BulutfonDashboard
2
+ module CdrsHelper
3
+ def direction_icon(direction, size = 36)
4
+ direction = direction.to_s.downcase
5
+ capture_haml do
6
+ haml_tag :span, class: "size-#{size}" do
7
+ haml_tag :i, class: "icon-#{direction}-dark", toggle: 'tooltip', title: t("activerecord.attributes.cdr.direction_detail.#{direction}")
8
+ t("activerecord.attributes.cdr.direction_detail.#{direction}")
9
+ end
10
+ end
11
+ end
12
+
13
+ def call_type_icon(call_type, size = 36)
14
+ call_type = call_type.to_s.downcase
15
+ if call_type == 'voice'
16
+ icon_class = 'phone'
17
+ else
18
+ icon_class = 'fax'
19
+ end
20
+ capture_haml do
21
+ haml_tag :span, class: "size-#{size}" do
22
+ haml_tag :i, class: "fa fa-#{icon_class}", toggle: 'tooltip', title: t("activerecord.attributes.cdr.call_type_detail.#{call_type}")
23
+ t("activerecord.attributes.cdr.call_type_detail.#{call_type}")
24
+ end
25
+ end
26
+ end
27
+
28
+ def sanitize_price(price, unit = nil)
29
+ amount = sprintf('%.2f', price)
30
+ if unit.present?
31
+ "#{amount} #{unit}"
32
+ else
33
+ amount
34
+ end
35
+ end
36
+
37
+ def method_missing(method, *args, &block)
38
+ if method.to_s.include?('_path') || method.to_s.include?('_url')
39
+ begin
40
+ main_app.send(method, *args, &block)
41
+ rescue NoMethodError
42
+ super
43
+ end
44
+ else
45
+ super
46
+ end
47
+ end
48
+
49
+ def pagination(count, current)
50
+ query = sanitize_cdr_params
51
+ page = count
52
+
53
+ capture_haml do
54
+ haml_tag :nav do
55
+ haml_tag :ul, class: :pagination do
56
+ previous_page(current, query) if current != 1
57
+
58
+ page_groups = get_paging_groups(page, current)
59
+ pages(page_groups[0], current, query)
60
+ disabled if page_groups[0].present?
61
+ pages(page_groups[1], current, query)
62
+ disabled if page_groups[2].present?
63
+ pages(page_groups[2], current, query)
64
+ next_page(current, query) if current != page
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+ private
71
+
72
+ def pages(arr, current, query)
73
+ (arr).to_a.each do |pg|
74
+ query[:page] = pg
75
+ haml_tag :li, class: (pg == current ? 'active' : '') do
76
+ haml_tag :a, pg, href: "?#{query.to_query}"
77
+ end
78
+ end
79
+ end
80
+
81
+ def disabled
82
+ haml_tag :li, class: :disabled do
83
+ haml_tag :a, '...', href: '#'
84
+ end
85
+ end
86
+
87
+ def previous_page(current, query)
88
+ query[:page] = current - 1
89
+ haml_tag :li do
90
+ haml_tag :a, aria: {label: :Previous}, href: "?#{query.to_query}" do
91
+ haml_tag :span, '← Önceki', aria: {hidden: :true}
92
+ end
93
+ end
94
+ end
95
+
96
+ def next_page(current, query)
97
+ query[:page] = current + 1
98
+ haml_tag :li do
99
+ haml_tag :a, aria: {label: :Next}, href: "?#{query.to_query}" do
100
+ haml_tag :span, 'Sonraki →', aria: {hidden: :true}
101
+ end
102
+ end
103
+ end
104
+
105
+ def get_paging_groups(page, current)
106
+ total_pages = page
107
+ after_first_page = 3
108
+ arround_current_page = 5
109
+ current_page = current
110
+ middle_section = ([current_page - arround_current_page, 1].max..[current_page + arround_current_page, total_pages].min).to_a
111
+ first_page_section = (1..[after_first_page, total_pages].min).to_a
112
+ last_page_section = ([1, total_pages - after_first_page + 1].max..total_pages).to_a
113
+ if (total_pages / 2) > current_page
114
+ merge_left(middle_section, first_page_section)
115
+ merge_right(middle_section, last_page_section)
116
+ else
117
+ merge_right(middle_section, last_page_section)
118
+ merge_left(middle_section, first_page_section)
119
+ end
120
+ [first_page_section, middle_section, last_page_section]
121
+ end
122
+
123
+ def merge_left(middle_section, first_page_section)
124
+ if (not middle_section.empty?) and middle_section.first - 1 <= first_page_section.last
125
+ middle_section = first_page_section | middle_section
126
+ first_page_section.clear
127
+ [middle_section, first_page_section]
128
+ end
129
+ end
130
+
131
+ def merge_right(middle_section, last_page_section)
132
+ if (not middle_section.empty?) and middle_section.last + 1 >= last_page_section.first
133
+ middle_section = middle_section | last_page_section
134
+ last_page_section.clear
135
+ [middle_section, last_page_section]
136
+ end
137
+ end
138
+
139
+ def sanitize_cdr_params
140
+ par = {page: params[:page]}
141
+ par.delete(:page) unless params[:page].present?
142
+ par
143
+ end
144
+ end
145
+ end