edango 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Copying.txt +679 -0
- data/History.txt +6 -0
- data/Manifest.txt +46 -0
- data/PostInstall.txt +6 -0
- data/README.rdoc +117 -0
- data/Rakefile +21 -0
- data/bin/edango +34 -0
- data/lib/edango.rb +42 -0
- data/lib/edango/context.rb +23 -0
- data/lib/edango/context/directories.rb +67 -0
- data/lib/edango/context/files.rb +37 -0
- data/lib/edango/context/language.rb +101 -0
- data/lib/edango/context/parameters.rb +44 -0
- data/lib/edango/context/services.rb +147 -0
- data/lib/edango/di/container.rb +160 -0
- data/lib/edango/di/helpers.rb +41 -0
- data/lib/edango/di/proxy.rb +54 -0
- data/lib/edango/di/service.rb +60 -0
- data/lib/edango/di/service_factory.rb +40 -0
- data/lib/edango/environment.rb +77 -0
- data/lib/edango/executor.rb +64 -0
- data/lib/edango/helpers/hash.rb +30 -0
- data/lib/edango/helpers/kernel.rb +41 -0
- data/lib/edango/helpers/object.rb +65 -0
- data/lib/edango/helpers/string.rb +29 -0
- data/lib/edango/helpers/symbol.rb +39 -0
- data/lib/edango/logic/ticket_extractor.rb +258 -0
- data/lib/edango/site/core.rb +182 -0
- data/lib/edango/site/public/favicon.ico +0 -0
- data/lib/edango/site/public/images/btn-back-help.png +0 -0
- data/lib/edango/site/public/images/bullet.png +0 -0
- data/lib/edango/site/public/images/ctrl-back.gif +0 -0
- data/lib/edango/site/public/images/frm-back-err.png +0 -0
- data/lib/edango/site/public/images/frm-back-help.png +0 -0
- data/lib/edango/site/public/images/frm-back.png +0 -0
- data/lib/edango/site/public/images/logo.png +0 -0
- data/lib/edango/site/public/scripts/jquery.js +4376 -0
- data/lib/edango/site/public/scripts/jquery.min.js +19 -0
- data/lib/edango/site/public/scripts/logic.js +6 -0
- data/lib/edango/site/public/styles/layout.css +270 -0
- data/lib/edango/site/views/errors.haml +12 -0
- data/lib/edango/site/views/help.haml +10 -0
- data/lib/edango/site/views/index.haml +27 -0
- data/lib/edango/site/views/layout.haml +15 -0
- data/lib/edango/site/views/result.haml +10 -0
- data/lib/edango/starter.rb +141 -0
- metadata +162 -0
@@ -0,0 +1,60 @@
|
|
1
|
+
# EDango - torrent ticket extractor.
|
2
|
+
# Copyright (C) 2010 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of EDango.
|
5
|
+
#
|
6
|
+
# EDango is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# EDango is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with EDango. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
require 'observer'
|
20
|
+
|
21
|
+
module EDango
|
22
|
+
module DI
|
23
|
+
|
24
|
+
class Service
|
25
|
+
include Observable
|
26
|
+
|
27
|
+
attr_reader :definition
|
28
|
+
|
29
|
+
def initialize(definition = nil)
|
30
|
+
@definition = definition || default_definition
|
31
|
+
state_update()
|
32
|
+
end
|
33
|
+
|
34
|
+
def [](key)
|
35
|
+
@definition[key]
|
36
|
+
end
|
37
|
+
|
38
|
+
def []=(key, value)
|
39
|
+
previous_value, @definition[key] = @definition[key], value
|
40
|
+
state_update() if previous_value != value
|
41
|
+
|
42
|
+
value
|
43
|
+
end
|
44
|
+
|
45
|
+
def nil?
|
46
|
+
@definition.nil?
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
def state_update
|
51
|
+
changed(); notify_observers(@definition)
|
52
|
+
end
|
53
|
+
|
54
|
+
def default_definition
|
55
|
+
{:block => nil, :instance => nil, :interfaces => nil, :file => nil}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# EDango - torrent ticket extractor.
|
2
|
+
# Copyright (C) 2010 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of EDango.
|
5
|
+
#
|
6
|
+
# EDango is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# EDango is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with EDango. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
require 'edango/di/service'
|
20
|
+
|
21
|
+
module EDango
|
22
|
+
module DI
|
23
|
+
|
24
|
+
class ServiceFactory
|
25
|
+
def self.service
|
26
|
+
Service.new()
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class DummyServiceFactory < ServiceFactory
|
31
|
+
def self.service
|
32
|
+
service = Service.new()
|
33
|
+
service.definition[:interfaces] = {}
|
34
|
+
|
35
|
+
service
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# EDango - torrent ticket extractor.
|
2
|
+
# Copyright (C) 2010 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of EDango.
|
5
|
+
#
|
6
|
+
# EDango is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# EDango is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with EDango. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
require 'singleton'
|
20
|
+
|
21
|
+
module EDango
|
22
|
+
|
23
|
+
class Environment
|
24
|
+
include Singleton
|
25
|
+
|
26
|
+
attr_reader :arguments
|
27
|
+
|
28
|
+
attr_reader :logger
|
29
|
+
attr_reader :options, :modes, :tasks
|
30
|
+
|
31
|
+
def initialize
|
32
|
+
@arguments = ARGV
|
33
|
+
|
34
|
+
@logger = SERVICES[:logger]
|
35
|
+
|
36
|
+
@options = PARAMETERS[:options]
|
37
|
+
@modes = PARAMETERS[:modes]
|
38
|
+
@tasks = PARAMETERS[:tasks]
|
39
|
+
end
|
40
|
+
|
41
|
+
def log_error(exception, message)
|
42
|
+
@logger.error(message)
|
43
|
+
@logger.error(exception.message)
|
44
|
+
|
45
|
+
unless @modes.nil?
|
46
|
+
@logger.error(exception.backtrace) if @modes[:verbose] or
|
47
|
+
@modes[:debug]
|
48
|
+
end
|
49
|
+
|
50
|
+
GLOBALS[:errors_number] ||= 0
|
51
|
+
GLOBALS[:errors_number] += 1
|
52
|
+
end
|
53
|
+
|
54
|
+
def log_warning(text)
|
55
|
+
@logger.warn(text)
|
56
|
+
end
|
57
|
+
|
58
|
+
def log_message(text)
|
59
|
+
@logger.info(text)
|
60
|
+
end
|
61
|
+
|
62
|
+
def show_message(message, log = false)
|
63
|
+
puts(message) unless @modes[:quiet]
|
64
|
+
log_message(message) if log
|
65
|
+
end
|
66
|
+
|
67
|
+
def state(message)
|
68
|
+
puts(message) if @modes[:verbose]
|
69
|
+
log_message(message)
|
70
|
+
end
|
71
|
+
|
72
|
+
def save_options(*args)
|
73
|
+
PARAMETERS.update(*args)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# EDango - torrent ticket extractor.
|
2
|
+
# Copyright (C) 2010 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of EDango.
|
5
|
+
#
|
6
|
+
# EDango is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# EDango is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with EDango. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
module EDango
|
20
|
+
|
21
|
+
class Executor
|
22
|
+
def initialize
|
23
|
+
@environment = SERVICES[:environment]
|
24
|
+
@tasks = @environment.tasks
|
25
|
+
end
|
26
|
+
|
27
|
+
def run
|
28
|
+
if @tasks[:show_version]
|
29
|
+
output_version()
|
30
|
+
elsif @tasks[:show_help]
|
31
|
+
output_help()
|
32
|
+
else
|
33
|
+
begin
|
34
|
+
fake_stderr SERVICES[:logger] do
|
35
|
+
SERVICES[:core].run!()
|
36
|
+
end
|
37
|
+
rescue Exception => e
|
38
|
+
@environment.log_error(e, 'Core failure')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
def output_help
|
45
|
+
output_version()
|
46
|
+
output_options()
|
47
|
+
end
|
48
|
+
|
49
|
+
def output_version
|
50
|
+
@environment.show_message("#{FULL_NAME} version #{VERSION}")
|
51
|
+
@environment.show_message("#{COPYRIGHT}")
|
52
|
+
end
|
53
|
+
|
54
|
+
def output_options
|
55
|
+
@environment.show_message("Available options: \n\n")
|
56
|
+
@environment.show_message("Usage: #{UNIX_NAME} {[option] [parameter]}")
|
57
|
+
|
58
|
+
SERVICES[:starter].usage.each do |name, options|
|
59
|
+
@environment.show_message("\n\t#{options[2]}\n\t\t#{options[0]}, #{options[1]}")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# EDango - torrent ticket extractor.
|
2
|
+
# Copyright (C) 2010 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of EDango.
|
5
|
+
#
|
6
|
+
# EDango is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# EDango is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with EDango. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
class Hash
|
20
|
+
def intern_keys
|
21
|
+
inject({}) do |result, (key, value)|
|
22
|
+
result[(key.intern() rescue key) || key] = value
|
23
|
+
result
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def intern_keys!
|
28
|
+
self.replace(self.symbolize_keys)
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# EDango - torrent ticket extractor.
|
2
|
+
# Copyright (C) 2010 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of EDango.
|
5
|
+
#
|
6
|
+
# EDango is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# EDango is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with EDango. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
module Kernel
|
20
|
+
def fake_stdout(io, &block)
|
21
|
+
result = io
|
22
|
+
|
23
|
+
$stdout = result
|
24
|
+
yield if block_given?
|
25
|
+
|
26
|
+
return result
|
27
|
+
ensure
|
28
|
+
$stdout = STDOUT
|
29
|
+
end
|
30
|
+
|
31
|
+
def fake_stderr(io, &block)
|
32
|
+
result = io
|
33
|
+
|
34
|
+
$stderr = result
|
35
|
+
yield if block_given?
|
36
|
+
|
37
|
+
return result
|
38
|
+
ensure
|
39
|
+
$stderr = STDERR
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# EDango - torrent ticket extractor.
|
2
|
+
# Copyright (C) 2010 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of EDango.
|
5
|
+
#
|
6
|
+
# EDango is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# EDango is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with EDango. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
class Object
|
20
|
+
def valid?(item, *args, &block)
|
21
|
+
result = item ? true : false
|
22
|
+
|
23
|
+
if result
|
24
|
+
args.each do |object|
|
25
|
+
(result = false; break) unless object
|
26
|
+
end
|
27
|
+
|
28
|
+
yield if block_given?
|
29
|
+
end
|
30
|
+
|
31
|
+
result
|
32
|
+
end
|
33
|
+
|
34
|
+
def try(method_name, *args, &block)
|
35
|
+
send(method_name, *args, &block) if respond_to?(method_name, true)
|
36
|
+
end
|
37
|
+
|
38
|
+
def nil_or_empty?
|
39
|
+
nil? or try(:empty?)
|
40
|
+
end
|
41
|
+
|
42
|
+
unless method_defined?(:instance_exec)
|
43
|
+
|
44
|
+
module InstanceExecHelper; end
|
45
|
+
include InstanceExecHelper
|
46
|
+
|
47
|
+
#noinspection RubyScope,RubyDeadCode
|
48
|
+
def instance_exec(*args, &block)
|
49
|
+
method_name = "__instance_exec_#{Thread.current.object_id.abs}_#{object_id.abs}"
|
50
|
+
|
51
|
+
InstanceExecHelper.module_eval { define_method(method_name, &block) }
|
52
|
+
|
53
|
+
result = nil
|
54
|
+
|
55
|
+
begin
|
56
|
+
result = send(method_name, *args)
|
57
|
+
ensure
|
58
|
+
InstanceExecHelper.module_eval { undef_method(method_name) } rescue nil
|
59
|
+
end
|
60
|
+
|
61
|
+
result
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# EDango - torrent ticket extractor.
|
2
|
+
# Copyright (C) 2010 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of EDango.
|
5
|
+
#
|
6
|
+
# EDango is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# EDango is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with EDango. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
class String
|
20
|
+
def last(limit = 1)
|
21
|
+
if limit == 0
|
22
|
+
''
|
23
|
+
elsif limit >= self.size
|
24
|
+
self
|
25
|
+
else
|
26
|
+
self[(-limit)..-1].to_s()
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# EDango - torrent ticket extractor.
|
2
|
+
# Copyright (C) 2010 Dmitrii Toksaitov
|
3
|
+
#
|
4
|
+
# This file is part of EDango.
|
5
|
+
#
|
6
|
+
# EDango is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# EDango is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with EDango. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
class Symbol
|
20
|
+
def to_instance_name
|
21
|
+
if self.to_s()[0] != ?@
|
22
|
+
"@#{self}".intern()
|
23
|
+
else
|
24
|
+
self
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
unless method_defined?(:to_proc)
|
29
|
+
define_method(:to_proc) do
|
30
|
+
proc { |object, *args| object.send(self, *args) }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
unless method_defined?(:intern)
|
35
|
+
define_method(:intern) do
|
36
|
+
self.to_s().intern()
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|