git-review 2.0.0.alpha → 2.0.0

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