blend 0.1.4

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,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: []