blend 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,183 @@
1
+ module Blend
2
+ module Status
3
+ class ProjectResolver
4
+ attr_accessor :project
5
+
6
+ def initialize( project )
7
+ @project = project
8
+ end
9
+
10
+ def juice_client
11
+ @project.juice_client
12
+ end
13
+
14
+ def github_client
15
+ Blend::Client.github_client
16
+ end
17
+
18
+ def name
19
+ @project.name
20
+ end
21
+
22
+ def set( s )
23
+ !s.nil? && s != ""
24
+ end
25
+
26
+ def resolve_project_found
27
+ puts "Trying to fix project_found"
28
+
29
+ choose do |menu|
30
+ menu.header = "No juice project found".red
31
+
32
+ menu.prompt = "Create?"
33
+
34
+ menu.choice "create" do
35
+ juice_client.create_project @name
36
+ end
37
+
38
+ menu.choice "ignore"
39
+ end
40
+ end
41
+
42
+ def resolve_hipchat
43
+ puts "Resolve hipchat"
44
+
45
+ choices = juice_client.hipchat_check.select do |x|
46
+ x[:projects].first == "_unassigned_"
47
+ end.collect do |x|
48
+ x[:room]
49
+ end
50
+
51
+ if choices.member? name
52
+ puts "Found a matching room... attaching"
53
+ juice_client.project_add_hipchat( @project.juice_id, name )
54
+ return
55
+ end
56
+
57
+ room = choose do |menu|
58
+ menu.header = "Select a hipchat room action"
59
+ menu.prompt = "Please choose a unassigned hipchat room to associate"
60
+ menu.choice "Create A Room called #{name}" do
61
+ "create"
62
+ end
63
+
64
+ menu.choices *choices
65
+ end
66
+
67
+ puts "You chose: #{room}"
68
+
69
+ if room == "create"
70
+ room = name
71
+ puts "Creating a room #{name}"
72
+ Blend::Client.hipchat_client.create_room( name, "Let's talk about #{name}!" )
73
+ end
74
+
75
+ if( set( room ) )
76
+ juice_client.project_add_hipchat( @project.juice_id, name )
77
+ end
78
+ end
79
+
80
+ def resolve_github_teams
81
+ team = choose do |menu|
82
+ menu.header = "Select a github team"
83
+ menu.prompt = "Please select a team"
84
+
85
+ menu.choice "Create a new team" do
86
+ "create"
87
+ end
88
+
89
+ menu.choices *Blend::Client.juice_client.github_team_check.select { |k,v| v.length == 0}.keys
90
+ end
91
+
92
+ if team == "create"
93
+ team = name.downcase
94
+ puts "Creating team: #{name}"
95
+ pp github_client.create_team( name.downcase )
96
+ end
97
+
98
+ if( set( team ))
99
+ juice_client.project_add_team( @project.juice_id, team )
100
+ end
101
+ end
102
+
103
+ def resolve_repos_setup
104
+ teams = @project.github_teams
105
+
106
+ if teams.length == 0
107
+ puts "Need to have a github team configured to create a repo".red
108
+ return
109
+ end
110
+
111
+ team = teams.first
112
+
113
+ repos = @project.repos
114
+
115
+ [ "", "-ios", "-android" ].each do |suffix|
116
+ repo_name = "#{name}#{suffix}".downcase
117
+ if repos.collect { |k,v| v }.select { |x,v| x['name'] == repo_name}.length > 0
118
+ puts "Found #{repo_name}".green
119
+ elsif agree "Create #{repo_name}? y/n ", true
120
+ puts "Creating #{repo_name} in team #{team}".yellow
121
+ github_client.repo_create( team, repo_name )
122
+ end
123
+ end
124
+ end
125
+
126
+ def resolve_source_control
127
+ repos = @project.repos_setup
128
+ configured = (@project.feeds['github'] || []).collect { |x| "#{x['namespace']}/#{x['name']}" }
129
+
130
+ (repos-configured).each do |repo|
131
+ puts "Adding feed #{repo}".yellow
132
+
133
+ pp juice_client.add_feed( @project.juice_id, 'github', repo )
134
+ end
135
+ # exit
136
+ end
137
+
138
+ def resolve_github_members
139
+ people = juice_client.organization_users(1).collect { |x| { name: x["name"], github: x['github_handle']}}.select { |x| set(x[:github]) }
140
+ teams = @project.github_teams
141
+
142
+ if teams.length == 0
143
+ puts "Need to have a github team configured to add people to it!".red
144
+ return
145
+ end
146
+
147
+ team = teams.first
148
+
149
+ github = ""
150
+
151
+ begin
152
+ user = choose do |menu|
153
+
154
+ menu.header = "Select a user"
155
+ menu.prompt = "Please select a user"
156
+
157
+ menu.choice "Done" do
158
+ "done"
159
+ end
160
+
161
+ menu.choices *people.sort{|a,b| a[:name] <=> b[:name]}.collect { |x| "#{x[:github]}:#{x[:name]}"}
162
+ end
163
+
164
+ github = user.split( /:/ ).first
165
+
166
+ if github != "done"
167
+ github_client.add_team_member team, github
168
+ end
169
+ end while github != "done"
170
+ end
171
+
172
+ def resolve_juice_users_synced
173
+ not_in_juice = @project.juice_users_synced_diff
174
+
175
+ not_in_juice.each do |user_id|
176
+ puts "Adding juice user_id: #{user_id}".yellow
177
+
178
+ juice_client.project_add_user( @project.juice_id, user_id )
179
+ end
180
+ end
181
+ end
182
+ end
183
+ end
@@ -0,0 +1,51 @@
1
+ module Blend
2
+ module Status
3
+ class Repo
4
+ attr_accessor :project, :name, :repo
5
+
6
+ def initialize( project, name, repo)
7
+ @project = project
8
+ @name = name
9
+ @repo = repo
10
+ end
11
+
12
+ def github_client
13
+ Blend::Client.github_client
14
+ end
15
+
16
+ def private?
17
+ @repo['private']
18
+ end
19
+
20
+ def hooks
21
+ @hooks ||= github_client.list_hooks( repo['full_name'] ).group_by { |x| x['name'] }
22
+ end
23
+
24
+ def hipchat_hook
25
+ hooks['hipchat']
26
+ end
27
+
28
+ def resolve_hipchat_hook
29
+ puts "Adding hipchat hook...".yellow
30
+ Blend::CLI::Github.new.add_hipchat( repo['full_name'], @project.hipchat ) if @project.hipchat
31
+ end
32
+
33
+ def check key, method
34
+ ret = __send__( method )
35
+ ret = false if ret.nil?
36
+ printf "%20s: ", key
37
+ if( ret )
38
+ printf "\u2713\n".encode('utf-8').green
39
+ else
40
+ printf "\u2718\n".encode('utf-8').red
41
+
42
+ if( @project.resolve )
43
+ r = "resolve_#{method}".to_sym
44
+ __send__(r) if respond_to? r
45
+ end
46
+ end
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,29 @@
1
+ module Blend
2
+ module Status
3
+ class Team
4
+ attr_accessor :name
5
+
6
+ def initialize( project, name )
7
+ @project = project
8
+ @name = name
9
+ end
10
+
11
+ def github_client
12
+ Blend::Client.github_client
13
+ end
14
+
15
+ def repos
16
+ @repos ||= github_client.list_team_repos @name
17
+ end
18
+
19
+ def members
20
+ @members ||= github_client.list_team_members( @name ).collect { |x| x['login'] }
21
+ end
22
+
23
+ def read_only?
24
+ @github_team ||= github_client.list_team @name
25
+ return @github_team && @github_team['permission'] != 'push'
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,10 @@
1
+ module Blend
2
+ VERSION = "0.1.4"
3
+
4
+ class << self
5
+ def version
6
+ Blend::VERSION.dup
7
+ end
8
+ end
9
+
10
+ end
metadata ADDED
@@ -0,0 +1,225 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: blend
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.4
5
+ platform: ruby
6
+ authors:
7
+ - Ricky Reusser
8
+ - Will Schenk
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-01-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: thor
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: hipchat-api
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: github_api
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: httparty
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: highline
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: colorize
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: heroku-api
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: heroku
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: dnsruby
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :runtime
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: whois
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :runtime
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: httpclient
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - '>='
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :runtime
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - '>='
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ description: Project management for HappyFunCorp projects.
169
+ email:
170
+ - ricky@happyfuncorp.com
171
+ - will@happyfuncorp.com
172
+ executables:
173
+ - blend
174
+ extensions: []
175
+ extra_rdoc_files: []
176
+ files:
177
+ - lib/blend/chatbot/bot.rb
178
+ - lib/blend/cli/github.rb
179
+ - lib/blend/cli/heroku.rb
180
+ - lib/blend/cli/hipchat.rb
181
+ - lib/blend/cli/juice.rb
182
+ - lib/blend/cli.rb
183
+ - lib/blend/client/github_client.rb
184
+ - lib/blend/client/heroku_client.rb
185
+ - lib/blend/client/hipchat_client.rb
186
+ - lib/blend/client/juice_client.rb
187
+ - lib/blend/client.rb
188
+ - lib/blend/core_ext/fixnum.rb
189
+ - lib/blend/core_ext/object.rb
190
+ - lib/blend/core_ext/string.rb
191
+ - lib/blend/exceptions.rb
192
+ - lib/blend/status/domain.rb
193
+ - lib/blend/status/environment.rb
194
+ - lib/blend/status/project.rb
195
+ - lib/blend/status/project_resolver.rb
196
+ - lib/blend/status/repo.rb
197
+ - lib/blend/status/team.rb
198
+ - lib/blend/version.rb
199
+ - lib/blend.rb
200
+ - Rakefile
201
+ - bin/blend
202
+ homepage: http://happyfuncorp.com
203
+ licenses: []
204
+ metadata: {}
205
+ post_install_message:
206
+ rdoc_options: []
207
+ require_paths:
208
+ - lib
209
+ required_ruby_version: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - '>='
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ required_rubygems_version: !ruby/object:Gem::Requirement
215
+ requirements:
216
+ - - '>='
217
+ - !ruby/object:Gem::Version
218
+ version: '0'
219
+ requirements: []
220
+ rubyforge_project:
221
+ rubygems_version: 2.1.10
222
+ signing_key:
223
+ specification_version: 4
224
+ summary: Let's make some juice!
225
+ test_files: []