github_cli 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- github_cli (0.1.2)
4
+ github_cli (0.1.3)
5
5
  github_api (~> 0.4.8)
6
6
  thor
7
7
 
data/README.md CHANGED
@@ -49,6 +49,34 @@ You can list all GitHub APIs comamnds:
49
49
  $ ghc list
50
50
  ```
51
51
 
52
+ ### API
53
+
54
+ Interact with git data:
55
+
56
+ ```shell
57
+ $ ghc blob
58
+ $ ghc commit
59
+ $ ghc ref
60
+ $ ghc tag
61
+ $ ghc tree
62
+ ```
63
+
64
+ Interact with issues:
65
+
66
+ ```shell
67
+ $ ghc issue
68
+ $ ghc label
69
+ ```
70
+
71
+ Interact with repositories:
72
+
73
+ ```shell
74
+ $ ghc repo
75
+ $ ghc download
76
+ $ ghc fork
77
+ $ ghc keys
78
+ ```
79
+
52
80
  ## Contributing
53
81
 
54
82
  1. Fork it
@@ -28,3 +28,7 @@ Feature: The GHC Executable
28
28
  | issue |
29
29
  | blob |
30
30
  | tree |
31
+ | ref |
32
+ | pull |
33
+ | fork |
34
+ | commit |
@@ -32,13 +32,4 @@ Feature: Global Settings
32
32
  Please specify your GitHub Authentication Token (register on github.com to get it):
33
33
  """
34
34
 
35
- Scenario: Installs Custom Configuration File
36
- When I run `ghc init myname` interactively
37
- And I type "token"
38
- Then a file named "/tmp/fakehome/myname" should exist
39
- And the output should contain:
40
- """
41
- Writing new configuration file to /tmp/fakehome/myname
42
- """
43
-
44
35
  Scenario: Check for presence of yaml attribute
@@ -12,6 +12,9 @@ module GithubCLI
12
12
  @@api
13
13
  else
14
14
  @@api = Github.new
15
+ @@api.oauth_token = GithubCLI.config['oauth_token']
16
+ @@api.basic_auth = GithubCLI.config['basic_auth']
17
+ @@api
15
18
  end
16
19
  end
17
20
 
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ module GithubCLI
4
+ class Commit < API
5
+
6
+ class << self
7
+
8
+ def get(user, repo, sha, params)
9
+ github_api.git_data.commit user, repo, params
10
+ end
11
+
12
+ def create(user, repo, params)
13
+ github_api.repos.create_commit user, repo, params
14
+ end
15
+ end
16
+
17
+ end # Commit
18
+ end # GithubCLI
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ module GithubCLI
4
+ class Fork < API
5
+
6
+ class << self
7
+
8
+ def all(user, repo, params)
9
+ github_api.repos.forks user, repo, params
10
+ end
11
+
12
+ def create(user, repo, params)
13
+ github_api.repos.create_fork user, repo, params
14
+ end
15
+ end
16
+
17
+ end # Fork
18
+ end # GithubCLI
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+
3
+ module GithubCLI
4
+ class Label < API
5
+
6
+ class << self
7
+
8
+ def all(params)
9
+ github_api.issues.labels params
10
+ end
11
+
12
+ def get(user, repo, name, params)
13
+ github_api.issues.get_label user, repo, name, params
14
+ end
15
+
16
+ def create(user, repo, params)
17
+ github_api.issues.create_label user, repo, params
18
+ end
19
+
20
+ def update(user, repo, name, params)
21
+ github_api.issues.update_label user, repo, params
22
+ end
23
+
24
+ def delete(user, repo, name, params)
25
+ github_api.issues.delete_label user, repo, name, params
26
+ end
27
+
28
+ def issue(user, repo, number, params)
29
+ github_api.issues.labels_for user, repo, number, params
30
+ end
31
+
32
+ def add(user, repo, number, *args)
33
+ github_api.issues.add_labels user, repo, args
34
+ end
35
+
36
+ def remove(user, repo, number, name=nil, params)
37
+ github_api,issues.remove_label user, repo, number, name, params
38
+ end
39
+
40
+ def replace(user, repo, number, *args)
41
+ github_api.issues.replace_labels user, repo, number, args
42
+ end
43
+
44
+ def milestone(user, repo, number, params)
45
+ gitub_api.issues.milestone_labels user, repo, number, params
46
+ end
47
+ end
48
+
49
+ end # Label
50
+ end # GithubCLI
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+
3
+ module GithubCLI
4
+ class PullRequest < API
5
+
6
+ class << self
7
+
8
+ def get(user, repo, number, params)
9
+ github_api.pull_requests.pull_request user, repo, number, params
10
+ end
11
+
12
+ def list(user, repo, ref, params)
13
+ github_api.pull_requests.pull_requests user, repo, ref, params
14
+ end
15
+
16
+ def create(user, repo, params)
17
+ github_api.pull_requests.create_request user, repo, params
18
+ end
19
+
20
+ def update(user, repo, number, params)
21
+ github_api.pull_requests.update_request user, repo, number, params
22
+ end
23
+
24
+ def commits(user, repo, number, params)
25
+ github_api.pull_requests.commits user, repo, number, params
26
+ end
27
+
28
+ def files(user, repo, number, params)
29
+ github_api.pull_requests.files user, repo, number, params
30
+ end
31
+
32
+ def merged(user, repo, number, params)
33
+ github_api.pull_requests.merged user, repo, number, params
34
+ end
35
+
36
+ def merge(user, repo, number, params)
37
+ github_api.pull_requests.merge user, repo, number, params
38
+ end
39
+ end
40
+
41
+ end # PullRequest
42
+ end # GithubCLI
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+
3
+ module GithubCLI
4
+ class Reference < API
5
+
6
+ class << self
7
+
8
+ def get(user, repo, ref, params)
9
+ github_api.git_data.reference user, repo, ref, params
10
+ end
11
+
12
+ def list(user, repo, ref, params)
13
+ github_api.git_data.references user, repo, ref, params
14
+ end
15
+
16
+ def create(user, repo, params)
17
+ github_api.git_data.create_reference user, repo, params
18
+ end
19
+
20
+ def update(user, repo, ref, params)
21
+ github_api.git_data.update_reference user, repo, ref, params
22
+ end
23
+
24
+ def delete(user, repo, ref, params)
25
+ github_api.git_data.delete_reference user, repo, ref, params
26
+ end
27
+ end
28
+
29
+ end # Reference
30
+ end # GithubCLI
@@ -6,14 +6,14 @@ module GithubCLI
6
6
  class << self
7
7
 
8
8
  def all(params)
9
- github_api.repos.repos params
9
+ github_api.repos.repos(params)
10
10
  end
11
11
 
12
12
  def get(user, repo, params)
13
13
  github_api.repos.get_repo user, repo, params
14
14
  end
15
15
 
16
- def create
16
+ def create(user, repo, params)
17
17
  github_api.repos.create_repo user, repo, params
18
18
  end
19
19
 
@@ -6,11 +6,11 @@ module GithubCLI
6
6
  class << self
7
7
 
8
8
  def get(user, repo, sha, params)
9
- github_api.repos.get_blob user, repo, params
9
+ github_api.repos.get_tree user, repo, params
10
10
  end
11
11
 
12
12
  def create(user, repo, params)
13
- github_api.repos.create_blob user, repo, params
13
+ github_api.repos.create_tree user, repo, params
14
14
  end
15
15
  end
16
16
 
@@ -10,6 +10,10 @@ end
10
10
 
11
11
  %w[
12
12
  blob
13
+ commit
14
+ fork
15
+ pull_request
16
+ reference
13
17
  repository
14
18
  tag
15
19
  tree
@@ -13,6 +13,7 @@ module GithubCLI
13
13
  end
14
14
 
15
15
  map "repository" => :repo,
16
+ "reference" => :ref,
16
17
  "is" => :issue,
17
18
  "-v" => :version,
18
19
  "ls" => :list
@@ -29,7 +30,7 @@ module GithubCLI
29
30
  :banner => "Enable verbose output mode."
30
31
 
31
32
 
32
- desc 'init <config-name>', 'Generates a configuration file in your home directory'
33
+ desc 'init', 'Generates a configuration file in your home directory'
33
34
  long_desc <<-DESC
34
35
  Initializes a configuration file where you can set default options for
35
36
  interacting with GitHub API. Both global and per-command options can be
@@ -45,15 +46,15 @@ module GithubCLI
45
46
  @config_filename = filename
46
47
  end
47
48
 
48
- config = Config.new(@config_filename)
49
- if File.exists?(config.path) && !options[:force]
50
- GithubCLI.ui.error "Not overwritting existing config file #{config.path}, use --force to override."
49
+ # config = Config.new(@config_filename)
50
+ if File.exists?(GithubCLI.config.path) && !options[:force]
51
+ GithubCLI.ui.error "Not overwritting existing config file #{GithubCLI.config.path}, use --force to override."
51
52
  exit 1
52
53
  end
53
54
 
54
55
  oauth_token = ask "Please specify your GitHub Authentication Token (register on github.com to get it):"
55
- config.save({'oauth_token' => oauth_token})
56
- GithubCLI.ui.confirm "Writing new configuration file to #{config.path}"
56
+ GithubCLI.config.save({'oauth_token' => oauth_token, 'basic_auth' => nil })
57
+ GithubCLI.ui.confirm "Writing new configuration file to #{GithubCLI.config.path}"
57
58
  end
58
59
 
59
60
  desc 'list <pattern>', 'List all available commands limited by pattern'
@@ -65,8 +66,11 @@ module GithubCLI
65
66
  desc "blob <command>", "Leverage Blobs API"
66
67
  subcommand "blob", GithubCLI::Commands::Blobs
67
68
 
68
- desc "repo <command>", "Leverage Repositories API"
69
- subcommand "repo", GithubCLI::Commands::Repositories
69
+ desc "commit <command>", "Leverage Commits API"
70
+ subcommand "commit", GithubCLI::Commands::Commits
71
+
72
+ desc "fork <command>", "Leverage Forks API"
73
+ subcommand "fork", GithubCLI::Commands::Forks
70
74
 
71
75
  desc "issue <command>", "Leverage Issues API"
72
76
  subcommand "issue", GithubCLI::Commands::Issues
@@ -74,6 +78,15 @@ module GithubCLI
74
78
  desc "label <command>", "Leverage Labels API"
75
79
  subcommand "label", GithubCLI::Commands::Labels
76
80
 
81
+ desc "pull <command>", "Leverage Pull Requests API"
82
+ subcommand "pull", GithubCLI::Commands::PullRequests
83
+
84
+ desc "ref <command>", "Leverage References API"
85
+ subcommand "ref", GithubCLI::Commands::References
86
+
87
+ desc "repo <command>", "Leverage Repositories API"
88
+ subcommand "repo", GithubCLI::Commands::Repositories
89
+
77
90
  desc "tag <command>", "Leverage Tags API"
78
91
  subcommand "tag", GithubCLI::Commands::Tags
79
92
 
@@ -82,7 +95,6 @@ module GithubCLI
82
95
 
83
96
  desc 'version', 'Display Github CLI version.'
84
97
  def version
85
- puts "#{GithubCLI.config['oauth_token']}"
86
98
  say "Github CLI #{GithubCLI::VERSION}"
87
99
  end
88
100
 
@@ -3,7 +3,7 @@
3
3
  module GithubCLI
4
4
  class Command < Thor
5
5
 
6
- API_CLASSES = %w( c_l_i repo issue label tree blob )
6
+ API_CLASSES = %w( c_l_i repo issue label tree blob reference pull commit fork )
7
7
 
8
8
  HELP_COMMAND = 'help'
9
9
 
@@ -8,15 +8,15 @@ module GithubCLI
8
8
  desc 'get <user> <repo> <sha>', 'Get a Blob'
9
9
  method_option :params, :type => :hash, :default => {},
10
10
  :desc => 'Additonal request parameters e.i per_page:100'
11
- def get(user, repo)
12
- Blob.get user, repo, options[:params]
11
+ def get(user, repo, sha)
12
+ Blob.get user, repo, sha, options[:params]
13
13
  end
14
14
 
15
15
  desc 'create <user> <repo>', 'Create a new Blob'
16
16
  method_option :params, :type => :hash, :default => {},
17
17
  :desc => 'Additonal request parameters e.i per_page:100'
18
- def create(user, repo, sha)
19
- Blob.create user, repo, sha, options[:params]
18
+ def create(user, repo)
19
+ Blob.create user, repo, options[:params]
20
20
  end
21
21
 
22
22
  end # Blobs
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ module GithubCLI
4
+ class Commands::Commits < Command
5
+
6
+ namespace :commit
7
+
8
+ desc 'get <user> <repo> <sha>', 'Get a Commit'
9
+ method_option :params, :type => :hash, :default => {},
10
+ :desc => 'Additonal request parameters e.i per_page:100'
11
+ def get(user, repo, sha)
12
+ Commit.get user, repo, sha, options[:params]
13
+ end
14
+
15
+ desc 'create <user> <repo>', 'Create a Commit'
16
+ method_option :params, :type => :hash, :default => {},
17
+ :desc => 'Additonal request parameters e.i per_page:100'
18
+ def create(user, repo)
19
+ Commit.create user, repo, options[:params]
20
+ end
21
+
22
+ end # Commit
23
+ end # GithubCLI
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+
3
+ module GithubCLI
4
+ class Commands::Forks < Command
5
+
6
+ namespace :fork
7
+
8
+ desc 'list <user> <repo>', 'Lists forks'
9
+ long_desc <<-DESC
10
+ List repository forks
11
+ Parameters
12
+ sort - newest, oldest, watchers, default: newest
13
+ DESC
14
+ method_option :sort, :type => :string, :aliases => ["-s"],
15
+ :desc => 'Sort by newest, oldest or watchers',
16
+ :banner => '<sort-category>'
17
+ method_option :params, :type => :hash, :default => {},
18
+ :desc => 'Additional request parameters e.i per_page:100'
19
+ def list(user, repo)
20
+ if options[:sort]
21
+ options[:params]['sort'] = options[:sort]
22
+ end
23
+ Fork.all user, repo, options[:params]
24
+ end
25
+
26
+ desc 'create <user> <repo>', 'Create a new Blob'
27
+ method_option :org, :type => :string,
28
+ :desc => ' Organization login. The repository will be forked into this organization.'
29
+ method_option :params, :type => :hash, :default => {},
30
+ :desc => 'Additonal request parameters e.i per_page:100'
31
+ def create(user, repo)
32
+ if options[:org]
33
+ options[:params]['org'] = options[:org]
34
+ end
35
+ Fork.create user, repo, options[:params]
36
+ end
37
+
38
+ end # Forks
39
+ end # GithubCLI
@@ -5,30 +5,85 @@ module GithubCLI
5
5
 
6
6
  namespace :label
7
7
 
8
- desc 'list', 'Listing all labels for this repository.'
9
- def list
8
+ desc 'list <user> <repo>', 'Listing all labels for this repository.'
9
+ method_option :params, :type => :hash, :default => {},
10
+ :desc => 'Additonal request parameters e.i per_page:100'
11
+ def list(user, repo)
12
+ Label.all user, repo, options[:params]
10
13
  end
11
14
 
12
- desc 'get <user>, <repo>', 'Get a single label.'
13
- method_option :name, :type => :string, :required => true
14
- def get(user, repo)
15
+ desc 'get <user> <repo> <name>', 'Get a single label.'
16
+ method_option :params, :type => :hash, :default => {},
17
+ :desc => 'Additonal request parameters e.i per_page:100'
18
+ def get(user, repo, name)
19
+ Label.get user, repo, name, options[:params]
15
20
  end
16
21
 
17
- desc 'create <user>, <repo>', 'Create a label.'
18
- method_option :params, :type => :hash
22
+ desc 'create <user> <repo>', 'Create a label.'
23
+ long_desc <<-DESC
24
+ Inputs
25
+ name - Required string
26
+ color - Required string - 6 character hex code, without leading #
27
+ DESC
28
+ method_option :params, :type => :hash, :default => {},
29
+ :desc => 'Additonal request parameters e.i per_page:100'
19
30
  def create(user, repo)
31
+ Label.create user, repo, options[:params]
20
32
  end
21
33
 
22
- method_option :name, :type => :string, :required => true
23
- desc 'update <user>, <repo>', 'Update a label.'
24
- method_option :params, :type => :hash
25
- def update(user, repo)
34
+ desc 'update <user> <repo> <name>', 'Update a label.'
35
+ method_option :params, :type => :hash, :default => {},
36
+ :desc => 'Additonal request parameters e.i per_page:100'
37
+ def update(user, repo, name)
38
+ Label.update user, repo, name, options[:params]
26
39
  end
27
40
 
28
- method_option :name, :type => :string, :required => true
29
- desc 'delete <user>, <repo>', 'Delete a label.'
30
- method_option :params, :type => :hash
31
- def delete(user, repo)
41
+ desc 'delete <user> <repo> <name>', 'Delete a label.'
42
+ method_option :params, :type => :hash, :default => {},
43
+ :desc => 'Additonal request parameters e.i per_page:100'
44
+ def delete(user, repo, name)
45
+ Label.delete user, repo, name, options[:params]
46
+ end
47
+
48
+ desc 'issue <user> <repo> <number>', 'List labels on an issue.'
49
+ method_option :params, :type => :hash, :default => {},
50
+ :desc => 'Additonal request parameters e.i per_page:100'
51
+ def issue(user, repo, number)
52
+ Label.issue user, repo, number, options[:params]
53
+ end
54
+
55
+ desc 'add <user> <repo> <number>', 'Add labels to an issue.'
56
+ method_option :labels, :type => :string,
57
+ :desc => 'Labels to be added to this issue.'
58
+ method_option :params, :type => :hash, :default => {},
59
+ :desc => 'Additional request parameters e.i per_page:100'
60
+ def add(user, repo, number)
61
+ Label.add user, repo, number, options[:labels], options[:params]
62
+ end
63
+
64
+ desc 'remove <user> <repo> <number>', 'List labels on an issue.'
65
+ method_option :name, :type => :string, :default => nil,
66
+ :desc => 'Label name'
67
+ method_option :params, :type => :hash, :default => {},
68
+ :desc => 'Additonal request parameters e.i per_page:100'
69
+ def remove(user, repo, number)
70
+ Label.issue user, repo, number, options[:name], options[:params]
71
+ end
72
+
73
+ desc 'replace <user> <repo> <number>', 'Replace all labels for an issue.'
74
+ method_option :labels, :type => :string,
75
+ :desc => 'Labels to be replace in this issue.'
76
+ method_option :params, :type => :hash, :default => {},
77
+ :desc => 'Additonal request parameters e.i per_page:100'
78
+ def replace(user, repo, number)
79
+ Label.replace user, repo, number, options[:labels], options[:params]
80
+ end
81
+
82
+ desc 'milestone <user> <repo> <number>', 'Get labels for every issue in a milestone.'
83
+ method_option :params, :type => :hash, :default => {},
84
+ :desc => 'Additonal request parameters e.i per_page:100'
85
+ def milestone(user, repo, number)
86
+ Label.milestone user, repo, number, options[:params]
32
87
  end
33
88
 
34
89
  end # Labels
@@ -0,0 +1,65 @@
1
+ # encoding: utf-8
2
+
3
+ module GithubCLI
4
+ class Commands::PullRequests < Command
5
+
6
+ namespace :pull
7
+
8
+ desc 'get <user> <repo> <number>', 'Get a Pull Request'
9
+ method_option :params, :type => :hash, :default => {},
10
+ :desc => 'Additonal request parameters e.i per_page:100'
11
+ def get(user, repo, number)
12
+ PullRequest.get user, repo, number, options[:params]
13
+ end
14
+
15
+ desc 'list <user> <repo>', 'List all Pull Requests'
16
+ method_option :params, :type => :hash, :default => {},
17
+ :desc => 'Additonal request parameters e.i per_page:100'
18
+ def list(user, repo)
19
+ PullRequest.list user, repo, options[:params]
20
+ end
21
+
22
+ desc 'create <user> <repo>', 'Create a new Pull Request'
23
+ method_option :params, :type => :hash, :default => {},
24
+ :desc => 'Additonal request parameters e.i per_page:100'
25
+ def create(user, repo)
26
+ PullRequest.create user, repo, options[:params]
27
+ end
28
+
29
+ desc 'update <user> <repo> <number>', 'Update a Pull Request'
30
+ method_option :params, :type => :hash, :default => {},
31
+ :desc => 'Additonal request parameters e.i per_page:100'
32
+ def update(user, repo, number)
33
+ PullRequest.update user, repo, number, options[:params]
34
+ end
35
+
36
+ desc 'commits <user> <repo> <number>', 'List commits on a Pull Request'
37
+ method_option :params, :type => :hash, :default => {},
38
+ :desc => 'Additonal request parameters e.i per_page:100'
39
+ def commits(user, repo, number)
40
+ PullRequest.commits user, repo, number, options[:params]
41
+ end
42
+
43
+ desc 'files <user> <repo> <number>', 'List Pull Requests Files'
44
+ method_option :params, :type => :hash, :default => {},
45
+ :desc => 'Additonal request parameters e.i per_page:100'
46
+ def files(user, repo, number)
47
+ PullRequest.files user, repo, number, options[:params]
48
+ end
49
+
50
+ desc 'merged <user> <repo> <number>', 'Get if a pull request has been merged'
51
+ method_option :params, :type => :hash, :default => {},
52
+ :desc => 'Additonal request parameters e.i per_page:100'
53
+ def merged(user, repo, number)
54
+ PullRequest.merged user, repo, number, options[:params]
55
+ end
56
+
57
+ desc 'merge <user> <repo> <number>', 'Merge a pull request'
58
+ method_option :params, :type => :hash, :default => {},
59
+ :desc => 'Additonal request parameters e.i per_page:100'
60
+ def merge(user, repo, number)
61
+ PullRequest.merge user, repo, number, options[:params]
62
+ end
63
+
64
+ end # PullRequests
65
+ end # GithubCLI
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+
3
+ module GithubCLI
4
+ class Commands::References < Command
5
+
6
+ namespace :ref
7
+
8
+ desc 'get <user> <repo> <ref>', 'Get a Reference'
9
+ method_option :params, :type => :hash, :default => {},
10
+ :desc => 'Additonal request parameters e.i per_page:100'
11
+ def get(user, repo, ref)
12
+ Reference.get user, repo, ref, options[:params]
13
+ end
14
+
15
+ desc 'list <user> <repo> <ref>', 'List all References'
16
+ method_option :ref, :type => :string, :banner => 'branch reference'
17
+ method_option :params, :type => :hash, :default => {},
18
+ :desc => 'Additonal request parameters e.i per_page:100'
19
+ def list(user, repo)
20
+ ref = options[:ref] ? options[:ref] : nil
21
+ Reference.list user, repo, ref, options[:params]
22
+ end
23
+
24
+ desc 'create <user> <repo>', 'Create a new Reference'
25
+ method_option :params, :type => :hash, :default => {},
26
+ :desc => 'Additonal request parameters e.i per_page:100'
27
+ def create(user, repo)
28
+ Reference.create user, repo, options[:params]
29
+ end
30
+
31
+ desc 'update <user> <repo> <ref>', 'Update a Reference'
32
+ method_option :params, :type => :hash, :default => {},
33
+ :desc => 'Additonal request parameters e.i per_page:100'
34
+ def update(user, repo, ref)
35
+ Reference.update user, repo, ref, options[:params]
36
+ end
37
+
38
+ desc 'delete <user> <repo> <ref>', 'Delete a Reference'
39
+ method_option :params, :type => :hash, :default => {},
40
+ :desc => 'Additonal request parameters e.i per_page:100'
41
+ def delete(user, repo, ref)
42
+ Reference.delete user, repo, ref, options[:params]
43
+ end
44
+
45
+ end # References
46
+ end # GithubCLI
@@ -3,8 +3,12 @@
3
3
  module GithubCLI
4
4
  module Commands
5
5
  autoload :Blobs, 'github_cli/commands/blobs'
6
+ autoload :Commits, 'github_cli/commands/commits'
7
+ autoload :Forks, 'github_cli/commands/forks'
6
8
  autoload :Issues, 'github_cli/commands/issues'
7
9
  autoload :Labels, 'github_cli/commands/labels'
10
+ autoload :PullRequests, 'github_cli/commands/pull_requests'
11
+ autoload :References, 'github_cli/commands/references'
8
12
  autoload :Repositories, 'github_cli/commands/repositories'
9
13
  autoload :Tags, 'github_cli/commands/tags'
10
14
  autoload :Trees, 'github_cli/commands/trees'
@@ -5,8 +5,10 @@ module GithubCLI
5
5
  COMMAND_KEY = 'commands'
6
6
  COMMAND_HELP = 'help'
7
7
 
8
- def initialize(config_filename=nil)
9
- @filename = config_filename || local_options_file
8
+ def initialize(root)
9
+ @root = root
10
+ @local_config = local_options_file
11
+ @global_config = global_options_file
10
12
  end
11
13
 
12
14
  def []=(key, value)
@@ -15,7 +17,7 @@ module GithubCLI
15
17
  end
16
18
 
17
19
  def [](key)
18
- data[key] || data[COMMAND_KEY][key]
20
+ data[key] #|| data[COMMAND_KEY][key]
19
21
  end
20
22
 
21
23
  def fetch(key, default=nil)
@@ -30,6 +32,10 @@ module GithubCLI
30
32
  @data ||= self.load
31
33
  end
32
34
 
35
+ def keys
36
+ data.keys
37
+ end
38
+
33
39
  def save(config)
34
40
  config[COMMAND_KEY] = {}
35
41
  Command.all.each do |cmd|
@@ -53,24 +59,22 @@ module GithubCLI
53
59
  end
54
60
 
55
61
  def path
56
- require 'pathname'
57
- if Pathname.new(@filename).absolute?
58
- @filename
62
+ if File.exists?(local_options_file)
63
+ local_options_file
59
64
  else
60
- File.join Thor::Util.user_home, "/#{@filename}"
65
+ global_options_file
61
66
  end
62
67
  end
63
68
 
64
- def custom_options_file
65
- end
69
+ private
66
70
 
67
71
  def local_options_file
68
- '.githubrc'
72
+ Pathname.new "#{@root}/.githubrc"
69
73
  end
70
74
 
71
75
  def global_options_file
72
76
  begin
73
- File.join Thor::Util.user_home, ".githubrc"
77
+ Pathname.new File.join(Thor::Util.user_home, ".githubrc")
74
78
  rescue ArgumentError
75
79
  GithubCLI.ui.warn "Unable to find ~/.githubrc because the HOME environment variable is not set"
76
80
  nil
@@ -0,0 +1,6 @@
1
+ # Add cli errors here
2
+ module GithubCLI
3
+
4
+ class ConfigFileNotFound < StandardError; end
5
+
6
+ end # GithubCLI
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ module GithubCLI
4
+ module Helpers
5
+ extend self
6
+
7
+ def default_configfile
8
+ configfile = find_configfile
9
+ raise ConfigFileNotFound, "Could not locate .githubrc" unless configfile
10
+ Pathname.new(configfile)
11
+ end
12
+
13
+ def find_configfile
14
+ current = File.expand_path(Dir.pwd)
15
+ end
16
+ end # Helpers
17
+ end # GithubCLI
@@ -1,3 +1,3 @@
1
1
  module GithubCLI
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
data/lib/github_cli.rb CHANGED
@@ -1,10 +1,12 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require 'yaml'
4
+ require 'pathname'
4
5
  require 'thor'
5
6
  require 'thor/group'
6
7
  require 'github_api'
7
8
  require 'github_cli/version'
9
+ require 'github_cli/errors'
8
10
 
9
11
  module GithubCLI
10
12
  autoload :DSL, 'github_cli/dsl'
@@ -14,6 +16,7 @@ module GithubCLI
14
16
  autoload :API, 'github_cli/api'
15
17
  autoload :Terminal, 'github_cli/terminal'
16
18
  autoload :Commands, 'github_cli/commands'
19
+ autoload :Helpers, 'github_cli/helpers'
17
20
  autoload :UI, 'github_cli/ui'
18
21
 
19
22
  require 'github_cli/apis'
@@ -29,8 +32,16 @@ module GithubCLI
29
32
  @ui ||= UI.new
30
33
  end
31
34
 
35
+ def default_configfile
36
+ Helpers.default_configfile
37
+ end
38
+
39
+ def root
40
+ default_configfile.expand_path
41
+ end
42
+
32
43
  def config
33
- @config ||= GithubCLI::Config.new
44
+ @config ||= GithubCLI::Config.new root
34
45
  end
35
46
 
36
47
  def commands
@@ -5,7 +5,7 @@ describe GithubCLI::API do
5
5
  before(:each) { described_class.send(:class_variable_set, :@@api, nil) }
6
6
 
7
7
  it 'sets up github api connection' do
8
- github_instance = stub
8
+ github_instance = stub.as_null_object
9
9
  Github.should_receive(:new).and_return github_instance
10
10
  described_class.github_api.should == github_instance
11
11
  end
@@ -19,7 +19,8 @@ describe GithubCLI::Config do
19
19
 
20
20
  context 'array access' do
21
21
  it 'searches in commands' do
22
- config['issue-list'].should == { 'inputs' => 'ticket' }
22
+ pending
23
+ # config['issue-list'].should == { 'inputs' => 'ticket' }
23
24
  end
24
25
  end
25
26
 
@@ -72,30 +73,34 @@ describe GithubCLI::Config do
72
73
  end
73
74
  end
74
75
 
75
- it "loads empty hash if config doesn't exist" do
76
- File.stub(:exists?) { false }
77
- config.load == {}
78
- end
76
+ context "#load" do
77
+ it "loads empty hash if config doesn't exist" do
78
+ File.stub(:exists?) { false }
79
+ config.load == {}
80
+ end
79
81
 
80
- it "loads yaml config" do
81
- File.stub(:exists?) { true }
82
- File.stub(:open).and_yield filename
83
- YAML.should_receive(:load).with(filename)
84
- config.load
82
+ it "loads yaml config" do
83
+ File.stub(:exists?) { true }
84
+ File.stub(:open).and_yield filename
85
+ YAML.should_receive(:load).with(filename)
86
+ config.load
87
+ end
85
88
  end
86
89
 
87
- it 'defines absolute path' do
88
- config = GithubCLI::Config.new path
89
- config.path.should == path
90
- end
90
+ context "#path" do
91
+ it 'looks for local config file' do
92
+ root = "/users/"
93
+ File.stub(:exists?) { true }
94
+ config = GithubCLI::Config.new root
95
+ config.path.to_s.should == "#{root}/.githubrc"
96
+ end
91
97
 
92
- it 'expands relative path' do
93
- config = GithubCLI::Config.new
94
- config.path.should == "#{ENV['HOME']}/#{filename}"
98
+ it 'reads global file if local is missing ' do
99
+ File.stub(:exists?) { false }
100
+ config = GithubCLI::Config.new path
101
+ config.path.to_s.should == "#{ENV['HOME']}/#{filename}"
102
+ end
95
103
  end
96
104
  end
97
105
 
98
- context 'local' do
99
- end
100
-
101
106
  end # GithubCLI::Config
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe GithubCLI::Helpers do
4
+ subject { described_class }
5
+
6
+ it 'throws error if config file does not exist' do
7
+ subject.stub(:find_configfile) { nil }
8
+ expect {
9
+ subject.default_configfile
10
+ }.to raise_error(GithubCLI::ConfigFileNotFound)
11
+ end
12
+
13
+ it 'finds current directory' do
14
+ current = File.expand_path('../../../', __FILE__)
15
+ described_class.find_configfile.should == current
16
+ end
17
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-06 00:00:00.000000000 Z
12
+ date: 2012-04-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: github_api
16
- requirement: &2151931960 !ruby/object:Gem::Requirement
16
+ requirement: &2151931480 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.4.8
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2151931960
24
+ version_requirements: *2151931480
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: thor
27
- requirement: &2151931340 !ruby/object:Gem::Requirement
27
+ requirement: &2151930740 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2151931340
35
+ version_requirements: *2151930740
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &2151930440 !ruby/object:Gem::Requirement
38
+ requirement: &2151929860 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2151930440
46
+ version_requirements: *2151929860
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: aruba
49
- requirement: &2151929640 !ruby/object:Gem::Requirement
49
+ requirement: &2151929040 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2151929640
57
+ version_requirements: *2151929040
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &2151928900 !ruby/object:Gem::Requirement
60
+ requirement: &2151942440 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2151928900
68
+ version_requirements: *2151942440
69
69
  description: CLI-based access to GitHub API v3
70
70
  email:
71
71
  - pmurach@gmail.com
@@ -95,6 +95,11 @@ files:
95
95
  - lib/github_cli/api.rb
96
96
  - lib/github_cli/apis.rb
97
97
  - lib/github_cli/apis/blob.rb
98
+ - lib/github_cli/apis/commit.rb
99
+ - lib/github_cli/apis/fork.rb
100
+ - lib/github_cli/apis/label.rb
101
+ - lib/github_cli/apis/pull_request.rb
102
+ - lib/github_cli/apis/reference.rb
98
103
  - lib/github_cli/apis/repository.rb
99
104
  - lib/github_cli/apis/tag.rb
100
105
  - lib/github_cli/apis/tree.rb
@@ -102,13 +107,19 @@ files:
102
107
  - lib/github_cli/command.rb
103
108
  - lib/github_cli/commands.rb
104
109
  - lib/github_cli/commands/blobs.rb
110
+ - lib/github_cli/commands/commits.rb
111
+ - lib/github_cli/commands/forks.rb
105
112
  - lib/github_cli/commands/issues.rb
106
113
  - lib/github_cli/commands/labels.rb
114
+ - lib/github_cli/commands/pull_requests.rb
115
+ - lib/github_cli/commands/references.rb
107
116
  - lib/github_cli/commands/repositories.rb
108
117
  - lib/github_cli/commands/tags.rb
109
118
  - lib/github_cli/commands/trees.rb
110
119
  - lib/github_cli/config.rb
111
120
  - lib/github_cli/dsl.rb
121
+ - lib/github_cli/errors.rb
122
+ - lib/github_cli/helpers.rb
112
123
  - lib/github_cli/terminal.rb
113
124
  - lib/github_cli/ui.rb
114
125
  - lib/github_cli/version.rb
@@ -116,6 +127,7 @@ files:
116
127
  - spec/github_cli/cli_spec.rb
117
128
  - spec/github_cli/command_spec.rb
118
129
  - spec/github_cli/config_spec.rb
130
+ - spec/github_cli/helpers_spec.rb
119
131
  - spec/spec_helper.rb
120
132
  homepage: http://github.com/peter-murach/github_cli
121
133
  licenses: []
@@ -151,4 +163,5 @@ test_files:
151
163
  - spec/github_cli/cli_spec.rb
152
164
  - spec/github_cli/command_spec.rb
153
165
  - spec/github_cli/config_spec.rb
166
+ - spec/github_cli/helpers_spec.rb
154
167
  - spec/spec_helper.rb