gito 0.2.4 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: '0838fb4e8600ad656c53a678d75dc794cdde1a0a'
4
- data.tar.gz: ecc81ababf24d6af18ce5fc0d18ca3e60ba77055
3
+ metadata.gz: 4416faef1ce8a1f742961c8166aa3748191d61cd
4
+ data.tar.gz: ed9a120d580ae5f28dd6ba95ad9786755146eadd
5
5
  SHA512:
6
- metadata.gz: 75fcd0dddecbd0c88da9928f35aa549106266bfaf0f2ac2b8fafee109b38a993fb471612376d395ce23b26234d8dd628436a4040cbaa9ffd5188fc6298e9442f
7
- data.tar.gz: 1af9cca5a67adaf239394620ce43f2f1227c96a8f3c1ca378d2f5286268ffb6257fc6086944b348ab2d003620bdbe9e6137fcba436b722cc5cbef1126cf1adf7
6
+ metadata.gz: 52da36d58def0e2b8bf201966118a247ff1904bf896354a75923850f3fe853d5b48a9dc579da6f49b9dd6aa3e69076483acc3985b2825c227ae996fb43747c88
7
+ data.tar.gz: 69966fb5f99e3c5aac8a00de16a30b42f1ed5149dcef2256f8712b48c1d7b7d9205d13a0eafb5debedebbe9802901bad658f67795e4080a9f0dd659fbf326422
data/README.md CHANGED
@@ -4,20 +4,19 @@
4
4
  [![Code Climate](https://codeclimate.com/github/cesarferreira/gito/badges/gpa.svg)](https://codeclimate.com/github/cesarferreira/gito)
5
5
  [![Inline docs](http://inch-ci.org/github/cesarferreira/gito.svg?branch=master)](http://inch-ci.org/github/cesarferreira/gito)
6
6
 
7
- git helper tool to **clone**/**open**/**install**/**edit** a git project with a one-liner.
7
+ git helper tool to **clone**/**open**/**auto-install**/**edit** a git project with a one-liner.
8
8
 
9
- -----------
10
9
 
11
10
  <p align="center">
12
- > <strong>gito</strong> <i>cesarferreira/dryrun</i>
11
+ <img src="extras/recordit2.gif" width="100%" />
13
12
  </p>
14
13
 
15
14
  <p align="center">
16
- <img src="extras/screenshot.png" width="100%" />
15
+ > <strong>gito</strong> <i>cesarferreira/dryrun -e</i>
17
16
  </p>
18
17
 
19
18
  ## Why?
20
- A lot of times I find myself wanting to try some code from github and in order to do so I have to copy the git URL, go to the terminal, git clone, find out the folder name, go to the folder and based on the type of project I need to `bundle install`, `./gradlew assemble`, `npm install`... Not anymore!
19
+ A lot of times I find myself wanting to try some code from github and in order to do so I have to copy the git URL, go to the terminal, git clone, find out the folder name, go to the folder and based on the type of project I need to `bundle install`, `./gradlew assemble`, `npm install`, `pip install .`, `mix deps.get`, `make install`, you name it. And after that opening it in my text editor of choice... Not anymore!
21
20
 
22
21
 
23
22
  ## Usage
@@ -27,9 +26,10 @@ $ gito -h
27
26
  Usage: gito GIT_URL [OPTIONS]
28
27
 
29
28
  Options
29
+ -s, --set-editor EDITOR Set a custom editor to open the project (e.g. "atom", "subl", "vim", etc.
30
30
  -e, --edit Open the project on an editor
31
31
  -o, --open Open the project on Finder
32
- -d, --dryrun Doesn't install the dependencies
32
+ -d, --dryrun Does not install the dependencies
33
33
  -h, --help Displays help
34
34
  -v, --version Displays the version
35
35
  ```
@@ -42,10 +42,13 @@ gito cesarferreira/dryrun
42
42
  # git clone, install, open and edit the project
43
43
  gito cesarferreira/dryrun --edit --open
44
44
 
45
- # git clone, install, open and edit the project
45
+ # set the editor to be 'subl' from now on
46
+ gito cesarferreira/dryrun -s subl
47
+
48
+ # git clone, install, open and edit the project from github
46
49
  gito https://github.com/cesarferreira/dryrun -e -o
47
50
 
48
- # git clone, install,
51
+ # git clone, install from another git source
49
52
  gito https://bitbucket.org/username/project
50
53
  ```
51
54
 
@@ -53,12 +56,26 @@ gito https://bitbucket.org/username/project
53
56
 
54
57
  $ gem install gito
55
58
 
56
- ## Internally what happens?
59
+ ## Supported type detections/auto-intalls
60
+ So far it auto-installs these types:
61
+ - Ruby
62
+ - Gradle
63
+ - node.js
64
+ - C
65
+ - Elixir
66
+ - Python
57
67
 
58
- Sample:
68
+ Create a pull request by editing [detector.json](detector.json) file if you want more types to be added.
69
+
70
+ ## Internally what happens?
59
71
 
72
+ When you run this:
60
73
  ```bash
61
- # clone it
74
+ gito cesarferreira/dryrun --edit --open
75
+ ```
76
+ This will happen:
77
+ ```bash
78
+ # clone
62
79
  git clone http://github.com/cesarferreira/dryrun
63
80
 
64
81
  # change directory
@@ -77,6 +94,9 @@ project_type_detector
77
94
  bundle install
78
95
  ```
79
96
 
97
+ ## todo
98
+ - `-t` to clone into a temp directory
99
+
80
100
  ## Contributing
81
101
  I welcome and encourage all pull requests. It usually will take me within 24-48 hours to respond to any issue or request. Here are some basic rules to follow to ensure timely addition of your request:
82
102
  1. If its a feature, bugfix, or anything please only change code to what you specify.
data/detector.json ADDED
@@ -0,0 +1,32 @@
1
+ [
2
+ {
3
+ "file_requirement": "Gemfile",
4
+ "installation_command": "bundle install",
5
+ "type": "ruby"
6
+ },
7
+ {
8
+ "file_requirement": "build.gradle",
9
+ "installation_command": "./gradlew assemble",
10
+ "type": "gradle"
11
+ },
12
+ {
13
+ "file_requirement": "package.json",
14
+ "installation_command": "yarn",
15
+ "type": "node"
16
+ },
17
+ {
18
+ "file_requirement": "Makefile",
19
+ "installation_command": "make",
20
+ "type": "c"
21
+ },
22
+ {
23
+ "file_requirement": "mix.exs",
24
+ "installation_command": "mix deps.get",
25
+ "type": "elixir"
26
+ },
27
+ {
28
+ "file_requirement": "setup.py",
29
+ "installation_command": "pip install .",
30
+ "type": "python"
31
+ }
32
+ ]
data/detector.rb ADDED
@@ -0,0 +1,16 @@
1
+ require 'json'
2
+
3
+ file = File.read('detector.json')
4
+ types = JSON.parse(file)
5
+ chosen = nil
6
+ types.each do |item|
7
+ if File.exist? (item['file_requirement'])
8
+ chosen = item
9
+ break
10
+ end
11
+ end
12
+
13
+ unless chosen.nil?
14
+ puts "Found: " + chosen['type']
15
+ puts "how to install: " + chosen['installation']
16
+ end
Binary file
Binary file
data/gito.gemspec CHANGED
@@ -8,7 +8,7 @@ spec = Gem::Specification.new do |s|
8
8
  s.homepage = 'https://github.com/cesarferreira/gito'
9
9
  s.license = 'MIT'
10
10
  s.platform = Gem::Platform::RUBY
11
- s.summary = 'git helper tool to clone/open/install/edit a git project with a one-liner'
11
+ s.summary = 'git helper tool to clone/open/auto-install/edit a git project with a one-liner'
12
12
  s.files = `git ls-files`.split("
13
13
  ")
14
14
  s.require_paths << 'lib'
@@ -22,4 +22,5 @@ spec = Gem::Specification.new do |s|
22
22
 
23
23
  s.add_dependency 'bundler', '~> 1.7'
24
24
  s.add_dependency 'colorize', '~> 0.7'
25
+ s.add_dependency 'safe_yaml', '~> 1.0.4'
25
26
  end
data/lib/gito.rb CHANGED
@@ -3,6 +3,7 @@ require 'tmpdir'
3
3
  require 'fileutils'
4
4
  require 'gito/version'
5
5
  require 'gito/project'
6
+ require 'gito/config_manager'
6
7
  require 'openssl'
7
8
  require 'open3'
8
9
  require 'optparse'
@@ -17,6 +18,8 @@ class MainApp
17
18
  @should_edit = false
18
19
  @should_open = false
19
20
  @dryrun = false
21
+ @editor = nil
22
+ @setting_up = false
20
23
 
21
24
  # Parse Options
22
25
  create_options_parser(arguments)
@@ -28,7 +31,12 @@ class MainApp
28
31
  opts.separator ''
29
32
  opts.separator 'Options'
30
33
 
31
- opts.on('-e', '--edit', 'Open the project on an editor') do |edit|
34
+ opts.on('-s EDITOR', '--set-editor EDITOR', 'Set a custom editor to open the project (e.g. "atom", "subl", "vim", etc.') do |editor|
35
+ @editor = editor.nil? ? nil : editor
36
+ @setting_up = true
37
+ end
38
+
39
+ opts.on('-e', '--edit', 'Open the project on an editor') do |editor|
32
40
  @should_edit = true
33
41
  end
34
42
 
@@ -54,24 +62,46 @@ class MainApp
54
62
  end
55
63
  end
56
64
 
65
+ def update_configuration
66
+ config_manager = ConfigManager.new
67
+ app_config = config_manager.get
68
+
69
+ if @editor.nil?
70
+ @editor = app_config[:editor]
71
+ else
72
+ config_manager.write_editor @editor
73
+ end
74
+ end
75
+
57
76
  def call
58
77
 
78
+ if @setting_up
79
+ if @editor.nil?
80
+ puts 'New new editor can\'t be empty'.red
81
+ else
82
+ update_configuration
83
+ puts 'Updated the editor to: ' + @editor.yellow
84
+ end
85
+ exit 1
86
+ end
87
+
59
88
  if @url.nil?
60
89
  puts 'You need to insert a valid GIT URL/folder'
61
90
  exit 1
62
91
  end
63
92
 
93
+ # handle the configuration
94
+ update_configuration
95
+
64
96
  project = Project.new(@url)
65
97
 
66
98
  # Clone the repository
67
99
  project.clone
68
100
 
69
- # Detect project type
70
- project.detect_project_type
71
-
72
101
  # Open in editor
73
102
  if @should_edit
74
- project.open_editor
103
+ # binding.pry
104
+ project.open_editor @editor
75
105
  end
76
106
 
77
107
  # Open in Finder
@@ -0,0 +1,36 @@
1
+ require 'safe_yaml'
2
+
3
+ class ConfigManager
4
+
5
+ def initialize
6
+ SafeYAML::OPTIONS[:default_mode] = :safe
7
+ SafeYAML::OPTIONS[:deserialize_symbols] = true
8
+
9
+ @conf_path = "#{Dir.home}/.gito.yml"
10
+ @default_config = {"editor": "atom"}
11
+ end
12
+
13
+ def write_editor(new_editor)
14
+ current_config = get
15
+ current_config[:editor] = new_editor
16
+ write(current_config)
17
+ end
18
+
19
+ def write(config)
20
+ new_config = config.to_yaml
21
+ File.open(@conf_path, 'w') { |file| file.write(new_config)}
22
+ end
23
+
24
+ def get
25
+ if File.exists? (@conf_path)
26
+ file = File.open(@conf_path, "rb")
27
+ contents = file.read
28
+ config = YAML.load(contents, :safe => true)
29
+ else
30
+ write @default_config
31
+ config = @default_config
32
+ end
33
+
34
+ config
35
+ end
36
+ end
data/lib/gito/project.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'tmpdir'
2
2
  require 'fileutils'
3
3
  require 'uri'
4
+ require 'json'
4
5
  require_relative './app_utils'
5
6
  require 'pry'
6
7
 
@@ -9,7 +10,7 @@ class Project
9
10
  @base_url = sanitize_url(url)
10
11
  @destination_dir = nil
11
12
  @destination = destination
12
- @project_type = :unknown
13
+ @detector_json_path = '../detector.json'
13
14
  end
14
15
 
15
16
  def sanitize_url(url)
@@ -46,43 +47,32 @@ class Project
46
47
  end
47
48
 
48
49
  def change_directory
49
- # TODO aparently this doesn't work because ruby forks the terminal process and cant' communicate with his father
50
+ # TODO aparently this doesn't work because ruby forks the terminal process and can't communicate with his parent
50
51
 
51
52
  # temp_script_name = './temp.sh'
52
53
  # AppUtils::execute 'echo "cd '+@destination+'" > ' + temp_script_name
53
54
  # AppUtils::execute '. '+temp_script_name
54
55
  # AppUtils::execute 'rm -rf ' + temp_script_name
55
56
 
56
- puts "\nPlease change directory into the project"
57
+ puts "-------------------------------------------"
58
+ puts "Please change directory"
57
59
  puts "cd #{destination.yellow}"
60
+ puts "-------------------------------------------"
58
61
  end
59
62
 
60
- def detect_project_type
61
- Dir.chdir @destination_dir
62
-
63
- @project_type = :unknown
63
+ def install_dependencies
64
+ file = File.read(@detector_json_path)
65
+ types = JSON.parse(file)
66
+ chosen = nil
64
67
 
65
- if File.exists?('build.gradle')
66
- @project_type = :gradle
67
- elsif File.exists?('package.json')
68
- @project_type = :node
69
- elsif File.exists?('Gemfile')
70
- @project_type = :ruby
71
- end
68
+ Dir.chdir(@destination_dir)
72
69
 
73
- puts "Detected #{@project_type}...".yellow
74
- @project_type
75
- end
76
-
77
- def install_dependencies
78
- case @project_type
79
- when :gradle
80
- go_inside_and_run('./gradlew assemble')
81
- when :node
82
- go_inside_and_run('npm install')
83
- when :ruby
84
- go_inside_and_run('bundle install')
70
+ types.each do |item|
71
+ if File.exists? (item['file_requirement'])
72
+ puts "#{item['type']} detected...".yellow
73
+ go_inside_and_run item['installation_command']
85
74
  end
75
+ end
86
76
  end
87
77
 
88
78
  def cloneable_url
@@ -115,9 +105,9 @@ class Project
115
105
  @destination_dir
116
106
  end
117
107
 
118
- def open_editor
108
+ def open_editor(app)
119
109
  puts "Opening editor...".yellow
120
- go_inside_and_run 'atom .'
110
+ go_inside_and_run "#{app} ."
121
111
  end
122
112
 
123
113
  def open_folder
data/lib/gito/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Gito
2
- VERSION = '0.2.4'
2
+ VERSION = '0.3.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gito
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - cesar ferreira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-04 00:00:00.000000000 Z
11
+ date: 2017-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.7'
83
+ - !ruby/object:Gem::Dependency
84
+ name: safe_yaml
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.0.4
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.0.4
83
97
  description:
84
98
  email:
85
99
  - cesar.manuel.ferreira@gmail.com
@@ -95,10 +109,15 @@ files:
95
109
  - README.md
96
110
  - Rakefile
97
111
  - bin/gito
112
+ - detector.json
113
+ - detector.rb
114
+ - extras/recordit.gif
115
+ - extras/recordit2.gif
98
116
  - extras/screenshot.png
99
117
  - gito.gemspec
100
118
  - lib/gito.rb
101
119
  - lib/gito/app_utils.rb
120
+ - lib/gito/config_manager.rb
102
121
  - lib/gito/project.rb
103
122
  - lib/gito/version.rb
104
123
  homepage: https://github.com/cesarferreira/gito
@@ -125,5 +144,5 @@ rubyforge_project:
125
144
  rubygems_version: 2.6.10
126
145
  signing_key:
127
146
  specification_version: 4
128
- summary: git helper tool to clone/open/install/edit a git project with a one-liner
147
+ summary: git helper tool to clone/open/auto-install/edit a git project with a one-liner
129
148
  test_files: []