quandl_utility 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.rubocop.yml +12 -0
- data/README.md +81 -0
- data/Rakefile +1 -1
- data/Thorfile +6 -0
- data/UPGRADE.md +6 -0
- data/VERSION +1 -1
- data/bin/qutil +5 -0
- data/lib/quandl/utility.rb +7 -7
- data/lib/quandl/utility/cli.rb +22 -0
- data/lib/quandl/utility/thor_tasks.rb +3 -0
- data/lib/quandl/utility/thor_tasks/ci.rb +95 -0
- data/lib/quandl/utility/thor_tasks/lint.rb +60 -0
- data/lib/quandl/utility/thor_tasks/notify.rb +43 -0
- data/lib/quandl/utility/version.rb +3 -3
- data/quandl_utility.gemspec +6 -2
- data/support/templates/project.rubocop.yml.erb +4 -0
- data/support/templates/quandl.rubocop.yml +12 -0
- metadata +84 -3
data/.rubocop.yml
ADDED
data/README.md
CHANGED
@@ -44,3 +44,84 @@ rake gem_name:bump:patch # Perform patch bump to gem_name
|
|
44
44
|
$ rake gem_name:bump:minor && rake release
|
45
45
|
```
|
46
46
|
|
47
|
+
## Thor Tasks
|
48
|
+
|
49
|
+
Quandl::Utility Thor tasks are available in two ways:
|
50
|
+
|
51
|
+
* Using the executable 'qutil'
|
52
|
+
|
53
|
+
```bash
|
54
|
+
qutil notify slack 'general' 'ping!'
|
55
|
+
```
|
56
|
+
|
57
|
+
* Including in your Thorfile
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
require 'quandl/utility/thor_tasks'
|
61
|
+
|
62
|
+
desc 'my_task'
|
63
|
+
def my_task
|
64
|
+
invoke 'qutil:slack:notify', ['general', 'ping!']
|
65
|
+
end
|
66
|
+
```
|
67
|
+
|
68
|
+
### Lint
|
69
|
+
|
70
|
+
Linting tasks. Currently supports Rubocop and Foodcritic for linting Ruby projects and Chef cookbooks.
|
71
|
+
|
72
|
+
```bash
|
73
|
+
qutil lint help
|
74
|
+
```
|
75
|
+
|
76
|
+
#### ruby
|
77
|
+
|
78
|
+
Run Rubocop linting on project.
|
79
|
+
|
80
|
+
```bash
|
81
|
+
qutil lint ruby
|
82
|
+
```
|
83
|
+
|
84
|
+
#### init_ruby
|
85
|
+
|
86
|
+
Initialize Rubocop linting on project. Create two files: an organization base YAML config of linting rules, and an empty project YAML config
|
87
|
+
that inherits from the organization config.
|
88
|
+
|
89
|
+
```bash
|
90
|
+
qutil lint init_ruby
|
91
|
+
```
|
92
|
+
|
93
|
+
#### cookbook
|
94
|
+
|
95
|
+
```bash
|
96
|
+
qutil lint cookbook
|
97
|
+
```
|
98
|
+
|
99
|
+
### CI
|
100
|
+
|
101
|
+
Task for the Continuous Integration server.
|
102
|
+
|
103
|
+
```bash
|
104
|
+
qutil ci help
|
105
|
+
```
|
106
|
+
|
107
|
+
#### notify_slack
|
108
|
+
|
109
|
+
Notify slack of build status. Uses various tddium ENV variables to build a message that is sent to slack.
|
110
|
+
|
111
|
+
```bash
|
112
|
+
qutil ci notify_slack
|
113
|
+
```
|
114
|
+
|
115
|
+
### Notify
|
116
|
+
|
117
|
+
Task for notifications. Currently supports sending messages to Slack.
|
118
|
+
|
119
|
+
```bash
|
120
|
+
qutil notify help
|
121
|
+
```
|
122
|
+
|
123
|
+
#### slack
|
124
|
+
|
125
|
+
```bash
|
126
|
+
qutil notify slack MESSAGE CHANNEL
|
127
|
+
```
|
data/Rakefile
CHANGED
@@ -14,7 +14,7 @@ RSpec::Core::RakeTask.new(:spec) do |task|
|
|
14
14
|
end
|
15
15
|
|
16
16
|
Quandl::Utility::Tasks.configure do |c|
|
17
|
-
c.name = '
|
17
|
+
c.name = 'quandl'
|
18
18
|
c.tag_prefix = 'v'
|
19
19
|
c.version_path = File.join( Quandl::Utility.root_path, 'VERSION' )
|
20
20
|
c.changelog_path = File.join( Quandl::Utility.root_path, 'UPGRADE.md' )
|
data/Thorfile
ADDED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/bin/qutil
ADDED
data/lib/quandl/utility.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'quandl/utility/version'
|
2
|
+
require 'quandl/utility/configuration'
|
3
|
+
require 'quandl/utility/tasks'
|
4
4
|
|
5
5
|
module Quandl
|
6
|
-
module Utility
|
7
|
-
|
8
|
-
|
6
|
+
module Utility
|
7
|
+
def self.root_path
|
8
|
+
@root_path ||= File.expand_path(File.join(File.dirname(__FILE__), '../../'))
|
9
|
+
end
|
9
10
|
end
|
10
11
|
end
|
11
|
-
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'quandl/utility/thor_tasks/lint'
|
3
|
+
require 'quandl/utility/thor_tasks/notify'
|
4
|
+
require 'quandl/utility/thor_tasks/ci'
|
5
|
+
|
6
|
+
module Quandl
|
7
|
+
module Utility
|
8
|
+
# Quand Utility Command Line
|
9
|
+
class CLI < Thor
|
10
|
+
namespace 'qutil'
|
11
|
+
|
12
|
+
desc 'lint', 'Linting subcommands'
|
13
|
+
subcommand 'lint', Quandl::Utility::ThorTasks::Lint
|
14
|
+
|
15
|
+
desc 'notify', 'Notification subcommands'
|
16
|
+
subcommand 'notify', Quandl::Utility::ThorTasks::Notify
|
17
|
+
|
18
|
+
desc 'ci', 'CI Server subcommands'
|
19
|
+
subcommand 'ci', Quandl::Utility::ThorTasks::CI
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
module Quandl
|
4
|
+
module Utility
|
5
|
+
module ThorTasks
|
6
|
+
# Tasks to run on CI Server
|
7
|
+
class CI < Thor
|
8
|
+
namespace 'qutil:ci'
|
9
|
+
|
10
|
+
desc 'notify_slack', 'Notify Quandl of build status of CI'
|
11
|
+
def notify_slack
|
12
|
+
invoke 'qutil:notify:slack',
|
13
|
+
[ci_build_message, slack_channel],
|
14
|
+
emoji: slack_emoji
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
# Generate a message for the CI build that will be sent to Quandl
|
20
|
+
#
|
21
|
+
# Returns string
|
22
|
+
def ci_build_message
|
23
|
+
"#{current_project} (#{git_branch}) *#{tddium_build_status}* - #{tddium_report_url}"
|
24
|
+
end
|
25
|
+
|
26
|
+
# Which slack channel to send build status to.
|
27
|
+
# Defaults to 'development', but it can be overriden in tddium.yml
|
28
|
+
#
|
29
|
+
# Returns string
|
30
|
+
def slack_channel
|
31
|
+
ENV.fetch('SLACK_CHANNEL', 'development')
|
32
|
+
end
|
33
|
+
|
34
|
+
# The URL for the build that just ran
|
35
|
+
#
|
36
|
+
# Returns string
|
37
|
+
def tddium_report_url
|
38
|
+
"https://#{tddium_api_server}/1/reports/#{tddium_session_id}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def tddium_build_status
|
42
|
+
ENV['TDDIUM_BUILD_STATUS']
|
43
|
+
end
|
44
|
+
|
45
|
+
def tddium_api_server
|
46
|
+
ENV['TDDIUM_API_SERVER']
|
47
|
+
end
|
48
|
+
|
49
|
+
def tddium_session_id
|
50
|
+
ENV['TDDIUM_SESSION_ID']
|
51
|
+
end
|
52
|
+
|
53
|
+
def current_project
|
54
|
+
ENV['QUANDL_PROJECT']
|
55
|
+
end
|
56
|
+
|
57
|
+
def git_branch
|
58
|
+
@git_branch ||= `git branch`.chomp.gsub(/\*/, '').strip
|
59
|
+
end
|
60
|
+
|
61
|
+
# Use tddium environment variables to determine status of build
|
62
|
+
#
|
63
|
+
# Returns boolean
|
64
|
+
def failed?
|
65
|
+
ENV['TDDIUM_BUILD_STATUS'] == 'failed'
|
66
|
+
end
|
67
|
+
|
68
|
+
# Use different emojis for build statuses.
|
69
|
+
#
|
70
|
+
# Returns string
|
71
|
+
def slack_emoji
|
72
|
+
failed? ? fail_emoji : pass_emoji
|
73
|
+
end
|
74
|
+
|
75
|
+
# Return the emoji to use for a failed build
|
76
|
+
# Can be overriden with environment variables in tddium.yml.
|
77
|
+
# Default is :scream_cat:
|
78
|
+
#
|
79
|
+
# Returns string
|
80
|
+
def fail_emoji
|
81
|
+
ENV.fetch('SLACK_FAIL_EMOJI', ':scream_cat:')
|
82
|
+
end
|
83
|
+
|
84
|
+
# Return the emoji to use for a successful build
|
85
|
+
# Can be overriden with environment variables in tddium.yml.
|
86
|
+
# Default is :thumbsup:
|
87
|
+
#
|
88
|
+
# Returns string
|
89
|
+
def pass_emoji
|
90
|
+
ENV.fetch('SLACK_PASS_EMOJI', ':thumbsup:')
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'rubocop'
|
2
|
+
require 'thor'
|
3
|
+
require 'thor/foodcritic'
|
4
|
+
|
5
|
+
module Quandl
|
6
|
+
module Utility
|
7
|
+
module ThorTasks
|
8
|
+
# Linting Tasks
|
9
|
+
class Lint < Thor
|
10
|
+
namespace 'qutil:lint'
|
11
|
+
include Thor::Actions
|
12
|
+
|
13
|
+
def self.source_root
|
14
|
+
File.expand_path('../../../../../support/templates', __FILE__)
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'cookbook', 'stuff'
|
18
|
+
def cookbook
|
19
|
+
invoke 'foodcritic:lint'
|
20
|
+
end
|
21
|
+
|
22
|
+
method_option :paths,
|
23
|
+
type: :array,
|
24
|
+
default: %w( . ),
|
25
|
+
required: true,
|
26
|
+
aliases: '-p'
|
27
|
+
desc 'ruby', 'Lint project for Ruby style with Rubocop'
|
28
|
+
def ruby
|
29
|
+
result = Rubocop::CLI.new.run(options[:paths])
|
30
|
+
if result == 0
|
31
|
+
say('No Rubocop warnings', :green)
|
32
|
+
else
|
33
|
+
exit(result)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
method_option :default_directory,
|
38
|
+
type: :string,
|
39
|
+
default: '.quandl.rubocop',
|
40
|
+
aliases: '-d',
|
41
|
+
required: true,
|
42
|
+
banner: 'DIRECTORY'
|
43
|
+
desc 'init_ruby', 'Start Rubocop linting for project'
|
44
|
+
def init_ruby
|
45
|
+
return unless yes?('Do you want to setup Rubocop linting?', :yellow)
|
46
|
+
# Get directory and file for base rubocop
|
47
|
+
dir = options[:default_directory]
|
48
|
+
file_path = File.join(dir, '.rubocop.yml')
|
49
|
+
# Create empty directory if it does not exist
|
50
|
+
empty_directory(dir)
|
51
|
+
# Create base rubocop with common rules. Let Thor handle conflicts.
|
52
|
+
template('quandl.rubocop.yml', file_path)
|
53
|
+
# Create project template. Let Thor handle conflicts
|
54
|
+
@base_directory = dir
|
55
|
+
template('project.rubocop.yml.erb', '.rubocop.yml')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'slack-notifier'
|
2
|
+
|
3
|
+
module Quandl
|
4
|
+
module Utility
|
5
|
+
module ThorTasks
|
6
|
+
# Tasks for sending notifications
|
7
|
+
class Notify < Thor
|
8
|
+
namespace 'qutil:notify'
|
9
|
+
|
10
|
+
method_option :emoji,
|
11
|
+
type: :string,
|
12
|
+
aliases: '-e',
|
13
|
+
required: false,
|
14
|
+
banner: 'EMOJI'
|
15
|
+
method_option :token,
|
16
|
+
type: :string,
|
17
|
+
aliases: '-t',
|
18
|
+
required: true,
|
19
|
+
default: ENV['SLACK_TOKEN'],
|
20
|
+
banner: 'TOKEN'
|
21
|
+
method_option :team,
|
22
|
+
type: :string,
|
23
|
+
aliases: '-m',
|
24
|
+
required: true,
|
25
|
+
default: 'quandl',
|
26
|
+
banner: 'TEAM'
|
27
|
+
method_option :botname,
|
28
|
+
type: :string,
|
29
|
+
aliases: '-b',
|
30
|
+
required: false,
|
31
|
+
default: ENV['SLACK_BOTNAME'],
|
32
|
+
banner: 'BOTNAME'
|
33
|
+
desc 'slack message channel', 'Send notification to slack'
|
34
|
+
def slack(message, channel)
|
35
|
+
slack_client = Slack::Notifier.new(options[:team], options[:token])
|
36
|
+
slack_client.channel = channel
|
37
|
+
slack_client.username = options[:botname]
|
38
|
+
slack_client.ping(message, icon_emoji: options[:emoji])
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Quandl
|
2
|
-
module Utility
|
3
|
-
|
2
|
+
module Utility
|
3
|
+
VERSION = File.read(File.expand_path(File.join(File.dirname(__FILE__), '../../../VERSION'))).strip.rstrip
|
4
|
+
end
|
4
5
|
end
|
5
|
-
end
|
data/quandl_utility.gemspec
CHANGED
@@ -16,10 +16,14 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
18
|
s.require_paths = ["lib", 'tasks']
|
19
|
-
|
19
|
+
|
20
20
|
s.add_runtime_dependency "activesupport", ">= 3.0.0"
|
21
21
|
s.add_runtime_dependency "rake"
|
22
|
-
|
22
|
+
s.add_runtime_dependency 'thor'
|
23
|
+
s.add_runtime_dependency 'thor-foodcritic'
|
24
|
+
s.add_runtime_dependency 'rubocop'
|
25
|
+
s.add_runtime_dependency 'slack-notifier'
|
26
|
+
|
23
27
|
s.add_development_dependency "rspec", "~> 2.13"
|
24
28
|
s.add_development_dependency "fivemat", "~> 1.2"
|
25
29
|
s.add_development_dependency "pry"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quandl_utility
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-05-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -43,6 +43,70 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: thor
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: thor-foodcritic
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rubocop
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: slack-notifier
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
46
110
|
- !ruby/object:Gem::Dependency
|
47
111
|
name: rspec
|
48
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,24 +206,35 @@ dependencies:
|
|
142
206
|
description: Tools for making our lives easier.
|
143
207
|
email:
|
144
208
|
- blake@hilscher.ca
|
145
|
-
executables:
|
209
|
+
executables:
|
210
|
+
- qutil
|
146
211
|
extensions: []
|
147
212
|
extra_rdoc_files: []
|
148
213
|
files:
|
149
214
|
- .gitignore
|
215
|
+
- .rubocop.yml
|
150
216
|
- Gemfile
|
151
217
|
- LICENSE
|
152
218
|
- README.md
|
153
219
|
- Rakefile
|
220
|
+
- Thorfile
|
154
221
|
- UPGRADE.md
|
155
222
|
- VERSION
|
223
|
+
- bin/qutil
|
156
224
|
- lib/quandl/utility.rb
|
225
|
+
- lib/quandl/utility/cli.rb
|
157
226
|
- lib/quandl/utility/configuration.rb
|
158
227
|
- lib/quandl/utility/rake_tasks.rb
|
159
228
|
- lib/quandl/utility/tasks.rb
|
229
|
+
- lib/quandl/utility/thor_tasks.rb
|
230
|
+
- lib/quandl/utility/thor_tasks/ci.rb
|
231
|
+
- lib/quandl/utility/thor_tasks/lint.rb
|
232
|
+
- lib/quandl/utility/thor_tasks/notify.rb
|
160
233
|
- lib/quandl/utility/version.rb
|
161
234
|
- quandl_utility.gemspec
|
162
235
|
- spec/spec_helper.rb
|
236
|
+
- support/templates/project.rubocop.yml.erb
|
237
|
+
- support/templates/quandl.rubocop.yml
|
163
238
|
- tasks/utility.rake
|
164
239
|
homepage: http://blake.hilscher.ca/
|
165
240
|
licenses:
|
@@ -175,12 +250,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
175
250
|
- - ! '>='
|
176
251
|
- !ruby/object:Gem::Version
|
177
252
|
version: '0'
|
253
|
+
segments:
|
254
|
+
- 0
|
255
|
+
hash: 2688062014087562059
|
178
256
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
257
|
none: false
|
180
258
|
requirements:
|
181
259
|
- - ! '>='
|
182
260
|
- !ruby/object:Gem::Version
|
183
261
|
version: '0'
|
262
|
+
segments:
|
263
|
+
- 0
|
264
|
+
hash: 2688062014087562059
|
184
265
|
requirements: []
|
185
266
|
rubyforge_project:
|
186
267
|
rubygems_version: 1.8.23
|