parent
							
								
									c1988ef6b3
								
							
						
					
					
						commit
						26e2093f77
					
				| @ -0,0 +1,2 @@ | ||||
| // Place all the behaviors and hooks related to the matching controller here.
 | ||||
| // All this logic will automatically be available in application.js.
 | ||||
| @ -0,0 +1,3 @@ | ||||
| // Place all the styles related to the version_releases controller here. | ||||
| // They will automatically be included in application.css. | ||||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | ||||
| @ -0,0 +1,125 @@ | ||||
| class VersionReleasesController < ApplicationController | ||||
|   before_action :set_user_and_project | ||||
|   before_action :require_login, except: [:index] | ||||
|   before_action :find_version , only: [:edit, :update, :destroy] | ||||
| 
 | ||||
|   def index | ||||
|     version_releases = @repository.version_releases.includes(:user) | ||||
|     version_releases = version_releases.where(draft: false) unless current_user.present? && (current_user == @user || current_user.admin?) | ||||
| 
 | ||||
|     @version_releases_size = version_releases.size | ||||
|     page = params[:page] | ||||
|     @limit = params[:limit] || 15 | ||||
|     @version_releases = version_releases.order("created_at desc").page(page).limit(@limit) | ||||
|   end | ||||
| 
 | ||||
|   def create | ||||
|     if params[:name].nil? | ||||
|       normal_status(-1, "名称不能为空") | ||||
|     elsif params[:tag_name].blank? | ||||
|       normal_status(-1, "标签名称不能为空") | ||||
|     else | ||||
|       ActiveRecord::Base.transaction do | ||||
|         version_params = { | ||||
|           body:	params[:body], | ||||
|           draft: params[:draft] || false, | ||||
|           name: params[:name], | ||||
|           prerelease: params[:prerelease], | ||||
|           tag_name: params[:tag_name], | ||||
|           target_commitish: params[:target_commitish] || "master"  #分支 | ||||
|         } | ||||
|         version_release = VersionRelease.new(version_params.merge(user_id: current_user.id, repository_id: @repository.id)) | ||||
|         if version_release.save! | ||||
|           git_version_release = Gitea::Versions::CreateService.new(@user.gitea_token, @repository.try(:login), @repository.try(:identifier), version_params).call | ||||
| 
 | ||||
|           if git_version_release | ||||
|             update_params = { | ||||
|               tarball_url: git_version_release["tarball_url"], | ||||
|               zipball_url: git_version_release["zipball_url"], | ||||
|               url: git_version_release["url"], | ||||
|               version_gid: git_version_release["id"], | ||||
|             } | ||||
|             version_release.update_attributes!(update_params) | ||||
|           end | ||||
|         end | ||||
|       rescue => e | ||||
|         puts "create version release error: #{e.message}" | ||||
|         raise Error, e.message | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def edit | ||||
| 
 | ||||
|   end | ||||
| 
 | ||||
|   def update | ||||
|     if params[:name].nil? | ||||
|       normal_status(-1, "名称不能为空") | ||||
|     elsif params[:tag_name].blank? | ||||
|       normal_status(-1, "标签名称不能为空") | ||||
|     else | ||||
|       ActiveRecord::Base.transaction do | ||||
|         version_params = { | ||||
|           body:	params[:body], | ||||
|           draft: params[:draft] || false, | ||||
|           name: params[:name], | ||||
|           prerelease: params[:prerelease], | ||||
|           tag_name: params[:tag_name], | ||||
|           target_commitish: params[:target_commitish] || "master"  #分支 | ||||
|         } | ||||
|         if @version.update_attributes!(version_params) | ||||
|           git_version_release = Gitea::Versions::UpdateService.new(@user.gitea_token, @repository.try(:login), @repository.try(:identifier), version_params, @version.try(:version_gid)).call | ||||
|           unless git_version_release | ||||
|             raise Error, "更新失败" | ||||
|           end | ||||
|         end | ||||
|       rescue => e | ||||
|         puts "update version release error: #{e.message}" | ||||
|         raise Error, e.message | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def destroy | ||||
|     ActiveRecord::Base.transaction do | ||||
|       if @version.destroy | ||||
|         git_version_release = Gitea::Versions::UpdateService.new(@user.gitea_token, @repository.try(:login), @repository.try(:identifier), version_params, @version.try(:version_gid)).call | ||||
|         unless git_version_release | ||||
|           raise Error, "删除失败" | ||||
|         end | ||||
|       end | ||||
|     rescue => e | ||||
|       puts "destroy version release error: #{e.message}" | ||||
|       raise Error, e.message | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
| 
 | ||||
|   private | ||||
| 
 | ||||
|   # def set_project | ||||
|   #   @project = Project.find_by_id(params[:project_id]) | ||||
|   #   @repository = @project.repository  #项目的仓库 | ||||
|   #   unless @project.present? && @repository.present? | ||||
|   #     normal_status(-1, "仓库不存在") | ||||
|   #   end | ||||
|   # end | ||||
| 
 | ||||
|   def set_user_and_project | ||||
|     @project = Project.find_by_id(params[:project_id]) | ||||
|     @repository = @project.repository  #项目的仓库 | ||||
|     @user = @project.owner | ||||
|     unless @user.present? && @project.present? && @repository.present? | ||||
|       normal_status(-1, "仓库不存在") | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def find_version | ||||
|     @version = VersionRelease.find_by_id(params[:id]) | ||||
|     unless @version.present? | ||||
|       normal_status(-1, "版本不存在") | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
| end | ||||
| @ -0,0 +1,2 @@ | ||||
| module VersionReleasesHelper | ||||
| end | ||||
| @ -0,0 +1,4 @@ | ||||
| class VersionRelease < ApplicationRecord | ||||
|   belongs_to :repository | ||||
|   belongs_to :user | ||||
| end | ||||
| @ -0,0 +1,34 @@ | ||||
| class Gitea::Versions::CreateService < Gitea::ClientService | ||||
|   attr_reader :token, :user_name, :repo, :params | ||||
| 
 | ||||
|   # params EX: | ||||
|   # { | ||||
|   #   "body": "sylor",  #user_name | ||||
|   #   "draft": false, | ||||
|   #   "name": "string", | ||||
|   #   "prerelease": true, | ||||
|   #   "tag_name": "string", | ||||
|   #   "target_commitish": "string" | ||||
|   # } | ||||
|   def initialize(token, user_name, repo, params) | ||||
|     @token = token | ||||
|     @params = params | ||||
|     @user_name = user_name | ||||
|     @repo = repo | ||||
|   end | ||||
| 
 | ||||
|   def call | ||||
|     post(url, request_params) | ||||
|   end | ||||
| 
 | ||||
|   private | ||||
| 
 | ||||
|   def request_params | ||||
|     Hash.new.merge(token: token, data: params) | ||||
|   end | ||||
| 
 | ||||
|   def url | ||||
|     "/repos/#{@user}/#{@repo}/releases".freeze | ||||
|   end | ||||
| 
 | ||||
| end | ||||
| @ -0,0 +1,24 @@ | ||||
| class Gitea::Versions::DeleteService < Gitea::ClientService | ||||
|   attr_reader :token, :user_name, :repo,:version_gid | ||||
| 
 | ||||
|   def initialize(token, user_name, repo,version_gid) | ||||
|     @token = token | ||||
|     @user_name = user_name | ||||
|     @repo = repo | ||||
|     @version_gid = version_gid | ||||
|   end | ||||
| 
 | ||||
|   def call | ||||
|     delete(url, params) | ||||
|   end | ||||
| 
 | ||||
|   private | ||||
| 
 | ||||
|   def params | ||||
|     Hash.new.merge(token: @token) | ||||
|   end | ||||
| 
 | ||||
|   def url | ||||
|     "/repos/#{@user}/#{@repo}/releases/#{@version_gid}".freeze | ||||
|   end | ||||
| end | ||||
| @ -0,0 +1,35 @@ | ||||
| class Gitea::Versions::UpdateService < Gitea::ClientService | ||||
|   attr_reader :token, :user_name, :repo, :params, :version_gid | ||||
| 
 | ||||
|   # params EX: | ||||
|   # { | ||||
|   #   "body": "sylor",  #user_name | ||||
|   #   "draft": false, | ||||
|   #   "name": "string", | ||||
|   #   "prerelease": true, | ||||
|   #   "tag_name": "string", | ||||
|   #   "target_commitish": "string" | ||||
|   # } | ||||
|   def initialize(token, user_name, repo, params,version_gid) | ||||
|     @token = token | ||||
|     @params = params | ||||
|     @user_name = user_name | ||||
|     @repo = repo | ||||
|     @version_gid = version_gid | ||||
|   end | ||||
| 
 | ||||
|   def call | ||||
|     update(url, request_params) | ||||
|   end | ||||
| 
 | ||||
|   private | ||||
| 
 | ||||
|   def request_params | ||||
|     Hash.new.merge(token: token, data: params) | ||||
|   end | ||||
| 
 | ||||
|   def url | ||||
|     "/repos/#{@user}/#{@repo}/releases/#{@version_gid}".freeze | ||||
|   end | ||||
| 
 | ||||
| end | ||||
| @ -0,0 +1 @@ | ||||
| json.extract! @version, :id, :name, :body, :tag_name, :target_commitish, :draft, :prerelease,:version_gid | ||||
| @ -0,0 +1,21 @@ | ||||
| json.partial! "commons/success" | ||||
| json.all_count @version_releases_size | ||||
| json.limit @limit | ||||
| json.version_releases do | ||||
|   json.array! @version_releases.to_a.each do |re| | ||||
|     json.id re.id | ||||
|     json.version_gid re.version_gid | ||||
|     json.name re.name | ||||
|     json.body re.body | ||||
|     json.tag_name re.tag_name | ||||
|     json.target_commitish re.target_commitish | ||||
|     json.release_type re.draft ? "草稿" : (re.prerelease ? "预发行" : "稳定") | ||||
|     json.tarball_url re.tarball_url | ||||
|     json.zipball_url re.zipball_url | ||||
|     json.url re.zipball_url | ||||
|     json.user_login re.user.try(:login) | ||||
|     json.user_avatar url_to_avatar(re.user) | ||||
|     json.created_at format_time(re.created_at) | ||||
|     json.format_created time_from_now(re.created_at) | ||||
|   end | ||||
| end | ||||
| @ -0,0 +1,18 @@ | ||||
| class CreateVersionReleases < ActiveRecord::Migration[5.2] | ||||
|   def change | ||||
|     create_table :version_releases do |t| | ||||
|       t.integer :user_id | ||||
|       t.string :name | ||||
|       t.text :body | ||||
|       t.string :tag_name | ||||
|       t.string :target_commitish | ||||
|       t.boolean :draft, default: false | ||||
|       t.boolean :prerelease, default: false | ||||
|       t.string :tarball_url | ||||
|       t.string :zipball_url | ||||
|       t.string :url | ||||
|       t.string :version_gid | ||||
|       t.timestamps | ||||
|     end | ||||
|   end | ||||
| end | ||||
| @ -0,0 +1,6 @@ | ||||
| class AddProjectIdToVersionRelease < ActiveRecord::Migration[5.2] | ||||
|   def change | ||||
|     add_column :version_releases, :repository_id, :integer | ||||
|     add_index :version_releases, [:repository_id] | ||||
|   end | ||||
| end | ||||
| @ -0,0 +1,5 @@ | ||||
| require 'rails_helper' | ||||
| 
 | ||||
| RSpec.describe VersionReleasesController, type: :controller do | ||||
| 
 | ||||
| end | ||||
| @ -0,0 +1,15 @@ | ||||
| require 'rails_helper' | ||||
| 
 | ||||
| # Specs in this file have access to a helper object that includes | ||||
| # the VersionReleasesHelper. For example: | ||||
| # | ||||
| # describe VersionReleasesHelper do | ||||
| #   describe "string concat" do | ||||
| #     it "concats two strings with spaces" do | ||||
| #       expect(helper.concat_strings("this","that")).to eq("this that") | ||||
| #     end | ||||
| #   end | ||||
| # end | ||||
| RSpec.describe VersionReleasesHelper, type: :helper do | ||||
|   pending "add some examples to (or delete) #{__FILE__}" | ||||
| end | ||||
| @ -0,0 +1,5 @@ | ||||
| require 'rails_helper' | ||||
| 
 | ||||
| RSpec.describe VersionRelease, type: :model do | ||||
|   pending "add some examples to (or delete) #{__FILE__}" | ||||
| end | ||||
					Loading…
					
					
				
		Reference in new issue