lib/souls/api/generate/rspec_query.rb in souls-0.51.2 vs lib/souls/api/generate/rspec_query.rb in souls-0.52.0

- old
+ new

@@ -1,79 +1,95 @@ module Souls - module Api::Generate - ## Generate Rspec Query - class << self - def rspec_query_head(class_name: "user") - file_dir = "./spec/queries/" - FileUtils.mkdir_p(file_dir) unless Dir.exist?(file_dir) - file_path = "./spec/queries/#{class_name.singularize}_spec.rb" - File.open(file_path, "w") do |f| - f.write(<<~TEXT) - RSpec.describe \"#{class_name.camelize} Query テスト\" do - describe "#{class_name.camelize} データを取得する" do - TEXT - end + class Generate < Thor + desc "rspec_query [CLASS_NAME]", "Generate Rspec Query Test from schema.rb" + def rspec_query(class_name) + singularized_class_name = class_name.singularize + file_path = "./spec/queries/#{singularized_class_name}_spec.rb" + return "RspecQuery already exist! #{file_path}" if File.exist?(file_path) + + rspec_query_head(class_name: singularized_class_name) + rspec_query_after_head(class_name: singularized_class_name) + rspec_query_params(class_name: singularized_class_name) + rspec_query_end(class_name: singularized_class_name) + puts(Paint % ["Created file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }]) + file_path + rescue Thor::Error => e + raise(Thor::Error, e) + end + + private + + def rspec_query_head(class_name: "user") + file_dir = "./spec/queries/" + FileUtils.mkdir_p(file_dir) unless Dir.exist?(file_dir) + file_path = "./spec/queries/#{class_name.singularize}_spec.rb" + File.open(file_path, "w") do |f| + f.write(<<~TEXT) + RSpec.describe \"#{class_name.camelize} Query テスト\" do + describe "#{class_name.camelize} データを取得する" do + TEXT end + end - def rspec_query_after_head(class_name: "user") - file_path = "./spec/queries/#{class_name.singularize}_spec.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?("t.index") || line.strip == "end" - if @relation_params.empty? - new_line.write(<<-TEXT) + def rspec_query_after_head(class_name: "user") + file_path = "./spec/queries/#{class_name.singularize}_spec.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?("t.index") || line.strip == "end" + if @relation_params.empty? + new_line.write(<<-TEXT) let!(:#{class_name}) { FactoryBot.create(:#{class_name}) } let(:query) do data_id = Base64.encode64("#{class_name.camelize}:\#{#{class_name.singularize.underscore}.id}") %(query { #{class_name.singularize.camelize(:lower)}(id: \\"\#{data_id}\\") { id - TEXT - else - new_line.write(<<-TEXT) + TEXT + else + new_line.write(<<-TEXT) let(:#{class_name}) { FactoryBot.create(:#{class_name}, #{@relation_params.join(', ')}) } let(:query) do data_id = Base64.encode64("#{class_name.camelize}:\#{#{class_name.singularize.underscore}.id}") %(query { #{class_name.singularize.camelize(:lower)}(id: \\"\#{data_id}\\") { id - TEXT - end - break + TEXT end - _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0] - case name - when /$*_id\z/ - relation_col = name.gsub("_id", "") - @relation_params << "#{name}: #{relation_col}.id" - new_line.write(" let(:#{relation_col}) { FactoryBot.create(:#{relation_col}) }\n") - end + break end - @on = true if Souls.table_check(line: line, class_name: class_name) + _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0] + case name + when /$*_id\z/ + relation_col = name.gsub("_id", "") + @relation_params << "#{name}: #{relation_col}.id" + new_line.write(" let(:#{relation_col}) { FactoryBot.create(:#{relation_col}) }\n") + end end + @on = true if Souls.table_check(line: line, class_name: class_name) end end end + end - def rspec_query_params(class_name: "user") - file_path = "./spec/queries/#{class_name.singularize}_spec.rb" - path = "./db/schema.rb" - @on = false - 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?("t.index") || line.strip == "end" - new_line.write(<<-TEXT) + def rspec_query_params(class_name: "user") + file_path = "./spec/queries/#{class_name.singularize}_spec.rb" + path = "./db/schema.rb" + @on = false + 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?("t.index") || line.strip == "end" + new_line.write(<<-TEXT) } } ) end @@ -88,84 +104,68 @@ rescue raise StandardError, result end expect(a1).to include( "id" => be_a(String), - TEXT - break - end - _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0] - case name - when "user_id", "created_at", "updated_at", /$*_id\z/ - next - else - new_line.write(" #{name.camelize(:lower)}\n") - end + TEXT + break end - @on = true if Souls.table_check(line: line, class_name: class_name) + _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0] + case name + when "user_id", "created_at", "updated_at", /$*_id\z/ + next + else + new_line.write(" #{name.camelize(:lower)}\n") + end end + @on = true if Souls.table_check(line: line, class_name: class_name) end end end + end - def rspec_query_end(class_name: "user") - file_path = "./spec/queries/#{class_name.singularize}_spec.rb" - path = "./db/schema.rb" - @on = false - 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?("t.index") || line.strip == "end" - new_line.write(<<~TEXT) - ) - end + def rspec_query_end(class_name: "user") + file_path = "./spec/queries/#{class_name.singularize}_spec.rb" + path = "./db/schema.rb" + @on = false + 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?("t.index") || line.strip == "end" + new_line.write(<<~TEXT) + ) end end - TEXT - break - end - type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0] - field ||= Souls.type_check(type) - array_true = line.include?("array: true") - case name - when "user_id", "created_at", "updated_at", /$*_id\z/ - next - else - case type - when "text", "date", "datetime" - if array_true - new_line.write(" \"#{name.camelize(:lower)}\" => be_all(String),\n") - else - new_line.write(" \"#{name.camelize(:lower)}\" => be_a(String),\n") - end - when "boolean" - new_line.write(" \"#{name.singularize.camelize(:lower)}\" => be_in([true, false]),\n") - when "string", "bigint", "integer", "float" - new_line.write(" \"#{name.singularize.camelize(:lower)}\" => be_a(#{field}),\n") end + TEXT + break + end + type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0] + field ||= Souls.type_check(type) + array_true = line.include?("array: true") + case name + when "user_id", "created_at", "updated_at", /$*_id\z/ + next + else + case type + when "text", "date", "datetime" + if array_true + new_line.write(" \"#{name.camelize(:lower)}\" => be_all(String),\n") + else + new_line.write(" \"#{name.camelize(:lower)}\" => be_a(String),\n") + end + when "boolean" + new_line.write(" \"#{name.singularize.camelize(:lower)}\" => be_in([true, false]),\n") + when "string", "bigint", "integer", "float" + new_line.write(" \"#{name.singularize.camelize(:lower)}\" => be_a(#{field}),\n") end end - @on = true if Souls.table_check(line: line, class_name: class_name) end + @on = true if Souls.table_check(line: line, class_name: class_name) end end - file_path end - - def rspec_query(class_name: "user") - singularized_class_name = class_name.singularize - file_path = "./spec/queries/#{singularized_class_name}_spec.rb" - return "RspecQuery already exist! #{file_path}" if File.exist?(file_path) - - rspec_query_head(class_name: singularized_class_name) - rspec_query_after_head(class_name: singularized_class_name) - rspec_query_params(class_name: singularized_class_name) - rspec_query_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 + file_path end end end