rubic-rb 1.0
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 +7 -0
- data/rubic-gem/active.rb +21 -0
- data/rubic-gem/downloader.rb +39 -0
- data/rubic-gem/env_loader.rb +15 -0
- data/rubic-gem/file.rb +36 -0
- data/rubic-gem/logging.rb +46 -0
- data/rubic-gem/rule-2.rb +56 -0
- data/rubic-gem/storage.rb +33 -0
- data/rubic-gem/uploader.rb +38 -0
- metadata +50 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: db904df42fe403d01ef04fa7a020224a0ad7c313
|
|
4
|
+
data.tar.gz: 506372dcee6dffb831285455799d5255223f2409
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 5b97aba8f32e4cfb57967380b5001e84e429925ea2ea1a37ad1f0e7082372442143403268a0011377f2868190e45b2f713bb77edcd3e36edd9d638a445c35906
|
|
7
|
+
data.tar.gz: ceb74f1e7044e6f847d99a3aeb03a21dd5f8cd2f3875793c728fc0e75e00d9b4167b18b45a35e1590b1f5e73a0fb506a1360decc1ef3d759030d62a4bf827e6b
|
data/rubic-gem/active.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'bundler/setup'
|
|
2
|
+
require 'active_record'
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
|
|
5
|
+
module Rubik
|
|
6
|
+
module Utils
|
|
7
|
+
class Active
|
|
8
|
+
def self.load(env)
|
|
9
|
+
project_root = File.expand_path('../../../', __FILE__)
|
|
10
|
+
Dir.glob(project_root + '/models/*.rb').each{|f| require f}
|
|
11
|
+
|
|
12
|
+
connection_details = YAML.load File.read(File.join(File.expand_path('../../../config', __FILE__), 'database.yml'))
|
|
13
|
+
ActiveRecord::Base.establish_connection(connection_details[env])
|
|
14
|
+
|
|
15
|
+
if __FILE__ == $0
|
|
16
|
+
Rubik::Logging.logger.info { "Count of Pages: #{Page.count}" }
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'net/ftp'
|
|
2
|
+
require 'net/http'
|
|
3
|
+
|
|
4
|
+
module Rubik
|
|
5
|
+
module Utils
|
|
6
|
+
class Downloader
|
|
7
|
+
|
|
8
|
+
def self.download(url, dest, user=nil, pwd=nil)
|
|
9
|
+
uri = URI.parse(URI.encode(url))
|
|
10
|
+
host = uri.host
|
|
11
|
+
path = File.dirname(uri.path)
|
|
12
|
+
file = File.basename(uri.path)
|
|
13
|
+
return ftp_download(host, path, file, dest, user, pwd) if url.start_with?('ftp')
|
|
14
|
+
return http_download(host, path, file, dest, user, pwd) if url.start_with?('http')
|
|
15
|
+
raise 'Invalid url'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def ftp_download(domain, remotedir, file, dest, user=nil, pwd=nil)
|
|
19
|
+
ftp = Net::FTP::new(domain)
|
|
20
|
+
ftp.passive = true
|
|
21
|
+
ftp.login(user, pwd) if user && pwd
|
|
22
|
+
ftp.chdir(remotedir)
|
|
23
|
+
ftp.getbinaryfile(file, dest, 1024)
|
|
24
|
+
ftp.close
|
|
25
|
+
return dest
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def http_download(domain, remotedir, file, dest, user=nil, pwd=nil)
|
|
29
|
+
Net::HTTP.start(domain) do |http|
|
|
30
|
+
resp = http.get("#{remotedir}/#{file}")
|
|
31
|
+
open(dest, "wb") do |file|
|
|
32
|
+
file.write(resp.body)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
return dest
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'rubik/logging'
|
|
2
|
+
require 'yaml'
|
|
3
|
+
|
|
4
|
+
module Rubik
|
|
5
|
+
module Utils
|
|
6
|
+
class EnvLoader
|
|
7
|
+
def self.load(env = 'local', path = './')
|
|
8
|
+
env_file = File.join(path, "#{env}_env.yml")
|
|
9
|
+
YAML.load(File.open(env_file)).each do |key, value|
|
|
10
|
+
ENV["#{key.to_s}"] = value
|
|
11
|
+
end if File.exists?(env_file)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
data/rubic-gem/file.rb
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Rubik
|
|
2
|
+
module Utils
|
|
3
|
+
class File
|
|
4
|
+
def self.info(file)
|
|
5
|
+
|
|
6
|
+
results = {}
|
|
7
|
+
encoding = `nkf -g #{file}`.strip
|
|
8
|
+
encoding = 'SJIS' if encoding == 'Shift_JIS'
|
|
9
|
+
results[:encoding] = encoding
|
|
10
|
+
|
|
11
|
+
head = `head -n 1 #{file}`
|
|
12
|
+
col_sep = (head.count("\t") >= head.count(",") ? "\t" : "," )
|
|
13
|
+
col_sep = (head.count(col_sep) >= head.count("|") ? col_sep : "|" )
|
|
14
|
+
results[:col_sep] = col_sep
|
|
15
|
+
|
|
16
|
+
file_format = 'TSV'
|
|
17
|
+
file_format = 'CSV' if col_sep == ","
|
|
18
|
+
file_format = 'PSV' if col_sep == "|"
|
|
19
|
+
results[:file_format] = file_format
|
|
20
|
+
|
|
21
|
+
quote_char = "\x00"
|
|
22
|
+
if `grep -m 1 '#{col_sep}"' #{file} | wc -l`.strip.to_i > 0
|
|
23
|
+
quote_char = "\""
|
|
24
|
+
end
|
|
25
|
+
if quote_char == "\x00" && `grep -m 1 "#{col_sep}'" #{file} | wc -l`.strip.to_i > 0
|
|
26
|
+
quote_char = "'"
|
|
27
|
+
end
|
|
28
|
+
if quote_char == "\x00" && `grep -m 1 '#{col_sep}|' #{file} | wc -l`.strip.to_i > 0
|
|
29
|
+
quote_char = "|"
|
|
30
|
+
end
|
|
31
|
+
results[:quote_char] = quote_char
|
|
32
|
+
return results
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'time'
|
|
2
|
+
require 'logger'
|
|
3
|
+
|
|
4
|
+
module Rubik
|
|
5
|
+
module Utils
|
|
6
|
+
module Logging
|
|
7
|
+
class Pretty < Logger::Formatter
|
|
8
|
+
# Provide a call() method that returns the formatted message.
|
|
9
|
+
def call(severity, time, program_name, message)
|
|
10
|
+
"#{time.utc.iso8601} #{Process.pid} TID-#{Thread.current.object_id.to_s(36)}#{context} #{severity}: #{message}\n"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def context
|
|
14
|
+
c = Thread.current[:rubik_context]
|
|
15
|
+
c ? " #{c}" : ''
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.with_context(msg)
|
|
20
|
+
Thread.current[:rubik_context] = msg
|
|
21
|
+
yield
|
|
22
|
+
ensure
|
|
23
|
+
Thread.current[:rubik_context] = nil
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.initialize_logger(log_target = STDOUT)
|
|
27
|
+
@logger = Logger.new(log_target)
|
|
28
|
+
@logger.level = Logger::INFO
|
|
29
|
+
@logger.formatter = Pretty.new
|
|
30
|
+
@logger
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def self.logger
|
|
34
|
+
@logger || initialize_logger
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.logger=(log)
|
|
38
|
+
@logger = (log ? log : Logger.new('/dev/null'))
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def logger
|
|
42
|
+
Rubik::Logging.logger
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
data/rubic-gem/rule-2.rb
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
module Rubik
|
|
2
|
+
module Rule
|
|
3
|
+
def self.validate_rule(row, rule)
|
|
4
|
+
if rule['type'] == 'string'
|
|
5
|
+
return false unless row[rule['field'].to_sym].instance_of? String
|
|
6
|
+
case rule['is']
|
|
7
|
+
when '=='
|
|
8
|
+
return row[rule['field'].to_sym] == rule['to']
|
|
9
|
+
when '!='
|
|
10
|
+
return row[rule['field'].to_sym] != rule['to']
|
|
11
|
+
when 'startsWith'
|
|
12
|
+
return row[rule['field'].to_sym].start_with? rule['to']
|
|
13
|
+
when '!startsWith'
|
|
14
|
+
return !(row[rule['field'].to_sym].start_with? rule['to'])
|
|
15
|
+
when 'endsWith'
|
|
16
|
+
return row[rule['field'].to_sym].end_with? rule['to']
|
|
17
|
+
when '!endsWith'
|
|
18
|
+
return !(row[rule['field'].to_sym].end_with? rule['to'])
|
|
19
|
+
when 'include'
|
|
20
|
+
return row[rule['field'].to_sym].include? rule['to']
|
|
21
|
+
when '!include'
|
|
22
|
+
return !(row[rule['field'].to_sym].include? rule['to'])
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
if rule['type'] == 'number'
|
|
26
|
+
return false unless row[rule['field'].to_sym].instance_of? Fixnum
|
|
27
|
+
return eval("#{row[rule['field'].to_sym]} #{rule['is']} #{rule['to']}")
|
|
28
|
+
end
|
|
29
|
+
return true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.validate_row(row, rules)
|
|
33
|
+
rules.each do |rule|
|
|
34
|
+
return false unless Rubik::Rule::validate_rule(row, rule)
|
|
35
|
+
end
|
|
36
|
+
return true
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def self.augment_row(row, field_rules)
|
|
40
|
+
field_rules.keys.each do |name|
|
|
41
|
+
row[name] = field_rules[name]['default']
|
|
42
|
+
field_rules[name]['when'].each do |cond|
|
|
43
|
+
row[name] = cond['then'] if Rubik::Rule::validate_rule(row, cond)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
row.keys.each do |key_1|
|
|
47
|
+
if (row[key_1].instance_of?(String) and row[key_1].include?('{{') and row[key_1].include?('}}'))
|
|
48
|
+
row.keys.each do |key_2|
|
|
49
|
+
row[key_1] = row[key_1].gsub("{{#{key_2.to_s}}}", row[key_2].to_s)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
return row
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module Rubik
|
|
2
|
+
module Utils
|
|
3
|
+
class Storage
|
|
4
|
+
def self.download_from_s3(local_file, key, bucket)
|
|
5
|
+
service = AWS::S3.new(:access_key_id => ENV['AWS_ACCESS_KEY_ID'], :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'])
|
|
6
|
+
object = service.buckets[bucket].objects[key]
|
|
7
|
+
File.open(local_file, 'wb') do |file|
|
|
8
|
+
object.read do |chunk|
|
|
9
|
+
file.write(chunk)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
return local_file
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.upload_to_s3(dest_file, key, bucket)
|
|
16
|
+
service = AWS::S3.new(:access_key_id => ENV['AWS_ACCESS_KEY_ID'], :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'])
|
|
17
|
+
service.buckets[bucket].objects[key].write(:file => dest_file)
|
|
18
|
+
return key
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.delete_from_s3(key, bucket)
|
|
22
|
+
service = AWS::S3.new(:access_key_id => ENV['AWS_ACCESS_KEY_ID'], :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'])
|
|
23
|
+
service.buckets[bucket].objects[key].delete
|
|
24
|
+
return key
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.list_from_s3(bucket)
|
|
28
|
+
service = AWS::S3.new(:access_key_id => ENV['AWS_ACCESS_KEY_ID'], :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'])
|
|
29
|
+
service.buckets[bucket].objects.map(&:key)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'net/ftp'
|
|
2
|
+
require 'net/sftp'
|
|
3
|
+
require 'net/scp'
|
|
4
|
+
|
|
5
|
+
module Rubik
|
|
6
|
+
module Utils
|
|
7
|
+
class Uploader
|
|
8
|
+
|
|
9
|
+
def self.upload(file, settings)
|
|
10
|
+
host = URI.parse(settings.url).host
|
|
11
|
+
dir_name = File.dirname(URI.parse(settings.url).path)
|
|
12
|
+
return ftp_upload(file, host, dir_name, settings.username, settings.password) if settings.url.start_with?('ftp')
|
|
13
|
+
return scp_upload(file, host, dir_name, settings.username, settings.password) if settings.url.start_with?('scp')
|
|
14
|
+
return sftp_upload(file, host, dir_name, settings.username, settings.password) if settings.url.start_with?('sftp')
|
|
15
|
+
raise 'Invalid url'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def ftp_upload(file, host, dir_name, user=nil, pwd=nil)
|
|
21
|
+
Net::FTP.open(host, user, pwd) do |ftp|
|
|
22
|
+
ftp.chdir(dir_name)
|
|
23
|
+
ftp.putbinaryfile(file)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def scp_upload(file, host, dir_name, user=nil, pwd=nil)
|
|
28
|
+
Net::SCP.upload!(host, user, file, dir_name, :password => pwd)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def sftp_upload(file, host, dir_name, user=nil, pwd=nil)
|
|
32
|
+
Net::SFTP.start(host, user, :password => pwd) do |sftp|
|
|
33
|
+
sftp.upload!(file, dir_name)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rubic-rb
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: '1.0'
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Bruno Quentin
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2015-12-11 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description:
|
|
14
|
+
email:
|
|
15
|
+
executables: []
|
|
16
|
+
extensions: []
|
|
17
|
+
extra_rdoc_files: []
|
|
18
|
+
files:
|
|
19
|
+
- rubic-gem/active.rb
|
|
20
|
+
- rubic-gem/downloader.rb
|
|
21
|
+
- rubic-gem/env_loader.rb
|
|
22
|
+
- rubic-gem/file.rb
|
|
23
|
+
- rubic-gem/logging.rb
|
|
24
|
+
- rubic-gem/rule-2.rb
|
|
25
|
+
- rubic-gem/storage.rb
|
|
26
|
+
- rubic-gem/uploader.rb
|
|
27
|
+
homepage:
|
|
28
|
+
licenses: []
|
|
29
|
+
metadata: {}
|
|
30
|
+
post_install_message:
|
|
31
|
+
rdoc_options: []
|
|
32
|
+
require_paths:
|
|
33
|
+
- lib
|
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
35
|
+
requirements:
|
|
36
|
+
- - ">="
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: '0'
|
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
40
|
+
requirements:
|
|
41
|
+
- - ">="
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
version: '0'
|
|
44
|
+
requirements: []
|
|
45
|
+
rubyforge_project:
|
|
46
|
+
rubygems_version: 2.5.1
|
|
47
|
+
signing_key:
|
|
48
|
+
specification_version: 4
|
|
49
|
+
summary: Rubic Gem
|
|
50
|
+
test_files: []
|