idler 0.1.0

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.
Files changed (62) hide show
  1. checksums.yaml +7 -0
  2. data/.drone.yml +10 -0
  3. data/.gitignore +9 -0
  4. data/.idler.rb +7 -0
  5. data/.rspec +2 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +79 -0
  9. data/Rakefile +1 -0
  10. data/bin/idler +6 -0
  11. data/circle.yml +9 -0
  12. data/idler.gemspec +28 -0
  13. data/lib/idler.rb +38 -0
  14. data/lib/idler/branch.rb +37 -0
  15. data/lib/idler/descriptions.rb +42 -0
  16. data/lib/idler/dsl.rb +12 -0
  17. data/lib/idler/errors.rb +7 -0
  18. data/lib/idler/git_branch.rb +11 -0
  19. data/lib/idler/install.rb +11 -0
  20. data/lib/idler/version.rb +3 -0
  21. data/lib/idler/workers.rb +26 -0
  22. data/lib/templates/idler.rb +7 -0
  23. data/spec/idler/branch_spec.rb +120 -0
  24. data/spec/idler/descriptions_spec.rb +133 -0
  25. data/spec/idler/dsl_spec.rb +32 -0
  26. data/spec/idler/git_branch_spec.rb +25 -0
  27. data/spec/idler/install_spec.rb +21 -0
  28. data/spec/idler/workers_spec.rb +105 -0
  29. data/spec/idler_spec.rb +90 -0
  30. data/spec/spec_helper.rb +12 -0
  31. data/spec/supports/.idler.rb +17 -0
  32. data/spec/supports/development +1 -0
  33. data/spec/supports/git/COMMIT_EDITMSG +1 -0
  34. data/spec/supports/git/HEAD +1 -0
  35. data/spec/supports/git/config +7 -0
  36. data/spec/supports/git/description +1 -0
  37. data/spec/supports/git/hooks/applypatch-msg.sample +15 -0
  38. data/spec/supports/git/hooks/commit-msg.sample +24 -0
  39. data/spec/supports/git/hooks/post-update.sample +8 -0
  40. data/spec/supports/git/hooks/pre-applypatch.sample +14 -0
  41. data/spec/supports/git/hooks/pre-commit.sample +49 -0
  42. data/spec/supports/git/hooks/pre-push.sample +53 -0
  43. data/spec/supports/git/hooks/pre-rebase.sample +169 -0
  44. data/spec/supports/git/hooks/prepare-commit-msg.sample +36 -0
  45. data/spec/supports/git/hooks/update.sample +128 -0
  46. data/spec/supports/git/index +0 -0
  47. data/spec/supports/git/info/exclude +6 -0
  48. data/spec/supports/git/logs/HEAD +3 -0
  49. data/spec/supports/git/logs/refs/heads/development +2 -0
  50. data/spec/supports/git/logs/refs/heads/master +1 -0
  51. data/spec/supports/git/objects/26/7415b535950497a6fe509c590aae53b8aa8371 +0 -0
  52. data/spec/supports/git/objects/3e/6bfeeb8e007bfdaea40081872e8d6148e571ea +2 -0
  53. data/spec/supports/git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 +0 -0
  54. data/spec/supports/git/objects/97/ead751ee1b140cf8f560247f934987dcb88ee1 +0 -0
  55. data/spec/supports/git/objects/b2/ced74c2ca4e1f4bb69a2a937b71f411606cade +0 -0
  56. data/spec/supports/git/objects/ba/1959001cdfe38905402ad8dbfdd43e8da6d7ea +0 -0
  57. data/spec/supports/git/objects/ce/37909c3bed60d7e414d5904e54af0ae3b774f7 +0 -0
  58. data/spec/supports/git/objects/e7/4160f0955857b33155e6366b08abb2e17938dc +2 -0
  59. data/spec/supports/git/refs/heads/development +1 -0
  60. data/spec/supports/git/refs/heads/master +1 -0
  61. data/spec/supports/master +1 -0
  62. metadata +229 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bf5485974905d8648da83f3158aaf7887e4c1716
4
+ data.tar.gz: a191fb836bd89e3176e4e237f569ad3efc7907a3
5
+ SHA512:
6
+ metadata.gz: a2ccd4caf7a9e487d5c5743a3b020f7275713566c5d43f5c031fc31d8c9b65e2d823ab47bc125123bdd81a98d6ef61433e736da138e6b5b75af8b8c1f05aa987
7
+ data.tar.gz: c6f92977c1185bd0a6c2bf9f8fa2e5fd9bfe2e96ff41179cb69100b6d89edba4ac5bce5c172a3288ccf47b40b40acaf931a7e8e993b9154b92a3c82efb8b3c22
@@ -0,0 +1,10 @@
1
+ image: ruby
2
+ script:
3
+ - mkdir -p /tmp/bundle
4
+ - chown -R ubuntu:ubuntu /tmp/bundle
5
+ - gem update bundler
6
+ - bundle install --path /tmp/bundle
7
+ - bundle exec rspec
8
+ deploy:
9
+ bash:
10
+ command: bundle exec idler `echo $CI_BRANCH`
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
@@ -0,0 +1,7 @@
1
+ branch 'master' do
2
+ desc 'master description'
3
+ detail 'master detail'
4
+ worker do
5
+ puts 'This is Master Branch'
6
+ end
7
+ end
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in idler.gemspec
4
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 toihrk
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,79 @@
1
+ # Idler
2
+
3
+ [![Circle CI](https://circleci.com/gh/toihrk/idler.svg?style=svg)](https://circleci.com/gh/toihrk/idler)
4
+
5
+ ブランチ毎に異なるスクリプトを実行するコマンド`idler`を提供します。
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'idler'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install idler
22
+
23
+ ## Usage
24
+
25
+ ### Initialize
26
+
27
+ $ bundle exec idler init
28
+
29
+ カレントディレクトリに`.idler.rb`を配置します。
30
+
31
+ ### Edit `.idler.rb`
32
+
33
+ ```ruby
34
+ branch 'master' do
35
+ desc 'master branch description here'
36
+ detail 'master branch detail here'
37
+ worker do
38
+ # Something script here
39
+ end
40
+ end
41
+ ```
42
+
43
+ **`branch(branch_name, &block)`**
44
+
45
+ `branch_name` ブランチ名の文字列を与える
46
+
47
+ ブロック内では以下のメソッドでブランチ毎の動作を定義する
48
+
49
+ - **`desc(description)`** ブランチの説明を`description`で与える
50
+ - **`detail(note)`** ブランチの詳細を`note`で与える
51
+ - **`worker(&block)`** ブランチでの動作を定義
52
+
53
+ ### Commands
54
+
55
+
56
+ $ idler
57
+
58
+ 現在のブランチで定義済みの動作を行う
59
+
60
+ $ idler develop
61
+
62
+ `develop`ブランチで定義済みの動作を行う
63
+
64
+
65
+ $ idler info
66
+
67
+ 定義済みのブランチの情報を表示
68
+
69
+ ## Contributing
70
+
71
+ Bug reports and pull requests are welcome on GitHub at https://github.com/toihrk/idler. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
72
+
73
+
74
+ ## License
75
+
76
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
77
+
78
+
79
+
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ require 'idler'
3
+ require 'idler/dsl'
4
+ require './.idler' if File.exists?('./.idler.rb')
5
+
6
+ Idler.run
@@ -0,0 +1,9 @@
1
+ machine:
2
+ timezone:
3
+ Asia/Tokyo
4
+ ruby:
5
+ version: 2.2.3
6
+
7
+ test:
8
+ override:
9
+ - bundle exec rspec
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'idler/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "idler"
8
+ spec.version = Idler::VERSION
9
+ spec.authors = ["toihrk"]
10
+ spec.email = ["toihrk@me.com"]
11
+
12
+ spec.summary = %q{Idler - Let's lazy the deploy!!}
13
+ spec.description = %q{Idler is a utility for automatically the deploy or other.}
14
+ spec.homepage = "https://github.com/toihrk/idler"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0")
18
+ spec.executables = ['idler']
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_dependency "git"
23
+ spec.add_development_dependency "bundler", "~> 1.10"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rspec"
26
+ spec.add_development_dependency "pry"
27
+ spec.add_development_dependency "pry-doc"
28
+ end
@@ -0,0 +1,38 @@
1
+ require 'idler/version'
2
+ require 'idler/errors'
3
+ require 'idler/install'
4
+ require 'idler/git_branch'
5
+ require 'idler/branch'
6
+ require 'idler/descriptions'
7
+ require 'idler/workers'
8
+
9
+ module Idler
10
+ class << self
11
+
12
+ include GitBranch
13
+
14
+ def descriptions
15
+ @descriptions ||= Descriptions.new
16
+ end
17
+
18
+ def workers
19
+ @workers ||= Workers.new
20
+ end
21
+
22
+ def run(argv = [])
23
+ argvs = []
24
+ argvs.push *ARGV.dup
25
+ argvs.push *argv
26
+
27
+ Install.copy if argvs.include?('init')
28
+ descriptions.info if argvs.include?('info')
29
+
30
+ if argvs.empty?
31
+ workers.run(current_branch)
32
+ else
33
+ workers.run(argvs.first) unless ['init', 'info'].include? argvs.first
34
+ end
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,37 @@
1
+ module Idler
2
+ class Branch
3
+
4
+ def initialize(branch_name = nil, block = nil)
5
+ raise Idler::NotDetectBranchError if branch_name.nil?
6
+ @branch = branch_name
7
+
8
+ descriptions.add_branch branch_name
9
+ workers.add_branch branch_name
10
+
11
+ self.instance_eval &block unless block.nil?
12
+ end
13
+
14
+ def desc(description)
15
+ descriptions.add_desc @branch, description
16
+ end
17
+
18
+ def detail(note)
19
+ descriptions.add_detail @branch, note
20
+ end
21
+
22
+ def worker(&block)
23
+ workers.add_worker @branch, block
24
+ end
25
+
26
+ private
27
+
28
+ def descriptions
29
+ Idler.descriptions
30
+ end
31
+
32
+ def workers
33
+ Idler.workers
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,42 @@
1
+ module Idler
2
+ class Descriptions
3
+
4
+ def initialize
5
+ @descriptions = {}
6
+ end
7
+
8
+ def add_branch(branch_name = nil)
9
+ raise NothingBranchNameError if branch_name.nil?
10
+ @descriptions[branch_name] = {}
11
+ end
12
+
13
+ def add_desc(branch_name = nil, desc = "")
14
+ raise NothingBranchNameError if branch_name.nil?
15
+ raise NotYetAddBranchError unless @descriptions.key?(branch_name)
16
+ @descriptions[branch_name][:description] = desc
17
+ end
18
+
19
+ def add_detail(branch_name = nil, detail = "")
20
+ raise NothingBranchNameError if branch_name.nil?
21
+ raise NotYetAddBranchError unless @descriptions.key?(branch_name)
22
+ @descriptions[branch_name][:detail] = detail
23
+ end
24
+
25
+ def info
26
+ puts "--- Branches Info ---"
27
+
28
+ @descriptions.each do |branch, info|
29
+ print "* \e[1m#{branch}\e[0m"
30
+
31
+ if info[:description]
32
+ puts " - #{info[:description]}"
33
+ else
34
+ print "\n"
35
+ end
36
+
37
+ puts "#{info[:detail]}\n" if info[:detail]
38
+ end
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,12 @@
1
+ module Idler
2
+ module DSL
3
+
4
+ def branch(branch_name = nil, &block)
5
+ raise Idler::NothingBranchNameError if branch_name.nil?
6
+ Idler::Branch.new(branch_name, block)
7
+ end
8
+
9
+ end
10
+ end
11
+
12
+ extend Idler::DSL
@@ -0,0 +1,7 @@
1
+ module Idler
2
+ class NothingBranchNameError < ArgumentError ; end
3
+ class NotDetectBranchError < ArgumentError ; end
4
+
5
+ class NotYetAddBranchError < StandardError ; end
6
+ class NotProcError < StandardError ; end
7
+ end
@@ -0,0 +1,11 @@
1
+ require 'git'
2
+
3
+ module Idler
4
+ module GitBranch
5
+
6
+ def current_branch
7
+ Git.open(Dir.pwd).current_branch
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Idler
2
+ module Install
3
+
4
+ def self.copy
5
+ src = File.expand_path(File.dirname(__FILE__) + '/../templates/idler.rb')
6
+ dest = Dir.pwd + "/.idler.rb"
7
+ FileUtils.copy src, dest
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module Idler
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,26 @@
1
+ module Idler
2
+ class Workers
3
+
4
+ def initialize
5
+ @workers = {}
6
+ end
7
+
8
+ def add_branch(branch_name = nil)
9
+ raise NothingBranchNameError if branch_name.nil?
10
+ @workers[branch_name] = nil
11
+ end
12
+
13
+ def add_worker(branch_name = nil, block = nil)
14
+ raise NothingBranchNameError if branch_name.nil?
15
+ raise NotYetAddBranchError unless @workers.key?(branch_name)
16
+ raise NotProcError unless block.class == Proc
17
+ @workers[branch_name] = block
18
+ end
19
+
20
+ def run(branch_name = nil)
21
+ raise NothingBranchNameError if branch_name.nil?
22
+ @workers[branch_name].call if @workers.key?(branch_name)
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,7 @@
1
+ branch 'master' do
2
+ desc "TODO : master branch desctription"
3
+ detail "TODO : master branch detail"
4
+ worker do
5
+ # TODO : Drone deploy script
6
+ end
7
+ end
@@ -0,0 +1,120 @@
1
+ require 'spec_helper'
2
+
3
+ describe Idler::Branch do
4
+
5
+ describe '.new' do
6
+ let(:branch) { nil }
7
+ let(:block) { Proc.new { nil } }
8
+ subject { described_class.new(branch, block) }
9
+
10
+ context 'with nil block' do
11
+ let(:branch) { 'test' }
12
+ let(:block) { Proc.new { nil } }
13
+
14
+ it { expect { subject }.to_not raise_error }
15
+ it { is_expected.to be_a Idler::Branch }
16
+
17
+ it 'instance variable @branch should be set "test"' do
18
+ expect(subject.instance_variable_get(:@branch)).to eq('test')
19
+ end
20
+
21
+ it 'Descriptions should be set branches' do
22
+ expect(Idler.descriptions.instance_variable_get(:@descriptions)).to eq({ "test" => {}})
23
+ end
24
+
25
+ it 'Workers should be set branches' do
26
+ expect(Idler.workers.instance_variable_get(:@workers)).to eq({ "test" => nil })
27
+ end
28
+ end
29
+
30
+ context 'with block' do
31
+ let(:branch) { 'test' }
32
+
33
+ let(:block) do
34
+ Proc.new do
35
+ desc "test description"
36
+ detail "test detail"
37
+ worker do
38
+ nil
39
+ end
40
+ end
41
+ end
42
+
43
+ it { expect { subject }.to_not raise_error }
44
+ it { is_expected.to be_a Idler::Branch }
45
+
46
+ it 'instance variable @branch should be set "test"' do
47
+ expect(subject.instance_variable_get(:@branch)).to eq('test')
48
+ end
49
+
50
+ it 'Descriptions should be set branches' do
51
+ expected_hash = {
52
+ "test" => {
53
+ description: 'test description',
54
+ detail: 'test detail'
55
+ }
56
+ }
57
+ expect(Idler.descriptions.instance_variable_get(:@descriptions)).to match(expected_hash)
58
+ end
59
+
60
+ it 'Workers should be set branches' do
61
+ expect(Idler.workers.instance_variable_get(:@workers)).to_not be_nil
62
+ end
63
+ end
64
+
65
+ context 'without block' do
66
+ let(:branch) { 'test' }
67
+ let(:block) { nil }
68
+
69
+ it { expect { subject }.to_not raise_error }
70
+ it { is_expected.to be_a Idler::Branch }
71
+
72
+ it 'instance variable @branch should be set "test"' do
73
+ expect(subject.instance_variable_get(:@branch)).to eq('test')
74
+ end
75
+
76
+ it 'Descriptions should be set branches' do
77
+ expect(Idler.descriptions.instance_variable_get(:@descriptions)).to eq({ "test" => {}})
78
+ end
79
+
80
+ it 'Workers should be set branches' do
81
+ expect(Idler.workers.instance_variable_get(:@workers)).to eq({ "test" => nil })
82
+ end
83
+ end
84
+
85
+ context 'without branch' do
86
+ let(:branch) { nil }
87
+ let(:block) { nil }
88
+
89
+ it { expect { subject }.to raise_error(Idler::NotDetectBranchError) }
90
+ end
91
+
92
+ end
93
+
94
+ describe '#desc' do
95
+ let(:instance) { described_class.new('test') }
96
+ let(:desc) { 'test description' }
97
+ subject { instance.desc(desc) }
98
+
99
+ it { is_expected.to eq(desc) }
100
+ end
101
+
102
+ describe '#detail' do
103
+ let(:instance) { described_class.new('test') }
104
+ let(:detail) { 'test detail' }
105
+ subject { instance.detail(detail) }
106
+
107
+ it { is_expected.to eq(detail) }
108
+ end
109
+
110
+ describe '#worker' do
111
+ let(:instance) { described_class.new('test') }
112
+ let(:worker) { Proc.new { nil } }
113
+ subject { instance.worker(&worker) }
114
+
115
+ it 'should eq given block' do
116
+ is_expected.to eq(worker)
117
+ end
118
+ end
119
+
120
+ end