orly 0.0.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.
- data/.gitignore +5 -0
- data/CHANGELOG.md +2 -0
- data/Gemfile +4 -0
- data/Readme.md +22 -0
- data/bin/orly +39 -0
- data/lib/orly/installation.rb +42 -0
- data/lib/orly/owl_printer.rb +22 -0
- data/lib/orly/tester.rb +41 -0
- data/lib/orly/version.rb +3 -0
- data/lib/orly.rb +21 -0
- data/orly.gemspec +27 -0
- metadata +117 -0
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/Readme.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# O RLY 
|
2
|
+
|
3
|
+
A tool that lets you know when you need to run `bundle install` or `rake db:migrate`
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Simply install the gem once,
|
8
|
+
|
9
|
+
[sudo] gem install orly
|
10
|
+
|
11
|
+
and install O RLY in each Git Repo
|
12
|
+
|
13
|
+
orly --install
|
14
|
+
|
15
|
+
To remove O RLY just run `orly --uninstall` inside the git repo.
|
16
|
+
|
17
|
+
## More info
|
18
|
+
|
19
|
+
In the Github page https://github.com/yonbergman/orly/
|
20
|
+
|
21
|
+
---
|
22
|
+
Copyright (c) 2012 Yonatan Bergman, released under the MIT license
|
data/bin/orly
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'orly'
|
5
|
+
rescue LoadError
|
6
|
+
require 'rubygems'
|
7
|
+
require 'orly'
|
8
|
+
end
|
9
|
+
|
10
|
+
include Orly
|
11
|
+
|
12
|
+
Choice.options do
|
13
|
+
|
14
|
+
header "Orly notifies you whenever you pull an update that requires 'bundle install' or 'rake db:migrate'"
|
15
|
+
|
16
|
+
option :install do
|
17
|
+
short '-i'
|
18
|
+
long "--install"
|
19
|
+
desc "install orly for this git repo"
|
20
|
+
action { Orly::Installation::install() }
|
21
|
+
end
|
22
|
+
|
23
|
+
option :uninstall do
|
24
|
+
short '-u'
|
25
|
+
long "--uninstall"
|
26
|
+
desc "uninstall orly for this git repo"
|
27
|
+
action { Orly::Installation::uninstall() }
|
28
|
+
end
|
29
|
+
|
30
|
+
option :run do
|
31
|
+
short '-r'
|
32
|
+
long "--run"
|
33
|
+
desc "run orly now"
|
34
|
+
action { Orly::run() }
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
Choice.help if Choice.choices.empty?
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Orly
|
2
|
+
module Installation
|
3
|
+
|
4
|
+
HOOK_PATH = File.join ".git", "hooks", "post-merge"
|
5
|
+
HOOK_DIR = File.join ".git", "hooks"
|
6
|
+
HOOK_CONTENT = <<END
|
7
|
+
#!/bin/sh
|
8
|
+
orly --run
|
9
|
+
END
|
10
|
+
|
11
|
+
def self.install
|
12
|
+
if not File.directory?(".git")
|
13
|
+
puts "You don't appear to be in the base directory of a git project.".red
|
14
|
+
exit 1
|
15
|
+
end
|
16
|
+
|
17
|
+
Dir.mkdir(HOOK_DIR) unless File.directory?(HOOK_DIR)
|
18
|
+
|
19
|
+
if File.exists? HOOK_PATH
|
20
|
+
puts "A post-merge hook already exists for this project.".red
|
21
|
+
exit 1
|
22
|
+
end
|
23
|
+
|
24
|
+
File.open(HOOK_PATH, 'w') {|f| f.write(HOOK_CONTENT) }
|
25
|
+
FileUtils.chmod 0755, HOOK_PATH
|
26
|
+
puts "installed O RLY hook as:".green
|
27
|
+
puts " -> #{File.expand_path(HOOK_PATH)}".green
|
28
|
+
puts "(to remove later, you can use: orly --uninstall)"
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.uninstall
|
32
|
+
if File.exists? HOOK_PATH
|
33
|
+
FileUtils.rm HOOK_PATH
|
34
|
+
puts "uninstalled #{HOOK_PATH}".green
|
35
|
+
else
|
36
|
+
puts "O RLY is not enabled for this directory, so there is nothing to uninstall.".yellow
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Orly
|
2
|
+
module OwlPrinter
|
3
|
+
|
4
|
+
OWL = <<END
|
5
|
+
,___,
|
6
|
+
{o,O}
|
7
|
+
|)``)
|
8
|
+
-"-"-
|
9
|
+
O RLY?
|
10
|
+
END
|
11
|
+
OWL_LINES = OWL.split("\n")
|
12
|
+
|
13
|
+
def self.print(lines = [])
|
14
|
+
lines.unshift("") if lines.length < OWL_LINES.length
|
15
|
+
[lines.length, OWL_LINES.length].max.times do |i|
|
16
|
+
owl_line = OWL_LINES[i] || ""
|
17
|
+
print_line = lines[i] || ""
|
18
|
+
puts "#{owl_line}\t#{print_line}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/orly/tester.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'git'
|
2
|
+
|
3
|
+
module Orly
|
4
|
+
class NoRepo < StandardError ; end
|
5
|
+
|
6
|
+
class Tester
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@need_bundle = false
|
10
|
+
@need_migrate = false
|
11
|
+
run_tests
|
12
|
+
rescue ArgumentError
|
13
|
+
raise NoRepo.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def run_tests
|
17
|
+
get_diff.each do |file|
|
18
|
+
if file.path =~ /^Gemfile/
|
19
|
+
@need_bundle = true
|
20
|
+
elsif file.path =~ /^db\/migrate/
|
21
|
+
@need_migrate = true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
rescue Git::GitExecuteError
|
25
|
+
false
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_diff
|
29
|
+
git = Git.open('.')
|
30
|
+
git.diff('HEAD@{1}','HEAD')
|
31
|
+
end
|
32
|
+
|
33
|
+
def need_migrate?
|
34
|
+
@need_migrate
|
35
|
+
end
|
36
|
+
|
37
|
+
def need_bundle_install?
|
38
|
+
@need_bundle
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/orly/version.rb
ADDED
data/lib/orly.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'orly/installation'
|
2
|
+
require 'orly/tester'
|
3
|
+
require 'orly/owl_printer'
|
4
|
+
require 'orly/version'
|
5
|
+
require "choice"
|
6
|
+
require "colored"
|
7
|
+
|
8
|
+
module Orly
|
9
|
+
|
10
|
+
def self.run
|
11
|
+
tester = Orly::Tester.new()
|
12
|
+
notify = []
|
13
|
+
notify << "run 'rake db:migrate'".red if tester.need_migrate?
|
14
|
+
notify << "run 'bundle install'".red if tester.need_bundle_install?
|
15
|
+
Orly::OwlPrinter.print(notify) unless notify.empty?
|
16
|
+
rescue Orly::NoRepo
|
17
|
+
puts "O RLY: this is not a git repo".red
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
end
|
data/orly.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "orly/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "orly"
|
7
|
+
s.version = Orly::VERSION
|
8
|
+
s.authors = ["yon"]
|
9
|
+
s.email = ["yonatanbergman@gmail.com"]
|
10
|
+
s.homepage = "http://github.com/yonbergman/orly"
|
11
|
+
s.summary = %q{Tells you when you need to run `bundle install` or `rake db:migrate`}
|
12
|
+
s.description = %q{Install a post-merge hook for git that tells you when the Gemfile changed or a migration was added}
|
13
|
+
|
14
|
+
s.rubyforge_project = "orly"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n") - ["Gemfile.lock"]
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
#s.add_development_dependency "rake"
|
23
|
+
#s.add_development_dependency "rspec"
|
24
|
+
s.add_runtime_dependency "git"
|
25
|
+
s.add_runtime_dependency "choice"
|
26
|
+
s.add_runtime_dependency "colored"
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: orly
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- yon
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-06-27 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: git
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: choice
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: colored
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
version: "0"
|
60
|
+
type: :runtime
|
61
|
+
version_requirements: *id003
|
62
|
+
description: Install a post-merge hook for git that tells you when the Gemfile changed or a migration was added
|
63
|
+
email:
|
64
|
+
- yonatanbergman@gmail.com
|
65
|
+
executables:
|
66
|
+
- orly
|
67
|
+
extensions: []
|
68
|
+
|
69
|
+
extra_rdoc_files: []
|
70
|
+
|
71
|
+
files:
|
72
|
+
- .gitignore
|
73
|
+
- CHANGELOG.md
|
74
|
+
- Gemfile
|
75
|
+
- Readme.md
|
76
|
+
- bin/orly
|
77
|
+
- lib/orly.rb
|
78
|
+
- lib/orly/installation.rb
|
79
|
+
- lib/orly/owl_printer.rb
|
80
|
+
- lib/orly/tester.rb
|
81
|
+
- lib/orly/version.rb
|
82
|
+
- orly.gemspec
|
83
|
+
homepage: http://github.com/yonbergman/orly
|
84
|
+
licenses: []
|
85
|
+
|
86
|
+
post_install_message:
|
87
|
+
rdoc_options: []
|
88
|
+
|
89
|
+
require_paths:
|
90
|
+
- lib
|
91
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
hash: 3
|
97
|
+
segments:
|
98
|
+
- 0
|
99
|
+
version: "0"
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
hash: 3
|
106
|
+
segments:
|
107
|
+
- 0
|
108
|
+
version: "0"
|
109
|
+
requirements: []
|
110
|
+
|
111
|
+
rubyforge_project: orly
|
112
|
+
rubygems_version: 1.8.10
|
113
|
+
signing_key:
|
114
|
+
specification_version: 3
|
115
|
+
summary: Tells you when you need to run `bundle install` or `rake db:migrate`
|
116
|
+
test_files: []
|
117
|
+
|