lib/souls/generate/resolver.rb in souls-0.23.5 vs lib/souls/generate/resolver.rb in souls-0.23.6

- old
+ new

@@ -1,155 +1,152 @@ module Souls module Generate - class << self - ## Generate Resolver - def resolver_head class_name: "souls" - FileUtils.mkdir_p "./app/graphql/resolvers" unless Dir.exist? "./app/graphql/resolvers" - file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb" - @relation_params = [] - File.open(file_path, "w") do |f| - f.write <<~EOS - module Resolvers - class #{class_name.camelize}Search < Base - include SearchObject.module(:graphql) - scope { ::#{class_name.camelize}.all } - type Types::#{class_name.camelize}Type.connection_type, null: false - description "Search #{class_name.camelize}" + ## Generate Resolver + def self.resolver_head(class_name: "souls") + FileUtils.mkdir_p("./app/graphql/resolvers") unless Dir.exist?("./app/graphql/resolvers") + file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb" + @relation_params = [] + File.open(file_path, "w") do |f| + f.write(<<~TEXT) + module Resolvers + class #{class_name.camelize}Search < Base + include SearchObject.module(:graphql) + scope { ::#{class_name.camelize}.all } + type Types::#{class_name.camelize}Type.connection_type, null: false + description "Search #{class_name.camelize}" - class #{class_name.camelize}Filter < ::Types::BaseInputObject - argument :OR, [self], required: false - EOS - end + class #{class_name.camelize}Filter < ::Types::BaseInputObject + argument :OR, [self], required: false + TEXT end + end - def resolver_params class_name: "souls" - file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb" - path = "./db/schema.rb" - @on = false - @user_exist = false - @relation_params = [] - File.open(file_path, "a") do |new_line| - File.open(path, "r") do |f| - f.each_line.with_index do |line, i| - if @on - if line.include?("end") || line.include?("t.index") - break - end - field = "[String]" if line.include?("array: true") - type, name = get_type_and_name(line) - field ||= type_check type - case name - when "user_id" - @user_exist = true - when /$*_id\z/ - @relation_params << name - new_line.write " argument :#{name}, String, required: false\n" - when "created_at", "updated_at" - next - else - new_line.write " argument :#{name}, #{field}, required: false\n" - end + def self.resolver_params(class_name: "souls") + file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb" + path = "./db/schema.rb" + @on = false + @user_exist = false + @relation_params = [] + File.open(file_path, "a") do |new_line| + File.open(path, "r") do |f| + f.each_line.with_index do |line, _i| + if @on + break if line.include?("end") || line.include?("t.index") + + field = "[String]" if line.include?("array: true") + type, name = get_type_and_name(line) + field ||= type_check(type) + case name + when "user_id" + @user_exist = true + when /$*_id\z/ + @relation_params << name + new_line.write(" argument :#{name}, String, required: false\n") + when "created_at", "updated_at" + next + else + new_line.write(" argument :#{name}, #{field}, required: false\n") end - @on = true if table_check(line: line, class_name: class_name) end + @on = true if table_check(line: line, class_name: class_name) end end end - - def resolver_after_params class_name: "souls" - file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb" - File.open(file_path, "a") do |f| - f.write <<-EOS - argument :start_date, String, required: false - argument :end_date, String, required: false end - option :filter, type: #{class_name.camelize}Filter, with: :apply_filter - option :first, type: types.Int, with: :apply_first - option :skip, type: types.Int, with: :apply_skip + def self.resolver_after_params(class_name: "souls") + file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb" + File.open(file_path, "a") do |f| + f.write(<<-TEXT) + argument :start_date, String, required: false + argument :end_date, String, required: false + end - def apply_filter(scope, value) - branches = normalize_filters(value).inject { |a, b| a.or(b) } - scope.merge branches - end + option :filter, type: #{class_name.camelize}Filter, with: :apply_filter + option :first, type: types.Int, with: :apply_first + option :skip, type: types.Int, with: :apply_skip - def normalize_filters(value, branches = []) - scope = ::#{class_name.camelize}.all - EOS - end + def apply_filter(scope, value) + branches = normalize_filters(value).inject { |a, b| a.or(b) } + scope.merge branches + end + + def normalize_filters(value, branches = []) + scope = ::#{class_name.camelize}.all + TEXT end + end - def resolver_before_end class_name: "souls" - file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb" - path = "./db/schema.rb" - @on = false - @user_exist = false - @relation_params = [] - File.open(file_path, "a") do |new_line| - File.open(path, "r") do |f| - f.each_line.with_index do |line, i| - if @on - if line.include?("end") || line.include?("t.index") - break - end - type, name = get_type_and_name(line) - if line.include?("array: true") - new_line.write " scope = scope.where(\"#{name} @> ARRAY[?]::text[]\", value[:#{name}]) if value[:#{name}]\n" - next - end - case name - when "user_id" - @user_exist = true - when /$*_id\z/ - @relation_params << name - new_line.write " scope = scope.where(#{name}: decode_global_key(value[:#{name}])) if value[:#{name}]\n" - when "created_at", "updated_at" - next + def self.resolver_before_end(class_name: "souls") + file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb" + path = "./db/schema.rb" + @on = false + @user_exist = false + @relation_params = [] + File.open(file_path, "a") do |new_line| + File.open(path, "r") do |f| + f.each_line.with_index do |line, _i| + if @on + break if line.include?("end") || line.include?("t.index") + + type, name = get_type_and_name(line) + if line.include?("array: true") + new_line.write(" scope = scope.where(\"#{name} @> ARRAY[?]::text[]\", value[:#{name}]) if value[:#{name}]\n") + next + end + case name + when "user_id" + @user_exist = true + when /$*_id\z/ + @relation_params << name + new_line.write(" scope = scope.where(#{name}: decode_global_key(value[:#{name}])) if value[:#{name}]\n") + when "created_at", "updated_at" + next + else + case type + when "boolean" + new_line.write(" scope = scope.where(#{name}: value[:#{name}]) unless value[:#{name}].nil?\n") else - case type - when "boolean" - new_line.write " scope = scope.where(#{name}: value[:#{name}]) unless value[:#{name}].nil?\n" - else - new_line.write " scope = scope.where(#{name}: value[:#{name}]) if value[:#{name}]\n" - end + new_line.write(" scope = scope.where(#{name}: value[:#{name}]) if value[:#{name}]\n") end end - @on = true if table_check(line: line, class_name: class_name) end + @on = true if table_check(line: line, class_name: class_name) end end end + end - def resolver_end class_name: "souls" - file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb" - File.open(file_path, "a") do |f| - f.write <<~EOS - scope = scope.where("created_at >= ?", value[:start_date]) if value[:start_date] - scope = scope.where("created_at <= ?", value[:end_date]) if value[:end_date] - branches << scope - value[:OR].inject(branches) { |s, v| normalize_filters(v, s) } if value[:OR].present? - branches - end + def self.resolver_end(class_name: "souls") + file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb" + File.open(file_path, "a") do |f| + f.write(<<~TEXT) + scope = scope.where("created_at >= ?", value[:start_date]) if value[:start_date] + scope = scope.where("created_at <= ?", value[:end_date]) if value[:end_date] + branches << scope + value[:OR].inject(branches) { |s, v| normalize_filters(v, s) } if value[:OR].present? + branches end end - EOS - end - file_path + end + TEXT end + file_path + end - def resolver class_name: "souls" - singularized_class_name = class_name.singularize.underscore - file_path = "./app/graphql/resolvers/#{singularized_class_name}_search.rb" - return "Resolver already exist! #{file_path}" if File.exist? file_path - resolver_head class_name: singularized_class_name - resolver_params class_name: singularized_class_name - resolver_after_params class_name: singularized_class_name - resolver_before_end class_name: singularized_class_name - resolver_end class_name: singularized_class_name - puts Paint % ["Created file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }] - file_path - rescue StandardError => e - raise StandardError, e - end + def self.resolver(class_name: "souls") + singularized_class_name = class_name.singularize.underscore + file_path = "./app/graphql/resolvers/#{singularized_class_name}_search.rb" + return "Resolver already exist! #{file_path}" if File.exist?(file_path) + + resolver_head(class_name: singularized_class_name) + resolver_params(class_name: singularized_class_name) + resolver_after_params(class_name: singularized_class_name) + resolver_before_end(class_name: singularized_class_name) + resolver_end(class_name: singularized_class_name) + puts(Paint % ["Created file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }]) + file_path + rescue StandardError => e + raise(StandardError, e) end end end