decidim 0.0.1.alpha2 → 0.0.1.alpha3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of decidim might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.codeclimate.yml +8 -2
- data/.dockerignore +5 -0
- data/.gitignore +2 -1
- data/.hound.yml +4 -0
- data/.rubocop.yml +16 -3
- data/.ruby-version +1 -0
- data/.travis.yml +28 -0
- data/Dockerfile +36 -0
- data/Gemfile +7 -2
- data/Gemfile.lock +188 -30
- data/README.md +40 -6
- data/Rakefile +4 -20
- data/codecov.yml +71 -0
- data/common_gemfile.rb +6 -18
- data/decidim-admin/Gemfile +17 -0
- data/decidim-admin/Gemfile.lock +383 -0
- data/decidim-admin/README.md +28 -0
- data/decidim-admin/Rakefile +32 -0
- data/decidim-admin/app/assets/config/decidim_admin_manifest.js +2 -0
- data/{template.rb → decidim-admin/app/assets/images/decidim/admin/.keep} +0 -0
- data/decidim-admin/app/assets/javascripts/decidim/admin.js +21 -0
- data/decidim-admin/app/assets/stylesheets/decidim/admin.scss +8 -0
- data/decidim-admin/app/assets/stylesheets/decidim/admin/_actions.scss +8 -0
- data/decidim-admin/app/assets/stylesheets/decidim/admin/_foundation_and_overrides.scss +52 -0
- data/decidim-admin/app/assets/stylesheets/decidim/admin/_layout.scss +16 -0
- data/decidim-admin/app/assets/stylesheets/decidim/admin/_login.scss +36 -0
- data/decidim-admin/app/assets/stylesheets/decidim/admin/_settings.scss +566 -0
- data/decidim-admin/app/assets/stylesheets/decidim/admin/_sidebar.scss +73 -0
- data/decidim-admin/app/assets/stylesheets/decidim/admin/_tables.scss +5 -0
- data/decidim-admin/app/constraints/decidim/admin/organization_dashboard_constraint.rb +36 -0
- data/decidim-admin/app/controllers/decidim/admin/application_controller.rb +10 -0
- data/decidim-admin/app/controllers/decidim/admin/dashboard_controller.rb +9 -0
- data/decidim-admin/app/helpers/decidim/admin/application_helper.rb +12 -0
- data/decidim-admin/app/jobs/decidim/admin/application_job.rb +9 -0
- data/decidim-admin/app/mailers/decidim/admin/application_mailer.rb +11 -0
- data/decidim-admin/app/models/decidim/admin/application_record.rb +10 -0
- data/decidim-admin/app/policies/decidim/admin/application_policy.rb +20 -0
- data/decidim-admin/app/policies/decidim/admin/organization_policy.rb +15 -0
- data/decidim-admin/app/views/decidim/admin/dashboard/show.html.erb +3 -0
- data/decidim-admin/app/views/decidim/admin/devise/mailers/password_change.html.erb +3 -0
- data/decidim-admin/app/views/decidim/admin/devise/mailers/reset_password_instructions.html.erb +8 -0
- data/decidim-admin/app/views/layouts/decidim/admin/_header.html.erb +4 -0
- data/decidim-admin/app/views/layouts/decidim/admin/_login_items.html.erb +8 -0
- data/decidim-admin/app/views/layouts/decidim/admin/_sidebar.html.erb +13 -0
- data/decidim-admin/app/views/layouts/decidim/admin/application.html.erb +40 -0
- data/decidim-admin/app/views/layouts/decidim/admin/login.html.erb +19 -0
- data/decidim-admin/bin/rails +14 -0
- data/decidim-admin/config/i18n-tasks.yml +120 -0
- data/decidim-admin/config/locales/en.yml +8 -0
- data/decidim-admin/config/routes.rb +4 -0
- data/decidim-admin/decidim-admin.gemspec +38 -0
- data/decidim-admin/lib/decidim/admin.rb +12 -0
- data/decidim-admin/lib/decidim/admin/engine.rb +31 -0
- data/decidim-admin/lib/tasks/decidim/admin_tasks.rake +5 -0
- data/decidim-admin/spec/factories.rb +1 -0
- data/decidim-admin/spec/features/admin_access_control.rb +52 -0
- data/decidim-admin/spec/features/admin_invite_spec.rb +38 -0
- data/decidim-admin/spec/policies/organization_policy_spec.rb +41 -0
- data/decidim-admin/spec/spec_helper.rb +3 -0
- data/decidim-dev/Gemfile +17 -0
- data/decidim-dev/Gemfile.lock +381 -0
- data/decidim-dev/README.md +28 -0
- data/decidim-dev/decidim-dev.gemspec +30 -0
- data/decidim-dev/lib/decidim/common_rake.rb +14 -0
- data/decidim-dev/lib/decidim/test/base_spec_helper.rb +44 -0
- data/decidim-dev/lib/decidim/test/i18n_spec.rb +18 -0
- data/decidim-dev/lib/decidim/test/rspec_support/action_mailer.rb +46 -0
- data/decidim-dev/lib/decidim/test/rspec_support/active_job.rb +11 -0
- data/decidim-dev/lib/decidim/test/rspec_support/capybara.rb +19 -0
- data/decidim-dev/lib/decidim/test/rspec_support/database_cleaner.rb +13 -0
- data/decidim-dev/lib/decidim/test/rspec_support/factory_girl.rb +4 -0
- data/decidim-dev/lib/decidim/test/rspec_support/i18n.rb +12 -0
- data/decidim-dev/lib/decidim/test/rspec_support/warden.rb +8 -0
- data/decidim-dev/lib/decidim/test/rspec_support/wisper.rb +6 -0
- data/decidim-dev/lib/generators/decidim/dummy_generator.rb +65 -0
- data/decidim-system/Gemfile +17 -0
- data/decidim-system/Gemfile.lock +377 -0
- data/decidim-system/README.md +28 -0
- data/decidim-system/Rakefile +32 -0
- data/decidim-system/app/assets/config/decidim_system_manifest.js +2 -0
- data/decidim-system/app/assets/images/decidim/system/.keep +0 -0
- data/decidim-system/app/assets/javascripts/decidim/system.js +21 -0
- data/decidim-system/app/assets/stylesheets/decidim/system.scss +8 -0
- data/decidim-system/app/assets/stylesheets/decidim/system/_actions.scss +8 -0
- data/decidim-system/app/assets/stylesheets/decidim/system/_foundation_and_overrides.scss +52 -0
- data/decidim-system/app/assets/stylesheets/decidim/system/_layout.scss +16 -0
- data/decidim-system/app/assets/stylesheets/decidim/system/_login.scss +36 -0
- data/decidim-system/app/assets/stylesheets/decidim/system/_settings.scss +566 -0
- data/decidim-system/app/assets/stylesheets/decidim/system/_sidebar.scss +73 -0
- data/decidim-system/app/assets/stylesheets/decidim/system/_tables.scss +5 -0
- data/decidim-system/app/commands/decidim/system/create_admin.rb +40 -0
- data/decidim-system/app/commands/decidim/system/register_organization.rb +59 -0
- data/decidim-system/app/commands/decidim/system/update_admin.rb +52 -0
- data/decidim-system/app/commands/decidim/system/update_organization.rb +51 -0
- data/decidim-system/app/controllers/decidim/system/admins_controller.rb +67 -0
- data/decidim-system/app/controllers/decidim/system/application_controller.rb +11 -0
- data/decidim-system/app/controllers/decidim/system/dashboard_controller.rb +9 -0
- data/decidim-system/app/controllers/decidim/system/devise/passwords_controller.rb +12 -0
- data/decidim-system/app/controllers/decidim/system/devise/sessions_controller.rb +12 -0
- data/decidim-system/app/controllers/decidim/system/organizations_controller.rb +59 -0
- data/decidim-system/app/forms/decidim/system/admin_form.rb +33 -0
- data/decidim-system/app/forms/decidim/system/register_organization_form.rb +20 -0
- data/decidim-system/app/forms/decidim/system/update_organization_form.rb +28 -0
- data/decidim-system/app/helpers/decidim/system/application_helper.rb +12 -0
- data/decidim-system/app/jobs/decidim/system/application_job.rb +9 -0
- data/decidim-system/app/mailers/decidim/system/application_mailer.rb +11 -0
- data/decidim-system/app/models/decidim/system/admin.rb +18 -0
- data/decidim-system/app/models/decidim/system/application_record.rb +10 -0
- data/decidim-system/app/views/decidim/system/admins/_form.html.erb +11 -0
- data/decidim-system/app/views/decidim/system/admins/edit.html.erb +11 -0
- data/decidim-system/app/views/decidim/system/admins/index.html.erb +33 -0
- data/decidim-system/app/views/decidim/system/admins/new.html.erb +11 -0
- data/decidim-system/app/views/decidim/system/admins/show.html.erb +9 -0
- data/decidim-system/app/views/decidim/system/dashboard/show.html.erb +3 -0
- data/decidim-system/app/views/decidim/system/devise/mailers/password_change.html.erb +3 -0
- data/decidim-system/app/views/decidim/system/devise/mailers/reset_password_instructions.html.erb +8 -0
- data/decidim-system/app/views/decidim/system/devise/passwords/edit.html.erb +23 -0
- data/decidim-system/app/views/decidim/system/devise/passwords/new.html.erb +15 -0
- data/decidim-system/app/views/decidim/system/devise/sessions/new.html.erb +23 -0
- data/decidim-system/app/views/decidim/system/devise/shared/_links.html.erb +25 -0
- data/decidim-system/app/views/decidim/system/organizations/edit.html.erb +17 -0
- data/decidim-system/app/views/decidim/system/organizations/index.html.erb +34 -0
- data/decidim-system/app/views/decidim/system/organizations/new.html.erb +25 -0
- data/decidim-system/app/views/decidim/system/organizations/show.html.erb +11 -0
- data/decidim-system/app/views/layouts/decidim/system/_header.html.erb +4 -0
- data/decidim-system/app/views/layouts/decidim/system/_login_items.html.erb +8 -0
- data/decidim-system/app/views/layouts/decidim/system/_sidebar.html.erb +15 -0
- data/decidim-system/app/views/layouts/decidim/system/application.html.erb +40 -0
- data/decidim-system/app/views/layouts/decidim/system/login.html.erb +19 -0
- data/decidim-system/bin/rails +14 -0
- data/decidim-system/config/i18n-tasks.yml +120 -0
- data/decidim-system/config/locales/en.yml +60 -0
- data/decidim-system/config/routes.rb +17 -0
- data/decidim-system/db/migrate/20160919105637_devise_create_decidim_admins.rb +26 -0
- data/decidim-system/db/seeds.rb +9 -0
- data/decidim-system/decidim-system.gemspec +36 -0
- data/decidim-system/lib/decidim/system.rb +12 -0
- data/decidim-system/lib/decidim/system/engine.rb +31 -0
- data/decidim-system/lib/tasks/decidim/system_tasks.rake +5 -0
- data/decidim-system/spec/commands/decidim/system/create_admin_spec.rb +48 -0
- data/decidim-system/spec/commands/decidim/system/register_organization_spec.rb +68 -0
- data/decidim-system/spec/factories.rb +9 -0
- data/decidim-system/spec/features/manage_admins_spec.rb +67 -0
- data/decidim-system/spec/features/organizations_spec.rb +62 -0
- data/decidim-system/spec/features/sessions_spec.rb +38 -0
- data/decidim-system/spec/models/admin_spec.rb +23 -0
- data/decidim-system/spec/spec_helper.rb +2 -0
- data/decidim.gemspec +3 -1
- data/docker-compose.yml +24 -0
- data/lib/decidim.rb +8 -0
- data/lib/generators/decidim/app_builder.rb +1 -1
- data/lib/generators/decidim/app_generator.rb +35 -4
- data/lib/generators/decidim/install_generator.rb +121 -0
- data/lib/generators/decidim/templates/Dockerfile.erb +26 -0
- data/lib/generators/decidim/templates/Gemfile.erb +8 -1
- data/lib/generators/decidim/templates/README.md.erb +26 -0
- data/lib/generators/decidim/templates/app.json.erb +13 -0
- data/lib/generators/decidim/templates/cable.yml.erb +9 -0
- data/lib/generators/decidim/templates/database.yml.erb +85 -0
- data/lib/generators/decidim/templates/docker-compose.yml.erb +28 -0
- data/lib/generators/decidim/templates/initializer.rb +4 -0
- data/lib/generators/decidim/templates/secrets.yml.erb +30 -0
- data/run_ci.sh +7 -0
- metadata +183 -8
- data/circle.yml +0 -19
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
module Decidim
|
5
|
+
module System
|
6
|
+
describe RegisterOrganization, :db do
|
7
|
+
describe "call" do
|
8
|
+
let(:form) do
|
9
|
+
RegisterOrganizationForm.new(params)
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:command) { described_class.new(form) }
|
13
|
+
|
14
|
+
context "when the form is valid" do
|
15
|
+
let(:params) do
|
16
|
+
{
|
17
|
+
name: "Gotham City",
|
18
|
+
host: "decide.gotham.gov",
|
19
|
+
description_en: "Fictional city appearing in American comic books.",
|
20
|
+
organization_admin_email: "f.laguardia@gotham.gov"
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
it "returns a valid response" do
|
25
|
+
expect { command.call }.to broadcast(:ok)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "creates a new organization" do
|
29
|
+
expect { command.call }.to change { Organization.count }.by(1)
|
30
|
+
organization = Organization.last
|
31
|
+
|
32
|
+
expect(organization.name).to eq("Gotham City")
|
33
|
+
expect(organization.host).to eq("decide.gotham.gov")
|
34
|
+
end
|
35
|
+
|
36
|
+
it "invites a user as organization admin" do
|
37
|
+
expect { command.call }.to change { User.count }.by(1)
|
38
|
+
admin = User.last
|
39
|
+
|
40
|
+
expect(admin.email).to eq("f.laguardia@gotham.gov")
|
41
|
+
expect(admin.organization.name).to eq("Gotham City")
|
42
|
+
expect(admin.organization.description).to include("en" => "Fictional city appearing in American comic books.")
|
43
|
+
expect(admin.roles).to include("admin")
|
44
|
+
expect(admin).to be_created_by_invite
|
45
|
+
end
|
46
|
+
|
47
|
+
it "sends a custom email", perform_enqueued: true do
|
48
|
+
expect { command.call }.to change { emails.count }.by(1)
|
49
|
+
expect(last_email_body).to include(URI.encode_www_form(["/admin"]))
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "when the form is invalid" do
|
54
|
+
let(:params) do
|
55
|
+
{
|
56
|
+
name: nil,
|
57
|
+
host: "foo.com"
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
it "returns an invalid response" do
|
62
|
+
expect { command.call }.to broadcast(:invalid)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
describe "Manage admins", type: :feature do
|
6
|
+
let(:admin) { create(:admin) }
|
7
|
+
let!(:admin2) { create(:admin) }
|
8
|
+
|
9
|
+
before do
|
10
|
+
login_as admin, scope: :admin
|
11
|
+
visit decidim_system.admins_path
|
12
|
+
end
|
13
|
+
|
14
|
+
it "creates a new admin" do
|
15
|
+
find(".actions .new").click
|
16
|
+
|
17
|
+
within ".new_admin" do
|
18
|
+
fill_in :admin_email, with: "admin@foo.bar"
|
19
|
+
fill_in :admin_password, with: "fake123"
|
20
|
+
fill_in :admin_password_confirmation, with: "fake123"
|
21
|
+
|
22
|
+
find("*[type=submit]").click
|
23
|
+
end
|
24
|
+
|
25
|
+
within ".flash" do
|
26
|
+
expect(page).to have_content("successfully")
|
27
|
+
end
|
28
|
+
|
29
|
+
within "table" do
|
30
|
+
expect(page).to have_content("admin@foo.bar")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
it "updates an admin" do
|
35
|
+
within find("tr", text: admin.email) do
|
36
|
+
click_link "Edit"
|
37
|
+
end
|
38
|
+
|
39
|
+
within ".edit_admin" do
|
40
|
+
fill_in :admin_email, with: "admin@another.domain"
|
41
|
+
|
42
|
+
find("*[type=submit]").click
|
43
|
+
end
|
44
|
+
|
45
|
+
within ".flash" do
|
46
|
+
expect(page).to have_content("successfully")
|
47
|
+
end
|
48
|
+
|
49
|
+
within "table" do
|
50
|
+
expect(page).to have_content("admin@another.domain")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
it "deletes an admin" do
|
55
|
+
within find("tr", text: admin2.email) do
|
56
|
+
click_link "Destroy"
|
57
|
+
end
|
58
|
+
|
59
|
+
within ".flash" do
|
60
|
+
expect(page).to have_content("successfully")
|
61
|
+
end
|
62
|
+
|
63
|
+
within "table" do
|
64
|
+
expect(page).to_not have_content(admin2.email)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
describe "Organizations", type: :feature do
|
6
|
+
let(:admin) { create(:admin) }
|
7
|
+
|
8
|
+
context "authenticated admin" do
|
9
|
+
before do
|
10
|
+
login_as admin, scope: :admin
|
11
|
+
visit decidim_system.root_path
|
12
|
+
end
|
13
|
+
|
14
|
+
context "creating an organization" do
|
15
|
+
before do
|
16
|
+
click_link "Organizations"
|
17
|
+
click_link "New"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "creates a new organization" do
|
21
|
+
fill_in "Name", with: "Citizen Corp"
|
22
|
+
fill_in "Host", with: "www.citizen.corp"
|
23
|
+
fill_in "Organization admin email", with: "mayor@citizen.corp"
|
24
|
+
click_button "Create organization & invite admin"
|
25
|
+
|
26
|
+
expect(page).to have_css("div.flash.success")
|
27
|
+
expect(page).to have_content("Citizen Corp")
|
28
|
+
end
|
29
|
+
|
30
|
+
context "with invalid data" do
|
31
|
+
it "doesn't create an organization" do
|
32
|
+
fill_in "Name", with: "Bad"
|
33
|
+
click_button "Create organization & invite admin"
|
34
|
+
|
35
|
+
expect(page).to have_css("div.flash.alert")
|
36
|
+
expect(page).to_not have_content("Organization created successfully")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "editing an organization" do
|
42
|
+
let!(:organization) { create(:organization, name: "Citizen Corp") }
|
43
|
+
|
44
|
+
before do
|
45
|
+
click_link "Organizations"
|
46
|
+
within("table tbody tr:first") do
|
47
|
+
click_link "Edit"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it "edits the data" do
|
52
|
+
fill_in "Name", with: "Citizens Rule!"
|
53
|
+
fill_in "Host", with: "www.foo.org"
|
54
|
+
fill_in "Description (en)", with: "Organization description."
|
55
|
+
click_button "Save"
|
56
|
+
|
57
|
+
expect(page).to have_css("div.flash.success")
|
58
|
+
expect(page).to have_content("Citizens Rule!")
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe "Sessions", type: :feature do
|
5
|
+
let!(:admin) do
|
6
|
+
create(:admin, email: "admin@example.org",
|
7
|
+
password: "123456",
|
8
|
+
password_confirmation: "123456")
|
9
|
+
end
|
10
|
+
|
11
|
+
before(:each) do
|
12
|
+
visit decidim_system.root_path
|
13
|
+
end
|
14
|
+
|
15
|
+
context "when using a correct username and password" do
|
16
|
+
it "lets you into the system panel" do
|
17
|
+
within ".new_admin" do
|
18
|
+
fill_in :admin_email, with: "admin@example.org"
|
19
|
+
fill_in :admin_password, with: "123456"
|
20
|
+
find("*[type=submit]").click
|
21
|
+
end
|
22
|
+
|
23
|
+
expect(page).to have_content("Dashboard")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when using an incorrect username and password" do
|
28
|
+
it "doesn't let you in the admin panel" do
|
29
|
+
within ".new_admin" do
|
30
|
+
fill_in :admin_email, with: "admin@example.org"
|
31
|
+
fill_in :admin_password, with: "forged_password"
|
32
|
+
find("*[type=submit]").click
|
33
|
+
end
|
34
|
+
|
35
|
+
expect(page).not_to have_content("Dashboard")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
module Decidim
|
5
|
+
module System
|
6
|
+
describe Admin, :db do
|
7
|
+
let(:admin) { build(:admin) }
|
8
|
+
|
9
|
+
it "is valid" do
|
10
|
+
expect(admin).to be_valid
|
11
|
+
end
|
12
|
+
|
13
|
+
context "devise emails" do
|
14
|
+
let(:admin) { create(:admin) }
|
15
|
+
|
16
|
+
it "sends them asynchronously" do
|
17
|
+
described_class.send_reset_password_instructions(email: admin.email)
|
18
|
+
expect(ActionMailer::DeliveryJob).to have_been_enqueued.on_queue("mailers")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/decidim.gemspec
CHANGED
@@ -23,9 +23,11 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.require_paths = ["lib"]
|
24
24
|
|
25
25
|
spec.add_dependency "decidim-core", Decidim.version
|
26
|
+
spec.add_dependency "decidim-system", Decidim.version
|
27
|
+
spec.add_dependency "decidim-admin", Decidim.version
|
26
28
|
spec.add_dependency "rails", Decidim.rails_version
|
27
29
|
|
28
30
|
spec.add_development_dependency "bundler", "~> 1.12"
|
29
|
-
spec.add_development_dependency "rake", "~>
|
31
|
+
spec.add_development_dependency "rake", "~> 11.0"
|
30
32
|
spec.add_development_dependency "rspec", "~> 3.0"
|
31
33
|
end
|
data/docker-compose.yml
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
version: '2'
|
2
|
+
services:
|
3
|
+
decidim:
|
4
|
+
build: '.'
|
5
|
+
working_dir: /code
|
6
|
+
volumes:
|
7
|
+
- .:/code
|
8
|
+
environment:
|
9
|
+
- DATABASE_HOST=pg
|
10
|
+
- DATABASE_USERNAME=postgres
|
11
|
+
links:
|
12
|
+
- pg
|
13
|
+
- redis
|
14
|
+
pg:
|
15
|
+
image: postgres
|
16
|
+
volumes:
|
17
|
+
- pg-data:/var/lib/postgresql/data
|
18
|
+
redis:
|
19
|
+
image: redis
|
20
|
+
volumes:
|
21
|
+
- redis-data:/data
|
22
|
+
volumes:
|
23
|
+
pg-data: {}
|
24
|
+
redis-data: {}
|
data/lib/decidim.rb
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require "decidim/core"
|
3
|
+
require "decidim/system"
|
4
|
+
require "decidim/admin"
|
3
5
|
|
4
6
|
# Module declaration.
|
5
7
|
module Decidim
|
8
|
+
# Loads seeds from all engines.
|
9
|
+
def self.seed!
|
10
|
+
Rails.application.railties.select do |railtie|
|
11
|
+
railtie.respond_to?(:load_seed) && railtie.class.name.include?("Decidim::")
|
12
|
+
end.each(&:load_seed)
|
13
|
+
end
|
6
14
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require "rails/generators"
|
3
3
|
require "rails/generators/rails/app/app_generator"
|
4
|
-
require_relative "app_builder"
|
5
|
-
require "generators/decidim/install_generator"
|
6
4
|
require "decidim/core/version"
|
5
|
+
require_relative "app_builder"
|
6
|
+
require_relative "install_generator"
|
7
7
|
|
8
8
|
module Decidim
|
9
9
|
module Generators
|
@@ -32,17 +32,48 @@ module Decidim
|
|
32
32
|
desc: "Path to the gem"
|
33
33
|
|
34
34
|
class_option :edge, type: :boolean, default: false,
|
35
|
-
desc: "Use
|
35
|
+
desc: "Use GitHub's edge version"
|
36
36
|
|
37
37
|
class_option :database, type: :string, aliases: "-d", default: "postgresql",
|
38
38
|
desc: "Configure for selected database (options: #{DATABASES.join("/")})"
|
39
39
|
|
40
|
+
class_option :recreate_db, type: :boolean, default: false,
|
41
|
+
desc: "Recreate test database"
|
42
|
+
|
40
43
|
class_option :migrate, type: :boolean, default: false,
|
41
44
|
desc: "Run migrations after installing decidim"
|
42
45
|
|
46
|
+
def database_yml
|
47
|
+
template "database.yml.erb", "config/database.yml", force: true
|
48
|
+
end
|
49
|
+
|
50
|
+
def docker
|
51
|
+
template "Dockerfile.erb", "Dockerfile"
|
52
|
+
template "docker-compose.yml.erb", "docker-compose.yml"
|
53
|
+
end
|
54
|
+
|
55
|
+
def cable_yml
|
56
|
+
template "cable.yml.erb", "config/cable.yml", force: true
|
57
|
+
end
|
58
|
+
|
59
|
+
def readme
|
60
|
+
template "README.md.erb", "README.md", force: true
|
61
|
+
end
|
62
|
+
|
63
|
+
def secret_token
|
64
|
+
require "securerandom"
|
65
|
+
SecureRandom.hex(64)
|
66
|
+
end
|
67
|
+
|
68
|
+
def app_json
|
69
|
+
template "app.json.erb", "app.json"
|
70
|
+
end
|
71
|
+
|
43
72
|
def install
|
44
73
|
Decidim::Generators::InstallGenerator.start [
|
45
|
-
"--
|
74
|
+
"--recreate_db=#{options[:recreate_db]}",
|
75
|
+
"--migrate=#{options[:migrate]}",
|
76
|
+
"--app_name=#{app_name}"
|
46
77
|
]
|
47
78
|
end
|
48
79
|
|
@@ -0,0 +1,121 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "rails/generators/base"
|
3
|
+
require "securerandom"
|
4
|
+
|
5
|
+
module Decidim
|
6
|
+
module Generators
|
7
|
+
# Installs `decidim` to a Rails app by adding the needed lines of code
|
8
|
+
# automatically to important files in the Rails app.
|
9
|
+
#
|
10
|
+
# Remember that, for how generators work, actions are executed based on the
|
11
|
+
# definition order of the public methods.
|
12
|
+
class InstallGenerator < Rails::Generators::Base
|
13
|
+
desc "Install decidim"
|
14
|
+
source_root File.expand_path("../templates", __FILE__)
|
15
|
+
|
16
|
+
class_option :app_name, type: :string, default: nil,
|
17
|
+
desc: "The name of the app"
|
18
|
+
class_option :migrate, type: :boolean, default: false,
|
19
|
+
desc: "Run migrations after installing decidim"
|
20
|
+
class_option :recreate_db, type: :boolean, default: false,
|
21
|
+
desc: "Run migrations after installing decidim"
|
22
|
+
|
23
|
+
def install
|
24
|
+
route "mount Decidim::System::Engine => '/system'"
|
25
|
+
route "mount Decidim::Admin::Engine => '/admin'"
|
26
|
+
route "mount Decidim::Core::Engine => '/'"
|
27
|
+
end
|
28
|
+
|
29
|
+
def copy_migrations
|
30
|
+
rake "railties:install:migrations"
|
31
|
+
recreate_db if options[:recreate_db]
|
32
|
+
rake "db:migrate" if options[:migrate]
|
33
|
+
end
|
34
|
+
|
35
|
+
def add_seeds
|
36
|
+
append_file "db/seeds.rb", "\nDecidim.seed!"
|
37
|
+
end
|
38
|
+
|
39
|
+
def copy_initializer
|
40
|
+
template "initializer.rb", "config/initializers/decidim.rb"
|
41
|
+
end
|
42
|
+
|
43
|
+
def insert_into_layout
|
44
|
+
inject_into_file "app/views/layouts/application.html.erb",
|
45
|
+
before: "</head>" do
|
46
|
+
" <%= render partial: 'layouts/decidim/meta' %>\n "
|
47
|
+
end
|
48
|
+
|
49
|
+
inject_into_file "app/views/layouts/application.html.erb",
|
50
|
+
after: "<body>" do
|
51
|
+
"\n <%= render partial: 'layouts/decidim/header' %>"
|
52
|
+
end
|
53
|
+
|
54
|
+
inject_into_file "app/views/layouts/application.html.erb",
|
55
|
+
before: "</body>" do
|
56
|
+
" <%= render partial: 'layouts/decidim/footer' %>\n "
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def replace_title
|
61
|
+
gsub_file "app/views/layouts/application.html.erb",
|
62
|
+
%r{<title>(.*)</title>},
|
63
|
+
"<title><%= decidim_page_title %></title>"
|
64
|
+
end
|
65
|
+
|
66
|
+
def append_assets
|
67
|
+
append_file "app/assets/javascripts/application.js", "//= require decidim"
|
68
|
+
inject_into_file "app/assets/stylesheets/application.css",
|
69
|
+
before: "*= require_tree ." do
|
70
|
+
"*= require decidim\n"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def smtp_environment
|
75
|
+
inject_into_file "config/environments/production.rb",
|
76
|
+
after: "config.log_formatter = ::Logger::Formatter.new" do
|
77
|
+
%(
|
78
|
+
|
79
|
+
config.action_mailer.smtp_settings = {
|
80
|
+
:address => Rails.application.secrets.smtp_address,
|
81
|
+
:port => Rails.application.secrets.smtp_port,
|
82
|
+
:authentication => Rails.application.secrets.smtp_authentication,
|
83
|
+
:user_name => Rails.application.secrets.smtp_username,
|
84
|
+
:password => Rails.application.secrets.smtp_password,
|
85
|
+
:domain => Rails.application.secrets.smtp_domain,
|
86
|
+
:enable_starttls_auto => Rails.application.secrets.smtp_starttls_auto,
|
87
|
+
:openssl_verify_mode => 'none'
|
88
|
+
}
|
89
|
+
|
90
|
+
if Rails.application.secrets.sendgrid
|
91
|
+
config.action_mailer.default_options = {
|
92
|
+
"X-SMTPAPI" => {
|
93
|
+
filters: {
|
94
|
+
clicktrack: { settings: { enable: 0 } },
|
95
|
+
opentrack: { settings: { enable: 0 } }
|
96
|
+
}
|
97
|
+
}.to_json
|
98
|
+
}
|
99
|
+
end
|
100
|
+
)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def secrets
|
105
|
+
template "secrets.yml.erb", "config/secrets.yml", force: true
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
|
110
|
+
def recreate_db
|
111
|
+
unless ENV["CI"]
|
112
|
+
rake "db:environment:set", env: "development"
|
113
|
+
rake "db:drop"
|
114
|
+
end
|
115
|
+
rake "db:create"
|
116
|
+
rake "db:migrate"
|
117
|
+
rake "db:test:prepare"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|