diff --git a/README.md b/README.md index 0108e49..d060ece 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ And then execute: bundle bundle exec rake decidim_homepage_interactive_map:install:migrations bundle exec rake db:migrate -bundle exec rake decidim_homepage_interactive_map:initialize +bundle exec rake decidim_homepage_interactive_map:webpacker:install ``` ## Contributing diff --git a/decidim-homepage_interactive_map.gemspec b/decidim-homepage_interactive_map.gemspec index 3029ae1..6432d84 100644 --- a/decidim-homepage_interactive_map.gemspec +++ b/decidim-homepage_interactive_map.gemspec @@ -16,7 +16,7 @@ Gem::Specification.new do |s| s.summary = "A decidim homepage_interactive_map module" s.description = "Displays an interactive map on homepage." - s.files = Dir["{app,config,lib,vendor}/**/*", "LICENSE-AGPLv3.txt", "Rakefile", "README.md"] + s.files = Dir["{app,config,lib,vendor}/**/*", "LICENSE-AGPLv3.txt", "Rakefile", "README.md", "package.json"] s.add_dependency "decidim-admin", Decidim::HomepageInteractiveMap::COMPAT_DECIDIM_VERSION s.add_dependency "decidim-core", Decidim::HomepageInteractiveMap::COMPAT_DECIDIM_VERSION diff --git a/lib/tasks/map.rake b/lib/tasks/map.rake deleted file mode 100644 index a562e9d..0000000 --- a/lib/tasks/map.rake +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -namespace :decidim_homepage_interactive_map do - desc "Install dependencies for decidim interactive maps" - task initialize: :environment do - puts "installing dependencies" - system! "npm i --save proj4 proj4leaflet leaflet-tilelayer-here leaflet leaflet-svgicon leaflet.markercluster" - system! "./bin/webpack" - end -end diff --git a/lib/tasks/webpacker_tasks.rake b/lib/tasks/webpacker_tasks.rake new file mode 100644 index 0000000..ae9ba3b --- /dev/null +++ b/lib/tasks/webpacker_tasks.rake @@ -0,0 +1,61 @@ +# frozen_string_literal: true + +require "decidim/gem_manager" + +# Copied from : https://github.com/Platoniq/decidim-module-decidim_awesome/blob/main/lib/tasks/decidim_awesome_webpacker_tasks.rake + +namespace :decidim_homepage_interactive_map do + namespace :webpacker do + desc "Installs module's webpacker files in Rails instance application" + task install: :environment do + raise "Decidim gem is not installed" if decidim_path.nil? + + install_npm + end + + desc "Adds JS dependencies in package.json" + task upgrade: :environment do + raise "Decidim gem is not installed" if decidim_path.nil? + + install_npm + end + + def install_npm + npm_dependencies.each do |type, packages| + puts "install NPM packages. You can also do this manually with this command:" + puts "npm i --save-#{type} #{packages.join(" ")}" + system! "npm i --save-#{type} #{packages.join(" ")}" + end + end + + def npm_dependencies + @npm_dependencies ||= begin + package_json = JSON.parse(File.read(module_path.join("package.json"))) + + { + prod: package_json["dependencies"].map { |package, version| "#{package}@#{version}" }, + }.freeze + end + end + + def module_path + @module_path ||= Pathname.new(module_gemspec.full_gem_path) if Gem.loaded_specs.has_key?(gem_name) + end + + def module_gemspec + @module_gemspec ||= Gem.loaded_specs[gem_name] + end + + def rails_app_path + @rails_app_path ||= Rails.root + end + + def system!(command) + system("cd #{rails_app_path} && #{command}") || abort("\n== Command #{command} failed ==") + end + + def gem_name + "decidim-homepage_interactive_map" + end + end +end