mno-enterprise-frontend 2.0.9 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/mno_enterprise/angular/app.js.coffee.erb +0 -120
  3. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/maestrano-components.js.coffee +0 -11
  4. data/app/assets/javascripts/mno_enterprise/application.js +0 -2
  5. data/app/assets/javascripts/mno_enterprise/lib/xeditable.js +0 -0
  6. data/app/assets/stylesheets/mno_enterprise/main.less +0 -28
  7. data/app/views/layouts/mno_enterprise/_application_js.html.haml +0 -4
  8. data/app/views/layouts/mno_enterprise/_common_cdn_lib_js.html.haml +0 -5
  9. data/app/views/layouts/mno_enterprise/_header_files.html.haml +0 -3
  10. data/app/views/layouts/mno_enterprise/application.html.haml +1 -1
  11. data/app/views/mno_enterprise/provision/_provision_apps.html.haml +7 -8
  12. data/config/routes.rb +1 -10
  13. data/lib/mno_enterprise/frontend/engine.rb +12 -0
  14. data/lib/mno_enterprise/frontend/locales_generator.rb +57 -0
  15. data/lib/tasks/mnoe_admin_tasks.rake +67 -0
  16. data/lib/tasks/mnoe_frontend_tasks.rake +138 -0
  17. data/lib/tasks/mnoe_locales.rake +14 -0
  18. data/lib/tasks/templates/bower.json +10 -0
  19. data/spec/controllers/mno_enterprise/auth/confirmations_controller_spec.rb +2 -2
  20. data/spec/controllers/mno_enterprise/webhook/o_auth_controller_spec.rb +1 -1
  21. data/spec/lib/mno_enterprise/locales_generator_spec.rb +14 -0
  22. data/spec/lib/tasks/mnoe_locales_rake_spec.rb +25 -0
  23. metadata +35 -145
  24. data/app/assets/images/mno_enterprise/impac/close-widget-pink.png +0 -0
  25. data/app/assets/images/mno_enterprise/impac/close-widget.png +0 -0
  26. data/app/assets/javascripts/mno_enterprise/angular/controllers/maestrano-controllers.js.coffee +0 -4
  27. data/app/assets/javascripts/mno_enterprise/angular/controllers/modals/modals-ctrl.js.coffee +0 -62
  28. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-account.js.coffee +0 -157
  29. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-app-deletion-request.js.coffee +0 -62
  30. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-apps-list.js.coffee +0 -127
  31. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-components.js.coffee +0 -25
  32. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-marketplace-app.js.coffee +0 -77
  33. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-marketplace.js.coffee +0 -51
  34. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-menu.js.coffee +0 -174
  35. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/arrears.js.coffee +0 -70
  36. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/billing.js.coffee +0 -48
  37. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/credit-card.js.coffee +0 -142
  38. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/index.js.coffee +0 -61
  39. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/invoices.js.coffee +0 -42
  40. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/members.js.coffee +0 -280
  41. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/settings.js.coffee +0 -91
  42. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/team-list.js.coffee +0 -179
  43. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/teams.js.coffee +0 -268
  44. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/file-model.js.coffee +0 -33
  45. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-autostop-app.js.coffee +0 -123
  46. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-currency-widget.js.coffee +0 -43
  47. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-current-currency.js.coffee +0 -22
  48. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-editable.js.coffee +0 -68
  49. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-helptext.js.coffee +0 -38
  50. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-match.js.coffee +0 -14
  51. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-message-modal.js.coffee +0 -56
  52. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-partner-code-popup.js.coffee +0 -74
  53. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-partner-contact.js.coffee +0 -59
  54. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-price-converter.js.coffee +0 -49
  55. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-scroll-to.js.coffee +0 -14
  56. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-typeahead.js.coffee +0 -89
  57. data/app/assets/javascripts/mno_enterprise/angular/directives/user-setup/components.js.coffee +0 -7
  58. data/app/assets/javascripts/mno_enterprise/angular/directives/user-setup/index.js.coffee +0 -256
  59. data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-app-by-category.js.coffee +0 -5
  60. data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-currency.js.coffee +0 -30
  61. data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-filters.js.coffee +0 -7
  62. data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-replace-underscore-with-space.js.coffee +0 -4
  63. data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-titleize.js.coffee +0 -7
  64. data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-truncate.js.coffee +0 -24
  65. data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/maestrano-app-instance.js.coffee +0 -15
  66. data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/maestrano-apps-document.js.coffee +0 -83
  67. data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/maestrano-user.js.coffee +0 -27
  68. data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/organization-svc.js.coffee +0 -318
  69. data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/team-svc.js.coffee +0 -180
  70. data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/tickets-svc.js.coffee +0 -109
  71. data/app/assets/javascripts/mno_enterprise/angular/services/impac-config.svc.js.coffee +0 -35
  72. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-apps-list-helper.js.coffee +0 -337
  73. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-current-currency.js.coffee +0 -7
  74. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-current-user-svc.js.coffee +0 -99
  75. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-exchange-rates.js.coffee +0 -102
  76. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-miscellaneous.js.coffee.erb +0 -46
  77. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-modal.js.coffee +0 -67
  78. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-services.js.coffee +0 -21
  79. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-shopping-cart.js.coffee +0 -361
  80. data/app/assets/javascripts/mno_enterprise/angular/services/marketplace-svc.js.coffee +0 -59
  81. data/app/assets/javascripts/mno_enterprise/lib/angular-really-click.js +0 -17
  82. data/app/assets/javascripts/ng-performance/ngPerformance.html +0 -109
  83. data/app/assets/javascripts/ng-performance/ngPerformance.js +0 -211
  84. data/app/assets/stylesheets/mno_enterprise/custom/impac-variables-override.less +0 -65
  85. data/app/assets/stylesheets/mno_enterprise/custom/utility/app-presentation.less +0 -77
  86. data/app/assets/stylesheets/mno_enterprise/custom/utility/banners.less +0 -145
  87. data/app/assets/stylesheets/mno_enterprise/custom/utility/carousel.less +0 -68
  88. data/app/assets/stylesheets/mno_enterprise/custom/utility/helptext.less +0 -40
  89. data/app/assets/stylesheets/mno_enterprise/custom/utility/miscellaneous.less +0 -134
  90. data/app/assets/stylesheets/mno_enterprise/custom/utility/testimonial.less +0 -118
  91. data/app/assets/stylesheets/mno_enterprise/custom/views/apps.less +0 -243
  92. data/app/assets/stylesheets/mno_enterprise/custom/views/myspace.less +0 -477
  93. data/app/assets/stylesheets/mno_enterprise/custom/views/pages/home.less +0 -57
  94. data/app/assets/stylesheets/mno_enterprise/custom/views/star.less +0 -18
  95. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/bootstrap-wizard.less +0 -63
  96. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/dashboard-marketplace.less +0 -187
  97. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/dashboard-organization.less +0 -149
  98. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/dashboard-teams.less +0 -119
  99. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/support.less +0 -42
  100. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/tickets.less +0 -80
  101. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/mno-editable.less +0 -60
  102. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/shopping-cart.less +0 -333
  103. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/star-wizard.less +0 -49
  104. data/app/assets/stylesheets/mno_enterprise/custom/views/user-setup.less +0 -10
  105. data/app/assets/templates/mno_enterprise/dashboard/account.html +0 -131
  106. data/app/assets/templates/mno_enterprise/dashboard/app_deletion.html +0 -36
  107. data/app/assets/templates/mno_enterprise/dashboard/apps_list.html +0 -103
  108. data/app/assets/templates/mno_enterprise/dashboard/horizontal_menu.html +0 -85
  109. data/app/assets/templates/mno_enterprise/dashboard/marketplace/index.html +0 -60
  110. data/app/assets/templates/mno_enterprise/dashboard/marketplace/show.html +0 -133
  111. data/app/assets/templates/mno_enterprise/dashboard/menu.html +0 -161
  112. data/app/assets/templates/mno_enterprise/dashboard/organization/arrears.html +0 -37
  113. data/app/assets/templates/mno_enterprise/dashboard/organization/billing.html +0 -37
  114. data/app/assets/templates/mno_enterprise/dashboard/organization/credit-card.html +0 -156
  115. data/app/assets/templates/mno_enterprise/dashboard/organization/index.full.html +0 -181
  116. data/app/assets/templates/mno_enterprise/dashboard/organization/index.html +0 -173
  117. data/app/assets/templates/mno_enterprise/dashboard/organization/invoices.html +0 -27
  118. data/app/assets/templates/mno_enterprise/dashboard/organization/members.html +0 -288
  119. data/app/assets/templates/mno_enterprise/dashboard/organization/settings.html +0 -55
  120. data/app/assets/templates/mno_enterprise/dashboard/teams/index.html +0 -175
  121. data/app/assets/templates/mno_enterprise/dashboard/teams/member-add-modal.html +0 -60
  122. data/app/assets/templates/mno_enterprise/dashboard/teams/member-removal-modal.html +0 -35
  123. data/app/assets/templates/mno_enterprise/dashboard/teams/team-add-modal.html +0 -35
  124. data/app/assets/templates/mno_enterprise/dashboard/teams/team-delete-modal.html +0 -35
  125. data/app/assets/templates/mno_enterprise/dashboard/teams/team-list.html +0 -107
  126. data/app/assets/templates/mno_enterprise/default_template.html +0 -20
  127. data/app/assets/templates/mno_enterprise/maestrano-components/autostop_app.html +0 -42
  128. data/app/assets/templates/mno_enterprise/maestrano-components/currency_widget.html +0 -1
  129. data/app/assets/templates/mno_enterprise/maestrano-components/editable.html +0 -28
  130. data/app/assets/templates/mno_enterprise/maestrano-components/modal-messages/congratulations.html +0 -8
  131. data/app/assets/templates/mno_enterprise/maestrano-components/modal-messages/default.html +0 -1
  132. data/app/assets/templates/mno_enterprise/maestrano-components/modal-messages/information.html +0 -8
  133. data/app/assets/templates/mno_enterprise/maestrano-components/star_wizard.html +0 -254
  134. data/app/assets/templates/mno_enterprise/maestrano-components/upload_spreadsheet.html +0 -191
  135. data/app/assets/templates/mno_enterprise/modals/new-organization-reseller-req.html +0 -35
  136. data/app/assets/templates/mno_enterprise/modals/new-organization.html +0 -35
  137. data/app/assets/templates/mno_enterprise/user-setup/index.html +0 -312
  138. data/app/controllers/mno_enterprise/pages_controller.rb +0 -9
  139. data/app/controllers/mno_enterprise/user_setup_controller.rb +0 -11
  140. data/app/views/layouts/mno_enterprise/_impersonate_header.html.haml +0 -7
  141. data/app/views/layouts/mno_enterprise/application_dashboard.html.haml +0 -22
  142. data/app/views/mno_enterprise/pages/myspace.html.haml +0 -6
  143. data/app/views/mno_enterprise/user_setup/index.html.haml +0 -2
  144. data/config/initializers/ng-performance.rb +0 -3
  145. data/lib/assets/javascripts/impac-angular.js +0 -8719
  146. data/lib/assets/stylesheets/impac-angular.less +0 -2352
  147. data/lib/mno_enterprise/frontend/concerns/README.md +0 -6
  148. data/lib/mno_enterprise/frontend/concerns/controllers/pages_controller.rb +0 -25
  149. data/spec/controllers/mno_enterprise/pages_controller_spec.rb +0 -42
  150. data/spec/controllers/mno_enterprise/user_setup_controller_spec.rb +0 -33
  151. data/spec/routing/mno_enterprise/pages_controller_routing_spec.rb +0 -18
  152. data/spec/routing/mno_enterprise/user_setup_controller_routing_spec.rb +0 -11
@@ -0,0 +1,138 @@
1
+ require 'fileutils'
2
+
3
+ #=============================================
4
+ # Enterprise Express Tasks
5
+ #=============================================
6
+ # Enterprise Express related tasks
7
+ namespace :mnoe do
8
+ namespace :frontend do
9
+ frontend_dist_folder = "public/dashboard"
10
+ frontend_project_folder = 'frontend'
11
+ frontend_tmp_folder = 'tmp/build/frontend'
12
+ frontend_bower_folder = 'bower_components/mno-enterprise-angular'
13
+
14
+ desc "Setup the Enterprise Express frontend"
15
+ task :install do
16
+ # Install required tools
17
+ sh("which bower || npm install -g bower")
18
+ sh("which gulp || npm install -g gulp")
19
+ sh("npm install -g gulp-util gulp-load-plugins del gulp-git")
20
+
21
+ # Setup bower and dependencies
22
+ bower_src = File.join(File.expand_path(File.dirname(__FILE__)),'templates','bower.json')
23
+ cp(bower_src, 'bower.json')
24
+ sh("bower install --quiet")
25
+
26
+ # Create frontend override folder
27
+ mkdir_p(frontend_project_folder)
28
+ touch "#{frontend_project_folder}/.keep"
29
+
30
+ # Bootstrap override folder
31
+ # Replace relative image path by absolute path in the LESS files
32
+ mkdir_p("#{frontend_project_folder}/src/app/stylesheets")
33
+ ['src/app/stylesheets/theme.less','src/app/stylesheets/variables.less'].each do |path|
34
+ next if File.exists?("#{frontend_project_folder}/#{path}")
35
+
36
+ # Generate file from template
37
+ cp("#{frontend_bower_folder}/#{path}","#{frontend_project_folder}/#{path}")
38
+
39
+ # Replace image relative path
40
+ content = File.read("#{frontend_project_folder}/#{path}")
41
+ File.open("#{frontend_project_folder}/#{path}", 'w') do |f|
42
+ f << content.gsub("../images", File.join(frontend_dist_folder.gsub("public",""),"images"))
43
+ end
44
+ end
45
+
46
+ # Setup theme previewer working files so we can safely include
47
+ # them in main.less
48
+ ['theme-previewer-tmp.less','theme-previewer-published.less'].each do |filename|
49
+ FileUtils.touch(File.join(Rails.root,"frontend/src/app/stylesheets/#{filename}"))
50
+ end
51
+
52
+ # Build the frontend
53
+ Rake::Task['mnoe:frontend:dist'].invoke
54
+ #Rake::Task['assets:precompile'].invoke
55
+ end
56
+
57
+ desc "Rebuild the Enterprise Express frontend"
58
+ task :dist do
59
+ # Prepare the build folder
60
+ Rake::Task['mnoe:frontend:prepare_build_folder'].execute
61
+
62
+ # Build frontend using Gulp
63
+ Dir.chdir(frontend_tmp_folder) do
64
+ sh "npm install"
65
+ sh "gulp"
66
+ sh "gulp less-concat"
67
+ end
68
+
69
+ # Ensure distribution folder exists
70
+ mkdir_p frontend_dist_folder
71
+
72
+ # Cleanup previously compiled files
73
+ Dir.glob("#{frontend_dist_folder}/{styles,scripts}/app-*.{css,js}").each do |f|
74
+ rm_f f
75
+ end
76
+
77
+ # Copy assets to public
78
+ cp_r("#{frontend_tmp_folder}/dist/.","#{frontend_dist_folder}/")
79
+
80
+ # Copy bower_components to public (used by live previewer)
81
+ cp_r("#{frontend_tmp_folder}/bower_components","#{frontend_dist_folder}/")
82
+
83
+ # Clear tmp cache in development - recompile assets otherwise
84
+ if Rails.env.development? || Rails.env.test?
85
+ Rake::Task['tmp:cache:clear'].execute
86
+ else
87
+ Rake::Task['assets:precompile'].execute
88
+ end
89
+ end
90
+
91
+ desc "Rebuild the Live Previewer Style"
92
+ task :rebuild_previewer_style do
93
+ # Prepare the build folder
94
+ Rake::Task['mnoe:frontend:prepare_build_folder'].execute
95
+
96
+ # Build the previewer stylesheet
97
+ Dir.chdir(frontend_tmp_folder) do
98
+ sh "npm install"
99
+ sh "gulp less-concat"
100
+ end
101
+
102
+ # Copy stylesheet to public
103
+ cp("#{frontend_tmp_folder}/dist/styles/theme-previewer.less","#{frontend_dist_folder}/styles/")
104
+
105
+ # Copy bower_components to public (used by live previewer)
106
+ cp_r("#{frontend_tmp_folder}/bower_components","#{frontend_dist_folder}/")
107
+
108
+ # Clear tmp cache in development
109
+ if Rails.env.development? || Rails.env.test?
110
+ Rake::Task['tmp:cache:clear'].execute
111
+ end
112
+ end
113
+
114
+ desc "Reset the frontend build folder and apply local customisations"
115
+ task :prepare_build_folder do
116
+ # Ensure frontend is downloaded
117
+ sh("[ -d #{frontend_bower_folder} ] || bower install")
118
+
119
+ # Reset tmp folder from mno-enterprise-angular source
120
+ rm_rf "#{frontend_tmp_folder}/src"
121
+ rm_rf "#{frontend_tmp_folder}/e2e"
122
+ mkdir_p frontend_tmp_folder
123
+ cp_r("#{frontend_bower_folder}/.","#{frontend_tmp_folder}/")
124
+
125
+ # Apply frontend customisations
126
+ cp_r("#{frontend_project_folder}/.","#{frontend_tmp_folder}/")
127
+ end
128
+
129
+ desc "Update the frontend and rebuild it"
130
+ task :update do
131
+ # Run bower to get a new version of the frontend
132
+ sh "bower update"
133
+
134
+ # Rebuild the frontend
135
+ Rake::Task['mnoe:frontend:dist'].execute
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,14 @@
1
+ #=============================================
2
+ # Enterprise Express Locales Tasks
3
+ #=============================================
4
+ # Enterprise Express tasks related to locales management
5
+ namespace :mnoe do
6
+ namespace :locales do
7
+ locales_folder = 'public/dashboard/locales'
8
+
9
+ desc "Generate JSON locales"
10
+ task :generate => :environment do
11
+ MnoEnterprise::Frontend::LocalesGenerator.new(locales_folder).generate_json
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "enterprise-express",
3
+ "description": "Maestrano Enterprise Express frontend",
4
+ "dependencies": {
5
+ "mno-enterprise-angular": "git@github.com:maestrano/mno-enterprise-angular.git#master"
6
+ },
7
+ "resolutions": {
8
+ "angular-bootstrap": "~0.14.3"
9
+ }
10
+ }
@@ -62,7 +62,7 @@ module MnoEnterprise
62
62
  it { expect(user.name).to eq(user_params[:name]) }
63
63
  it { expect(user.surname).to eq(user_params[:surname]) }
64
64
  it { expect(user.password).to eq(user_params[:password]) }
65
- it { expect(response).to redirect_to('/mnoe/myspace') }
65
+ it { expect(response).to redirect_to(MnoEnterprise.router.dashboard_path) }
66
66
 
67
67
  describe 'with previous url' do
68
68
  let(:previous_url) { "/some/redirection" }
@@ -81,4 +81,4 @@ module MnoEnterprise
81
81
  end
82
82
 
83
83
  end
84
- end
84
+ end
@@ -48,7 +48,7 @@ module MnoEnterprise
48
48
  describe 'GET #callback' do
49
49
  subject { get :callback, id: app_instance.uid }
50
50
 
51
- it { subject; expect(response).to redirect_to(myspace_path) }
51
+ it { subject; expect(response).to redirect_to(MnoEnterprise.router.dashboard_path) }
52
52
  end
53
53
 
54
54
  describe 'GET #disconnect' do
@@ -0,0 +1,14 @@
1
+ require 'rails_helper'
2
+
3
+ module MnoEnterprise::Frontend
4
+ describe LocalesGenerator do
5
+
6
+
7
+ describe '#generate_json' do
8
+ let(:generator) { described_class.new('tmp/') }
9
+ subject { generator.generate_json }
10
+
11
+ it 'is pending'
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,25 @@
1
+ require 'rails_helper'
2
+ require 'mno_enterprise/testing_support/shared_contexts/rake_task'
3
+
4
+ describe 'mnoe:locales:generate' do
5
+ include_context 'rake_task'
6
+
7
+ let(:generator) { instance_double("MnoEnterprise::Frontend::LocalesGenerator", generate_json: true)}
8
+
9
+ before do
10
+ allow(MnoEnterprise::Frontend::LocalesGenerator).to receive(:new) { generator }
11
+ allow(generator).to receive(:generate_json)
12
+ end
13
+
14
+ it { expect(subject.prerequisites).to include('environment') }
15
+
16
+ it 'creates a generator with the correct folder' do
17
+ subject.invoke
18
+ expect(MnoEnterprise::Frontend::LocalesGenerator).to have_received(:new).with('public/dashboard/locales')
19
+ end
20
+
21
+ it 'generates the locales' do
22
+ subject.invoke
23
+ expect(generator).to have_received(:generate_json)
24
+ end
25
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mno-enterprise-frontend
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.9
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arnaud Lachaume
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-06-05 00:00:00.000000000 Z
12
+ date: 2016-04-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mno-enterprise-core
@@ -17,28 +17,28 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 2.0.9
20
+ version: 3.0.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
- version: 2.0.9
27
+ version: 3.0.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: mno-enterprise-api
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - '='
33
33
  - !ruby/object:Gem::Version
34
- version: 2.0.9
34
+ version: 3.0.0
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - '='
40
40
  - !ruby/object:Gem::Version
41
- version: 2.0.9
41
+ version: 3.0.0
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: less-rails
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -109,6 +109,20 @@ dependencies:
109
109
  - - "~>"
110
110
  - !ruby/object:Gem::Version
111
111
  version: '1.0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rack-rewrite
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
112
126
  description: Angular/Bootstrap frontend for MNOE
113
127
  email:
114
128
  - developers@maestrano.com
@@ -119,81 +133,23 @@ files:
119
133
  - LICENSE
120
134
  - Rakefile
121
135
  - app/assets/images/favicon.ico
122
- - app/assets/images/mno_enterprise/impac/close-widget-pink.png
123
- - app/assets/images/mno_enterprise/impac/close-widget.png
124
136
  - app/assets/images/mno_enterprise/loader-32x32-bg-inverse.gif
125
137
  - app/assets/images/mno_enterprise/loader-32x32-bg-main.gif
126
138
  - app/assets/images/mno_enterprise/maestrano/logo-whitebg.png
127
139
  - app/assets/javascripts/mno_enterprise/angular/app.js.coffee.erb
128
- - app/assets/javascripts/mno_enterprise/angular/controllers/maestrano-controllers.js.coffee
129
- - app/assets/javascripts/mno_enterprise/angular/controllers/modals/modals-ctrl.js.coffee
130
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-account.js.coffee
131
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-app-deletion-request.js.coffee
132
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-apps-list.js.coffee
133
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-components.js.coffee
134
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-marketplace-app.js.coffee
135
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-marketplace.js.coffee
136
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-menu.js.coffee
137
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/arrears.js.coffee
138
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/billing.js.coffee
139
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/credit-card.js.coffee
140
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/index.js.coffee
141
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/invoices.js.coffee
142
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/members.js.coffee
143
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/settings.js.coffee
144
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/team-list.js.coffee
145
- - app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/teams.js.coffee
146
- - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/file-model.js.coffee
147
140
  - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/maestrano-components.js.coffee
148
- - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-autostop-app.js.coffee
149
141
  - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-compile.js.coffee
150
- - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-currency-widget.js.coffee
151
- - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-current-currency.js.coffee
152
- - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-editable.js.coffee
153
142
  - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-flash-msg.js.coffee
154
- - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-helptext.js.coffee
155
143
  - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-loading-lounge.js.coffee
156
- - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-match.js.coffee
157
- - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-message-modal.js.coffee
158
144
  - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-notification-widget.js.coffee
159
- - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-partner-code-popup.js.coffee
160
- - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-partner-contact.js.coffee
161
145
  - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-password-strength.js.coffee
162
146
  - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-password.js.coffee
163
- - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-price-converter.js.coffee
164
- - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-scroll-to.js.coffee
165
- - app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-typeahead.js.coffee
166
- - app/assets/javascripts/mno_enterprise/angular/directives/user-setup/components.js.coffee
167
- - app/assets/javascripts/mno_enterprise/angular/directives/user-setup/index.js.coffee
168
- - app/assets/javascripts/mno_enterprise/angular/filters/maestrano-app-by-category.js.coffee
169
- - app/assets/javascripts/mno_enterprise/angular/filters/maestrano-currency.js.coffee
170
- - app/assets/javascripts/mno_enterprise/angular/filters/maestrano-filters.js.coffee
171
- - app/assets/javascripts/mno_enterprise/angular/filters/maestrano-replace-underscore-with-space.js.coffee
172
- - app/assets/javascripts/mno_enterprise/angular/filters/maestrano-titleize.js.coffee
173
- - app/assets/javascripts/mno_enterprise/angular/filters/maestrano-truncate.js.coffee
174
- - app/assets/javascripts/mno_enterprise/angular/services/dashboard/maestrano-app-instance.js.coffee
175
- - app/assets/javascripts/mno_enterprise/angular/services/dashboard/maestrano-apps-document.js.coffee
176
- - app/assets/javascripts/mno_enterprise/angular/services/dashboard/maestrano-user.js.coffee
177
- - app/assets/javascripts/mno_enterprise/angular/services/dashboard/organization-svc.js.coffee
178
- - app/assets/javascripts/mno_enterprise/angular/services/dashboard/team-svc.js.coffee
179
- - app/assets/javascripts/mno_enterprise/angular/services/dashboard/tickets-svc.js.coffee
180
- - app/assets/javascripts/mno_enterprise/angular/services/impac-config.svc.js.coffee
181
- - app/assets/javascripts/mno_enterprise/angular/services/maestrano-apps-list-helper.js.coffee
182
147
  - app/assets/javascripts/mno_enterprise/angular/services/maestrano-assets.js.coffee.erb
183
- - app/assets/javascripts/mno_enterprise/angular/services/maestrano-current-currency.js.coffee
184
- - app/assets/javascripts/mno_enterprise/angular/services/maestrano-current-user-svc.js.coffee
185
- - app/assets/javascripts/mno_enterprise/angular/services/maestrano-exchange-rates.js.coffee
186
148
  - app/assets/javascripts/mno_enterprise/angular/services/maestrano-message-svc.js.coffee
187
- - app/assets/javascripts/mno_enterprise/angular/services/maestrano-miscellaneous.js.coffee.erb
188
- - app/assets/javascripts/mno_enterprise/angular/services/maestrano-modal.js.coffee
189
149
  - app/assets/javascripts/mno_enterprise/angular/services/maestrano-msg-bus.js.coffee
190
- - app/assets/javascripts/mno_enterprise/angular/services/maestrano-services.js.coffee
191
- - app/assets/javascripts/mno_enterprise/angular/services/maestrano-shopping-cart.js.coffee
192
150
  - app/assets/javascripts/mno_enterprise/angular/services/maestrano-utilities.js.coffee
193
- - app/assets/javascripts/mno_enterprise/angular/services/marketplace-svc.js.coffee
194
151
  - app/assets/javascripts/mno_enterprise/application.js
195
152
  - app/assets/javascripts/mno_enterprise/application_lib.js
196
- - app/assets/javascripts/mno_enterprise/lib/angular-really-click.js
197
153
  - app/assets/javascripts/mno_enterprise/lib/sortable.js
198
154
  - app/assets/javascripts/mno_enterprise/lib/ui-bootstrap-tpls-0.13.4.js
199
155
  - app/assets/javascripts/mno_enterprise/lib/xeditable.js
@@ -210,8 +166,6 @@ files:
210
166
  - app/assets/javascripts/mno_enterprise/twitter/bootstrap/tab.js
211
167
  - app/assets/javascripts/mno_enterprise/twitter/bootstrap/tooltip.js
212
168
  - app/assets/javascripts/mno_enterprise/twitter/bootstrap/transition.js
213
- - app/assets/javascripts/ng-performance/ngPerformance.html
214
- - app/assets/javascripts/ng-performance/ngPerformance.js
215
169
  - app/assets/stylesheets/mno_enterprise/application.css
216
170
  - app/assets/stylesheets/mno_enterprise/custom/accordion.less
217
171
  - app/assets/stylesheets/mno_enterprise/custom/alert.less
@@ -222,38 +176,17 @@ files:
222
176
  - app/assets/stylesheets/mno_enterprise/custom/footer.less
223
177
  - app/assets/stylesheets/mno_enterprise/custom/form.less
224
178
  - app/assets/stylesheets/mno_enterprise/custom/header.less
225
- - app/assets/stylesheets/mno_enterprise/custom/impac-variables-override.less
226
179
  - app/assets/stylesheets/mno_enterprise/custom/modal.less
227
180
  - app/assets/stylesheets/mno_enterprise/custom/utilities.less
228
- - app/assets/stylesheets/mno_enterprise/custom/utility/app-presentation.less
229
- - app/assets/stylesheets/mno_enterprise/custom/utility/banners.less
230
- - app/assets/stylesheets/mno_enterprise/custom/utility/carousel.less
231
- - app/assets/stylesheets/mno_enterprise/custom/utility/helptext.less
232
- - app/assets/stylesheets/mno_enterprise/custom/utility/miscellaneous.less
233
181
  - app/assets/stylesheets/mno_enterprise/custom/utility/progress-bar.less
234
182
  - app/assets/stylesheets/mno_enterprise/custom/utility/step.less
235
183
  - app/assets/stylesheets/mno_enterprise/custom/utility/tabset.less
236
- - app/assets/stylesheets/mno_enterprise/custom/utility/testimonial.less
237
184
  - app/assets/stylesheets/mno_enterprise/custom/utility/text.less
238
- - app/assets/stylesheets/mno_enterprise/custom/views/apps.less
239
- - app/assets/stylesheets/mno_enterprise/custom/views/myspace.less
240
185
  - app/assets/stylesheets/mno_enterprise/custom/views/pages/confirmation_lounge.less
241
- - app/assets/stylesheets/mno_enterprise/custom/views/pages/home.less
242
186
  - app/assets/stylesheets/mno_enterprise/custom/views/pages/oauth-config-page.less
243
187
  - app/assets/stylesheets/mno_enterprise/custom/views/registration.less
244
- - app/assets/stylesheets/mno_enterprise/custom/views/star.less
245
- - app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/bootstrap-wizard.less
246
- - app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/dashboard-marketplace.less
247
- - app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/dashboard-organization.less
248
- - app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/dashboard-teams.less
249
- - app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/support.less
250
- - app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/tickets.less
251
- - app/assets/stylesheets/mno_enterprise/custom/views/templates/mno-editable.less
252
188
  - app/assets/stylesheets/mno_enterprise/custom/views/templates/notification-widget.less
253
189
  - app/assets/stylesheets/mno_enterprise/custom/views/templates/password-strength.less
254
- - app/assets/stylesheets/mno_enterprise/custom/views/templates/shopping-cart.less
255
- - app/assets/stylesheets/mno_enterprise/custom/views/templates/star-wizard.less
256
- - app/assets/stylesheets/mno_enterprise/custom/views/user-setup.less
257
190
  - app/assets/stylesheets/mno_enterprise/custom/xeditable.less
258
191
  - app/assets/stylesheets/mno_enterprise/font-awesome/font-awesome-regular.less
259
192
  - app/assets/stylesheets/mno_enterprise/font-awesome/font-awesome-sprockets.less
@@ -349,87 +282,46 @@ files:
349
282
  - app/assets/stylesheets/mno_enterprise/twitter-bootstrap/variables.less
350
283
  - app/assets/stylesheets/mno_enterprise/twitter-bootstrap/wells.less
351
284
  - app/assets/stylesheets/mno_enterprise/variables.less
352
- - app/assets/templates/mno_enterprise/dashboard/account.html
353
- - app/assets/templates/mno_enterprise/dashboard/app_deletion.html
354
- - app/assets/templates/mno_enterprise/dashboard/apps_list.html
355
- - app/assets/templates/mno_enterprise/dashboard/horizontal_menu.html
356
- - app/assets/templates/mno_enterprise/dashboard/marketplace/index.html
357
- - app/assets/templates/mno_enterprise/dashboard/marketplace/show.html
358
- - app/assets/templates/mno_enterprise/dashboard/menu.html
359
- - app/assets/templates/mno_enterprise/dashboard/organization/arrears.html
360
- - app/assets/templates/mno_enterprise/dashboard/organization/billing.html
361
- - app/assets/templates/mno_enterprise/dashboard/organization/credit-card.html
362
- - app/assets/templates/mno_enterprise/dashboard/organization/index.full.html
363
- - app/assets/templates/mno_enterprise/dashboard/organization/index.html
364
- - app/assets/templates/mno_enterprise/dashboard/organization/invoices.html
365
- - app/assets/templates/mno_enterprise/dashboard/organization/members.html
366
- - app/assets/templates/mno_enterprise/dashboard/organization/settings.html
367
- - app/assets/templates/mno_enterprise/dashboard/teams/index.html
368
- - app/assets/templates/mno_enterprise/dashboard/teams/member-add-modal.html
369
- - app/assets/templates/mno_enterprise/dashboard/teams/member-removal-modal.html
370
- - app/assets/templates/mno_enterprise/dashboard/teams/team-add-modal.html
371
- - app/assets/templates/mno_enterprise/dashboard/teams/team-delete-modal.html
372
- - app/assets/templates/mno_enterprise/dashboard/teams/team-list.html
373
- - app/assets/templates/mno_enterprise/default_template.html
374
- - app/assets/templates/mno_enterprise/maestrano-components/autostop_app.html
375
- - app/assets/templates/mno_enterprise/maestrano-components/currency_widget.html
376
- - app/assets/templates/mno_enterprise/maestrano-components/editable.html
377
285
  - app/assets/templates/mno_enterprise/maestrano-components/loading_lounge.html
378
- - app/assets/templates/mno_enterprise/maestrano-components/modal-messages/congratulations.html
379
- - app/assets/templates/mno_enterprise/maestrano-components/modal-messages/default.html
380
- - app/assets/templates/mno_enterprise/maestrano-components/modal-messages/information.html
381
286
  - app/assets/templates/mno_enterprise/maestrano-components/notification-widget.html
382
287
  - app/assets/templates/mno_enterprise/maestrano-components/password.html
383
- - app/assets/templates/mno_enterprise/maestrano-components/star_wizard.html
384
- - app/assets/templates/mno_enterprise/maestrano-components/upload_spreadsheet.html
385
- - app/assets/templates/mno_enterprise/modals/new-organization-reseller-req.html
386
- - app/assets/templates/mno_enterprise/modals/new-organization.html
387
- - app/assets/templates/mno_enterprise/user-setup/index.html
388
288
  - app/controllers/mno_enterprise/invoices_controller.rb
389
- - app/controllers/mno_enterprise/pages_controller.rb
390
- - app/controllers/mno_enterprise/user_setup_controller.rb
391
289
  - app/views/layouts/mno_enterprise/_application_js.html.haml
392
290
  - app/views/layouts/mno_enterprise/_common_cdn_lib_js.html.haml
393
291
  - app/views/layouts/mno_enterprise/_footer_files.html.haml
394
292
  - app/views/layouts/mno_enterprise/_header_files.html.haml
395
- - app/views/layouts/mno_enterprise/_impersonate_header.html.haml
396
293
  - app/views/layouts/mno_enterprise/_public_page_header.html.haml
397
294
  - app/views/layouts/mno_enterprise/application.html.haml
398
- - app/views/layouts/mno_enterprise/application_dashboard.html.haml
399
295
  - app/views/layouts/mno_enterprise/third_party/_google_tag_container.html.haml
400
296
  - app/views/mno_enterprise/pages/app_access_unauthorized.html.haml
401
297
  - app/views/mno_enterprise/pages/app_logout.html.haml
402
298
  - app/views/mno_enterprise/pages/billing_details_required.html.haml
403
299
  - app/views/mno_enterprise/pages/loading.html.haml
404
- - app/views/mno_enterprise/pages/myspace.html.haml
405
300
  - app/views/mno_enterprise/provision/_provision_apps.html.haml
406
301
  - app/views/mno_enterprise/provision/_select_organization.html.haml
407
302
  - app/views/mno_enterprise/provision/new.html.haml
408
- - app/views/mno_enterprise/user_setup/index.html.haml
409
303
  - config/initializers/ng-annotate.rb
410
- - config/initializers/ng-performance.rb
411
304
  - config/routes.rb
412
- - lib/assets/javascripts/impac-angular.js
413
- - lib/assets/stylesheets/impac-angular.less
414
305
  - lib/mno-enterprise-frontend.rb
415
306
  - lib/mno_enterprise/frontend.rb
416
307
  - lib/mno_enterprise/frontend/assets_util.rb
417
- - lib/mno_enterprise/frontend/concerns/README.md
418
- - lib/mno_enterprise/frontend/concerns/controllers/pages_controller.rb
419
308
  - lib/mno_enterprise/frontend/engine.rb
309
+ - lib/mno_enterprise/frontend/locales_generator.rb
310
+ - lib/tasks/mnoe_admin_tasks.rake
311
+ - lib/tasks/mnoe_frontend_tasks.rake
312
+ - lib/tasks/mnoe_locales.rake
313
+ - lib/tasks/templates/bower.json
420
314
  - spec/controllers/mno_enterprise/auth/confirmations_controller_spec.rb
421
315
  - spec/controllers/mno_enterprise/invoices_controller_spec.rb
422
- - spec/controllers/mno_enterprise/pages_controller_spec.rb
423
- - spec/controllers/mno_enterprise/user_setup_controller_spec.rb
424
316
  - spec/controllers/mno_enterprise/webhook/o_auth_controller_spec.rb
317
+ - spec/lib/mno_enterprise/locales_generator_spec.rb
318
+ - spec/lib/tasks/mnoe_locales_rake_spec.rb
425
319
  - spec/rails_helper.rb
426
320
  - spec/routing/mno_enterprise/invoices_controller_routing_spec.rb
427
- - spec/routing/mno_enterprise/pages_controller_routing_spec.rb
428
- - spec/routing/mno_enterprise/user_setup_controller_routing_spec.rb
429
321
  - spec/spec_helper.rb
430
322
  homepage: https://maestrano.com
431
323
  licenses:
432
- - Apache-2.0
324
+ - Maestrano Enterprise License V1
433
325
  metadata: {}
434
326
  post_install_message:
435
327
  rdoc_options: []
@@ -447,18 +339,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
447
339
  version: '0'
448
340
  requirements: []
449
341
  rubyforge_project:
450
- rubygems_version: 2.4.8
342
+ rubygems_version: 2.2.2
451
343
  signing_key:
452
344
  specification_version: 4
453
345
  summary: Maestrano Enterprise - Frontend
454
346
  test_files:
455
- - spec/routing/mno_enterprise/user_setup_controller_routing_spec.rb
456
- - spec/routing/mno_enterprise/invoices_controller_routing_spec.rb
457
- - spec/routing/mno_enterprise/pages_controller_routing_spec.rb
458
- - spec/spec_helper.rb
459
- - spec/rails_helper.rb
460
- - spec/controllers/mno_enterprise/pages_controller_spec.rb
461
- - spec/controllers/mno_enterprise/user_setup_controller_spec.rb
462
- - spec/controllers/mno_enterprise/webhook/o_auth_controller_spec.rb
463
347
  - spec/controllers/mno_enterprise/auth/confirmations_controller_spec.rb
464
348
  - spec/controllers/mno_enterprise/invoices_controller_spec.rb
349
+ - spec/controllers/mno_enterprise/webhook/o_auth_controller_spec.rb
350
+ - spec/lib/mno_enterprise/locales_generator_spec.rb
351
+ - spec/lib/tasks/mnoe_locales_rake_spec.rb
352
+ - spec/rails_helper.rb
353
+ - spec/routing/mno_enterprise/invoices_controller_routing_spec.rb
354
+ - spec/spec_helper.rb