mines 0.0.1.alpha → 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/bin/mines +55 -2
- data/lib/application.rb +40 -0
- data/lib/configuration.rb +43 -0
- data/lib/generators/application.rb +31 -7
- data/lib/generators/miner.rb +38 -0
- data/lib/generators/templates/application_config.erb +19 -0
- data/lib/generators/templates/process_miner.erb +7 -0
- data/lib/help.rb +10 -0
- data/lib/logging.rb +69 -0
- data/lib/mines.rb +8 -0
- data/lib/redis_store.rb +135 -0
- data/lib/utilities.rb +111 -0
- metadata +129 -6
data/bin/mines
CHANGED
@@ -2,16 +2,69 @@
|
|
2
2
|
# coding: utf-8
|
3
3
|
|
4
4
|
require 'thor'
|
5
|
-
require_relative '../lib/
|
5
|
+
require_relative '../lib/utilities'
|
6
|
+
require_relative '../lib/logging'
|
7
|
+
require_relative '../lib/mines'
|
8
|
+
|
9
|
+
# require all generators in lib
|
10
|
+
mines_root = File.expand_path(File.dirname(__FILE__)+'/..')
|
11
|
+
Dir[mines_root+'/lib/generators/*.rb'].each {|file| require file }
|
12
|
+
|
6
13
|
module Mines
|
14
|
+
|
15
|
+
# The mines executable. It subclasses Thor and
|
16
|
+
# invocates generators according to parameters
|
7
17
|
class Cli < Thor
|
18
|
+
|
19
|
+
include Logging
|
20
|
+
|
21
|
+
def initialize *args
|
22
|
+
super
|
23
|
+
end
|
24
|
+
|
25
|
+
|
8
26
|
desc "new APP_NAME", "Create Application APP_NAME"
|
27
|
+
# Define the 'new' action. Invocate the new generator
|
28
|
+
# @param name The name of the new application
|
9
29
|
def new(name)
|
10
|
-
puts "Create App #{name}"
|
11
30
|
ARGV.shift
|
31
|
+
log.debug "command 'new' with arguments: #{ARGV.join(', ')}"
|
12
32
|
Generator::Application.start ARGV
|
13
33
|
end
|
34
|
+
|
35
|
+
# help
|
36
|
+
def help *args
|
37
|
+
if args.empty?
|
38
|
+
log.debug "command 'help' with no arguments"
|
39
|
+
else
|
40
|
+
log.debug "command 'help' with arguments: #{args.join(', ').to_s}"
|
41
|
+
end
|
42
|
+
puts "Summary:"
|
43
|
+
super
|
44
|
+
puts "Now print my help :)\nYeah!"
|
45
|
+
end
|
46
|
+
|
47
|
+
# generate
|
48
|
+
desc "generate [twitter|network|process|metrics] NAME", "Create a twitter or network or process or metrics miner"
|
49
|
+
#method_option :evented, :type => :boolean, :default => false
|
50
|
+
# generate a miner
|
51
|
+
def generate(type,name)
|
52
|
+
Mines.mines_app_check #TODO Test
|
53
|
+
types = %w{twitter network process metrics}
|
54
|
+
unless types.include? type
|
55
|
+
puts "The type of the miner could be either twitter or network or process or metrics"
|
56
|
+
puts "you typed: #{type}"
|
57
|
+
exit 0
|
58
|
+
end
|
59
|
+
puts "Generate a #{type} miner with name: #{name}"
|
60
|
+
|
61
|
+
Generator::Miner.start [type, name]
|
62
|
+
end
|
14
63
|
end
|
15
64
|
end
|
16
65
|
|
66
|
+
# Check if 'mines' is invoked in the root directory of a Mines App
|
67
|
+
#Mines.mines_app_check #TODO This code can not be here
|
68
|
+
|
69
|
+
# Start client
|
17
70
|
Mines::Cli.start ARGV
|
data/lib/application.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# This module is providing the configuration DSL
|
4
|
+
module Application
|
5
|
+
# we don't want to instantiate this class - it's a singleton,
|
6
|
+
# so just keep it as a self-extended module
|
7
|
+
extend self
|
8
|
+
|
9
|
+
# Appdata provides a basic single-method DSL with .parameter method
|
10
|
+
# being used to define a set of available settings.
|
11
|
+
# This method takes one or more symbols, with each one being
|
12
|
+
# a name of the configuration option.
|
13
|
+
def parameter(*names)
|
14
|
+
names.each do |name|
|
15
|
+
attr_accessor name
|
16
|
+
|
17
|
+
# For each given symbol we generate accessor method that sets option's
|
18
|
+
# value being called with an argument, or returns option's current value
|
19
|
+
# when called without arguments
|
20
|
+
define_method name do |*values|
|
21
|
+
value = values.first
|
22
|
+
value ? self.send("#{name}=", value) : instance_variable_get("@#{name}")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# And we define a wrapper for the configuration block, that we'll use to set up
|
28
|
+
# our set of options
|
29
|
+
def config(&block)
|
30
|
+
instance_eval &block
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
require_relative '../config/application'
|
35
|
+
|
36
|
+
begin
|
37
|
+
require './config/application'
|
38
|
+
rescue
|
39
|
+
puts red "Warning: Configuration file ./config/application.rb is missing"
|
40
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# This module is providing the configuration DSL
|
4
|
+
module Application
|
5
|
+
# we don't want to instantiate this class - it's a singleton,
|
6
|
+
# so just keep it as a self-extended module
|
7
|
+
extend self
|
8
|
+
|
9
|
+
# Appdata provides a basic single-method DSL with .parameter method
|
10
|
+
# being used to define a set of available settings.
|
11
|
+
# This method takes one or more symbols, with each one being
|
12
|
+
# a name of the configuration option.
|
13
|
+
def parameter(*names)
|
14
|
+
names.each do |name|
|
15
|
+
attr_accessor name
|
16
|
+
|
17
|
+
# For each given symbol we generate accessor method that sets option's
|
18
|
+
# value being called with an argument, or returns option's current value
|
19
|
+
# when called without arguments
|
20
|
+
define_method name do |*values|
|
21
|
+
value = values.first
|
22
|
+
value ? self.send("#{name}=", value) : instance_variable_get("@#{name}")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# And we define a wrapper for the configuration block, that we'll use to set up
|
28
|
+
# our set of options
|
29
|
+
def config(&block)
|
30
|
+
instance_eval &block
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
# Load default configuration
|
36
|
+
require_relative '../config/application'
|
37
|
+
|
38
|
+
# Load user's configuration
|
39
|
+
begin
|
40
|
+
require './config/application'
|
41
|
+
rescue Exception
|
42
|
+
puts red "Warning: Configuration file ./config/application.rb is missing"
|
43
|
+
end
|
@@ -1,25 +1,49 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
3
|
require 'thor'
|
4
|
-
|
4
|
+
require 'colored'
|
5
|
+
require_relative '../logging'
|
6
|
+
|
7
|
+
# The Generator module is the namespace of all generators
|
8
|
+
# Namely:
|
9
|
+
# - Application
|
10
|
+
# - Miner
|
11
|
+
module Mines::Generator
|
12
|
+
|
13
|
+
# Application Generator creates the default file structure.
|
14
|
+
# Accepts as an argument the name of the new application. A new directory with this name will be created
|
5
15
|
class Application < Thor::Group
|
6
16
|
include Thor::Actions
|
17
|
+
include Mines::Logging
|
7
18
|
|
8
|
-
desc "new APP_NAME"
|
9
|
-
|
10
19
|
# Define arguments and options
|
11
20
|
argument :name
|
12
|
-
|
21
|
+
|
22
|
+
# This is needed by thor. Returns the source root directory.
|
13
23
|
def self.source_root
|
14
24
|
File.dirname(__FILE__)
|
15
|
-
puts File.dirname(__FILE__)
|
16
25
|
end
|
17
26
|
|
27
|
+
# Create the default directory structure
|
28
|
+
# - Directories: miners, lib, log, config
|
29
|
+
# - Files: TODO
|
30
|
+
# also prints appropriate messages
|
18
31
|
def create_directory_structure
|
32
|
+
log.info "Creating directory structure in dir: " + name
|
19
33
|
empty_directory name
|
20
34
|
empty_directory name + "/miners"
|
21
35
|
empty_directory name + "/lib"
|
22
36
|
empty_directory name + "/log"
|
37
|
+
empty_directory name + "/config"
|
38
|
+
template "templates/application_config.erb", "#{name}/config/application.rb"
|
39
|
+
puts "Application created successfully! ".green
|
40
|
+
print "Type "
|
41
|
+
print "'cd #{name}' ".yellow
|
42
|
+
print "to go to the applications root directory, and then "
|
43
|
+
print "'mines help' ".yellow
|
44
|
+
puts "to see all available commands and options."
|
23
45
|
end
|
24
|
-
|
25
|
-
end
|
46
|
+
|
47
|
+
end # class
|
48
|
+
|
49
|
+
end # module
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'thor'
|
4
|
+
require_relative '../logging'
|
5
|
+
|
6
|
+
module Mines::Generator
|
7
|
+
|
8
|
+
# Miner Generator generates files with boilerblate code
|
9
|
+
# in the miners directory. According to arguments it generates the
|
10
|
+
# following types of miners:
|
11
|
+
# - Network
|
12
|
+
# - Process
|
13
|
+
# - Metrics
|
14
|
+
class Miner < Thor::Group
|
15
|
+
include Thor::Actions
|
16
|
+
include Mines::Logging
|
17
|
+
|
18
|
+
# Define arguments and options
|
19
|
+
argument :type, :desc => "The type of the miner, [Network,Process,Metrics]", :required => true
|
20
|
+
argument :name, :desc => "The name of the miner", :required => true
|
21
|
+
#class_option :evented, :type => :boolean, :default => false, :lazy_default => true
|
22
|
+
|
23
|
+
# Define the source template root
|
24
|
+
def self.source_root
|
25
|
+
File.dirname(__FILE__)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Use the appropriate template file according to type
|
29
|
+
# and put the generated file in miners directory
|
30
|
+
def create_miner_file
|
31
|
+
puts "Copy miner template"
|
32
|
+
#puts options[:evented]
|
33
|
+
template "templates/#{type}_miner.erb", "miners/#{name}.rb"
|
34
|
+
end
|
35
|
+
|
36
|
+
end # class
|
37
|
+
|
38
|
+
end # module
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
## Configuration file for your app
|
3
|
+
|
4
|
+
## Declare the configuration parameters you want to use
|
5
|
+
Application.config do
|
6
|
+
parameter :var1
|
7
|
+
parameter :var2
|
8
|
+
parameter :var3
|
9
|
+
end
|
10
|
+
|
11
|
+
## Change their values
|
12
|
+
Application.config do
|
13
|
+
var1 "value"
|
14
|
+
var2 ['one','two','three']
|
15
|
+
var3 { :one=>1, :two=>2 }
|
16
|
+
end
|
17
|
+
|
18
|
+
## Usage example
|
19
|
+
# puts Application.var1
|
data/lib/help.rb
ADDED
data/lib/logging.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
# Configuration
|
6
|
+
require_relative 'configuration'
|
7
|
+
|
8
|
+
#require_relative 'application' # needed by config/application
|
9
|
+
|
10
|
+
# ./config/application may not have been created yet
|
11
|
+
#begin
|
12
|
+
# require './config/application'
|
13
|
+
#rescue Exception => e
|
14
|
+
# require_relative '../config/application'
|
15
|
+
#end
|
16
|
+
|
17
|
+
unless defined?(Application.logname).nil?
|
18
|
+
@log ||= Logger.new "log/#{Application.logname}"
|
19
|
+
else
|
20
|
+
@log ||= Logger.new 'log/mines.log'
|
21
|
+
end
|
22
|
+
|
23
|
+
@log.datetime_format= "%H:%M:%S"
|
24
|
+
@log.formatter = proc do |severity, datetime, progname, msg|
|
25
|
+
"#{severity} #{datetime} #{msg}\n"
|
26
|
+
end
|
27
|
+
|
28
|
+
def log_name name
|
29
|
+
@log ||= Logger.new 'log/#{name}.log'
|
30
|
+
@log.datetime_format= "%H:%M:%S"
|
31
|
+
@log.formatter = proc do |severity, datetime, progname, msg|
|
32
|
+
"#{severity} #{datetime} #{msg}\n"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
=begin
|
37
|
+
|
38
|
+
module Mines
|
39
|
+
|
40
|
+
# Use this module by including it in a class,
|
41
|
+
# it defines the log method that instantiates a logger if it does not already exist
|
42
|
+
# Reads the global configuration for options
|
43
|
+
module Logging
|
44
|
+
|
45
|
+
# instantiates a logger if it does not already exist or
|
46
|
+
# it returns the existing logger
|
47
|
+
def log
|
48
|
+
if defined?(@log).nil?
|
49
|
+
log_device = ""
|
50
|
+
if not defined?(Application.log).nil?
|
51
|
+
log_device = Application.log
|
52
|
+
elsif Dir.exists?('log')
|
53
|
+
log_device ='log/mines.log'
|
54
|
+
else
|
55
|
+
log_device = STDOUT
|
56
|
+
end
|
57
|
+
@log = Logger.new log_device
|
58
|
+
@log.datetime_format= "%H:%M:%S"
|
59
|
+
@log.formatter = proc do |severity, datetime, progname, msg|
|
60
|
+
"#{msg}\n".yellow
|
61
|
+
end
|
62
|
+
end
|
63
|
+
@log
|
64
|
+
end # end def
|
65
|
+
end # end module
|
66
|
+
end # end module
|
67
|
+
|
68
|
+
=end
|
69
|
+
|
data/lib/mines.rb
ADDED
data/lib/redis_store.rb
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'redis'
|
4
|
+
require 'hiredis'
|
5
|
+
|
6
|
+
def keygen
|
7
|
+
Time.now.strftime("ts:%Y:%m:%d:%H:%M")
|
8
|
+
end
|
9
|
+
|
10
|
+
class RedisConnection
|
11
|
+
attr_reader :redis
|
12
|
+
def initialize *args
|
13
|
+
#@key= key
|
14
|
+
$redis ||= Redis.new(:path => "/tmp/redis.sock",:driver => :hiredis)
|
15
|
+
@redis = $redis
|
16
|
+
# puts "Connected to Redis"
|
17
|
+
end # end initialize
|
18
|
+
|
19
|
+
def counters
|
20
|
+
@redis.hgetall "counters"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class MessageQueue < RedisConnection
|
25
|
+
attr_reader :key
|
26
|
+
|
27
|
+
def initialize key
|
28
|
+
@key = key
|
29
|
+
super
|
30
|
+
end
|
31
|
+
|
32
|
+
def pop()
|
33
|
+
@redis.blpop(@key)[1]
|
34
|
+
end # end pop
|
35
|
+
|
36
|
+
def push(item)
|
37
|
+
redis.pipelined do
|
38
|
+
@redis.hincrby "counters", @key, 1
|
39
|
+
#@redis.hincrby "ts:counters", keygen+"_count", 1
|
40
|
+
@redis.rpush(@key, item )
|
41
|
+
end
|
42
|
+
end # end push
|
43
|
+
|
44
|
+
def del
|
45
|
+
@redis.del @key
|
46
|
+
end
|
47
|
+
|
48
|
+
def size
|
49
|
+
@redis.llen @key
|
50
|
+
end
|
51
|
+
|
52
|
+
def info
|
53
|
+
out = "items in list:".ljust(25) + size.to_s + "\n"
|
54
|
+
out += "number of keys:".ljust(25) + @redis.dbsize.to_s + "\n"
|
55
|
+
%w{ used_memory_human used_memory_peak_human total_commands_processed}.each do |w|
|
56
|
+
out += "#{w.gsub("_", " ")}:".ljust(25)
|
57
|
+
out += @redis.info[w]
|
58
|
+
out += "\n"
|
59
|
+
end
|
60
|
+
return out
|
61
|
+
end
|
62
|
+
|
63
|
+
def to_s
|
64
|
+
@key
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
class ObjectQueue < MessageQueue
|
71
|
+
|
72
|
+
def pop()
|
73
|
+
Marshal.load(@redis.blpop(@key)[1])
|
74
|
+
end # end pop
|
75
|
+
|
76
|
+
def push(item)
|
77
|
+
redis.pipelined do
|
78
|
+
@redis.hincrby "counters", @key, 1
|
79
|
+
#@redis.incr(@key+"_count")
|
80
|
+
#@redis.incr(keygen+"_count")
|
81
|
+
@redis.rpush(@key, Marshal.dump(item) )
|
82
|
+
end
|
83
|
+
end # end push
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
class Counter < RedisConnection
|
88
|
+
attr_reader :key
|
89
|
+
|
90
|
+
def initialize key
|
91
|
+
@key = key
|
92
|
+
super
|
93
|
+
end
|
94
|
+
|
95
|
+
def incr
|
96
|
+
@redis.hincrby "counters", @key, 1
|
97
|
+
end
|
98
|
+
|
99
|
+
def del
|
100
|
+
@redis.hdel "counters", @key
|
101
|
+
end
|
102
|
+
|
103
|
+
def to_s
|
104
|
+
@redis.hget "counters", @key
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
class MessageChannel < RedisConnection
|
109
|
+
attr_reader :channel
|
110
|
+
|
111
|
+
def initialize channel
|
112
|
+
@channel = channel
|
113
|
+
super
|
114
|
+
end
|
115
|
+
|
116
|
+
def subscribe &proc
|
117
|
+
@redis.subscribe @channel do |on|
|
118
|
+
on.message &proc
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def publish message
|
123
|
+
redis.pipelined do
|
124
|
+
@redis.hincrby "counters", @channel, 1
|
125
|
+
#@redis.hincrby "ts:counters", keygen+"_count", 1
|
126
|
+
@redis.publish(@channel, message )
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def to_s
|
131
|
+
@channel
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
|
data/lib/utilities.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'colored'
|
4
|
+
|
5
|
+
def green(text); "\033[32m#{text}\033[0m" end
|
6
|
+
def blue(text); "\033[34m#{text}\033[0m" end
|
7
|
+
def red(text); "\033[31m#{text}\033[0m" end
|
8
|
+
def yellow(text); "\033[33m#{text}\033[0m" end
|
9
|
+
|
10
|
+
module Mines
|
11
|
+
extend self
|
12
|
+
|
13
|
+
# Check if mines is executed inside a mines application directory
|
14
|
+
def in_app_root?
|
15
|
+
# simply check if basic dirs exist
|
16
|
+
%w{ miners lib log config config/application.rb}.each do |file|
|
17
|
+
return false if not File.exists?(file)
|
18
|
+
end
|
19
|
+
return true
|
20
|
+
end
|
21
|
+
|
22
|
+
# Exit if mines is invokated outside application root
|
23
|
+
def mines_app_check
|
24
|
+
if not in_app_root?
|
25
|
+
print "It seems your current directory: "
|
26
|
+
puts File.expand_path('.').yellow
|
27
|
+
puts "does not contains a Mines application."
|
28
|
+
puts "You can create one by invoking: " + "mines new APPNAME".blue.bold
|
29
|
+
exit 0
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
module Mines
|
36
|
+
extend self
|
37
|
+
|
38
|
+
# Examines if a gem axists
|
39
|
+
#
|
40
|
+
# @param gem [String] the gem's name
|
41
|
+
# @return [Boolean] If gem exists or not
|
42
|
+
def gem_exists? gem
|
43
|
+
! Gem::Specification.find_all_by_name(gem).empty?
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
def print_tweet(user, text)
|
49
|
+
width = Integer(`tput cols`) - 18
|
50
|
+
sum = 0
|
51
|
+
print user.center(16).blue.bold
|
52
|
+
text.split.each do |word|
|
53
|
+
if (sum + word.size >= width)
|
54
|
+
puts ""
|
55
|
+
print "".ljust 16
|
56
|
+
sum=0
|
57
|
+
end
|
58
|
+
sum+=word.size+1
|
59
|
+
if word.include?("http")
|
60
|
+
print word.cyan.underline
|
61
|
+
elsif word.start_with? "@"
|
62
|
+
print word.blue.bold
|
63
|
+
elsif word.start_with? "#"
|
64
|
+
print yellow word
|
65
|
+
else
|
66
|
+
print word
|
67
|
+
end
|
68
|
+
print " "
|
69
|
+
end
|
70
|
+
puts ""
|
71
|
+
end
|
72
|
+
|
73
|
+
# TODO Is this still needed?
|
74
|
+
def ago_time(time)
|
75
|
+
ago = Time.now - time
|
76
|
+
if ago < 3600
|
77
|
+
return "#{ago.div(1)} minutes ago"
|
78
|
+
elsif ago < 3600 * 12
|
79
|
+
return "#{ago.div(3600)} hours ago"
|
80
|
+
elsif ago < 3600 * 24
|
81
|
+
return "Yesterday"
|
82
|
+
elsif ago < 3600 * 24 * 7
|
83
|
+
return "#{time.strftime('%A')}"
|
84
|
+
else
|
85
|
+
return "#{time.strftime('%A %-d %B %Y')}"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
module Mines
|
90
|
+
module Utilities
|
91
|
+
extend self
|
92
|
+
|
93
|
+
def print_command(command, text)
|
94
|
+
width = Integer(`tput cols`) - 22
|
95
|
+
sum = 0
|
96
|
+
print " "+command.ljust(20).blue.bold
|
97
|
+
text.split.each do |word|
|
98
|
+
if (sum + word.size >= width)
|
99
|
+
puts ""
|
100
|
+
print "".ljust 22
|
101
|
+
sum=0
|
102
|
+
end
|
103
|
+
sum+=word.size+1
|
104
|
+
print " "
|
105
|
+
print word
|
106
|
+
end # end text.split
|
107
|
+
puts ""
|
108
|
+
end # end def
|
109
|
+
|
110
|
+
end # end module
|
111
|
+
end # end module
|
metadata
CHANGED
@@ -1,16 +1,64 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mines
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Panayiotis Vlantis
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-09-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.3'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: minitest
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
14
62
|
- !ruby/object:Gem::Dependency
|
15
63
|
name: thor
|
16
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -27,6 +75,70 @@ dependencies:
|
|
27
75
|
- - ! '>='
|
28
76
|
- !ruby/object:Gem::Version
|
29
77
|
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: colored
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: redis
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: hiredis
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: twitter
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
30
142
|
description: Ruby in Mines is a framework for creating data mining application prototypes
|
31
143
|
that focus on processing near real-time human generated content.
|
32
144
|
email: p.vlantis@di.uoa.gr
|
@@ -35,9 +147,19 @@ executables:
|
|
35
147
|
extensions: []
|
36
148
|
extra_rdoc_files: []
|
37
149
|
files:
|
150
|
+
- lib/logging.rb
|
151
|
+
- lib/utilities.rb
|
152
|
+
- lib/mines.rb
|
153
|
+
- lib/redis_store.rb
|
154
|
+
- lib/help.rb
|
155
|
+
- lib/application.rb
|
156
|
+
- lib/configuration.rb
|
38
157
|
- lib/generators/application.rb
|
158
|
+
- lib/generators/miner.rb
|
159
|
+
- lib/generators/templates/process_miner.erb
|
160
|
+
- lib/generators/templates/application_config.erb
|
39
161
|
- bin/mines
|
40
|
-
homepage:
|
162
|
+
homepage: https://github.com/panayiotis/mines
|
41
163
|
licenses:
|
42
164
|
- MIT
|
43
165
|
post_install_message:
|
@@ -54,9 +176,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
54
176
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
177
|
none: false
|
56
178
|
requirements:
|
57
|
-
- - ! '
|
179
|
+
- - ! '>='
|
58
180
|
- !ruby/object:Gem::Version
|
59
|
-
version:
|
181
|
+
version: '0'
|
60
182
|
requirements: []
|
61
183
|
rubyforge_project:
|
62
184
|
rubygems_version: 1.8.25
|
@@ -64,3 +186,4 @@ signing_key:
|
|
64
186
|
specification_version: 3
|
65
187
|
summary: Data mining application framework.
|
66
188
|
test_files: []
|
189
|
+
has_rdoc:
|