git_cloner 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.rubocop.yml ADDED
@@ -0,0 +1,4 @@
1
+ inherit_from: rubocop-todo.yml
2
+
3
+ LineLength:
4
+ Enabled: false
data/README.md CHANGED
@@ -16,7 +16,7 @@ Or install it yourself as:
16
16
 
17
17
  $ gem install git_cloner
18
18
 
19
- ## Usage
19
+ ## CLI-Usage
20
20
 
21
21
  ### generate Gitclonerfile
22
22
 
@@ -34,12 +34,19 @@ gitcloner init
34
34
  default_output "./"
35
35
 
36
36
  # git repositries
37
- # repo allow only Array(in Array, Hash[:place, :output])
38
- # repo's default value => []
37
+ # repos allow only Array(in Array, Hash[:place, :output, :copies])
38
+ # copies is option.
39
+ # copies must have Array[Hash{:from, :to}].
40
+ # you can copy files or directories.
41
+ # repos's default value => []
39
42
  repos [
40
43
  {
41
44
  place: 'https://github.com/tbpgr/rspec_piccolo.git',
42
- output: './tmp'
45
+ output: './tmp',
46
+ copies: [
47
+ {from: "./tmp/rspec_piccolo/lib/rspec_piccolo", to: "./"},
48
+ {from: "./tmp/rspec_piccolo/spec", to: "./sample"}
49
+ ]
43
50
  }
44
51
  ]
45
52
  ~~~
@@ -88,7 +95,33 @@ $ tree
88
95
  └many files...
89
96
  ~~~
90
97
 
98
+ ## Direct Usage
99
+ if you want to use GitCloner directry, you can use like this sample.
100
+
101
+ ~~~ruby
102
+ require 'git_cloner_core'
103
+
104
+ default_output = "./",
105
+ repos = [
106
+ {
107
+ place: "https://github.com/tbpgr/rspec_piccolo.git",
108
+ output: "./tmp",
109
+ copies: [
110
+ {from: "./tmp/rspec_piccolo/lib/rspec_piccolo", to: "./"},
111
+ {from: "./tmp/rspec_piccolo/spec", to: "./sample"},
112
+ {from: "./tmp/rspec_piccolo/spec/spec_helper.rb", to: "./helper/helper.rb"},
113
+ ]
114
+ },
115
+ {
116
+ place: "https://github.com/tbpgr/tbpgr_utils.git",
117
+ }
118
+ ]
119
+
120
+ GitCloner::Core.new.clone default_output, repos
121
+ ~~~
122
+
91
123
  ## History
124
+ * version 0.0.3 : enable direct call clone.
92
125
  * version 0.0.2 : add files,directories copy.
93
126
  * version 0.0.1 : first release.
94
127
 
@@ -1,3 +1,3 @@
1
1
  module GitCloner
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
@@ -1,110 +1,124 @@
1
- # encoding: utf-8
2
- require 'git_cloner_dsl'
3
- require 'uri'
4
- require 'fileutils'
5
-
6
- module GitCloner
7
- # GitCloner Core
8
- class Core
9
- GIT_CLONER_FILE = 'Gitclonerfile'
10
- GIT_CLONER_TEMPLATE = <<-EOS
11
- # encoding: utf-8
12
-
13
- # default_output place
14
- # default_output is required
15
- # default_output allow only String
16
- # default_output's default value => "./"
17
- default_output "./"
18
-
19
- # git repositries
20
- # repo allow only Array(in Array, Hash[:place, :output, :copies])
21
- # copies is option.
22
- # copies must have Array[Hash{:from, :to}].
23
- # you can copy files or directories.
24
- # repo's default value => []
25
- repos [
26
- {
27
- place: 'https://github.com/tbpgr/rspec_piccolo.git',
28
- output: './tmp',
29
- copies: [
30
- {from: "./tmp/rspec_piccolo/lib/rspec_piccolo", to: "./"},
31
- {from: "./tmp/rspec_piccolo/spec", to: "./sample"}
32
- ]
33
- }
34
- ]
35
- EOS
36
-
37
- # == generate Gitclonerfile to current directory.
38
- def init
39
- File.open(GIT_CLONER_FILE, 'w') { |f|f.puts GIT_CLONER_TEMPLATE }
40
- end
41
-
42
- # == clone git repositories
43
- def execute
44
- dsl = get_dsl
45
- base = Dir.pwd
46
- default_output = dsl.git_cloner.default_output
47
- tmp_repos = dsl.git_cloner.repos
48
- fail ArgumentError, 'invalid repos. repos must be Array.' unless tmp_repos.is_a? Array
49
- tmp_repos.each do |repo|
50
- fail ArgumentError, 'invalid repos. repos-Array must have Hash' unless repo.is_a? Hash
51
- fail ArgumentError, 'invalid key. Hash must contain :place key' unless repo.key? :place
52
- repo_name = get_repo_name repo[:place]
53
- target = get_output(repo[:output], default_output)
54
- FileUtils.mkdir_p(target) unless Dir.exists? target
55
- Dir.chdir(target)
56
- result = system("git clone #{repo[:place]} --depth=1")
57
- remove_dot_git_directory repo_name
58
- show_result_message(result, repo_name)
59
- Dir.chdir base
60
- next if repo[:copies].nil?
61
- copy_targets repo[:copies]
62
- end
63
- end
64
-
65
- private
66
-
67
- def get_dsl
68
- src = read_dsl
69
- dsl = GitCloner::Dsl.new
70
- dsl.instance_eval src
71
- dsl
72
- end
73
-
74
- def read_dsl
75
- File.open(GIT_CLONER_FILE) { |f|f.read }
76
- end
77
-
78
- def get_repo_name(place)
79
- uri = URI(place)
80
- p uri.path.gsub(/.*\//, '').gsub('.git', '')
81
- end
82
-
83
- def get_output(output, default_output)
84
- output.nil? ? default_output : output
85
- end
86
-
87
- def remove_dot_git_directory(repo_name)
88
- Dir.chdir("./#{repo_name}")
89
- FileUtils.rm_rf('.git') if Dir.exists? '.git'
90
- end
91
-
92
- def show_result_message(result, repo_name)
93
- if result
94
- puts "clone #{Dir.pwd}/#{repo_name} complete"
95
- else
96
- puts "clone #{Dir.pwd}/#{repo_name} fail"
97
- end
98
- end
99
-
100
- def copy_targets(copies)
101
- copies.each do |cp_dir|
102
- fail ArgumentError, 'invalid repos. copies must have from' unless cp_dir[:from]
103
- fail ArgumentError, 'invalid repos. copies must have to' unless cp_dir[:to]
104
- to_dir = File.dirname(cp_dir[:to])
105
- FileUtils.mkdir_p(to_dir) unless Dir.exists? to_dir
106
- FileUtils.cp_r cp_dir[:from], cp_dir[:to]
107
- end
108
- end
109
- end
110
- end
1
+ # encoding: utf-8
2
+ require 'git_cloner_dsl'
3
+ require "uri"
4
+ require 'fileutils'
5
+
6
+ module GitCloner
7
+ # GitCloner Core
8
+ class Core
9
+ GIT_CLONER_FILE = "Gitclonerfile"
10
+ GIT_CLONER_TEMPLATE =<<-EOS
11
+ # encoding: utf-8
12
+
13
+ # default_output place
14
+ # default_output is required
15
+ # default_output allow only String
16
+ # default_output's default value => "./"
17
+ default_output "./"
18
+
19
+ # git repositries
20
+ # repos allow only Array(in Array, Hash[:place, :output, :copies])
21
+ # copies is option.
22
+ # copies must have Array[Hash{:from, :to}].
23
+ # you can copy files or directories.
24
+ # repos's default value => []
25
+ repos [
26
+ {
27
+ place: 'https://github.com/tbpgr/rspec_piccolo.git',
28
+ output: './tmp',
29
+ copies: [
30
+ {from: "./tmp/rspec_piccolo/lib/rspec_piccolo", to: "./"},
31
+ {from: "./tmp/rspec_piccolo/spec", to: "./sample"}
32
+ ]
33
+ }
34
+ ]
35
+ EOS
36
+
37
+ #== generate Gitclonerfile to current directory.
38
+ def init
39
+ File.open(GIT_CLONER_FILE, "w") {|f|f.puts GIT_CLONER_TEMPLATE}
40
+ end
41
+
42
+ #== clone git repositories
43
+ def execute
44
+ dsl = get_dsl
45
+ base = Dir.pwd
46
+ default_output = dsl.git_cloner.default_output
47
+ tmp_repos = dsl.git_cloner.repos
48
+ git_clone(default_output, tmp_repos, base)
49
+ end
50
+
51
+ def clone(default_output, repos = [])
52
+ default_output ||= './'
53
+ base = Dir.pwd
54
+ dsl = GitCloner::Dsl.new
55
+
56
+ default_output = dsl.git_cloner.default_output
57
+ tmp_repos = dsl.git_cloner.repos
58
+ git_clone(default_output, repos, base)
59
+ end
60
+
61
+ private
62
+
63
+ def git_clone(default_output, tmp_repos, base)
64
+ fail ArgumentError, 'invalid repos. repos must be Array.' unless tmp_repos.is_a? Array
65
+ tmp_repos.each do |repo|
66
+ fail ArgumentError, 'invalid repos. repos-Array must have Hash' unless repo.is_a? Hash
67
+ fail ArgumentError, 'invalid key. Hash musft contain :place key' unless repo.has_key? :place
68
+ repo_name = get_repo_name repo[:place]
69
+ target = get_output(repo[:output], default_output)
70
+ FileUtils.mkdir_p(target) unless Dir.exists? target
71
+ Dir.chdir(target)
72
+ result = system("git clone #{repo[:place]} --depth=1")
73
+ remove_dot_git_directory repo_name
74
+ show_result_message(result, repo_name)
75
+ Dir.chdir base
76
+ next if repo[:copies].nil?
77
+ copy_targets repo[:copies]
78
+ end
79
+ end
80
+
81
+ def get_dsl
82
+ src = read_dsl
83
+ dsl = GitCloner::Dsl.new
84
+ dsl.instance_eval src
85
+ dsl
86
+ end
87
+
88
+ def read_dsl
89
+ File.open(GIT_CLONER_FILE) {|f|f.read}
90
+ end
91
+
92
+ def get_repo_name(place)
93
+ uri = URI(place)
94
+ uri.path.gsub(/.*\//, '').gsub('.git', '')
95
+ end
96
+
97
+ def get_output(output, default_output)
98
+ require 'test_toolbox'
99
+ output.nil? ? default_output : output
100
+ end
101
+
102
+ def remove_dot_git_directory(repo_name)
103
+ Dir.chdir("./#{repo_name}")
104
+ FileUtils.rm_rf('.git') if Dir.exists? '.git'
105
+ end
106
+
107
+ def show_result_message(result, repo_name)
108
+ if result
109
+ puts "clone #{Dir.pwd}/#{repo_name} complete"
110
+ else
111
+ puts "clone #{Dir.pwd}/#{repo_name} fail"
112
+ end
113
+ end
114
+
115
+ def copy_targets(copies)
116
+ copies.each do |cp_dir|
117
+ fail ArgumentError, 'invalid repos. copies must have from' unless cp_dir[:from]
118
+ fail ArgumentError, 'invalid repos. copies must have to' unless cp_dir[:to]
119
+ FileUtils.mkdir_p(cp_dir[:to]) unless Dir.exists? File.dirname(cp_dir[:to])
120
+ FileUtils.cp_r cp_dir[:from], cp_dir[:to]
121
+ end
122
+ end
123
+ end
124
+ end
data/rubocop-todo.yml ADDED
@@ -0,0 +1,48 @@
1
+ # This configuration was generated by `rubocop --auto-gen-config`.
2
+ # The point is for the user to remove these configuration records
3
+ # one by one as the offences are removed from the code base.
4
+
5
+ Documentation:
6
+ Enabled: false
7
+
8
+ EmptyLinesAroundBody:
9
+ Enabled: false
10
+
11
+ Encoding:
12
+ Enabled: false
13
+
14
+ Eval:
15
+ Enabled: false
16
+
17
+ HashMethods:
18
+ Enabled: false
19
+
20
+ Lambda:
21
+ Enabled: false
22
+
23
+ LeadingCommentSpace:
24
+ Enabled: false
25
+
26
+ LineLength:
27
+ Enabled: false
28
+
29
+ MethodLength:
30
+ Enabled: false
31
+
32
+ SpaceAroundBlockBraces:
33
+ Enabled: false
34
+
35
+ SpaceAroundOperators:
36
+ Enabled: false
37
+
38
+ SpaceInsideHashLiteralBraces:
39
+ Enabled: false
40
+
41
+ StringLiterals:
42
+ Enabled: false
43
+
44
+ TrailingWhitespace:
45
+ Enabled: false
46
+
47
+ UselessAssignment:
48
+ Enabled: false
@@ -1,195 +1,339 @@
1
- # encoding: utf-8
2
- require 'spec_helper'
3
- require 'git_cloner_core'
4
-
5
- describe GitCloner::Core do
6
- context :init do
7
- OUTPUT_DSL_TMP_DIR = 'generate_dsl'
8
- cases = [
9
- {
10
- case_no: 1,
11
- case_title: 'valid case',
12
- expected_file: GitCloner::Core::GIT_CLONER_FILE,
13
- expected_content: GitCloner::Core::GIT_CLONER_TEMPLATE,
14
- },
15
- ]
16
-
17
- cases.each do |c|
18
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
19
- begin
20
- case_before c
21
-
22
- # -- given --
23
- git_cloner_core = GitCloner::Core.new
24
-
25
- # -- when --
26
- git_cloner_core.init
27
-
28
- # -- then --
29
- actual = File.read("./#{c[:expected_file]}")
30
- expect(actual).to eq(c[:expected_content])
31
- ensure
32
- case_after c
33
- end
34
- end
35
-
36
- def case_before(c)
37
- Dir.mkdir(OUTPUT_DSL_TMP_DIR) unless Dir.exists? OUTPUT_DSL_TMP_DIR
38
- Dir.chdir(OUTPUT_DSL_TMP_DIR)
39
- end
40
-
41
- def case_after(c)
42
- Dir.chdir('../')
43
- FileUtils.rm_rf(OUTPUT_DSL_TMP_DIR) if Dir.exists? OUTPUT_DSL_TMP_DIR
44
- end
45
- end
46
- end
47
-
48
- context :execute do
49
- OUTPUT_GIT_CLONER_TMP_DIR = 'tmp_git_cloner'
50
- GIT_CLONER_CASE1 = <<-EOF
51
- # encoding: utf-8
52
- default_output "./"
53
- repos [
54
- {
55
- place: "https://github.com/tbpgr/rspec_piccolo.git",
56
- output: "./tmp",
57
- },
58
- {
59
- place: "https://github.com/tbpgr/tbpgr_utils.git",
60
- }
61
- ]
62
- EOF
63
-
64
- RESULT_CASE1 = <<-EOF
65
- # encoding: utf-8
66
- require 'templatable'
67
-
68
- class SampleUse
69
- include Templatable
70
- template <<-EOS
71
- line1:<%=placeholders[:param1]%>
72
- line2:<%=placeholders[:param2]%>
73
- EOS
74
-
75
- def manufactured_param1
76
- # TODO: implement your logic
77
- end
78
-
79
- def manufactured_param2
80
- # TODO: implement your logic
81
- end
82
- end
83
- EOF
84
-
85
- GIT_CLONER_CASE2 = <<-EOF
86
- # encoding: utf-8
87
- default_output "./"
88
- repos "invalid"
89
- EOF
90
-
91
- GIT_CLONER_CASE3 = <<-EOF
92
- # encoding: utf-8
93
- default_output "./"
94
- repos ["invalid"]
95
- EOF
96
-
97
- GIT_CLONER_CASE4 = <<-EOF
98
- # encoding: utf-8
99
- default_output "./"
100
- repos [
101
- {
102
- plase: "typo"
103
- }
104
- ]
105
- EOF
106
-
107
- GIT_CLONER_CASE5 = <<-EOF
108
- # encoding: utf-8
109
- default_output "./"
110
- repos [
111
- {
112
- place: "https://github.com/tbpgr/rspec_piccolo.git",
113
- output: "./tmp",
114
- copies: [
115
- {from: "./tmp/rspec_piccolo/lib/rspec_piccolo", to: "./"},
116
- {from: "./tmp/rspec_piccolo/spec", to: "./sample"}
117
- ]
118
- },
119
- {
120
- place: "https://github.com/tbpgr/tbpgr_utils.git",
121
- }
122
- ]
123
- EOF
124
-
125
- cases = [
126
- {
127
- case_no: 1,
128
- case_title: 'valid case',
129
- input: GIT_CLONER_CASE1,
130
- expecteds: ['./tmp/rspec_piccolo', './tbpgr_utils'],
131
- },
132
- {
133
- case_no: 2,
134
- case_title: 'invalid repos case(String)',
135
- input: GIT_CLONER_CASE2,
136
- has_error: true,
137
- },
138
- {
139
- case_no: 3,
140
- case_title: 'invalid repos case(Array[Not Hash])',
141
- input: GIT_CLONER_CASE3,
142
- has_error: true,
143
- },
144
- {
145
- case_no: 4,
146
- case_title: 'invalid repos case(Array[Hash] but invalid hash key)',
147
- input: GIT_CLONER_CASE4,
148
- has_error: true,
149
- },
150
- {
151
- case_no: 5,
152
- case_title: 'clone git and copy directories case',
153
- input: GIT_CLONER_CASE5,
154
- expecteds: ['./tmp/rspec_piccolo', './tbpgr_utils', './sample/rspec_piccolo_spec.rb', './sample/spec_helper.rb', './rspec_piccolo'],
155
- },
156
- ]
157
-
158
- cases.each do |c|
159
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
160
- begin
161
- case_before c
162
-
163
- # -- given --
164
- git_cloner_core = GitCloner::Core.new
165
-
166
- # -- when --
167
- if c[:has_error]
168
- lambda { git_cloner_core.execute }.should raise_error(StandardError)
169
- next
170
- end
171
- git_cloner_core.execute
172
-
173
- # -- then --
174
- c[:expecteds].each do |expected|
175
- actual_exists = File.exists? expected
176
- expect(actual_exists).to be_true
177
- end
178
- ensure
179
- case_after c
180
- end
181
- end
182
-
183
- def case_before(c)
184
- Dir.mkdir(OUTPUT_GIT_CLONER_TMP_DIR) unless Dir.exists? OUTPUT_GIT_CLONER_TMP_DIR
185
- Dir.chdir(OUTPUT_GIT_CLONER_TMP_DIR)
186
- File.open(GitCloner::Core::GIT_CLONER_FILE, 'w:UTF-8') { |f|f.print c[:input] }
187
- end
188
-
189
- def case_after(c)
190
- Dir.chdir('../')
191
- FileUtils.rm_rf(OUTPUT_GIT_CLONER_TMP_DIR) if Dir.exists? OUTPUT_GIT_CLONER_TMP_DIR
192
- end
193
- end
194
- end
195
- end
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'git_cloner_core'
4
+
5
+ describe GitCloner::Core do
6
+ context :init do
7
+ OUTPUT_DSL_TMP_DIR = 'generate_dsl'
8
+ cases = [
9
+ {
10
+ case_no: 1,
11
+ case_title: 'valid case',
12
+ expected_file: GitCloner::Core::GIT_CLONER_FILE,
13
+ expected_content: GitCloner::Core::GIT_CLONER_TEMPLATE,
14
+ },
15
+ ]
16
+
17
+ cases.each do |c|
18
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
19
+ begin
20
+ case_before c
21
+
22
+ # -- given --
23
+ git_cloner_core = GitCloner::Core.new
24
+
25
+ # -- when --
26
+ git_cloner_core.init
27
+
28
+ # -- then --
29
+ actual = File.read("./#{c[:expected_file]}")
30
+ expect(actual).to eq(c[:expected_content])
31
+ ensure
32
+ case_after c
33
+ end
34
+ end
35
+
36
+ def case_before(c)
37
+ Dir.mkdir(OUTPUT_DSL_TMP_DIR) unless Dir.exists? OUTPUT_DSL_TMP_DIR
38
+ Dir.chdir(OUTPUT_DSL_TMP_DIR)
39
+ end
40
+
41
+ def case_after(c)
42
+ Dir.chdir('../')
43
+ FileUtils.rm_rf(OUTPUT_DSL_TMP_DIR) if Dir.exists? OUTPUT_DSL_TMP_DIR
44
+ end
45
+ end
46
+ end
47
+
48
+ context :execute do
49
+ OUTPUT_GIT_CLONER_TMP_DIR = 'tmp_git_cloner'
50
+ GIT_CLONER_CASE1 = <<-EOF
51
+ # encoding: utf-8
52
+ default_output "./"
53
+ repos [
54
+ {
55
+ place: "https://github.com/tbpgr/rspec_piccolo.git",
56
+ output: "./tmp",
57
+ },
58
+ {
59
+ place: "https://github.com/tbpgr/tbpgr_utils.git",
60
+ }
61
+ ]
62
+ EOF
63
+
64
+ RESULT_CASE1 = <<-EOF
65
+ # encoding: utf-8
66
+ require 'templatable'
67
+
68
+ class SampleUse
69
+ include Templatable
70
+ template <<-EOS
71
+ line1:<%=placeholders[:param1]%>
72
+ line2:<%=placeholders[:param2]%>
73
+ EOS
74
+
75
+ def manufactured_param1
76
+ # TODO: implement your logic
77
+ end
78
+
79
+ def manufactured_param2
80
+ # TODO: implement your logic
81
+ end
82
+ end
83
+ EOF
84
+
85
+ GIT_CLONER_CASE2 = <<-EOF
86
+ # encoding: utf-8
87
+ default_output "./"
88
+ repos "invalid"
89
+ EOF
90
+
91
+ GIT_CLONER_CASE3 = <<-EOF
92
+ # encoding: utf-8
93
+ default_output "./"
94
+ repos ["invalid"]
95
+ EOF
96
+
97
+ GIT_CLONER_CASE4 = <<-EOF
98
+ # encoding: utf-8
99
+ default_output "./"
100
+ repos [
101
+ {
102
+ plase: "typo"
103
+ }
104
+ ]
105
+ EOF
106
+
107
+ GIT_CLONER_CASE5 = <<-EOF
108
+ # encoding: utf-8
109
+ default_output "./"
110
+ repos [
111
+ {
112
+ place: "https://github.com/tbpgr/rspec_piccolo.git",
113
+ output: "./tmp",
114
+ copies: [
115
+ {from: "./tmp/rspec_piccolo/lib/rspec_piccolo", to: "./"},
116
+ {from: "./tmp/rspec_piccolo/spec", to: "./sample"}
117
+ ]
118
+ },
119
+ {
120
+ place: "https://github.com/tbpgr/tbpgr_utils.git",
121
+ }
122
+ ]
123
+ EOF
124
+
125
+ cases = [
126
+ {
127
+ case_no: 1,
128
+ case_title: 'valid case',
129
+ input: GIT_CLONER_CASE1,
130
+ expecteds: ['./tmp/rspec_piccolo', './tbpgr_utils'],
131
+ },
132
+ {
133
+ case_no: 2,
134
+ case_title: 'invalid repos case(String)',
135
+ input: GIT_CLONER_CASE2,
136
+ has_error: true,
137
+ },
138
+ {
139
+ case_no: 3,
140
+ case_title: 'invalid repos case(Array[Not Hash])',
141
+ input: GIT_CLONER_CASE3,
142
+ has_error: true,
143
+ },
144
+ {
145
+ case_no: 4,
146
+ case_title: 'invalid repos case(Array[Hash] but invalid hash key)',
147
+ input: GIT_CLONER_CASE4,
148
+ has_error: true,
149
+ },
150
+ {
151
+ case_no: 5,
152
+ case_title: 'clone git and copy directories case',
153
+ input: GIT_CLONER_CASE5,
154
+ expecteds: ['./tmp/rspec_piccolo', './tbpgr_utils', './sample/rspec_piccolo_spec.rb', './sample/spec_helper.rb', './rspec_piccolo'],
155
+ },
156
+ ]
157
+
158
+ cases.each do |c|
159
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
160
+ begin
161
+ case_before c
162
+
163
+ # -- given --
164
+ git_cloner_core = GitCloner::Core.new
165
+
166
+ # -- when --
167
+ if c[:has_error]
168
+ lambda { git_cloner_core.execute }.should raise_error(StandardError)
169
+ next
170
+ end
171
+ git_cloner_core.execute
172
+
173
+ # -- then --
174
+ c[:expecteds].each do |expected|
175
+ actual_exists = File.exists? expected
176
+ expect(actual_exists).to be_true
177
+ end
178
+ ensure
179
+ case_after c
180
+ end
181
+ end
182
+
183
+ def case_before(c)
184
+ Dir.mkdir(OUTPUT_GIT_CLONER_TMP_DIR) unless Dir.exists? OUTPUT_GIT_CLONER_TMP_DIR
185
+ Dir.chdir(OUTPUT_GIT_CLONER_TMP_DIR)
186
+ File.open(GitCloner::Core::GIT_CLONER_FILE, 'w:UTF-8') { |f|f.print c[:input] }
187
+ end
188
+
189
+ def case_after(c)
190
+ Dir.chdir('../')
191
+ FileUtils.rm_rf(OUTPUT_GIT_CLONER_TMP_DIR) if Dir.exists? OUTPUT_GIT_CLONER_TMP_DIR
192
+ end
193
+ end
194
+ end
195
+
196
+ context :init do
197
+ OUTPUT_DSL_TMP_DIR = 'generate_dsl'
198
+ cases = [
199
+ {
200
+ case_no: 1,
201
+ case_title: 'valid case',
202
+ expected_file: GitCloner::Core::GIT_CLONER_FILE,
203
+ expected_content: GitCloner::Core::GIT_CLONER_TEMPLATE,
204
+ },
205
+ ]
206
+
207
+ cases.each do |c|
208
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
209
+ begin
210
+ case_before c
211
+
212
+ # -- given --
213
+ git_cloner_core = GitCloner::Core.new
214
+
215
+ # -- when --
216
+ git_cloner_core.init
217
+
218
+ # -- then --
219
+ actual = File.read("./#{c[:expected_file]}")
220
+ expect(actual).to eq(c[:expected_content])
221
+ ensure
222
+ case_after c
223
+ end
224
+ end
225
+
226
+ def case_before(c)
227
+ Dir.mkdir(OUTPUT_DSL_TMP_DIR) unless Dir.exists? OUTPUT_DSL_TMP_DIR
228
+ Dir.chdir(OUTPUT_DSL_TMP_DIR)
229
+ end
230
+
231
+ def case_after(c)
232
+ Dir.chdir('../')
233
+ FileUtils.rm_rf(OUTPUT_DSL_TMP_DIR) if Dir.exists? OUTPUT_DSL_TMP_DIR
234
+ end
235
+ end
236
+ end
237
+
238
+ context :clone do
239
+ OUTPUT_GIT_CLONER_CLONE_TMP_DIR = 'tmp_git_cloner_clone'
240
+
241
+ cases = [
242
+ {
243
+ case_no: 1,
244
+ case_title: 'valid case',
245
+ default_output: "./",
246
+ repos: [
247
+ {
248
+ place: "https://github.com/tbpgr/rspec_piccolo.git",
249
+ output: "./tmp",
250
+ },
251
+ {
252
+ place: "https://github.com/tbpgr/tbpgr_utils.git",
253
+ }
254
+ ],
255
+ expecteds: ['./tmp/rspec_piccolo', './tbpgr_utils'],
256
+ },
257
+ {
258
+ case_no: 2,
259
+ case_title: 'invalid repos case(String)',
260
+ default_output: "./",
261
+ repos: "invalid",
262
+ has_error: true,
263
+ },
264
+ {
265
+ case_no: 3,
266
+ case_title: 'invalid repos case(Array[Not Hash])',
267
+ default_output: "./",
268
+ repos: ["invalid"],
269
+ has_error: true,
270
+ },
271
+ {
272
+ case_no: 4,
273
+ default_output: "./",
274
+ repos: [
275
+ {
276
+ plase: "typo"
277
+ }
278
+ ],
279
+ has_error: true,
280
+ },
281
+ {
282
+ case_no: 5,
283
+ case_title: 'clone git and copy directories case',
284
+ default_output: "./",
285
+ repos: [
286
+ {
287
+ place: "https://github.com/tbpgr/rspec_piccolo.git",
288
+ output: "./tmp",
289
+ copies: [
290
+ {from: "./tmp/rspec_piccolo/lib/rspec_piccolo", to: "./"},
291
+ {from: "./tmp/rspec_piccolo/spec", to: "./sample"}
292
+ ]
293
+ },
294
+ {
295
+ place: "https://github.com/tbpgr/tbpgr_utils.git",
296
+ }
297
+ ],
298
+ expecteds: ['./tmp/rspec_piccolo', './tbpgr_utils', './sample/rspec_piccolo_spec.rb', './sample/spec_helper.rb', './rspec_piccolo'],
299
+ },
300
+ ]
301
+
302
+ cases.each do |c|
303
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
304
+ begin
305
+ case_before c
306
+
307
+ # -- given --
308
+ git_cloner_core = GitCloner::Core.new
309
+
310
+ # -- when --
311
+ if c[:has_error]
312
+ lambda { git_cloner_core.clone(c[:default_output], c[:repos]) }.should raise_error(StandardError)
313
+ next
314
+ end
315
+ git_cloner_core.clone(c[:default_output], c[:repos])
316
+
317
+ # -- then --
318
+ c[:expecteds].each do |expected|
319
+ actual_exists = File.exists? expected
320
+ expect(actual_exists).to be_true
321
+ end
322
+ ensure
323
+ case_after c
324
+ end
325
+ end
326
+
327
+ def case_before(c)
328
+ Dir.mkdir(OUTPUT_GIT_CLONER_CLONE_TMP_DIR) unless Dir.exists? OUTPUT_GIT_CLONER_CLONE_TMP_DIR
329
+ Dir.chdir(OUTPUT_GIT_CLONER_CLONE_TMP_DIR)
330
+ File.open(GitCloner::Core::GIT_CLONER_FILE, 'w:UTF-8') { |f|f.print c[:input] }
331
+ end
332
+
333
+ def case_after(c)
334
+ Dir.chdir('../')
335
+ FileUtils.rm_rf(OUTPUT_GIT_CLONER_CLONE_TMP_DIR) if Dir.exists? OUTPUT_GIT_CLONER_CLONE_TMP_DIR
336
+ end
337
+ end
338
+ end
339
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git_cloner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-27 00:00:00.000000000 Z
12
+ date: 2014-01-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &22962024 !ruby/object:Gem::Requirement
16
+ requirement: &28541964 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 4.0.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *22962024
24
+ version_requirements: *28541964
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activemodel
27
- requirement: &22961664 !ruby/object:Gem::Requirement
27
+ requirement: &28541664 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 4.0.2
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *22961664
35
+ version_requirements: *28541664
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: thor
38
- requirement: &22961160 !ruby/object:Gem::Requirement
38
+ requirement: &28541388 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.18.1
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *22961160
46
+ version_requirements: *28541388
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &22960500 !ruby/object:Gem::Requirement
49
+ requirement: &28541112 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '1.3'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *22960500
57
+ version_requirements: *28541112
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &22959912 !ruby/object:Gem::Requirement
60
+ requirement: &28540884 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *22959912
68
+ version_requirements: *28540884
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &22959396 !ruby/object:Gem::Requirement
71
+ requirement: &28540560 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 2.14.1
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *22959396
79
+ version_requirements: *28540560
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: simplecov
82
- requirement: &22975512 !ruby/object:Gem::Requirement
82
+ requirement: &28540260 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: 0.8.2
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *22975512
90
+ version_requirements: *28540260
91
91
  description: GitCloner clone git repositoris from Gitclonerfile settings
92
92
  email:
93
93
  - tbpgr@tbpgr.jp
@@ -98,6 +98,7 @@ extra_rdoc_files: []
98
98
  files:
99
99
  - .gitignore
100
100
  - .rspec
101
+ - .rubocop.yml
101
102
  - Gemfile
102
103
  - LICENSE.txt
103
104
  - README.md
@@ -108,6 +109,7 @@ files:
108
109
  - lib/git_cloner_core.rb
109
110
  - lib/git_cloner_dsl.rb
110
111
  - lib/git_cloner_dsl_model.rb
112
+ - rubocop-todo.yml
111
113
  - spec/git_cloner_core_spec.rb
112
114
  - spec/spec_helper.rb
113
115
  homepage: https://github.com/tbpgr/git_cloner