diff --git a/app/controllers/moments_controller.rb b/app/controllers/moments_controller.rb index 6229a3e8bc..468615f7fa 100644 --- a/app/controllers/moments_controller.rb +++ b/app/controllers/moments_controller.rb @@ -25,6 +25,7 @@ def index # GET /moments/1.json def show show_with_comments(@moment) + @resources = ResourceRecommendation.new(@moment).resources end # GET /moments/new diff --git a/app/services/moment_keywords.rb b/app/services/moment_keywords.rb new file mode 100644 index 0000000000..0b34af87de --- /dev/null +++ b/app/services/moment_keywords.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +class MomentKeywords + def initialize(moment) + @moment = moment + @moment_keywords = [] + end + + def extract_moment_keywords + extract_keywords(@moment.categories) + extract_keywords(@moment.moods) + extract_keywords(@moment.strategies) + extract_moment_name + extract_moment_why + extract_moment_fix + remove_special_chars + downcase_keywords + end + + private + + def strip_tags(str) + ActionController::Base.helpers.strip_tags(str) + end + + def extract_keywords(array) + array.each do |item| + @moment_keywords.push(item['name'].split, + strip_tags(item['description']).split) + end + end + + def extract_moment_name + @moment_keywords.push(@moment.name.split) + end + + def extract_moment_why + @moment_keywords.push(strip_tags(@moment.why).split) + end + + def extract_moment_fix + @moment_keywords.push(strip_tags(@moment.fix).split) + end + + def remove_special_chars + @moment_keywords = @moment_keywords.flatten.each do |keyword| + keyword.tr!('-', ' ') + keyword.gsub!(/[^\p{Alpha} -]/, '') + end + end + + def downcase_keywords + @moment_keywords = @moment_keywords.map(&:downcase) + end +end diff --git a/app/services/resource_recommendation.rb b/app/services/resource_recommendation.rb new file mode 100644 index 0000000000..11433af6f0 --- /dev/null +++ b/app/services/resource_recommendation.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +class ResourceRecommendation + def initialize(moment) + @moment = moment + @moment_keywords = [] + end + + def resources + @moment_keywords = MomentKeywords.new(@moment).extract_moment_keywords + all_resources.select do |resource| + tags = resource['tags'].flat_map do |tag| + tag.tr('_', ' ') + end + (tags & @moment_keywords).any? + end + end + + private + + def all_resources + JSON.parse(File.read(Rails.root.join('doc', 'pages', 'resources.json'))) + end +end diff --git a/app/views/moments/show.html.erb b/app/views/moments/show.html.erb index 89c7ed2b68..b979fd3cf2 100644 --- a/app/views/moments/show.html.erb +++ b/app/views/moments/show.html.erb @@ -43,6 +43,16 @@ <% end %> +