bulutfon_dashboard 0.7.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 (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