unidad 0.0.1.beta3 → 0.0.1.beta5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 08d1f8141269514c7d44d53b5d768e48849a210d
4
- data.tar.gz: 52d48d7e06b198cc661c510f732c000922c3ef38
3
+ metadata.gz: fe7854657d5f1834fd116b5b1af5b3e56d9e3523
4
+ data.tar.gz: 4f29f8584ed29c726b95e3b3f4a7ee83ef4a55d6
5
5
  SHA512:
6
- metadata.gz: 35b482f34d7b6fa81e28124a256d6552c098692a1097eb55d38f38640cf2a0ad4ad5f4f4b03fd2b93e8050a5e56ff9247f54ecbbffab85e330100da61d75c0dd
7
- data.tar.gz: faf792535c4603546078ac6841d720635c353f98714c50d296c55ae391d7f563e301d6e56e52c521a1b8438c55d5cc44f88ce0dba753b6f8833583a7a329847d
6
+ metadata.gz: b32a5997d99874bcff44707abd28847db63946aad2c54c4e459830c7fb2ce9a9795a41b93774fb28c8a09987c8f5407392b7cd485c98b5d7b030a507f626bf48
7
+ data.tar.gz: d8a2ee95f14ddf42d34a46dedba21b12d96e066f412077d1f7b00762c642a5af2f6d11abf93c6ad180c4c91c2837eb7494386fa3118234a8bdd4f068adfcc8be
data/.rubocop.yml CHANGED
@@ -1,12 +1,12 @@
1
1
  AllCops:
2
- RunRailsCops: false
3
2
  Exclude:
4
3
  - lib/util/match_method_macros.rb
5
4
  - spec/test_app/**
6
5
  - bin/**
6
+ DisplayCopNames: true
7
7
 
8
8
  LineLength:
9
- Max: 150
9
+ Max: 175
10
10
 
11
11
  ClassLength:
12
12
  CountComments: false # count full line comments?
@@ -14,7 +14,7 @@ ClassLength:
14
14
 
15
15
  MethodLength:
16
16
  CountComments: false # count full line comments?
17
- Max: 10
17
+ Max: 20
18
18
 
19
19
  HashSyntax:
20
20
  EnforcedStyle: hash_rockets
@@ -22,9 +22,6 @@ HashSyntax:
22
22
  Documentation:
23
23
  Enabled: false
24
24
 
25
- DefaultScope:
26
- Enabled: false
27
-
28
25
  CollectionMethods:
29
26
  PreferredMethods:
30
27
  map: 'collect'
@@ -37,4 +34,19 @@ Output:
37
34
  Enabled: false
38
35
 
39
36
  HasAndBelongsToMany:
40
- Enabled: false
37
+ Enabled: false
38
+
39
+ Style/ClassAndModuleChildren:
40
+ Enabled: false
41
+
42
+ Style/RegexpLiteral:
43
+ EnforcedStyle: percent_r
44
+
45
+ Style/SpaceInsideStringInterpolation:
46
+ Enabled: false
47
+
48
+ Style/SymbolProc:
49
+ Enabled: false
50
+
51
+ Metrics/AbcSize:
52
+ Max: 17
data/Guardfile CHANGED
@@ -1,12 +1,12 @@
1
1
  guard 'rspec', :cmd => 'bundle exec rspec --colour', :all_on_start => false, :all_after_pass => false do
2
2
  watch('spec/spec_helper.rb') { 'spec' }
3
- watch(/^spec\/.+_spec\.rb/)
4
- watch(/^app\/(.+)\.rb/) { |m| "spec/app/#{m[1]}_spec.rb" }
5
- watch(/^lib\/(.+)\.rb/) { |m| "spec/lib/#{m[1]}_spec.rb" }
3
+ watch(%r{^spec\/.+_spec\.rb})
4
+ watch(%r{^app\/(.+)\.rb}) { |m| "spec/app/#{m[1]}_spec.rb" }
5
+ watch(%r{^lib\/(.+)\.rb}) { |m| "spec/lib/#{m[1]}_spec.rb" }
6
6
  end
7
7
 
8
- guard :rubocop do
9
- watch(/.+\.gemspec$/)
10
- watch(/.+\.rb$/)
11
- watch(/(?:.+\/)?\.rubocop\.yml$/) { |m| File.dirname(m[0]) }
8
+ guard :rubocop, :all_on_start => false do
9
+ watch(%r{.+\.gemspec$})
10
+ watch(%r{.+\.rb$})
11
+ watch(%r{(?:.+\/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
12
12
  end
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # Unidad
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/unidad`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ A thin wrapper and notifications layer around common command-line utilities.
6
4
 
7
5
  ## Installation
8
6
 
@@ -22,14 +20,19 @@ Or install it yourself as:
22
20
 
23
21
  ## Usage
24
22
 
25
- TODO: Write usage instructions here
23
+ The following commands are available when you install Unidad.
24
+
25
+ ```
26
+ unidad deploy [ENVIRONMENT] # Deploy your application to the specified environment.
27
+ unidad galaxy [REQUIREMENTS_FILE] # Install Ansible dependencies via Galaxy.
28
+ unidad playbook [HOSTS_FILE] [PLAYBOOK] # Run an Ansible playbook.
29
+ unidad s3_website compile_jar # Compile the .jar file required for deployment. Compilation only happens if a .jar does not exist yet.
30
+ ```
26
31
 
27
32
  ## Development
28
33
 
29
34
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
30
35
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
-
33
36
  ## Contributing
34
37
 
35
38
  1. Fork it ( https://github.com/[my-github-username]/unidad/fork )
@@ -2,13 +2,15 @@ module Unidad
2
2
  module Cli
3
3
  module Ansible
4
4
  class Galaxy < Unidad::Cli::Ansible::Base
5
+ namespace :galaxy
6
+
5
7
  argument :requirements_file, :desc => 'The YAML file containing requirements to install',
6
8
  :type => :string,
7
9
  :required => true
8
10
 
9
11
  def run_galaxy
10
12
  Unidad::CommandBuilder.all(:galaxy, :requirements_file => ansible_path.join(requirements_file)).each do |command|
11
- say_status :run, command
13
+ run command
12
14
  end
13
15
  end
14
16
  end
@@ -2,6 +2,8 @@ module Unidad
2
2
  module Cli
3
3
  module Ansible
4
4
  class Playbook < Unidad::Cli::Ansible::Base
5
+ namespace :playbook
6
+
5
7
  argument :hosts_file, :desc => 'The hosts file to use when running the playbook',
6
8
  :type => :string,
7
9
  :required => true
@@ -6,7 +6,7 @@ module Unidad
6
6
  # The banner for this class. You can customize it if you are invoking the
7
7
  # thor class by another ways which is not the Thor::Runner.
8
8
  def self.banner
9
- "#{basename} #{name.split('::').last.downcase} #{arguments.collect(&:usage).compact.join(' ')}"
9
+ "#{basename} #{namespace} #{arguments.collect(&:usage).compact.join(' ')}"
10
10
  end
11
11
  end
12
12
  end
@@ -6,6 +6,7 @@ Dotenv.load
6
6
 
7
7
  require 'unidad/cli/namespaced_group'
8
8
  require 'unidad/cli/deploy'
9
+ require 'unidad/cli/s3_website'
9
10
  require 'unidad/cli/ansible/base'
10
11
  require 'unidad/cli/ansible/playbook'
11
12
  require 'unidad/cli/ansible/galaxy'
@@ -14,6 +15,7 @@ module Unidad
14
15
  module Cli
15
16
  class Root < Thor
16
17
  register Unidad::Cli::Deploy, 'deploy', 'deploy [ENVIRONMENT]', 'Deploy your application to the specified environment.'
18
+ register Unidad::Cli::S3Website, 's3_website', 's3_website [COMMAND]', 'Execute a task related to your s3_website deployed site.'
17
19
  register Unidad::Cli::Ansible::Playbook, 'playbook', 'playbook [HOSTS_FILE] [PLAYBOOK]', 'Run an Ansible playbook.'
18
20
  register Unidad::Cli::Ansible::Galaxy, 'galaxy', 'galaxy [REQUIREMENTS_FILE]', 'Install Ansible dependencies via Galaxy.'
19
21
  end
@@ -0,0 +1,15 @@
1
+ module Unidad
2
+ module Cli
3
+ class S3Website < Thor
4
+ include Thor::Actions
5
+
6
+ desc 'compile_jar', 'Compile the .jar file required for deployment. Compilation only happens if a .jar does not exist yet.'
7
+ def compile_jar
8
+ gem_directory = `bundle show s3_website`.strip
9
+ inside(gem_directory) do
10
+ run('[ -f ./target/scala-2.11/s3_website.jar ] || ./sbt assembly')
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ module Unidad
2
+ class Error < StandardError
3
+ end
4
+ class OverrideInSubclassError < Error
5
+ end
6
+ end
@@ -1,5 +1,4 @@
1
1
  require 'net/http'
2
- require 'multi_json'
3
2
 
4
3
  module Unidad
5
4
  class Messenger
@@ -8,8 +7,8 @@ module Unidad
8
7
  attr_reader :command
9
8
  attr_accessor :callback, :options
10
9
 
11
- match_method(/\A(.*)=/) do |name, *args|
12
- option = name.to_s.gsub('=', '').to_sym
10
+ match_method(%r{\A(.*)=}) do |name, *args|
11
+ option = name.to_s.delete('=').to_sym
13
12
  options[option] = args[0]
14
13
  end
15
14
 
@@ -20,7 +19,7 @@ module Unidad
20
19
 
21
20
  def on(callback)
22
21
  self.callback = callback
23
- deliver_message
22
+ Unidad.messenger_adapter.call(message, message_options)
24
23
  end
25
24
 
26
25
  protected
@@ -29,24 +28,6 @@ module Unidad
29
28
  Unidad.config[command].messages
30
29
  end
31
30
 
32
- def deliver_message
33
- uri = URI(ENV['SLACK_WEBHOOK_URL'])
34
- Net::HTTP.post_form(uri, build_params)
35
- rescue => e
36
- puts 'There was an error notifying Slack. Please check that SLACK_WEBHOOK_URL is set in your environment.'
37
- puts e.inspect
38
- end
39
-
40
- def build_params
41
- payload = {
42
- :username => message_options['slack_username'],
43
- :icon_url => message_options['slack_icon'],
44
- :text => message
45
- }
46
-
47
- { 'payload' => MultiJson.dump(payload) }
48
- end
49
-
50
31
  def message
51
32
  config[callback] % message_options
52
33
  end
@@ -0,0 +1,20 @@
1
+ module Unidad
2
+ module MessengerAdapters
3
+ class Base
4
+ attr_accessor :message, :options
5
+
6
+ def self.call(message, options = {})
7
+ new(message, options).call
8
+ end
9
+
10
+ def initialize(message, options = {})
11
+ @message = message
12
+ @options = options
13
+ end
14
+
15
+ def call
16
+ raise Unidad::OverrideInSubclassError
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ require 'net/http'
2
+ require 'json'
3
+
4
+ module Unidad
5
+ module MessengerAdapters
6
+ class Slack < Base
7
+ def call
8
+ uri = URI(ENV['SLACK_WEBHOOK_URL'])
9
+ Net::HTTP.post_form(uri, build_params)
10
+ rescue => e
11
+ puts 'There was an error notifying Slack. Please check that SLACK_WEBHOOK_URL is set in your environment.'
12
+ puts e.inspect
13
+ end
14
+
15
+ protected
16
+
17
+ def build_params
18
+ payload = {
19
+ :username => options['slack_username'],
20
+ :icon_url => options['slack_icon'],
21
+ :text => message
22
+ }
23
+
24
+ { 'payload' => JSON.generate(payload) }
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,3 +1,3 @@
1
1
  module Unidad
2
- VERSION = '0.0.1.beta3'
2
+ VERSION = '0.0.1.beta5'.freeze
3
3
  end
data/lib/unidad.rb CHANGED
@@ -4,7 +4,10 @@ require 'hashie'
4
4
 
5
5
  require 'util/match_method_macros'
6
6
  require 'unidad/version'
7
+ require 'unidad/errors'
7
8
  require 'unidad/command_builder'
9
+ require 'unidad/messenger_adapters/base'
10
+ require 'unidad/messenger_adapters/slack'
8
11
  require 'unidad/messenger'
9
12
  require 'unidad/cli'
10
13
 
@@ -20,4 +23,8 @@ module Unidad
20
23
  def self.config
21
24
  Hashie::Mash.new(YAML.load(ERB.new(File.new(config_path).read).result)).unidad
22
25
  end
26
+
27
+ def self.messenger_adapter
28
+ Kernel.const_get("Unidad::MessengerAdapters::#{(config.messenger_adapter || 'Slack')}")
29
+ end
23
30
  end
data/unidad.gemspec CHANGED
@@ -14,22 +14,20 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = 'https://github.com/crushlovely/unidad'
15
15
  spec.license = 'MIT'
16
16
 
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(/^(test|spec|features)\//) }
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)\/}) }
18
18
  spec.bindir = 'bin'
19
19
  spec.executables = ['unidad']
20
20
  spec.require_paths = ['lib']
21
21
 
22
- spec.add_dependency 'thor', '~> 0.18'
23
- spec.add_dependency 'dotenv', '~> 1.0'
24
- spec.add_dependency 'multi_json', '>= 1.7'
25
- spec.add_dependency 'hashie', '>= 2.0'
22
+ spec.add_dependency 'thor', '~> 0.19'
23
+ spec.add_dependency 'dotenv', '~> 2.1'
24
+ spec.add_dependency 'hashie', '~> 3.4'
26
25
  spec.add_development_dependency 'bundler', '~> 1.9'
27
26
  spec.add_development_dependency 'rake', '~> 10.0'
28
- spec.add_development_dependency 'pry', '~> 0.9'
29
- spec.add_development_dependency('rspec')
30
- spec.add_development_dependency('rubocop')
31
- spec.add_development_dependency('guard')
32
- spec.add_development_dependency('guard-rspec')
33
- spec.add_development_dependency('guard-rubocop')
34
- spec.add_development_dependency('codeclimate-test-reporter')
27
+ spec.add_development_dependency 'rspec', '~> 3.0'
28
+ spec.add_development_dependency 'rubocop', '~> 0.1'
29
+ spec.add_development_dependency 'guard', '~> 2.0'
30
+ spec.add_development_dependency 'guard-rspec', '~> 4.0'
31
+ spec.add_development_dependency 'guard-rubocop', '~> 1.0'
32
+ spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.1'
35
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unidad
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.beta3
4
+ version: 0.0.1.beta5
5
5
  platform: ruby
6
6
  authors:
7
7
  - PJ Kelly
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-05 00:00:00.000000000 Z
11
+ date: 2016-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -16,56 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.18'
19
+ version: '0.19'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.18'
26
+ version: '0.19'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: dotenv
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.0'
33
+ version: '2.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.0'
41
- - !ruby/object:Gem::Dependency
42
- name: multi_json
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '1.7'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '1.7'
40
+ version: '2.1'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: hashie
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - ">="
45
+ - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '2.0'
47
+ version: '3.4'
62
48
  type: :runtime
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - ">="
52
+ - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '2.0'
54
+ version: '3.4'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: bundler
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -95,103 +81,89 @@ dependencies:
95
81
  - !ruby/object:Gem::Version
96
82
  version: '10.0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: pry
84
+ name: rspec
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '0.9'
89
+ version: '3.0'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '0.9'
111
- - !ruby/object:Gem::Dependency
112
- name: rspec
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
96
+ version: '3.0'
125
97
  - !ruby/object:Gem::Dependency
126
98
  name: rubocop
127
99
  requirement: !ruby/object:Gem::Requirement
128
100
  requirements:
129
- - - ">="
101
+ - - "~>"
130
102
  - !ruby/object:Gem::Version
131
- version: '0'
103
+ version: '0.1'
132
104
  type: :development
133
105
  prerelease: false
134
106
  version_requirements: !ruby/object:Gem::Requirement
135
107
  requirements:
136
- - - ">="
108
+ - - "~>"
137
109
  - !ruby/object:Gem::Version
138
- version: '0'
110
+ version: '0.1'
139
111
  - !ruby/object:Gem::Dependency
140
112
  name: guard
141
113
  requirement: !ruby/object:Gem::Requirement
142
114
  requirements:
143
- - - ">="
115
+ - - "~>"
144
116
  - !ruby/object:Gem::Version
145
- version: '0'
117
+ version: '2.0'
146
118
  type: :development
147
119
  prerelease: false
148
120
  version_requirements: !ruby/object:Gem::Requirement
149
121
  requirements:
150
- - - ">="
122
+ - - "~>"
151
123
  - !ruby/object:Gem::Version
152
- version: '0'
124
+ version: '2.0'
153
125
  - !ruby/object:Gem::Dependency
154
126
  name: guard-rspec
155
127
  requirement: !ruby/object:Gem::Requirement
156
128
  requirements:
157
- - - ">="
129
+ - - "~>"
158
130
  - !ruby/object:Gem::Version
159
- version: '0'
131
+ version: '4.0'
160
132
  type: :development
161
133
  prerelease: false
162
134
  version_requirements: !ruby/object:Gem::Requirement
163
135
  requirements:
164
- - - ">="
136
+ - - "~>"
165
137
  - !ruby/object:Gem::Version
166
- version: '0'
138
+ version: '4.0'
167
139
  - !ruby/object:Gem::Dependency
168
140
  name: guard-rubocop
169
141
  requirement: !ruby/object:Gem::Requirement
170
142
  requirements:
171
- - - ">="
143
+ - - "~>"
172
144
  - !ruby/object:Gem::Version
173
- version: '0'
145
+ version: '1.0'
174
146
  type: :development
175
147
  prerelease: false
176
148
  version_requirements: !ruby/object:Gem::Requirement
177
149
  requirements:
178
- - - ">="
150
+ - - "~>"
179
151
  - !ruby/object:Gem::Version
180
- version: '0'
152
+ version: '1.0'
181
153
  - !ruby/object:Gem::Dependency
182
154
  name: codeclimate-test-reporter
183
155
  requirement: !ruby/object:Gem::Requirement
184
156
  requirements:
185
- - - ">="
157
+ - - "~>"
186
158
  - !ruby/object:Gem::Version
187
- version: '0'
159
+ version: '0.1'
188
160
  type: :development
189
161
  prerelease: false
190
162
  version_requirements: !ruby/object:Gem::Requirement
191
163
  requirements:
192
- - - ">="
164
+ - - "~>"
193
165
  - !ruby/object:Gem::Version
194
- version: '0'
166
+ version: '0.1'
195
167
  description: A thin wrapper and notification layer around your deployment workflows.
196
168
  email:
197
169
  - pj@crushlovely.com
@@ -221,8 +193,12 @@ files:
221
193
  - lib/unidad/cli/deploy.rb
222
194
  - lib/unidad/cli/namespaced_group.rb
223
195
  - lib/unidad/cli/root.rb
196
+ - lib/unidad/cli/s3_website.rb
224
197
  - lib/unidad/command_builder.rb
198
+ - lib/unidad/errors.rb
225
199
  - lib/unidad/messenger.rb
200
+ - lib/unidad/messenger_adapters/base.rb
201
+ - lib/unidad/messenger_adapters/slack.rb
226
202
  - lib/unidad/version.rb
227
203
  - lib/util/match_method_macros.rb
228
204
  - unidad.gemspec
@@ -246,7 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
246
222
  version: 1.3.1
247
223
  requirements: []
248
224
  rubyforge_project:
249
- rubygems_version: 2.4.5
225
+ rubygems_version: 2.4.5.1
250
226
  signing_key:
251
227
  specification_version: 4
252
228
  summary: A thin wrapper and notification layer around your deployment workflows.