github_cli 0.1.2 → 0.1.3

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.
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