md5app 0.0.1

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/README.md ADDED
@@ -0,0 +1,33 @@
1
+ md5app
2
+ ======
3
+
4
+ Сохраняет md5 суммы файлов проекта в дирректорию log/md5app/
5
+
6
+ ### Установка
7
+
8
+ ```ruby
9
+ gem 'md5app'
10
+ ```
11
+
12
+ ### Запуск
13
+
14
+ ```sh
15
+ $ rake md5app:run
16
+ ```
17
+ ### Настройки
18
+
19
+ Есть возможность выборочного игнорирования определенных файлов и дирректорий
20
+ аналогично .gitignore
21
+
22
+ ### Пример .md5ignore
23
+
24
+ ```
25
+ .git
26
+ log
27
+ public/assets
28
+ public/uploads
29
+ tmp
30
+ ```
31
+ ### Запуск по расписанию
32
+
33
+ Рекомендуется использовать [whenewer gem](https://github.com/javan/whenever).
data/lib/md5app.rb ADDED
@@ -0,0 +1,3 @@
1
+ module Md5app
2
+ require "md5app/railtie" if defined?(Rails)
3
+ end
@@ -0,0 +1,46 @@
1
+ require 'digest/md5'
2
+
3
+ module Md5app
4
+ class Md5Dir
5
+ def initialize(root, file=nil)
6
+ @file = file || STDOUT
7
+ @root = File.absolute_path(root)
8
+ unless File.exists?("#{@root}/.md5ignore")
9
+ @skip_paths = []
10
+ else
11
+ @skip_paths = File.new("#{@root}/.md5ignore").readlines.map do |line|
12
+ line = line[/\A#/] ? nil : line.chomp.strip
13
+ line = line && line.empty? ? nil : line
14
+ line
15
+ end.compact
16
+ end
17
+ end
18
+
19
+ def build_tree
20
+ recursive(@root)
21
+ end
22
+
23
+ def recursive(dir, depth=0)
24
+ Dir.chdir(dir) do
25
+ Dir.entries(Dir.pwd).sort.each do |entry|
26
+ next if ['.', '..'].include?(entry)
27
+
28
+ skip = false
29
+ @skip_paths.each do |mask|
30
+ skip = File.fnmatch("#{@root}/#{mask}", File.absolute_path(entry))
31
+ break if skip
32
+ end
33
+ next if skip
34
+
35
+ if File.file?(entry)
36
+ @file.print Digest::MD5.hexdigest(File.read(entry)), ' ', File.absolute_path(entry), "\n"
37
+ end
38
+
39
+ if File.directory?(entry) && !File.symlink?(entry)
40
+ recursive(entry, depth + 1)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,10 @@
1
+ require 'rails'
2
+
3
+ module Md5app
4
+ class Railtie < Rails::Railtie
5
+ rake_tasks do
6
+ require 'md5app/md5_dir'
7
+ load 'md5app/tasks/run.rake'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ namespace :md5app do
2
+ task :run do
3
+ Dir.mkdir('log') unless Dir.exists?('log')
4
+ Dir.mkdir('log/md5app') unless Dir.exists?('log/md5app')
5
+ file = File.new("log/md5app/#{Time.now.strftime("%Y%m%d%H%M%S")}.log", 'w+')
6
+ Md5app::Md5Dir.new(Rails.root.to_s, file).build_tree
7
+ file.close
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: md5app
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Alexander Kiseliov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-16 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Logs md5 sum of project files
15
+ email: aakiselev@at-consulting.ru
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - README.md
21
+ - lib/md5app/tasks/run.rake
22
+ - lib/md5app/md5_dir.rb
23
+ - lib/md5app/railtie.rb
24
+ - lib/md5app.rb
25
+ homepage: https://github.com/at-consulting/md5app
26
+ licenses: []
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ none: false
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ none: false
43
+ requirements: []
44
+ rubyforge_project:
45
+ rubygems_version: 1.8.24
46
+ signing_key:
47
+ specification_version: 3
48
+ summary: md5app
49
+ test_files: []