git-review 2.0.0.alpha → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,61 @@
1
+ module GitReview
2
+
3
+ class Server
4
+
5
+ extend Forwardable
6
+ include ::GitReview::Helpers
7
+
8
+ attr_reader :provider
9
+
10
+ def self.instance
11
+ @instance ||= new
12
+ end
13
+
14
+ def initialize
15
+ init_provider
16
+ end
17
+
18
+ def method_missing(method, *args)
19
+ if provider.respond_to?(method)
20
+ provider.send(method, *args)
21
+ else
22
+ super
23
+ end
24
+ end
25
+
26
+ def respond_to?(method)
27
+ provider.respond_to?(method) || super
28
+ end
29
+
30
+ private
31
+
32
+ def init_provider
33
+ @provider = case
34
+ when bitbucket_provider?
35
+ GitReview::Provider::Bitbucket.new
36
+ when github_provider?
37
+ GitReview::Provider::Github.new
38
+ else
39
+ raise ::GitReview::InvalidGitProviderError
40
+ end
41
+ end
42
+
43
+ def github_provider?
44
+ fetch_origin_url =~ %r(github)
45
+ end
46
+
47
+ def bitbucket_provider?
48
+ fetch_origin_url =~ %r(bitbucket)
49
+ end
50
+
51
+ def fetch_origin_url
52
+ git_call(call_origin_params)
53
+ end
54
+
55
+ def call_origin_params
56
+ "config --get remote.origin.url"
57
+ end
58
+
59
+ end
60
+
61
+ end
@@ -1,48 +1,53 @@
1
1
  require 'fileutils'
2
2
  require 'yaml'
3
+ require 'hashie'
3
4
 
4
5
  module GitReview
5
6
 
6
7
  class Settings
7
8
 
8
- # acts like a singleton class but it's actually not
9
- # use ::GitReview::Settings.instance everywhere except in tests
10
9
  def self.instance
11
10
  @instance ||= new
12
11
  end
13
12
 
14
- # Read settings from ~/.git_review.yml upon initialization.
15
- def initialize
16
- @config_file = File.join(Dir.home, '.git_review.yml')
17
- @config = YAML.load_file(@config_file) if File.exists?(@config_file)
18
- @config ||= {}
19
- end
20
-
21
- # Write settings back to file.
22
13
  def save!
23
- File.open(@config_file, 'w') do |file|
24
- file.write(YAML.dump(@config))
25
- end
14
+ File.write(file, dumped)
26
15
  end
27
16
 
28
- # Allow to access config options.
29
17
  def method_missing(method, *args)
30
- # Determine whether to set or get an attribute.
31
- if method.to_s =~ /(.*)=$/
32
- @config[$1.to_sym] = args.shift
18
+ if args.empty?
19
+ config.send(method)
33
20
  else
34
- @config[method.to_sym]
21
+ config.send(method, args.shift)
35
22
  end
36
23
  end
37
24
 
38
25
  def respond_to?(method)
39
- if method.to_s =~ /(.*)=$/ || @config.keys.include?(method.to_sym)
40
- true
26
+ config.respond_to?(method) || super
27
+ end
28
+
29
+ protected
30
+
31
+ def config
32
+ @config ||= Hashie::Mash.new loaded
33
+ end
34
+
35
+ def file
36
+ @file ||= File.join(Dir.home, '.git_review.yml')
37
+ end
38
+
39
+ def loaded
40
+ if File.exists? file
41
+ YAML.load_file(file)
41
42
  else
42
- super
43
+ {}
43
44
  end
44
45
  end
45
46
 
47
+ def dumped
48
+ YAML.dump config.to_hash
49
+ end
50
+
46
51
  end
47
52
 
48
53
  end
@@ -0,0 +1,35 @@
1
+ module Accessible
2
+
3
+ # Setup simple exit criteria for recursion.
4
+ def accessible?
5
+ true
6
+ end
7
+
8
+ # Allow to set instance variables on initialization.
9
+ def initialize(attributes_hash = {})
10
+ self.update_attributes attributes_hash
11
+ end
12
+
13
+ # Provide access to instance variables like a hash with indifferent access.
14
+ def [](key)
15
+ self.instance_variable_get "@#{key}".to_sym
16
+ end
17
+
18
+ # Provide access to instance variables like a hash with indifferent access.
19
+ def []=(key, value)
20
+ self.instance_variable_set "@#{key}".to_sym, value
21
+ end
22
+
23
+ # Allow to set all attributes by assigning a hash.
24
+ def update_attributes(attributes_hash)
25
+ attributes_hash.each do |key, value|
26
+ attribute = self[key]
27
+ if attribute.respond_to? :accessible?
28
+ attribute.update_attributes(value)
29
+ else
30
+ self[key] = value
31
+ end
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,30 @@
1
+ module Colorizable
2
+
3
+ # Takes a color code (= an integer) and formats the Colorizable accordingly.
4
+ def colorize(color_code)
5
+ "\e[#{color_code}m#{self}\e[0m"
6
+ end
7
+
8
+ # A couple of presets to keep the code clean.
9
+
10
+ def red
11
+ colorize 31
12
+ end
13
+
14
+ def green
15
+ colorize 32
16
+ end
17
+
18
+ def yellow
19
+ colorize 33
20
+ end
21
+
22
+ def blue
23
+ colorize 34
24
+ end
25
+
26
+ def pink
27
+ colorize 35
28
+ end
29
+
30
+ end
@@ -0,0 +1,16 @@
1
+ module Nestable
2
+
3
+ def nests(mapping)
4
+ # Setup an accessor for all nested instances.
5
+ attr_accessor *mapping.keys
6
+
7
+ # Create a nested instance automatically on initialize.
8
+ define_method(:initialize) do |arguments = nil|
9
+ mapping.each do |attribute, klass|
10
+ self.instance_variable_set "@#{attribute}".to_sym, klass.new
11
+ end
12
+ super arguments if arguments
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,13 @@
1
+ class String
2
+
3
+ include Colorizable
4
+
5
+ def review_time
6
+ Time.parse(self).review_time
7
+ end
8
+
9
+ def review_ljust(size)
10
+ gsub("\n", ' ')[0, size-1].ljust(size)
11
+ end
12
+
13
+ end
@@ -0,0 +1,11 @@
1
+ class Time
2
+
3
+ def review_time
4
+ strftime('%d-%b-%y')
5
+ end
6
+
7
+ def review_ljust(size)
8
+ to_s.review_ljust(size)
9
+ end
10
+
11
+ end
@@ -0,0 +1,14 @@
1
+ class Commit
2
+
3
+ include Accessible
4
+ extend Nestable
5
+
6
+ nests user: User,
7
+ repository: Repository
8
+
9
+ attr_accessor :sha,
10
+ :ref,
11
+ :label,
12
+ :repo
13
+
14
+ end
@@ -0,0 +1,8 @@
1
+ class Repository
2
+
3
+ include Accessible
4
+
5
+ attr_accessor :owner,
6
+ :name
7
+
8
+ end
@@ -0,0 +1,18 @@
1
+ class Request
2
+
3
+ include Accessible
4
+ extend Nestable
5
+
6
+ nests head: Commit
7
+
8
+ attr_accessor :number,
9
+ :title,
10
+ :body,
11
+ :state,
12
+ :html_url,
13
+ :patch_url,
14
+ :updated_at,
15
+ :comments,
16
+ :review_comments
17
+
18
+ end
@@ -0,0 +1,7 @@
1
+ class User
2
+
3
+ include Accessible
4
+
5
+ attr_accessor :login
6
+
7
+ end
metadata CHANGED
@@ -1,112 +1,127 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-review
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.alpha
5
- prerelease: 6
4
+ version: 2.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Dominik Bamberger
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-09-04 00:00:00.000000000 Z
11
+ date: 2013-10-23 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: launchy
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
- name: octokit
28
+ name: yajl-ruby
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
- version: 2.0.0
33
+ version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
- version: 2.0.0
40
+ version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
- name: yajl-ruby
42
+ name: hashie
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: gli
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ~>
68
60
  - !ruby/object:Gem::Version
69
- version: '0'
61
+ version: 2.8.0
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ~>
76
67
  - !ruby/object:Gem::Version
77
- version: '0'
68
+ version: 2.8.0
78
69
  - !ruby/object:Gem::Dependency
79
- name: rspec
70
+ name: octokit
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 2.0.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 2.0.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
84
88
  - !ruby/object:Gem::Version
85
89
  version: 2.13.0
86
90
  type: :development
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
- - - ~>
94
+ - - '>='
92
95
  - !ruby/object:Gem::Version
93
96
  version: 2.13.0
94
97
  - !ruby/object:Gem::Dependency
95
- name: hashie
98
+ name: guard
96
99
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
100
  requirements:
99
- - - ! '>='
101
+ - - '>='
100
102
  - !ruby/object:Gem::Version
101
- version: '0'
103
+ version: 2.0.3
102
104
  type: :development
103
105
  prerelease: false
104
106
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
107
  requirements:
107
- - - ! '>='
108
+ - - '>='
108
109
  - !ruby/object:Gem::Version
109
- version: '0'
110
+ version: 2.0.3
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: 3.1.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: 3.1.0
110
125
  description: Manage review workflow for projects hosted on GitHub (using pull requests).
111
126
  email: bamberger.dominik@gmail.com
112
127
  executables:
@@ -118,34 +133,44 @@ files:
118
133
  - lib/git-review.rb
119
134
  - lib/git-review/settings.rb
120
135
  - lib/git-review/commands.rb
136
+ - lib/git-review/helpers.rb
137
+ - lib/git-review/server.rb
121
138
  - lib/git-review/errors.rb
122
- - lib/git-review/github.rb
123
- - lib/git-review/internals.rb
124
139
  - lib/git-review/local.rb
140
+ - lib/git-review/provider/github.rb
141
+ - lib/git-review/provider/base.rb
142
+ - lib/git-review/provider/bitbucket.rb
143
+ - lib/mixins/colorizable.rb
144
+ - lib/mixins/string.rb
145
+ - lib/mixins/accessible.rb
146
+ - lib/mixins/time.rb
147
+ - lib/mixins/nestable.rb
148
+ - lib/models/user.rb
149
+ - lib/models/commit.rb
150
+ - lib/models/repository.rb
151
+ - lib/models/request.rb
125
152
  - bin/git-review
126
153
  homepage: http://github.com/b4mboo/git-review
127
154
  licenses: []
155
+ metadata: {}
128
156
  post_install_message:
129
157
  rdoc_options: []
130
158
  require_paths:
131
159
  - lib
132
160
  required_ruby_version: !ruby/object:Gem::Requirement
133
- none: false
134
161
  requirements:
135
- - - ! '>='
162
+ - - '>='
136
163
  - !ruby/object:Gem::Version
137
164
  version: '0'
138
165
  required_rubygems_version: !ruby/object:Gem::Requirement
139
- none: false
140
166
  requirements:
141
- - - ! '>'
167
+ - - '>='
142
168
  - !ruby/object:Gem::Version
143
- version: 1.3.1
169
+ version: '0'
144
170
  requirements: []
145
171
  rubyforge_project:
146
- rubygems_version: 1.8.23
172
+ rubygems_version: 2.0.3
147
173
  signing_key:
148
- specification_version: 3
149
- summary: facilitates GitHub code reviews
174
+ specification_version: 4
175
+ summary: Facilitates GitHub code reviews
150
176
  test_files: []
151
- has_rdoc: