fastlane-plugin-csv_translation 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: cbf2f2914ddd1cd56ebd39354d174a20f85e9a44a8b874230883d5ad46eb03c3
4
+ data.tar.gz: b5f7b4218341d49d2daf9cefd74ea05a2a29197bc27584e19ff54a611da84f61
5
+ SHA512:
6
+ metadata.gz: 9bf222fe9c83c702b1755cafd4ea8b023f6e65aa4366e8febd1e7f2442f5056af4a42b8f7be1da1bfb0f712af504429b58ea97b9ff6ad811602c923b334ad4e8
7
+ data.tar.gz: 02bd4ee840f8800666bd92117684be256ee92a3e26cd032b3e40112b9874101f325550e10484cd950bbf14ac139842e0ff4afb8ba87ba5d905b6efab7abcc2a6
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 Manish Rathi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,113 @@
1
+ # Fastlane `csv_translation` plugin
2
+
3
+ [![fastlane Plugin Badge](https://rawcdn.githack.com/fastlane/fastlane/master/fastlane/assets/plugin-badge.svg)](https://rubygems.org/gems/fastlane-plugin-csv_translation) [![Gem Version](https://badge.fury.io/rb/fastlane-plugin-csv_translation.svg)](https://badge.fury.io/rb/fastlane-plugin-csv_translation) [![Twitter: @manish](https://img.shields.io/badge/contact-@manish-blue.svg?style=flat)](https://twitter.com/manish_rathi_)
4
+
5
+ ## Getting Started
6
+
7
+ This project is a [_fastlane_](https://github.com/fastlane/fastlane) plugin. To get started with `fastlane-plugin-csv_translation`, add it to your project by running:
8
+
9
+ ```bash
10
+ fastlane add_plugin csv_translation
11
+ ```
12
+
13
+ ## About csv_translation
14
+
15
+ A fastlane plugin to manage translation using a CSV file under git repository. 🚀
16
+
17
+ This plugin is inspired by and based on [Keep a CSV](https://en.wikipedia.org/wiki/Comma-separated_values) under git repository. This CSV file can contains translated details for different locales, which can be defined as CSV headers.
18
+ This plugin opens up an opportunity to automate reading from/writing of any `CSV` file with [`fastlane`](https://fastlane.tools).
19
+
20
+ ## CSV file (Example)
21
+ `CSV` file must have locale headers, and can have one identifier header. i.e Below CSV supports `en-US, nl-NL, de-DE, fr-FR, it, es-ES, pt-PT, da, sv, no, zh-Hans, zh-Hant` and `Ticket` column is the unique identifier column which later will be useful to a delete CSV row
22
+
23
+ <img width="1476" alt="Example CSV" src="https://user-images.githubusercontent.com/5364500/81500222-fe912780-92d0-11ea-87a7-952a78b5cdf7.png">
24
+
25
+ ## Actions
26
+ `fastlane-plugin-csv_translation` consists of 3 actions enabling you to manipulate `CSV` file from [`fastlane`](https://fastlane.tools).
27
+
28
+ ### 📡 get_csv_translation_requests
29
+ Get all the translation info as hash from the CSV file, **print** the `translation_status` if translation_requests found.
30
+
31
+ ``` ruby
32
+ get_csv_translation_requests(
33
+ repository_name: "crazymanish/example-csv-repo", # Specify the CSV git file repo
34
+ file_path: "example.csv" # Specify the CSV file path under the git repo
35
+ )
36
+ ```
37
+
38
+ ``` ruby
39
+ get_csv_translation_requests(
40
+ repository_name: "crazymanish/example-csv-repo", # Specify the CSV git file repo
41
+ branch_name: "master", # Specify the CSV git branch name (dafault `master`)
42
+ file_path: "example.csv", # Specify the CSV file path under the git repo
43
+ show_status: true, # Specify the flag whether to show the translation status or not (dafault `true`)
44
+ show_headers: "Ticket|Timeline" # Specify the CSV headers, will ignored while printing (dafault `Ticket|Timeline`)
45
+ )
46
+ ```
47
+ <img width="794" alt="Translation Status" src="https://user-images.githubusercontent.com/5364500/81500613-8e37d580-92d3-11ea-9f51-fe99e74208bb.png">
48
+
49
+ ### 📝 create_csv_translation_request
50
+ Add a new translation request entry inside the CSV file. It will append a new row in CSV file and then git commit the CSV file changes.
51
+
52
+ ``` ruby
53
+ example_csv_payload = {Ticket: "PRJ-3030", Timeline: "30 April"}
54
+
55
+ create_csv_translation_request(
56
+ repository_name: "crazymanish/example-csv-repo", # Specify the CSV git file repo
57
+ file_path: "example.csv", # Specify the CSV file path under the git repo
58
+ payload: example_csv_payload # Specify the CSV payload
59
+ )
60
+ ```
61
+
62
+ ### ✂️ delete_csv_translation_request
63
+ Delete a new translation request entry from the CSV file based on CSV row Identifier. It will delete the matched row from the CSV file and then git commit the CSV file changes.
64
+
65
+ ``` ruby
66
+ delete_csv_translation_request(
67
+ repository_name: "crazymanish/example-csv-repo", # Specify the CSV git file repo
68
+ file_path: "example.csv", # Specify the CSV file path under the git repo
69
+ identifier: "PRJ-3030" # Specify the CSV row identifier
70
+ )
71
+ ```
72
+
73
+ ## Example
74
+
75
+ You have to **remember to keep your release notes CSV file up-to-date** with translation and let [`fastlane`](https://fastlane.tools) do the rest.
76
+
77
+ ``` ruby
78
+ desc "Release a iOS appstore build to AppStore iTunesConnect with translated release notes."
79
+ lane :release do
80
+ gym # Build the app and create .ipa file
81
+
82
+ version_number = get_version_number # Get project version
83
+
84
+ # Get translated release notes
85
+ release_notes = get_csv_translation_requests(
86
+ repository_name: "crazymanish/ios-app-release-notes-csv-repo",
87
+ file_path: "release_notes/#{version_number}.csv"
88
+ )
89
+ UI.message("Got the translated release notes 💪🏻")
90
+ UI.message(release_notes)
91
+ # TODO: Inject release notes into fastlane `metadata`
92
+
93
+ deliver # Upload ipa file to iTunesConnect with localized release notes fastlane `metadata`
94
+
95
+ slack(message: "Hi team, New version #{version_number} is avaliable!) # share on Slack
96
+ end
97
+ ```
98
+
99
+ ## Issues and Feedback
100
+
101
+ For any other issues and feedback about this plugin, please submit it to this repository.
102
+
103
+ ## Troubleshooting
104
+
105
+ If you have trouble using plugins, check out the [Plugins Troubleshooting](https://docs.fastlane.tools/plugins/plugins-troubleshooting/) guide.
106
+
107
+ ## Using _fastlane_ Plugins
108
+
109
+ For more information about how the `fastlane` plugin system works, check out the [Plugins documentation](https://docs.fastlane.tools/plugins/create-plugin/).
110
+
111
+ ## About _fastlane_
112
+
113
+ _fastlane_ is the easiest way to automate beta deployments and releases for your iOS and Android apps. To learn more, check out [fastlane.tools](https://fastlane.tools).
@@ -0,0 +1,16 @@
1
+ require 'fastlane/plugin/csv_translation/version'
2
+
3
+ module Fastlane
4
+ module CsvTranslation
5
+ # Return all .rb files inside the "actions" and "helper" directory
6
+ def self.all_classes
7
+ Dir[File.expand_path('**/{actions,helper}/*.rb', File.dirname(__FILE__))]
8
+ end
9
+ end
10
+ end
11
+
12
+ # By default we want to import all available actions and helpers
13
+ # A plugin can contain any number of actions and plugins
14
+ Fastlane::CsvTranslation.all_classes.each do |current|
15
+ require current
16
+ end
@@ -0,0 +1,103 @@
1
+ require 'fastlane/action'
2
+ require_relative '../helper/csv_translation_helper'
3
+
4
+ module Fastlane
5
+ module Actions
6
+ module SharedValues
7
+ CREATE_CSV_TRANSLATION_REQUEST_INFO = :CREATE_CSV_TRANSLATION_REQUEST_INFO
8
+ end
9
+
10
+ class CreateCsvTranslationRequestAction < Action
11
+ def self.run(params)
12
+ # fetching csv file
13
+ csv_file_folder = Helper::CsvTranslationHelper.fetch_csv_file(
14
+ repository_name: params[:repository_name],
15
+ branch_name: params[:branch_name]
16
+ )
17
+
18
+ csv_file_path = "#{csv_file_folder}/#{params[:file_path]}"
19
+ csv_payload = params[:payload]
20
+
21
+ # adding new entry into csv file
22
+ require 'csv'
23
+ CSV.open(csv_file_path, 'a+', headers: csv_payload.keys) do |csv|
24
+ csv << csv_payload.values
25
+ end
26
+
27
+ # creating csv translation request
28
+ git_message = "New translation request: #{csv_payload}"
29
+ git_commit_info = ""
30
+ Dir.chdir(csv_file_folder) do
31
+ GitCommitAction.run(path: ".", message: git_message)
32
+ PushToGitRemoteAction.run(remote: "origin")
33
+ git_commit_info = Actions.last_git_commit_dict
34
+ end
35
+ UI.success("Successfully created a #{git_message} 🚀")
36
+
37
+ # building translation request info
38
+ translation_request_info = {
39
+ payload: csv_payload,
40
+ git_commit_info: git_commit_info}
41
+
42
+ Actions.lane_context[SharedValues::CREATE_CSV_TRANSLATION_REQUEST_INFO] = translation_request_info
43
+ return translation_request_info
44
+ end
45
+
46
+ def self.description
47
+ "Create a csv translation request."
48
+ end
49
+
50
+ def self.output
51
+ [
52
+ ['CREATE_CSV_TRANSLATION_REQUEST_INFO', 'Created translation request info i.e payload, git_commit info']
53
+ ]
54
+ end
55
+
56
+ def self.available_options
57
+ [
58
+ FastlaneCore::ConfigItem.new(key: :repository_name,
59
+ env_name: "FL_CREATE_CSV_TRANSLATION_REQUEST_REPOSITORY_NAME",
60
+ description: "The name to your repository, e.g. 'fastlane/fastlane'",
61
+ verify_block: proc do |value|
62
+ UI.user_error!("No repository_name given in input param") unless (value and not value.empty?)
63
+ end),
64
+ FastlaneCore::ConfigItem.new(key: :branch_name,
65
+ env_name: "FL_CREATE_CSV_TRANSLATION_REQUEST_BRANCH_NAME",
66
+ description: "The branch name to your repository, (default master)",
67
+ is_string: true,
68
+ default_value: "master"),
69
+ FastlaneCore::ConfigItem.new(key: :file_path,
70
+ env_name: "FL_CREATE_CSV_TRANSLATION_REQUEST_FILE_PATH",
71
+ description: "The file path to your csv file",
72
+ is_string: true),
73
+ FastlaneCore::ConfigItem.new(key: :payload,
74
+ env_name: "FL_CREATE_CSV_TRANSLATION_REQUEST_PAYLOAD",
75
+ description: "CSV request info. payload must be a hash containing CSV header key with value",
76
+ is_string: false)
77
+ ]
78
+ end
79
+
80
+ def self.authors
81
+ ["crazymanish"]
82
+ end
83
+
84
+ def self.example_code
85
+ [
86
+ 'create_csv_translation_request(
87
+ repository_name: "fastlane/fastlane",
88
+ file_path: "translation/some_csv_name.csv",
89
+ payload: {header_name: "some_value"})',
90
+ 'create_csv_translation_request(
91
+ repository_name: "fastlane/fastlane",
92
+ branch_name: "master",
93
+ file_path: "translation/some_csv_name.csv",
94
+ payload: {header_name: "some_value"})'
95
+ ]
96
+ end
97
+
98
+ def self.is_supported?(platform)
99
+ true
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,118 @@
1
+ require 'fastlane/action'
2
+ require_relative '../helper/csv_translation_helper'
3
+
4
+ module Fastlane
5
+ module Actions
6
+ module SharedValues
7
+ DELETE_CSV_TRANSLATION_REQUEST_INFO = :DELETE_CSV_TRANSLATION_REQUEST_INFO
8
+ end
9
+
10
+ class DeleteCsvTranslationRequestAction < Action
11
+ def self.run(params)
12
+ # fetching csv file
13
+ csv_file_folder = Helper::CsvTranslationHelper.fetch_csv_file(
14
+ repository_name: params[:repository_name],
15
+ branch_name: params[:branch_name]
16
+ )
17
+
18
+ csv_file_path = "#{csv_file_folder}/#{params[:file_path]}"
19
+ csv_row_identifier = params[:identifier]
20
+
21
+ # deleting translation request entry from the csv file
22
+ require 'csv'
23
+
24
+ headers = CSV.open(csv_file_path, &:readline)
25
+ translation_requests = CSV.table(csv_file_path, headers: true)
26
+ translation_requests.delete_if { |row| row.map { |value| value.to_s }.join("").include?(csv_row_identifier) }
27
+
28
+ CSV.open(csv_file_path, "w", write_headers: true, headers: headers) do |csv|
29
+ translation_requests.each { |translation_request| csv << translation_request }
30
+ end
31
+
32
+ # deleting translation request from server
33
+ git_commit_info = {}
34
+ Dir.chdir(csv_file_folder) do
35
+ # checking git status for modified files.
36
+ git_status = Actions::sh("git status --porcelain")
37
+ is_git_status_clean = git_status.empty?
38
+
39
+ # raise exception if translation request not found.
40
+ if is_git_status_clean
41
+ UI.user_error!("Please check \"#{csv_row_identifier}\", not found the translation request. 🛑")
42
+ end
43
+
44
+ git_message = "Deleted translation request: identifier: #{csv_row_identifier}"
45
+ GitCommitAction.run(path: ".", message: git_message)
46
+ PushToGitRemoteAction.run(remote: "origin")
47
+ git_commit_info = Actions.last_git_commit_dict
48
+
49
+ UI.success("Successfully #{git_message} 🚀")
50
+ end
51
+
52
+ # building deleted translation request info
53
+ deleted_translation_request_info = {
54
+ identifier: csv_row_identifier,
55
+ git_commit_info: git_commit_info}
56
+
57
+ Actions.lane_context[SharedValues::DELETE_CSV_TRANSLATION_REQUEST_INFO] = deleted_translation_request_info
58
+ return deleted_translation_request_info
59
+ end
60
+
61
+ def self.description
62
+ "Delete a translation request based on identifier value."
63
+ end
64
+
65
+ def self.output
66
+ [
67
+ ['DELETE_CSV_TRANSLATION_REQUEST_INFO', 'Deleted translation request info i.e identifier, git_commit info']
68
+ ]
69
+ end
70
+
71
+ def self.available_options
72
+ [
73
+ FastlaneCore::ConfigItem.new(key: :repository_name,
74
+ env_name: "FL_DELETE_CSV_TRANSLATION_REQUEST_REPOSITORY_NAME",
75
+ description: "The name to your repository, e.g. 'fastlane/fastlane'",
76
+ verify_block: proc do |value|
77
+ UI.user_error!("No repository_name given in input param") unless (value and not value.empty?)
78
+ end),
79
+ FastlaneCore::ConfigItem.new(key: :branch_name,
80
+ env_name: "FL_DELETE_CSV_TRANSLATION_REQUEST_BRANCH_NAME",
81
+ description: "The branch name to your repository, (default master)",
82
+ is_string: true,
83
+ default_value: "master"),
84
+ FastlaneCore::ConfigItem.new(key: :file_path,
85
+ env_name: "FL_DELETE_CSV_TRANSLATION_REQUEST_FILE_PATH",
86
+ description: "The file path to your csv file",
87
+ is_string: true),
88
+ FastlaneCore::ConfigItem.new(key: :identifier,
89
+ env_name: "FL_DELETE_CSV_TRANSLATION_REQUEST_IDENTIFIER",
90
+ description: "An identifier value of the CSV file row",
91
+ is_string: true)
92
+ ]
93
+ end
94
+
95
+ def self.authors
96
+ ["crazymanish"]
97
+ end
98
+
99
+ def self.example_code
100
+ [
101
+ 'delete_csv_translation_request(
102
+ repository_name: "fastlane/fastlane",
103
+ file_path: "translation/some_csv_name.csv",
104
+ identifier: "some_identifier_value")',
105
+ 'delete_csv_translation_request(
106
+ repository_name: "fastlane/fastlane",
107
+ branch_name: "master",
108
+ file_path: "translation/some_csv_name.csv",
109
+ identifier: "some_identifier_value")'
110
+ ]
111
+ end
112
+
113
+ def self.is_supported?(platform)
114
+ true
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,117 @@
1
+ require 'fastlane/action'
2
+ require_relative '../helper/csv_translation_helper'
3
+
4
+ module Fastlane
5
+ module Actions
6
+ module SharedValues
7
+ GET_CSV_TRANSLATION_REQUESTS_INFO = :GET_CSV_TRANSLATION_REQUESTS_INFO
8
+ end
9
+
10
+ class GetCsvTranslationRequestsAction < Action
11
+ def self.run(params)
12
+ # fetching csv file
13
+ csv_file_folder = Helper::CsvTranslationHelper.fetch_csv_file(
14
+ repository_name: params[:repository_name],
15
+ branch_name: params[:branch_name]
16
+ )
17
+
18
+ require 'csv'
19
+
20
+ # reading csv file
21
+ csv_file_path = "#{csv_file_folder}/#{params[:file_path]}"
22
+ UI.success("Reading csv file from: #{csv_file_path} 🖥")
23
+ translation_requests = CSV.foreach(csv_file_path, headers: true).map { |row| row.to_h }
24
+
25
+ if params[:show_status]
26
+ require 'terminal-table'
27
+
28
+ # printing csv file translation status
29
+ headers = CSV.open(csv_file_path, &:readline)
30
+
31
+ csv_row_identifier = params[:identifier].strip
32
+ unless csv_row_identifier.empty?
33
+ translation_requests = translation_requests.select do |translation_request|
34
+ translation_request.map { |value| value.to_s }.join("").include?(csv_row_identifier)
35
+ end
36
+ end
37
+
38
+ printing_translation_requests = translation_requests.map do |translation_request|
39
+ translation_request.map do |key, value|
40
+ if key.to_s.match?(params[:show_headers])
41
+ value
42
+ else
43
+ value.to_s.empty? ? "❌": "✅"
44
+ end
45
+ end
46
+ end
47
+ table = Terminal::Table.new(title: "Translation status", headings: headers, rows: printing_translation_requests)
48
+ puts table
49
+ end
50
+
51
+ Actions.lane_context[SharedValues::GET_CSV_TRANSLATION_REQUESTS_INFO] = translation_requests
52
+ return translation_requests
53
+ end
54
+
55
+ def self.description
56
+ "Get CSV translation requests info"
57
+ end
58
+
59
+ def self.available_options
60
+ [
61
+ FastlaneCore::ConfigItem.new(key: :repository_name,
62
+ env_name: "FL_GET_CSV_TRANSLATION_REQUESTS_REPOSITORY_NAME",
63
+ description: "The name to your repository, e.g. 'fastlane/fastlane'",
64
+ verify_block: proc do |value|
65
+ UI.user_error!("No repository_name given in input param") unless (value and not value.empty?)
66
+ end),
67
+ FastlaneCore::ConfigItem.new(key: :branch_name,
68
+ env_name: "FL_GET_CSV_TRANSLATION_REQUESTS_BRANCH_NAME",
69
+ description: "The branch name to your repository, (default master)",
70
+ is_string: true,
71
+ default_value: "master"),
72
+ FastlaneCore::ConfigItem.new(key: :file_path,
73
+ env_name: "FL_GET_CSV_TRANSLATION_REQUESTS_FILE_PATH",
74
+ description: "The file path to your csv file",
75
+ is_string: true),
76
+ FastlaneCore::ConfigItem.new(key: :show_status,
77
+ env_name: "FL_GET_CSV_TRANSLATION_REQUESTS_SHOW_STATUS",
78
+ description: "The flag whether to show the translation status, (default 'true')",
79
+ optional: true,
80
+ default_value: true,
81
+ is_string: false),
82
+ FastlaneCore::ConfigItem.new(key: :show_headers,
83
+ env_name: "FL_GET_CSV_TRANSLATION_REQUESTS_SHOW_HEADERS",
84
+ description: "Show CSV headers translation value while printing, (default 'Ticket|Timeline')",
85
+ is_string: true,
86
+ default_value: "Ticket|Timeline"),
87
+ FastlaneCore::ConfigItem.new(key: :identifier,
88
+ env_name: "FL_GET_CSV_TRANSLATION_REQUESTS_IDENTIFIER",
89
+ description: "An identifier value of the CSV file row",
90
+ is_string: true,
91
+ optional: true,
92
+ default_value: "")
93
+ ]
94
+ end
95
+
96
+ def self.authors
97
+ ["crazymanish"]
98
+ end
99
+
100
+ def self.example_code
101
+ [
102
+ 'get_csv_translation_requests(
103
+ repository_name: "fastlane/fastlane",
104
+ file_path: "translation/some_csv_name.csv")',
105
+ 'get_csv_translation_requests(
106
+ repository_name: "fastlane/fastlane",
107
+ branch_name: "master",
108
+ file_path: "translation/some_csv_name.csv")'
109
+ ]
110
+ end
111
+
112
+ def self.is_supported?(platform)
113
+ true
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,30 @@
1
+ require 'fastlane_core/ui/ui'
2
+
3
+ module Fastlane
4
+ UI = FastlaneCore::UI unless Fastlane.const_defined?("UI")
5
+
6
+ module Helper
7
+ class CsvTranslationHelper
8
+
9
+ def self.fetch_csv_file(params)
10
+ repository_name = params[:repository_name]
11
+ branch_name = params[:branch_name]
12
+
13
+ # Setup csv_file folder for fresh git clone.
14
+ csv_file_folder_name = ".fl_clone_csv_file"
15
+ git_clone_folder = File.join(Dir.pwd, csv_file_folder_name)
16
+ FileUtils.rm_rf(git_clone_folder) if File.directory?(git_clone_folder)
17
+ Dir.mkdir(csv_file_folder_name)
18
+
19
+ UI.success("Fetching csv file from git repo... ⏳")
20
+ branch_option = "--branch #{branch_name}" if branch_name != 'HEAD'
21
+ git_url = "git@github.com:#{repository_name}"
22
+ Fastlane::Actions::sh("git clone #{git_url.shellescape} #{git_clone_folder.shellescape} --depth 1 -n #{branch_option}")
23
+ Fastlane::Actions::sh("cd #{git_clone_folder.shellescape} && git checkout #{branch_name}")
24
+
25
+ return git_clone_folder
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,5 @@
1
+ module Fastlane
2
+ module CsvTranslation
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,177 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fastlane-plugin-csv_translation
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Manish Rathi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-05-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec_junit_formatter
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.49.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 0.49.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-require_tools
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: fastlane
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 2.146.1
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 2.146.1
139
+ description:
140
+ email: manishrathi19902013@gmail.com
141
+ executables: []
142
+ extensions: []
143
+ extra_rdoc_files: []
144
+ files:
145
+ - LICENSE
146
+ - README.md
147
+ - lib/fastlane/plugin/csv_translation.rb
148
+ - lib/fastlane/plugin/csv_translation/actions/create_csv_translation_request.rb
149
+ - lib/fastlane/plugin/csv_translation/actions/delete_csv_translation_request.rb
150
+ - lib/fastlane/plugin/csv_translation/actions/get_csv_translation_requests.rb
151
+ - lib/fastlane/plugin/csv_translation/helper/csv_translation_helper.rb
152
+ - lib/fastlane/plugin/csv_translation/version.rb
153
+ homepage: https://github.com/crazymanish/fastlane-plugin-csv_translation
154
+ licenses:
155
+ - MIT
156
+ metadata: {}
157
+ post_install_message:
158
+ rdoc_options: []
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ requirements: []
172
+ rubygems_version: 3.0.3
173
+ signing_key:
174
+ specification_version: 4
175
+ summary: "A fastlane plugin to manage translation using a CSV file under git repository.
176
+ \U0001F680"
177
+ test_files: []