roger 0.12.4 → 0.12.5

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YjNlMzQ3MzBkN2E0NmY4NjhkYTEwMDllMTVjMDFlYWU3OThmZGM1YQ==
4
+ Y2JmMWYxYzdhOWI1YjhiMzU4MmI2YjJhYWYyN2JhZmNmZmMyYjZjZA==
5
5
  data.tar.gz: !binary |-
6
- ZmUzNTYzMzE3YjIxMzUxY2YwMjBiMDE2NWQyMjYyYjM3YjlmMjQ4Nw==
6
+ NDBkZDVmMmEzNzNhZDUyODk2Njg0MGJhYzcwZDA0NzE3YTQ0MWFlNg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YThjMmRmZGZjOGM2MmUwNjhiMGIwMTRlOWVlNjc4Y2QxYjhmM2YyNjg0NmFj
10
- MGEwNTQwM2Q1NTE5Yzg0ZjY4YmE1OWZmYmZjMDI1OTc2ZWNiOGE5N2Y0NTY5
11
- NDRlY2QzMWFmYTQ2MjMxOTE5NmI2Mzk0YzE3MDVkYTAwMjA1YWQ=
9
+ NjZlNjYxNTU4OTA4NDdkNTM1MjJkZWQ2MmY0YTVmMjUzY2Q0M2NkZWQ3MDIw
10
+ YTUxNzRlMTMyNzFmZmJmMmJiNTM4NGI0NmJjZjhmZTE5OWY4N2M0NDBhYzNk
11
+ NzU2MTM4ZGJkOThhNDdiYTZkYjQ1Y2FlODQ5M2U2MmJmNmM1MzQ=
12
12
  data.tar.gz: !binary |-
13
- OTA0MTNkYmZlNGZiYzI0ZmFlOTlkYjliMjVjZGFhZTkwOWQzYmJmODU1MDI2
14
- YTc4NzljY2JmNDE0ZmZiNDlhZDI5NzBiODUyNzQ4OGRjNmE0ZjdlNWQzNTg5
15
- YjM5OWY4NzUwZTgyODBjNWEyOTE3MjI1YWE0OTkyNDkyODQ0ZDA=
13
+ MmMxOTY1NDFlMjMzYWViOTcyYTE2ODM1M2E2MjBiZWNkMDY5N2JkY2Q2MjZj
14
+ N2JmMGI5ZmI0MWVjZDg0YzVlMTk2ZTI4ZDhhMmVhZjY2Njc4ZmY1MDNiNjQ0
15
+ MDM0NGZhMzBkZmI1MTJlZjQwNmJlNDI5N2ViNzI2ZTBlNzY0ODM=
data/.travis.yml CHANGED
@@ -5,6 +5,9 @@ rvm:
5
5
  - 2.1.1
6
6
  - rbx-2
7
7
  - jruby
8
+ before_script:
9
+ - git config --global user.email "travis-ci@digitpaint.nl"
10
+ - git config --global user.name "Travis-CI"
8
11
  matrix:
9
12
  allow_failures:
10
13
  - rvm: rbx-2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## Version 0.12.5
4
+ * Fix github pages finalizer to work if the Dir finalizer is loaded as well
5
+ * Run relativizer as the last thing before you finalize as to fix resolving issues with generated files
6
+ * Minor coding style issues
7
+
3
8
  ## Version 0.12.4
4
9
  * Change upload prompt to conform to the [y/N] convention
5
10
  * Fix git SCM to properly shell escape arguments so it works with special chars in paths
@@ -1,95 +1,108 @@
1
- # Finalizes the release into a specific branch of a repository and pushes it
2
- #
1
+ require "tmpdir"
2
+
3
3
  module Roger::Release::Finalizers
4
+ # Finalizes the release into a specific branch of a repository and pushes it
4
5
  class GitBranch < Roger::Release::Finalizers::Base
5
-
6
6
  # @param Hash options The options
7
7
  #
8
- # @option options String :remote The remote repository (default is the origin of the current repository)
8
+ # @option options String :remote The remote repository (default is the
9
+ # origin of the current repository)
9
10
  # @option options String :branch The remote branch (default is "gh-pages")
10
- # @option options Boolean :cleanup Cleanup temp dir afterwards (default is true)
11
- # @option options Boolean :push Push to remote (default is true)
12
- def initialize(options={})
11
+ # @option options Boolean :cleanup Cleanup temp dir afterwards (default is
12
+ # true)
13
+ # @option options Boolean :push Push to remote (default is true)
14
+ def initialize
13
15
  @options = {
14
- :remote => nil,
15
- :branch => "gh-pages",
16
- :cleanup => true,
17
- :push => true
16
+ remote: nil,
17
+ branch: "gh-pages",
18
+ cleanup: true,
19
+ push: true
18
20
  }
19
21
  end
20
-
21
-
22
+
22
23
  def call(release, options = {})
23
- options = @options.dup.update(options)
24
- git_dir = find_git_dir(release.project.path)
25
-
24
+ @options = @options.dup.update(options)
25
+ remote = find_git_remote
26
+
26
27
  # 0. Get remote
27
- unless remote = (options[:remote] || `git --git-dir=#{git_dir} config --get remote.origin.url`).strip
28
+ unless remote
28
29
  raise "No remote found for origin"
29
30
  end
30
-
31
+
31
32
  e_remote = Shellwords.escape(remote)
32
- e_branch = Shellwords.escape(options[:branch])
33
+ e_branch = Shellwords.escape(@options[:branch])
33
34
 
34
- tmp_dir = Pathname.new(Dir.mktmpdir)
35
+ tmp_dir = Pathname.new(::Dir.mktmpdir)
35
36
  clone_dir = tmp_dir + "clone"
36
-
37
+
37
38
  # Check if remote already has branch
38
39
  if `git ls-remote --heads #{e_remote} refs/heads/#{e_branch}` == ""
39
40
  release.log(self, "Creating empty branch")
40
41
  # Branch does not exist yet
41
42
  FileUtils.mkdir(clone_dir)
42
- Dir.chdir(clone_dir) do
43
+ ::Dir.chdir(clone_dir) do
43
44
  `git init`
44
45
  `git remote add origin #{e_remote}`
45
46
  `git checkout -b #{e_branch}`
46
47
  end
47
48
  else
48
49
  release.log(self, "Cloning existing repo")
49
- # 1. Clone into different directory
50
- `git clone #{e_remote} --branch #{e_branch} --single-branch #{clone_dir}`
50
+ clone_options = "--branch #{e_branch} --single-branch #{clone_dir}"
51
+ # 1. Clone into different directory
52
+ `git clone #{e_remote} #{clone_options}`
51
53
  end
52
-
54
+
53
55
  release.log(self, "Working git magic in #{clone_dir}")
54
- Dir.chdir(clone_dir) do
56
+ ::Dir.chdir(clone_dir) do
55
57
  # 3. Copy changes
56
58
  FileUtils.rm_rf("*")
57
59
  FileUtils.cp_r release.build_path.to_s + "/.", clone_dir.to_s
58
-
60
+
59
61
  # 4. Add all files
60
62
  `git add .`
61
-
63
+
62
64
  # 5. Commit
63
65
  `git commit -a -m "Release #{release.scm.version}"`
64
66
 
65
67
  # 6. Git push
66
- if options[:push]
68
+ if @options[:push]
67
69
  `git push origin #{e_branch}`
68
70
  end
69
71
  end
70
-
71
- if options[:cleanup]
72
+
73
+ if @options[:cleanup]
72
74
  FileUtils.rm_rf(tmp_dir)
75
+ else
76
+ tmp_dir
73
77
  end
74
-
75
78
  end
76
-
79
+
77
80
  protected
78
-
81
+
79
82
  # Find the git dir
80
- # TODO this is just a copy from release/scm/git.rb
83
+ # TODO this is just a copy from release/scm/git.rb
81
84
  def find_git_dir(path)
82
85
  path = Pathname.new(path).realpath
83
86
  while path.parent != path && !(path + ".git").directory?
84
87
  path = path.parent
85
88
  end
86
-
89
+
87
90
  path = path + ".git"
88
-
91
+
89
92
  raise "Could not find suitable .git dir in #{path}" if !path.directory?
90
93
 
91
94
  path
92
- end
95
+ end
96
+
97
+ def find_git_remote
98
+ (@options[:remote] ||
99
+ `git --git-dir=#{find_git_dir} config --get remote.origin.url`
100
+ ).strip
101
+ end
93
102
  end
94
103
  end
95
- Roger::Release::Finalizers.register(:git_branch, Roger::Release::Finalizers::GitBranch)
104
+
105
+ Roger::Release::Finalizers.register(
106
+ :git_branch,
107
+ Roger::Release::Finalizers::GitBranch
108
+ )
@@ -43,7 +43,9 @@ module Roger::Release::Finalizers
43
43
 
44
44
  local_path += "/" unless local_path =~ /\/\Z/
45
45
  remote_path += "/" unless remote_path =~ /\/\Z/
46
-
46
+
47
+ self.add_htaccess(release, options) if options[:htaccess]
48
+
47
49
  release.log(self, "Starting upload of #{(release.build_path + "*")} to #{options[:host]}")
48
50
 
49
51
  command = "#{options[:rsync]} -az #{Shellwords.escape(local_path)} #{Shellwords.escape(options[:username])}@#{Shellwords.escape(options[:host])}:#{Shellwords.escape(remote_path)}"
@@ -59,6 +61,24 @@ module Roger::Release::Finalizers
59
61
  end
60
62
 
61
63
  protected
64
+
65
+ def add_htaccess(release, options)
66
+ remote_htaccess_path = File.join(options[:remote_path], ".htaccess")
67
+ remote_htpasswd_path = File.join(options[:remote_path], ".htpasswd")
68
+ local_path = release.build_path
69
+
70
+ shell = release.project.shell
71
+
72
+ # Get the remote file
73
+ command = "#{options[:rsync]} #{Shellwords.escape(options[:username])}@#{Shellwords.escape(options[:host])}:#{Shellwords.escape(remote_htaccess_path)} :#{Shellwords.escape(remote_htpasswd_path)} #{Shellwords.escape(local_path)}"
74
+
75
+ if File.exist?(local_path + ".htaccess") && File.exist?(local_path + ".htpasswd")
76
+ release.log(self, ".htaccess and .htpasswd already exist")
77
+ else
78
+
79
+ end
80
+
81
+ end
62
82
 
63
83
  def validate_options!(release, options)
64
84
  must_have_keys = [:remote_path, :host, :username]
@@ -76,4 +96,38 @@ module Roger::Release::Finalizers
76
96
  end
77
97
  end
78
98
 
79
- Roger::Release::Finalizers.register(:rsync, Roger::Release::Finalizers::Rsync)
99
+ Roger::Release::Finalizers.register(:rsync, Roger::Release::Finalizers::Rsync)
100
+
101
+
102
+ # 1. Check option :htaccess => true
103
+ # 2. Check if remote file exists (.htaccess)
104
+
105
+ # 3. If it doesn't
106
+ # 4. Ask what the authname should be.
107
+ # 4. Ask if you want IP restriction
108
+ # 5. Ask if you want to add your own IP
109
+ # 6. Ask for other IPs
110
+ # 7. Ask if you want PW restriction
111
+ # 8. Ask for username
112
+ # 9. Ask for password (or Enter to generate)
113
+ # 10. Upload .htaccess
114
+ # 11. Upload .htpasswd
115
+
116
+ # 3. If it does
117
+ # 4. Output available users & ip's with access?
118
+
119
+
120
+ # AuthName "DNB Referentiesite"
121
+ # AuthType Basic
122
+ # AuthUserFile /home/users/entopic/vhome/entopic.com/dnb-referentie/.htpasswd
123
+ # Require valid-user
124
+ # Order deny,allow
125
+ # Deny from all
126
+ # Allow from 31.223.173.138 # Kantoor DP
127
+ # Satisfy Any
128
+
129
+ # <FilesMatch "\.(htaccess|htpasswd)$">
130
+ # Order Allow,Deny
131
+ # Deny from all
132
+ # </FilesMatch>
133
+
data/lib/roger/release.rb CHANGED
@@ -2,45 +2,45 @@ require File.dirname(__FILE__) + "/cli"
2
2
 
3
3
  module Roger
4
4
  class Release
5
-
5
+
6
6
  attr_reader :config, :project
7
-
7
+
8
8
  attr_reader :finalizers, :injections, :stack, :cleanups
9
-
9
+
10
10
  class << self
11
-
11
+
12
12
  def default_stack
13
13
  []
14
- end
15
-
14
+ end
15
+
16
16
  def default_finalizers
17
17
  [[self.get_callable(:dir, Roger::Release::Finalizers.map), {}]]
18
18
  end
19
-
20
- # Makes callable into a object that responds to call.
19
+
20
+ # Makes callable into a object that responds to call.
21
21
  #
22
22
  # @param [#call, Symbol, Class] callable If callable already responds to #call will just return callable, a Symbol will be searched for in the scope parameter, a class will be instantiated (and checked if it will respond to #call)
23
23
  # @param [Hash] map, Mapping to match symbol to a callable
24
24
  def get_callable(callable, map)
25
25
  return callable if callable.respond_to?(:call)
26
-
26
+
27
27
  if callable.kind_of?(Symbol) && map.has_key?(callable)
28
28
  callable = map[callable]
29
29
  end
30
-
30
+
31
31
  if callable.kind_of?(Class)
32
32
  callable = callable.new
33
33
  end
34
-
34
+
35
35
  if callable.respond_to?(:call)
36
36
  callable
37
37
  else
38
38
  raise ArgumentError, "Could not resolve #{callable.inspect}. Callable must be an object that responds to #call or a symbol that resolve to such an object or a class with a #call instance method."
39
39
  end
40
-
40
+
41
41
  end
42
42
  end
43
-
43
+
44
44
  # @option config [Symbol] :scm The SCM to use (default = :git)
45
45
  # @option config [String, Pathname] :target_path The path/directory to put the release into
46
46
  # @option config [String, Pathname]:build_path Temporary path used to build the release
@@ -53,13 +53,13 @@ module Roger
53
53
  :build_path => Pathname.new(Dir.pwd) + "build",
54
54
  :cleanup_build => true
55
55
  }
56
-
56
+
57
57
  @config = {}.update(defaults).update(config)
58
58
  @project = project
59
59
  @stack = []
60
60
  @finalizers = []
61
61
  end
62
-
62
+
63
63
  # Accessor for target_path
64
64
  # The target_path is the path where the finalizers will put the release
65
65
  #
@@ -67,15 +67,15 @@ module Roger
67
67
  def target_path
68
68
  Pathname.new(self.config[:target_path])
69
69
  end
70
-
70
+
71
71
  # Accessor for build_path
72
72
  # The build_path is a temporary directory where the release will be built
73
73
  #
74
- # @return Pathname the build_path
74
+ # @return Pathname the build_path
75
75
  def build_path
76
- Pathname.new(self.config[:build_path])
76
+ Pathname.new(self.config[:build_path])
77
77
  end
78
-
78
+
79
79
  # Accessor for source_path
80
80
  # The source path is the root of the mockup
81
81
  #
@@ -83,11 +83,11 @@ module Roger
83
83
  def source_path
84
84
  Pathname.new(self.config[:source_path])
85
85
  end
86
-
86
+
87
87
  # Get the current SCM object
88
88
  def scm(force = false)
89
89
  return @_scm if @_scm && !force
90
-
90
+
91
91
  case self.config[:scm]
92
92
  when :git
93
93
  @_scm = Release::Scm::Git.new(:path => self.source_path)
@@ -95,16 +95,16 @@ module Roger
95
95
  raise "Unknown SCM #{options[:scm].inspect}"
96
96
  end
97
97
  end
98
-
98
+
99
99
  # Inject variables into files with an optional filter
100
- #
100
+ #
101
101
  # @examples
102
102
  # release.inject({"VERSION" => release.version, "DATE" => release.date}, :into => %w{_doc/toc.html})
103
- # release.inject({"CHANGELOG" => {:file => "", :filter => BlueCloth}}, :into => %w{_doc/changelog.html})
103
+ # release.inject({"CHANGELOG" => {:file => "", :filter => BlueCloth}}, :into => %w{_doc/changelog.html})
104
104
  def inject(variables, options)
105
105
  @stack << Injector.new(variables, options)
106
106
  end
107
-
107
+
108
108
  # Use a certain pre-processor
109
109
  #
110
110
  # @examples
@@ -112,9 +112,9 @@ module Roger
112
112
  def use(processor, options = {})
113
113
  @stack << [self.class.get_callable(processor, Roger::Release::Processors.map), options]
114
114
  end
115
-
115
+
116
116
  # Write out the whole release into a directory, zip file or anything you can imagine
117
- # #finalize can be called multiple times, it just will run all of them.
117
+ # #finalize can be called multiple times, it just will run all of them.
118
118
  #
119
119
  # The default finalizer is :dir
120
120
  #
@@ -125,7 +125,7 @@ module Roger
125
125
  def finalize(finalizer, options = {})
126
126
  @finalizers << [self.class.get_callable(finalizer, Roger::Release::Finalizers.map), options]
127
127
  end
128
-
128
+
129
129
  # Files to clean up in the build directory just before finalization happens
130
130
  #
131
131
  # @param [String] Pattern to glob within build directory
@@ -135,7 +135,7 @@ module Roger
135
135
  def cleanup(pattern)
136
136
  @stack << Cleaner.new(pattern)
137
137
  end
138
-
138
+
139
139
  # Generates a banner if a block is given, or returns the currently set banner.
140
140
  # It automatically takes care of adding comment marks around the banner.
141
141
  #
@@ -152,7 +152,7 @@ module Roger
152
152
  options = {
153
153
  :comment => :js
154
154
  }.update(options)
155
-
155
+
156
156
  if block_given?
157
157
  @_banner = yield.to_s
158
158
  elsif !@_banner
@@ -167,14 +167,14 @@ module Roger
167
167
  banner << div
168
168
  @_banner = banner.join("\n")
169
169
  end
170
-
170
+
171
171
  if options[:comment]
172
172
  self.comment(@_banner, :style => options[:comment])
173
173
  else
174
174
  @_banner
175
175
  end
176
176
  end
177
-
177
+
178
178
  # Extract the mockup, this will happen anyway, and will always happen first
179
179
  # This method gives you a way to pass options to the extractor.
180
180
  #
@@ -185,28 +185,28 @@ module Roger
185
185
  self.warn(self, "Don't use the extractor anymore, use release.use(:mockup, options) and release.use(:url_relativizer, options) processors")
186
186
  @extractor_options = options
187
187
  end
188
-
188
+
189
189
  # Actually perform the release
190
190
  def run!
191
191
  # Validate paths
192
192
  validate_paths!
193
-
193
+
194
194
  # Extract mockup
195
195
  copy_source_path_to_build_path!
196
-
196
+
197
197
  validate_stack!
198
-
198
+
199
199
  # Run stack
200
200
  run_stack!
201
-
201
+
202
202
  # Run finalizers
203
203
  run_finalizers!
204
-
204
+
205
205
  # Cleanup
206
206
  cleanup! if self.config[:cleanup_build]
207
-
208
- end
209
-
207
+
208
+ end
209
+
210
210
  # Write out a log message
211
211
  def log(part, msg, verbose = false, &block)
212
212
  if !verbose || verbose && self.project.options[:verbose]
@@ -221,17 +221,17 @@ module Roger
221
221
  end
222
222
  end
223
223
  end
224
-
224
+
225
225
  def debug(part, msg, &block)
226
226
  self.log(part, msg, true, &block)
227
227
  end
228
-
228
+
229
229
  # Write out a warning message
230
230
  def warn(part, msg)
231
231
  self.project.shell.say "\033[37m#{part.class.to_s}\033[0m" + " : " + "\033[31m#{msg.to_s}\033[0m", nil, true
232
232
  end
233
-
234
-
233
+
234
+
235
235
  # @param [Array] globs an array of file path globs that will be globbed against the build_path
236
236
  # @param [Array] excludes an array of regexps that will be excluded from the result
237
237
  def get_files(globs, excludes = [])
@@ -242,13 +242,13 @@ module Roger
242
242
  files
243
243
  end
244
244
  end
245
-
245
+
246
246
  protected
247
-
247
+
248
248
  # ==============
249
249
  # = The runway =
250
250
  # ==============
251
-
251
+
252
252
  # Checks if build path exists (and cleans it up)
253
253
  # Checks if target path exists (if not, creates it)
254
254
  def validate_paths!
@@ -256,17 +256,17 @@ module Roger
256
256
  log self, "Cleaning up previous build \"#{self.build_path}\""
257
257
  rm_rf(self.build_path)
258
258
  end
259
-
259
+
260
260
  if !self.target_path.exist?
261
261
  log self, "Creating target path \"#{self.target_path}\""
262
262
  mkdir self.target_path
263
263
  end
264
264
  end
265
-
265
+
266
266
  # Checks if deprecated extractor options have been set
267
267
  # Checks if the mockup will be runned
268
268
  def validate_stack!
269
-
269
+
270
270
  mockup_options = {}
271
271
  relativizer_options = {}
272
272
  run_relativizer = true
@@ -275,21 +275,24 @@ module Roger
275
275
  relativizer_options = {:url_attributes => @extractor_options[:url_attributes]}
276
276
  run_relativizer = @extractor_options[:url_relativize]
277
277
  end
278
-
278
+
279
279
  unless @stack.find{|(processor, options)| processor.class == Roger::Release::Processors::Mockup }
280
- @stack.unshift([Roger::Release::Processors::UrlRelativizer.new, relativizer_options])
281
280
  @stack.unshift([Roger::Release::Processors::Mockup.new, mockup_options])
282
281
  end
282
+
283
+ unless @stack.find{|(processor, options)| processor.class == Roger::Release::Processors::UrlRelativizer }
284
+ @stack.push([Roger::Release::Processors::UrlRelativizer.new, relativizer_options])
285
+ end
283
286
  end
284
-
287
+
285
288
  def copy_source_path_to_build_path!
286
289
  mkdir(self.build_path)
287
290
  cp_r(self.source_path.children, self.build_path)
288
291
  end
289
-
292
+
290
293
  def run_stack!
291
294
  @stack = self.class.default_stack.dup if @stack.empty?
292
-
295
+
293
296
  # call all objects in @stack
294
297
  @stack.each do |task|
295
298
  if (task.kind_of?(Array))
@@ -302,19 +305,19 @@ module Roger
302
305
 
303
306
  def run_finalizers!
304
307
  @finalizers = self.class.default_finalizers.dup if @finalizers.empty?
305
-
308
+
306
309
  # call all objects in @finalizes
307
310
  @finalizers.each do |finalizer|
308
311
  finalizer[0].call(self, finalizer[1])
309
312
  end
310
313
 
311
314
  end
312
-
315
+
313
316
  def cleanup!
314
317
  log(self, "Cleaning up build path #{self.build_path}")
315
318
  rm_rf(self.build_path)
316
319
  end
317
-
320
+
318
321
  # @param [String] string The string to comment
319
322
  #
320
323
  # @option options [:html, :css, :js] :style The comment style to use (default=:js, which is the same as :css)
@@ -324,15 +327,15 @@ module Roger
324
327
  :style => :css,
325
328
  :per_line => true
326
329
  }.update(options)
327
-
330
+
328
331
  commenters = {
329
332
  :html => Proc.new{|s| "<!-- #{s} -->" },
330
333
  :css => Proc.new{|s| "/*! #{s} */" },
331
- :js => Proc.new{|s| "/*! #{s} */" }
334
+ :js => Proc.new{|s| "/*! #{s} */" }
332
335
  }
333
-
336
+
334
337
  commenter = commenters[options[:style]] || commenters[:js]
335
-
338
+
336
339
  if options[:per_line]
337
340
  string = string.split(/\r?\n/)
338
341
  string.map{|s| commenter.call(s) }.join("\n")
data/roger.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "roger"
5
- s.version = "0.12.4"
5
+ s.version = "0.12.5"
6
6
 
7
7
  s.authors = ["Flurin Egger", "Edwin van der Graaf", "Joran Kapteijns"]
8
8
  s.email = ["info@digitpaint.nl", "flurin@digitpaint.nl"]
@@ -33,4 +33,5 @@ Gem::Specification.new do |s|
33
33
  s.add_dependency("redcarpet", [">= 3.1.1"])
34
34
 
35
35
  s.add_development_dependency("test-unit", "~> 2.5.5")
36
+ s.add_development_dependency("mocha", "~> 1.1.0")
36
37
  end
@@ -7,6 +7,12 @@ mockup.project.partial_path = [mockup.project.path + "partials", mockup.project.
7
7
  mockup.serve do |s|
8
8
  end
9
9
 
10
+ mockup.test do |t|
11
+
12
+ t.use :jshint
13
+
14
+ end
15
+
10
16
  mockup.release do |r|
11
17
  r.use :mockup
12
18
  r.use :url_relativizer, :skip => [/non-relative.*/]
@@ -0,0 +1,51 @@
1
+ require "./lib/roger/release/finalizers/git_branch.rb"
2
+ require "test/unit"
3
+ require "mocha/test_unit"
4
+ require "tmpdir"
5
+
6
+ class GitBranchTest < Test::Unit::TestCase
7
+ def setup
8
+ # Mock git repo
9
+ @tmp_dir = Pathname.new(Dir.mktmpdir)
10
+ mock_repo_path = @tmp_dir + "mock_repo"
11
+ FileUtils.mkdir(mock_repo_path)
12
+ Dir.chdir(mock_repo_path) do
13
+ `git init`
14
+ `mkdir releases`
15
+ `touch releases/index.html`
16
+ end
17
+
18
+ # Mock release object
19
+ @release_mock = stub(project: stub(path: mock_repo_path))
20
+
21
+ @release_mock.stubs(
22
+ scm: stub(version: "0.1.999"),
23
+ log: true,
24
+ build_path: mock_repo_path.to_s + "/releases"
25
+ )
26
+ end
27
+
28
+ # called after every single test
29
+ def teardown
30
+ FileUtils.rm_rf(@tmp_dir)
31
+ @release_mock = nil
32
+ end
33
+
34
+ def test_basic_functionality
35
+ git_branch_finalizers = Roger::Release::Finalizers::GitBranch.new
36
+
37
+ output_dir = git_branch_finalizers.call(
38
+ @release_mock,
39
+ remote: "http://we.aint.go/nna.push.git",
40
+ push: false,
41
+ cleanup: false
42
+ )
43
+
44
+ Dir.chdir(output_dir + "clone") do
45
+ commit_msg = `git log --pretty=oneline --abbrev-commit`
46
+ assert_match /Release 0.1.999/, commit_msg
47
+ end
48
+
49
+ FileUtils.rm_rf(output_dir)
50
+ end
51
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.4
4
+ version: 0.12.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Flurin Egger
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-09-27 00:00:00.000000000 Z
13
+ date: 2014-12-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: thor
@@ -110,6 +110,20 @@ dependencies:
110
110
  - - ~>
111
111
  - !ruby/object:Gem::Version
112
112
  version: 2.5.5
113
+ - !ruby/object:Gem::Dependency
114
+ name: mocha
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ~>
118
+ - !ruby/object:Gem::Version
119
+ version: 1.1.0
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ version: 1.1.0
113
127
  description:
114
128
  email:
115
129
  - info@digitpaint.nl
@@ -203,6 +217,7 @@ files:
203
217
  - test/unit/cli_test.rb
204
218
  - test/unit/generators_test.rb
205
219
  - test/unit/release/cleaner_test.rb
220
+ - test/unit/release/finalizers/git_branch_test.rb
206
221
  - test/unit/release/processors_test.rb
207
222
  - test/unit/release_test.rb
208
223
  - test/unit/resolver_test.rb
@@ -228,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
228
243
  version: '0'
229
244
  requirements: []
230
245
  rubyforge_project:
231
- rubygems_version: 2.2.2
246
+ rubygems_version: 2.1.5
232
247
  signing_key:
233
248
  specification_version: 4
234
249
  summary: Roger is a set of tools to create self-containing HTML mockups.
@@ -266,6 +281,7 @@ test_files:
266
281
  - test/unit/cli_test.rb
267
282
  - test/unit/generators_test.rb
268
283
  - test/unit/release/cleaner_test.rb
284
+ - test/unit/release/finalizers/git_branch_test.rb
269
285
  - test/unit/release/processors_test.rb
270
286
  - test/unit/release_test.rb
271
287
  - test/unit/resolver_test.rb