md5app 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []