mno-enterprise-core 2.0.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.
- checksums.yaml +7 -0
- data/LICENSE +1 -0
- data/Rakefile +12 -0
- data/app/assets/images/mno_enterprise/main-logo.png +0 -0
- data/app/controllers/mno_enterprise/application_controller.rb +116 -0
- data/app/helpers/mno_enterprise/application_helper.rb +67 -0
- data/app/helpers/mno_enterprise/impersonate_helper.rb +27 -0
- data/app/models/mno_enterprise/ability.rb +6 -0
- data/app/models/mno_enterprise/app.rb +72 -0
- data/app/models/mno_enterprise/app_instance.rb +36 -0
- data/app/models/mno_enterprise/app_instances_sync.rb +6 -0
- data/app/models/mno_enterprise/arrears_situation.rb +6 -0
- data/app/models/mno_enterprise/audit_event.rb +21 -0
- data/app/models/mno_enterprise/base_resource.rb +228 -0
- data/app/models/mno_enterprise/credit_card.rb +40 -0
- data/app/models/mno_enterprise/deletion_request.rb +35 -0
- data/app/models/mno_enterprise/impac/dashboard.rb +36 -0
- data/app/models/mno_enterprise/impac/dashboard_provisioner.rb +5 -0
- data/app/models/mno_enterprise/impac/kpi.rb +9 -0
- data/app/models/mno_enterprise/impac/widget.rb +13 -0
- data/app/models/mno_enterprise/invoice.rb +53 -0
- data/app/models/mno_enterprise/org_invite.rb +50 -0
- data/app/models/mno_enterprise/organization.rb +33 -0
- data/app/models/mno_enterprise/team.rb +50 -0
- data/app/models/mno_enterprise/tenant.rb +5 -0
- data/app/models/mno_enterprise/tenant_invoice.rb +5 -0
- data/app/models/mno_enterprise/user.rb +183 -0
- data/app/pdf/mno_enterprise/invoice_pdf.rb +516 -0
- data/config/initializers/audit_log.rb +5 -0
- data/config/locales/devise.en.yml +60 -0
- data/config/routes.rb +2 -0
- data/config/styleguide.yml +106 -0
- data/lib/accountingjs_serializer.rb +51 -0
- data/lib/devise/controllers/extension_helpers.rb +52 -0
- data/lib/devise/extension_routes.rb +11 -0
- data/lib/devise/hooks/password_expirable.rb +5 -0
- data/lib/devise/models/password_expirable.rb +28 -0
- data/lib/devise/models/remote_authenticatable.rb +48 -0
- data/lib/devise/strategies/remote_authenticatable.rb +44 -0
- data/lib/devise_extension.rb +36 -0
- data/lib/faraday/adapter/net_http_no_proxy.rb +19 -0
- data/lib/generators/mno_enterprise/database_extension/USAGE +11 -0
- data/lib/generators/mno_enterprise/database_extension/database_extension_generator.rb +36 -0
- data/lib/generators/mno_enterprise/database_extension/templates/model.rb +9 -0
- data/lib/generators/mno_enterprise/dummy/dummy_generator.rb +98 -0
- data/lib/generators/mno_enterprise/dummy/templates/rails/application.rb.erb +9 -0
- data/lib/generators/mno_enterprise/dummy/templates/rails/boot.rb.erb +6 -0
- data/lib/generators/mno_enterprise/dummy/templates/rails/database.yml +22 -0
- data/lib/generators/mno_enterprise/dummy/templates/rails/routes.rb +8 -0
- data/lib/generators/mno_enterprise/dummy/templates/rails/test-env.rb +45 -0
- data/lib/generators/mno_enterprise/install/install_generator.rb +140 -0
- data/lib/generators/mno_enterprise/install/templates/Procfile +1 -0
- data/lib/generators/mno_enterprise/install/templates/config/initializers/mno_enterprise.rb +135 -0
- data/lib/generators/mno_enterprise/install/templates/config/mno_enterprise_styleguide.yml +104 -0
- data/lib/generators/mno_enterprise/install/templates/javascripts/mno_enterprise_extensions.js +7 -0
- data/lib/generators/mno_enterprise/install/templates/stylesheets/main.less_erb +25 -0
- data/lib/generators/mno_enterprise/install/templates/stylesheets/theme.less_erb +59 -0
- data/lib/generators/mno_enterprise/install/templates/stylesheets/variables.less +337 -0
- data/lib/generators/mno_enterprise/install/templates/tasks/sprites.rake +14 -0
- data/lib/generators/mno_enterprise/puma_stack/puma_stack_generator.rb +58 -0
- data/lib/generators/mno_enterprise/templates/scripts/monit/app-server.conf +8 -0
- data/lib/generators/mno_enterprise/templates/scripts/nginx/app +51 -0
- data/lib/generators/mno_enterprise/templates/scripts/puma.rb +25 -0
- data/lib/generators/mno_enterprise/templates/scripts/setup.sh +27 -0
- data/lib/generators/mno_enterprise/templates/scripts/upstart/app-web-hotrestart.conf +26 -0
- data/lib/generators/mno_enterprise/templates/scripts/upstart/app-web-server.conf +34 -0
- data/lib/generators/mno_enterprise/templates/scripts/upstart/app-web.conf +2 -0
- data/lib/generators/mno_enterprise/templates/scripts/upstart/app.conf +11 -0
- data/lib/her_extension/her_orm_adapter.rb +54 -0
- data/lib/her_extension/middleware/mnoe_api_v1_parse_json.rb +54 -0
- data/lib/her_extension/model/associations/association.rb +61 -0
- data/lib/her_extension/model/associations/association_proxy.rb +34 -0
- data/lib/her_extension/model/associations/has_many_association.rb +115 -0
- data/lib/her_extension/model/attributes.rb +43 -0
- data/lib/her_extension/model/orm.rb +59 -0
- data/lib/her_extension/model/parse.rb +40 -0
- data/lib/her_extension/model/relation.rb +92 -0
- data/lib/her_extension/validations/remote_uniqueness_validation.rb +33 -0
- data/lib/html_processor.rb +106 -0
- data/lib/mandrill_client.rb +58 -0
- data/lib/mno-enterprise-core.rb +1 -0
- data/lib/mno_enterprise/concerns.rb +4 -0
- data/lib/mno_enterprise/concerns/controllers.rb +6 -0
- data/lib/mno_enterprise/concerns/controllers/angular_csrf.rb +59 -0
- data/lib/mno_enterprise/concerns/controllers/auth.rb +9 -0
- data/lib/mno_enterprise/concerns/controllers/auth/confirmations_controller.rb +187 -0
- data/lib/mno_enterprise/concerns/controllers/auth/passwords_controller.rb +54 -0
- data/lib/mno_enterprise/concerns/controllers/auth/registrations_controller.rb +136 -0
- data/lib/mno_enterprise/concerns/controllers/auth/sessions_controller.rb +54 -0
- data/lib/mno_enterprise/concerns/controllers/auth/unlocks_controller.rb +50 -0
- data/lib/mno_enterprise/concerns/models.rb +6 -0
- data/lib/mno_enterprise/concerns/models/ability.rb +108 -0
- data/lib/mno_enterprise/concerns/models/app_instance.rb +100 -0
- data/lib/mno_enterprise/concerns/models/organization.rb +102 -0
- data/lib/mno_enterprise/core.rb +279 -0
- data/lib/mno_enterprise/database_extendable.rb +57 -0
- data/lib/mno_enterprise/engine.rb +33 -0
- data/lib/mno_enterprise/testing_support/ability_test_helper.rb +10 -0
- data/lib/mno_enterprise/testing_support/common_rake.rb +19 -0
- data/lib/mno_enterprise/testing_support/factories.rb +13 -0
- data/lib/mno_enterprise/testing_support/factories/app_instances.rb +30 -0
- data/lib/mno_enterprise/testing_support/factories/apps.rb +45 -0
- data/lib/mno_enterprise/testing_support/factories/arrears_situation.rb +14 -0
- data/lib/mno_enterprise/testing_support/factories/audit_event.rb +15 -0
- data/lib/mno_enterprise/testing_support/factories/credit_card.rb +33 -0
- data/lib/mno_enterprise/testing_support/factories/deletion_request.rb +17 -0
- data/lib/mno_enterprise/testing_support/factories/impac/dashboards.rb +15 -0
- data/lib/mno_enterprise/testing_support/factories/impac/kpis.rb +20 -0
- data/lib/mno_enterprise/testing_support/factories/impac/widgets.rb +15 -0
- data/lib/mno_enterprise/testing_support/factories/invoices.rb +51 -0
- data/lib/mno_enterprise/testing_support/factories/org_invite.rb +24 -0
- data/lib/mno_enterprise/testing_support/factories/organizations.rb +25 -0
- data/lib/mno_enterprise/testing_support/factories/team.rb +17 -0
- data/lib/mno_enterprise/testing_support/factories/tenant.rb +12 -0
- data/lib/mno_enterprise/testing_support/factories/tenant_invoice.rb +29 -0
- data/lib/mno_enterprise/testing_support/factories/users.rb +48 -0
- data/lib/mno_enterprise/testing_support/jpi_v1_test_helper.rb +49 -0
- data/lib/mno_enterprise/testing_support/mno_enterprise_api_test_helper.rb +167 -0
- data/lib/mno_enterprise/testing_support/mnoe_faraday_test_adapter.rb +173 -0
- data/lib/mno_enterprise/testing_support/organizations_shared_helpers.rb +175 -0
- data/lib/mno_enterprise/testing_support/user_action_shared.rb +47 -0
- data/lib/mno_enterprise/version.rb +3 -0
- data/lib/tasks/mno_enterprise_tasks.rake +22 -0
- data/spec/controllers/mno_enterprise/angular_csrf_spec.rb +42 -0
- data/spec/lib/her_extension/her_orm_adapter.rb +7 -0
- data/spec/lib/her_extension/model/relation_spec.rb +7 -0
- data/spec/lib/mandrill_client_spec.rb +64 -0
- data/spec/mno_enterprise_spec.rb +79 -0
- data/spec/models/mno_enterprise/app_instance_spec.rb +7 -0
- data/spec/models/mno_enterprise/app_spec.rb +62 -0
- data/spec/models/mno_enterprise/base_resource_spec.rb +28 -0
- data/spec/models/mno_enterprise/deletion_request_spec.rb +26 -0
- data/spec/models/mno_enterprise/invoice_spec.rb +7 -0
- data/spec/models/mno_enterprise/organization_spec.rb +7 -0
- data/spec/models/mno_enterprise/user_spec.rb +44 -0
- data/spec/rails_helper.rb +73 -0
- data/spec/spec_helper.rb +78 -0
- metadata +421 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Faraday
|
|
2
|
+
class Adapter
|
|
3
|
+
class NetHttpNoProxy < Faraday::Adapter::NetHttp
|
|
4
|
+
def net_http_connection(env)
|
|
5
|
+
# Monkey Patch, never use the request to set the proxy settings, let Net::HTTP figure out by itself from
|
|
6
|
+
# the environment variables
|
|
7
|
+
|
|
8
|
+
# Original code:
|
|
9
|
+
# if proxy = env[:request][:proxy]
|
|
10
|
+
# Net::HTTP::Proxy(proxy[:uri].host, proxy[:uri].port, proxy[:user], proxy[:password])
|
|
11
|
+
# else
|
|
12
|
+
# Net::HTTP
|
|
13
|
+
# end.new(env[:url].host, env[:url].port || (env[:url].scheme == 'https' ? 443 : 80))
|
|
14
|
+
|
|
15
|
+
Net::HTTP.new(env[:url].host, env[:url].port || (env[:url].scheme == 'https' ? 443 : 80))
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Description:
|
|
2
|
+
Create a database extension of an existing Mnoe model
|
|
3
|
+
|
|
4
|
+
Example:
|
|
5
|
+
rails generate mno_enterprise:database_extension Organization growth_type:string
|
|
6
|
+
|
|
7
|
+
This will create:
|
|
8
|
+
Model: app/models/mno_enterprise/organization.rb
|
|
9
|
+
Model: app/models/mno_enterprise/organization_extension.rb
|
|
10
|
+
Spec: spec/models/mno_enterprise/organization_extension_spec.rb
|
|
11
|
+
Migration: db/migrate/XXX_create_mno_enterprise_organization_extensions.rb
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
class MnoEnterprise::DatabaseExtensionGenerator < Rails::Generators::NamedBase
|
|
2
|
+
source_root File.expand_path('../templates', __FILE__)
|
|
3
|
+
|
|
4
|
+
argument :fields, type: :array, default: [], banner: "field[:type][:index] field[:type][:index]"
|
|
5
|
+
|
|
6
|
+
# Check the class we want to extend exists
|
|
7
|
+
def check_class_exists
|
|
8
|
+
klass = "MnoEnterprise::#{class_name}"
|
|
9
|
+
klass.constantize
|
|
10
|
+
rescue NameError
|
|
11
|
+
raise Thor::Error, "The class '#{klass}' does not exist in Maestrano Enterprise"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def check_class_is_decorator_ready
|
|
15
|
+
klass = "MnoEnterprise::Concerns::Models::#{class_name}"
|
|
16
|
+
klass.constantize
|
|
17
|
+
rescue NameError
|
|
18
|
+
raise Thor::Error, "The class '#{class_name}' is not decorator ready. Please extract it to #{klass}."
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Check the class we want to extend doesn't exist
|
|
22
|
+
def check_class_collision
|
|
23
|
+
@model_name = "MnoEnterprise::#{class_name}Extension"
|
|
24
|
+
@model_name.constantize rescue nil # To preload class in dev?
|
|
25
|
+
class_collisions @model_name
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def generate_extension_model
|
|
29
|
+
params = "#{@model_name} #{file_name}_uid:string:uniq " + fields.join(' ') + " --no-fixture -t rspec"
|
|
30
|
+
generate "model", params
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def generate_mnoe_model
|
|
34
|
+
template 'model.rb', File.join('app/models/mno_enterprise', "#{file_name}.rb")
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module MnoEnterprise
|
|
2
|
+
class <%= class_name %> < BaseResource
|
|
3
|
+
include MnoEnterprise::Concerns::Models::<%= class_name %>
|
|
4
|
+
|
|
5
|
+
include MnoEnterprise::DatabaseExtendable
|
|
6
|
+
|
|
7
|
+
database_extendable <%= fields.map {|field| ":#{field.split(':').first}"}.join(', ') %>
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
require 'rails/generators'
|
|
2
|
+
require 'rails/generators/rails/app/app_generator'
|
|
3
|
+
|
|
4
|
+
module MnoEnterprise
|
|
5
|
+
class DummyGenerator < Rails::Generators::Base
|
|
6
|
+
desc "Creates blank Rails application, installs MNOE"
|
|
7
|
+
|
|
8
|
+
class_option :lib_name, default: ''
|
|
9
|
+
class_option :database, default: ''
|
|
10
|
+
|
|
11
|
+
def self.source_paths
|
|
12
|
+
paths = self.superclass.source_paths
|
|
13
|
+
paths << File.expand_path('../templates', __FILE__)
|
|
14
|
+
paths.flatten
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def clean_up
|
|
18
|
+
remove_directory_if_exists(dummy_path)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
PASSTHROUGH_OPTIONS = [
|
|
22
|
+
:skip_active_record, :skip_javascript, :database, :javascript, :quiet, :pretend, :force, :skip
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
def generate_test_dummy
|
|
26
|
+
# calling slice on a Thor::CoreExtensions::HashWithIndifferentAccess
|
|
27
|
+
# object has been known to return nil
|
|
28
|
+
opts = {}.merge(options).slice(*PASSTHROUGH_OPTIONS)
|
|
29
|
+
opts[:database] = 'sqlite3' if opts[:database].blank?
|
|
30
|
+
opts[:force] = true
|
|
31
|
+
opts[:skip_bundle] = true
|
|
32
|
+
|
|
33
|
+
say "Generating dummy Rails application..."
|
|
34
|
+
invoke Rails::Generators::AppGenerator,
|
|
35
|
+
[ File.expand_path(dummy_path, destination_root) ], opts
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_dummy_config
|
|
39
|
+
@lib_name = options[:lib_name]
|
|
40
|
+
@database = options[:database]
|
|
41
|
+
|
|
42
|
+
template "rails/database.yml", "#{dummy_path}/config/database.yml", force: true
|
|
43
|
+
template "rails/boot.rb.erb", "#{dummy_path}/config/boot.rb", force: true
|
|
44
|
+
template "rails/application.rb.erb", "#{dummy_path}/config/application.rb", force: true
|
|
45
|
+
template "rails/routes.rb", "#{dummy_path}/config/routes.rb", force: true
|
|
46
|
+
template "rails/test-env.rb", "#{dummy_path}/config/environments/test.rb", force: true
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_dummy_clean
|
|
50
|
+
inside dummy_path do
|
|
51
|
+
remove_file ".gitignore"
|
|
52
|
+
remove_file "doc"
|
|
53
|
+
remove_file "Gemfile"
|
|
54
|
+
remove_file "lib/tasks"
|
|
55
|
+
remove_file "app/assets/images/rails.png"
|
|
56
|
+
remove_file "public/index.html"
|
|
57
|
+
remove_file "public/robots.txt"
|
|
58
|
+
remove_file "README"
|
|
59
|
+
remove_file "test"
|
|
60
|
+
remove_file "vendor"
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
attr :lib_name
|
|
65
|
+
attr :database
|
|
66
|
+
|
|
67
|
+
protected
|
|
68
|
+
|
|
69
|
+
def dummy_path
|
|
70
|
+
ENV['DUMMY_PATH'] || 'spec/dummy'
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def module_name
|
|
74
|
+
'Dummy'
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def application_definition
|
|
78
|
+
@application_definition ||= begin
|
|
79
|
+
|
|
80
|
+
dummy_application_path = File.expand_path("#{dummy_path}/config/application.rb", destination_root)
|
|
81
|
+
unless options[:pretend] || !File.exists?(dummy_application_path)
|
|
82
|
+
contents = File.read(dummy_application_path)
|
|
83
|
+
contents[(contents.index("module #{module_name}"))..-1]
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
alias :store_application_definition! :application_definition
|
|
88
|
+
|
|
89
|
+
def remove_directory_if_exists(path)
|
|
90
|
+
remove_dir(path) if File.directory?(path)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def gemfile_path
|
|
94
|
+
'../../../../Gemfile'
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# SQLite version 3.x
|
|
2
|
+
# gem install sqlite3
|
|
3
|
+
#
|
|
4
|
+
# Ensure the SQLite 3 gem is defined in your Gemfile
|
|
5
|
+
# gem 'sqlite3'
|
|
6
|
+
#
|
|
7
|
+
default: &default
|
|
8
|
+
adapter: sqlite3
|
|
9
|
+
pool: 5
|
|
10
|
+
timeout: 5000
|
|
11
|
+
|
|
12
|
+
development:
|
|
13
|
+
<<: *default
|
|
14
|
+
database: db/development.sqlite3
|
|
15
|
+
|
|
16
|
+
test:
|
|
17
|
+
<<: *default
|
|
18
|
+
database: db/test.sqlite3
|
|
19
|
+
|
|
20
|
+
production:
|
|
21
|
+
<<: *default
|
|
22
|
+
database: db/production.sqlite3
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Rails.application.configure do
|
|
2
|
+
# Settings specified here will take precedence over those in config/application.rb.
|
|
3
|
+
|
|
4
|
+
# The test environment is used exclusively to run your application's
|
|
5
|
+
# test suite. You never need to work with it otherwise. Remember that
|
|
6
|
+
# your test database is "scratch space" for the test suite and is wiped
|
|
7
|
+
# and recreated between test runs. Don't rely on the data there!
|
|
8
|
+
config.cache_classes = true
|
|
9
|
+
|
|
10
|
+
# Do not eager load code on boot. This avoids loading your whole application
|
|
11
|
+
# just for the purpose of running a single test. If you are using a tool that
|
|
12
|
+
# preloads Rails for running tests, you may have to set it to true.
|
|
13
|
+
config.eager_load = false
|
|
14
|
+
|
|
15
|
+
# Configure static file server for tests with Cache-Control for performance.
|
|
16
|
+
config.serve_static_files = true
|
|
17
|
+
config.static_cache_control = 'public, max-age=3600'
|
|
18
|
+
|
|
19
|
+
# Show full error reports and disable caching.
|
|
20
|
+
config.consider_all_requests_local = true
|
|
21
|
+
config.action_controller.perform_caching = false
|
|
22
|
+
|
|
23
|
+
# Raise exceptions instead of rendering exception templates.
|
|
24
|
+
config.action_dispatch.show_exceptions = false
|
|
25
|
+
|
|
26
|
+
# Disable request forgery protection in test environment.
|
|
27
|
+
config.action_controller.allow_forgery_protection = false
|
|
28
|
+
|
|
29
|
+
# Specify host to use when sending emails
|
|
30
|
+
config.action_mailer.default_url_options = { host: 'localhost:3000' }
|
|
31
|
+
|
|
32
|
+
# Tell Action Mailer not to deliver emails to the real world.
|
|
33
|
+
# The :test delivery method accumulates sent emails in the
|
|
34
|
+
# ActionMailer::Base.deliveries array.
|
|
35
|
+
config.action_mailer.delivery_method = :test
|
|
36
|
+
|
|
37
|
+
# Randomize the order test cases are executed.
|
|
38
|
+
config.active_support.test_order = :random
|
|
39
|
+
|
|
40
|
+
# Print deprecation notices to the stderr.
|
|
41
|
+
config.active_support.deprecation = :stderr
|
|
42
|
+
|
|
43
|
+
# Raises error for missing translations
|
|
44
|
+
# config.action_view.raise_on_missing_translations = true
|
|
45
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
require 'rails/generators/rails/app/app_generator'
|
|
2
|
+
|
|
3
|
+
module MnoEnterprise
|
|
4
|
+
module Generators
|
|
5
|
+
class InstallGenerator < ::Rails::Generators::Base
|
|
6
|
+
source_root File.expand_path("../templates", __FILE__)
|
|
7
|
+
desc "Description:\n Install Maestrano Enterprise Engine in your application\n\n"
|
|
8
|
+
|
|
9
|
+
class_option :skip_rspec, type: :boolean, default: false, desc: 'Skip rspec-rails installation'
|
|
10
|
+
class_option :skip_sprite, type: :boolean, default: false, desc: 'Skip sprite-factory installation'
|
|
11
|
+
class_option :skip_factory_girl, type: :boolean, default: false, desc: 'Skip sprite-factory installation'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def copy_initializer
|
|
16
|
+
template "Procfile"
|
|
17
|
+
template "config/initializers/mno_enterprise.rb"
|
|
18
|
+
template "config/mno_enterprise_styleguide.yml"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def setup_assets
|
|
22
|
+
if defined?(MnoEnterprise::Frontend) || Rails.env.test?
|
|
23
|
+
# JavaScript
|
|
24
|
+
copy_file "javascripts/mno_enterprise_extensions.js", "app/assets/javascripts/mno_enterprise_extensions.js"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# Stylesheets
|
|
28
|
+
copy_file "stylesheets/main.less_erb", "app/assets/stylesheets/main.less.erb"
|
|
29
|
+
copy_file "stylesheets/theme.less_erb", "app/assets/stylesheets/theme.less.erb"
|
|
30
|
+
copy_file "stylesheets/variables.less", "app/assets/stylesheets/variables.less"
|
|
31
|
+
|
|
32
|
+
# Require main stylesheet file
|
|
33
|
+
inject_into_file 'app/assets/stylesheets/application.css', before: " */" do
|
|
34
|
+
" *= require main\n"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Disable require_tree which breaks the app
|
|
38
|
+
gsub_file 'app/assets/stylesheets/application.css', /\*= require_tree ./, '* require_tree .'
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Inject engine routes
|
|
43
|
+
def notify_about_routes
|
|
44
|
+
if (routes_file = destination_path.join('config', 'routes.rb')).file? && (routes_file.read !~ %r{mount\ MnoEnterprise::Engine})
|
|
45
|
+
mount = %Q{
|
|
46
|
+
# This line mount Maestrano Enterprise routes in your application under /mnoe.
|
|
47
|
+
# If you would like to change where this engine is mounted, simply change the :at option to something different
|
|
48
|
+
#
|
|
49
|
+
# We ask that you don't use the :as option here, as Mnoe relies on it being the default of "mno_enterprise"
|
|
50
|
+
mount MnoEnterprise::Engine, at: '/mnoe', as: :mno_enterprise
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
inject_into_file routes_file, mount, after: "Rails.application.routes.draw do\n"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
unless options[:quiet]
|
|
57
|
+
say " "
|
|
58
|
+
say "We added the following line to your application's config/routes.rb file:"
|
|
59
|
+
say " "
|
|
60
|
+
say " mount MnoEnterprise::Engine, at: '/mnoe'"
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def install_sprite_generator
|
|
65
|
+
if (defined?(MnoEnterprise::Frontend) || Rails.env.test?) && !options[:skip_sprite]
|
|
66
|
+
say("\n")
|
|
67
|
+
@install_sprite = ask_with_default('Would you like to install sprite-factory?')
|
|
68
|
+
if @install_sprite
|
|
69
|
+
gem_group :development do
|
|
70
|
+
gem "chunky_png"
|
|
71
|
+
gem "sprite-factory"
|
|
72
|
+
end
|
|
73
|
+
template "tasks/sprites.rake", "lib/tasks/sprites.rake"
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def install_rspec_rails
|
|
79
|
+
unless options[:skip_rspec]
|
|
80
|
+
say("\n")
|
|
81
|
+
@install_rspec = ask_with_default("Would you like to install rspec-rails?")
|
|
82
|
+
if @install_rspec
|
|
83
|
+
gem_group :test do
|
|
84
|
+
gem "rspec-rails"
|
|
85
|
+
end
|
|
86
|
+
generate "rspec:install"
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def install_factory_girl
|
|
92
|
+
unless options[:skip_factory_girl]
|
|
93
|
+
say("\n")
|
|
94
|
+
@install_facto_girl = ask_with_default("Would you like to install factory_girl_rails?")
|
|
95
|
+
if @install_facto_girl
|
|
96
|
+
gem_group :test do
|
|
97
|
+
gem "factory_girl_rails"
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def install_summary
|
|
104
|
+
unless options[:quiet]
|
|
105
|
+
say("\n\n")
|
|
106
|
+
say_status("==> Maestrano Enterprise has been installed ==", nil)
|
|
107
|
+
say("- You can generate deployment configs by running: 'rails g mno_enterprise:puma_stack'")
|
|
108
|
+
say("- You can start the server with: 'foreman start'")
|
|
109
|
+
if @install_sprite =~ /y/i
|
|
110
|
+
say("\n\n")
|
|
111
|
+
say("==> Sprite Factory has been installed")
|
|
112
|
+
say("- Drop your icons in vendor/sprites/icons then run: 'rake assets:resprite'")
|
|
113
|
+
say("- Add more icons folders to vendor/sprites then modify lib/tasks/sprites.rake")
|
|
114
|
+
end
|
|
115
|
+
say("\n\n")
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
private
|
|
120
|
+
# Helper method to quickly convert destination_root to a Pathname for easy file path manipulation
|
|
121
|
+
def destination_path
|
|
122
|
+
@destination_path ||= Pathname.new(self.destination_root)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Ask a question with a default answer
|
|
126
|
+
# Returns a boolean
|
|
127
|
+
def ask_with_default(message, default = 'yes', color = nil)
|
|
128
|
+
question = "#{message} (yes/no) [#{default}]"
|
|
129
|
+
|
|
130
|
+
valid = false
|
|
131
|
+
until valid
|
|
132
|
+
answer = ask(question)
|
|
133
|
+
answer = default if answer.empty?
|
|
134
|
+
valid = (answer =~ /\Ay(?:es)?|no?\Z/i)
|
|
135
|
+
end
|
|
136
|
+
answer.downcase[0] == ?y
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
web: bundle exec rails s -p 7000
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# require 'mno-enterprise'
|
|
2
|
+
|
|
3
|
+
MnoEnterprise.configure do |config|
|
|
4
|
+
#===============================================
|
|
5
|
+
# General Configuration
|
|
6
|
+
#===============================================
|
|
7
|
+
# Name of your company/application
|
|
8
|
+
config.app_name = "My Company"
|
|
9
|
+
|
|
10
|
+
# Fallback default country.
|
|
11
|
+
# Used as default in geolocalised fields (e.g.: country, phone number)
|
|
12
|
+
# config.app_country = 'US'
|
|
13
|
+
|
|
14
|
+
# Fallback default currency.
|
|
15
|
+
# config.app_currency = 'USD'
|
|
16
|
+
|
|
17
|
+
#===============================================
|
|
18
|
+
# Maestrano Enterprise Tenant Authentication
|
|
19
|
+
#===============================================
|
|
20
|
+
# Configure your tenant ID
|
|
21
|
+
config.tenant_id = "my_tenant_id"
|
|
22
|
+
|
|
23
|
+
# Configure your tenant Key
|
|
24
|
+
config.tenant_key = "my_tenant_access_key"
|
|
25
|
+
|
|
26
|
+
#===============================================
|
|
27
|
+
# Emailing
|
|
28
|
+
#===============================================
|
|
29
|
+
# Mandrill API key for sending email
|
|
30
|
+
# Defaulted to Maestrano Enterprise demo account
|
|
31
|
+
# config.mandrill_key = 'some-mandrill-api-key'
|
|
32
|
+
|
|
33
|
+
# Support email address
|
|
34
|
+
config.support_email = 'support@example.com'
|
|
35
|
+
|
|
36
|
+
# Default sender for system generated emails
|
|
37
|
+
config.default_sender_name = 'My Company'
|
|
38
|
+
config.default_sender_email = 'no-reply@example.com'
|
|
39
|
+
|
|
40
|
+
#===============================================
|
|
41
|
+
# External Routes
|
|
42
|
+
#===============================================
|
|
43
|
+
# URL of the Terms and Conditions page.
|
|
44
|
+
# Used on Devise Registration pages
|
|
45
|
+
# config.router.terms_url = 'http://mywebsite.com/terms'
|
|
46
|
+
|
|
47
|
+
# After sign out URL. Default to the root_path
|
|
48
|
+
# config.router.after_sign_out_url = 'http://mywebsite.com/'
|
|
49
|
+
|
|
50
|
+
#===============================================
|
|
51
|
+
# Optional Modules
|
|
52
|
+
#===============================================
|
|
53
|
+
# Angular CSRF protection - Only needed if the AngularJS App
|
|
54
|
+
# is not served through Rails asset pipeline
|
|
55
|
+
# config.include_angular_csrf = false
|
|
56
|
+
|
|
57
|
+
#===============================================
|
|
58
|
+
# Third Party Plugins
|
|
59
|
+
#===============================================
|
|
60
|
+
# Google Tag Manager
|
|
61
|
+
# config.google_tag_container = nil
|
|
62
|
+
|
|
63
|
+
#===============================================
|
|
64
|
+
# API Configuration
|
|
65
|
+
#===============================================
|
|
66
|
+
# ==> Maestrano Enterprise API Configuration
|
|
67
|
+
# Configure the API host
|
|
68
|
+
# config.mno_api_host = "https://api-enterprise.maestrano.com"
|
|
69
|
+
|
|
70
|
+
# Configure the API root path
|
|
71
|
+
# config.mno_api_root_path = "/v1"
|
|
72
|
+
|
|
73
|
+
#===============================================
|
|
74
|
+
# Impac! Reporting Configuration
|
|
75
|
+
#===============================================
|
|
76
|
+
# ==> Impac! API Configuration
|
|
77
|
+
# Configure the API host
|
|
78
|
+
# config.impac_api_host = "https://api-impac-uat.maestrano.io"
|
|
79
|
+
|
|
80
|
+
# Configure the API root path
|
|
81
|
+
# config.impac_api_root_path = "/api"
|
|
82
|
+
|
|
83
|
+
#===============================================
|
|
84
|
+
# Marketplace Listing
|
|
85
|
+
#===============================================
|
|
86
|
+
# List of applications that should be offered on the marketplace
|
|
87
|
+
# Set to nil to offer everything
|
|
88
|
+
# config.marketplace_listing = nil
|
|
89
|
+
# config.marketplace_listing = [
|
|
90
|
+
# "allocpsa",
|
|
91
|
+
# "boxsuite",
|
|
92
|
+
# "bugzilla",
|
|
93
|
+
# "collabtive",
|
|
94
|
+
# "dolibarr",
|
|
95
|
+
# "drupal",
|
|
96
|
+
# "egroupware",
|
|
97
|
+
# "eventbrite",
|
|
98
|
+
# "feng-office",
|
|
99
|
+
# "front-accounting",
|
|
100
|
+
# "group-office",
|
|
101
|
+
# "hummingbirdshare",
|
|
102
|
+
# "interleave",
|
|
103
|
+
# "jenkins",
|
|
104
|
+
# "joomla",
|
|
105
|
+
# "limesurvey",
|
|
106
|
+
# "mantisbt",
|
|
107
|
+
# "magento",
|
|
108
|
+
# "megaventory",
|
|
109
|
+
# "moodle",
|
|
110
|
+
# "myob",
|
|
111
|
+
# "office-365",
|
|
112
|
+
# "opendocman",
|
|
113
|
+
# "openerp",
|
|
114
|
+
# "openx",
|
|
115
|
+
# "orangehrm",
|
|
116
|
+
# "pentaho-bi",
|
|
117
|
+
# "phreedom",
|
|
118
|
+
# "plandora",
|
|
119
|
+
# "prestashop",
|
|
120
|
+
# "processmaker",
|
|
121
|
+
# "projectpier",
|
|
122
|
+
# "quickbooks",
|
|
123
|
+
# "ranqx",
|
|
124
|
+
# "receipt-bank",
|
|
125
|
+
# "signmee",
|
|
126
|
+
# "simpleinvoices",
|
|
127
|
+
# "so-planning",
|
|
128
|
+
# "spotlight-reporting",
|
|
129
|
+
# "sugarcrm",
|
|
130
|
+
# "timetrex",
|
|
131
|
+
# "vtiger6",
|
|
132
|
+
# "xero",
|
|
133
|
+
# "wordpress"
|
|
134
|
+
# ]
|
|
135
|
+
end
|