diff --git a/app/services/foreman/plugin.rb b/app/services/foreman/plugin.rb index c5166fb3e4ae..da3fffe81ed1 100644 --- a/app/services/foreman/plugin.rb +++ b/app/services/foreman/plugin.rb @@ -223,5 +223,23 @@ def search_path_override(engine_name, &blk) Rails.logger.warn "Ignoring override of FiltersHelper#search_path_override for '#{engine_name}': no override block is present" end end + + # list of API controller paths, globs allowed + def apipie_documented_controllers(controllers=nil) + if controllers + @apipie_documented_controllers = controllers + Apipie.configuration.api_controllers_matcher.concat(controllers) + end + @apipie_documented_controllers + end + + # list of clontroller classnames that are ignored by apipie + def apipie_ignored_controllers(controllers=nil) + if controllers + @apipie_ignored_controllers = controllers + Apipie.configuration.ignored.concat(controllers) + end + @apipie_ignored_controllers + end end end diff --git a/config/initializers/fast_gettext.rb b/config/initializers/1_fast_gettext.rb similarity index 100% rename from config/initializers/fast_gettext.rb rename to config/initializers/1_fast_gettext.rb diff --git a/config/initializers/apipie.rb b/config/initializers/apipie.rb index 7a09ec430fbb..6fb233185d52 100644 --- a/config/initializers/apipie.rb +++ b/config/initializers/apipie.rb @@ -8,6 +8,26 @@ config.ignored_by_recorder = %w[] config.doc_base_url = "/apidoc" config.use_cache = Rails.env.production? || File.directory?(config.cache_dir) + # config.languages = [] # turn off localized API docs and CLI, useful for development + config.languages = FastGettext.available_locales # generate API docs for all available locales + config.default_locale = FastGettext.default_locale + config.locale = lambda { |loc| loc ? FastGettext.set_locale(loc) : FastGettext.locale } + + substitutions = { + 'operatingsystem_families' => Operatingsystem.families.join(", "), + 'providers' => ComputeResource.providers.join(', ') + } + + config.translate = lambda do |str, loc| + old_loc = FastGettext.locale + FastGettext.set_locale(loc) + if str + trans = _(str) + trans = trans % substitutions + end + FastGettext.set_locale(old_loc) + trans + end config.validate = false config.force_dsl = true config.reload_controllers = Rails.env.development? diff --git a/lib/tasks/plugin_apipie.rake b/lib/tasks/plugin_apipie.rake new file mode 100644 index 000000000000..26286c7761ef --- /dev/null +++ b/lib/tasks/plugin_apipie.rake @@ -0,0 +1,24 @@ +desc 'Generate apipie:cache for plugin - called via rake plugin:apipie:cache[plugin_name]' +task 'plugin:apipie:cache', :engine do |t, args| + + if args[:engine] + # Partially load the Rails environment to avoid + # the need of a database being setup + Rails.application.initialize! + + path_name = args[:engine].gsub('-', '_') + @engine = "#{path_name.camelize}::Engine".constantize + @engine_root = @engine.root + + plugin = Foreman::Plugin.find(args[:engine]) + + Apipie.configuration.ignored = plugin.apipie_ignored_controllers || [] + api_controllers = plugin.apipie_documented_controllers || ["#{@engine_root}/app/controllers/#{path_name}/api/*.rb"] + Apipie.configuration.api_controllers_matcher = api_controllers + + Rake::Task['apipie:cache'].execute + else + puts "You must specify the name of the plugin (e.g. rake plugin:apipie:cache['my_plugin'])" + end + +end