melissadata 0.0.1 → 0.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.
- data/Gemfile +2 -0
- data/Gemfile.lock +46 -16
- data/README.md +50 -2
- data/Rakefile +58 -23
- data/Vagrantfile +12 -12
- data/bin/md_tcp_server +5 -0
- data/bin/md_unix_server +5 -0
- data/chef/cookbooks/apt/README.md +109 -0
- data/chef/cookbooks/apt/files/default/apt-cacher +9 -0
- data/chef/cookbooks/apt/files/default/apt-cacher.conf +144 -0
- data/chef/cookbooks/apt/files/default/apt-proxy-v2.conf +50 -0
- data/chef/cookbooks/apt/metadata.json +34 -0
- data/chef/cookbooks/apt/metadata.rb +13 -0
- data/chef/cookbooks/apt/providers/repository.rb +72 -0
- data/chef/cookbooks/apt/recipes/cacher-client.rb +37 -0
- data/chef/cookbooks/apt/recipes/cacher.rb +45 -0
- data/chef/cookbooks/apt/recipes/default.rb +33 -0
- data/chef/cookbooks/apt/resources/repository.rb +30 -0
- data/chef/cookbooks/build-essential/README.md +24 -0
- data/chef/cookbooks/build-essential/metadata.json +35 -0
- data/chef/cookbooks/build-essential/metadata.rb +10 -0
- data/chef/cookbooks/build-essential/recipes/default.rb +45 -0
- data/chef/cookbooks/melissadata/attributes/default.rb +5 -0
- data/chef/cookbooks/melissadata/metadata.rb +8 -0
- data/chef/cookbooks/melissadata/recipes/default.rb +37 -0
- data/chef/cookbooks/melissadata/templates/default/Makefile.erb +39 -0
- data/chef/cookbooks/melissadata/templates/default/md_tcp_server.init.erb +82 -0
- data/chef/cookbooks/melissadata/templates/default/md_unix_server.init.erb +81 -0
- data/chef/cookbooks/rvm/recipes/default.rb +1 -0
- data/chef/cookbooks/rvm/recipes/r187.rb +6 -0
- data/chef/cookbooks/rvm/recipes/r192.rb +6 -0
- data/chef/cookbooks/rvm/recipes/system.rb +28 -0
- data/chef/cookbooks/ubuntu/attributes/default.rb +24 -0
- data/chef/cookbooks/ubuntu/metadata.json +36 -0
- data/chef/cookbooks/ubuntu/metadata.rb +8 -0
- data/chef/cookbooks/ubuntu/recipes/default.rb +27 -0
- data/chef/cookbooks/ubuntu/templates/default/sources.list.erb +15 -0
- data/lib/melissadata.rb +1 -2
- data/lib/melissadata/client.rb +8 -0
- data/lib/melissadata/client/base.rb +56 -0
- data/lib/melissadata/client/tcp.rb +28 -0
- data/lib/melissadata/client/unix.rb +22 -0
- data/lib/melissadata/client/vagrant.rb +9 -0
- data/lib/melissadata/command.rb +1 -0
- data/lib/melissadata/command/base.rb +0 -1
- data/lib/melissadata/command/compile.rb +37 -0
- data/lib/melissadata/command/package.rb +32 -73
- data/lib/melissadata/constants.rb +6 -5
- data/lib/melissadata/melissadata.rb +26 -91
- data/lib/melissadata/native_object.rb +0 -8
- data/lib/melissadata/native_object/address.rb +2 -0
- data/lib/melissadata/native_object/base.rb +18 -5
- data/lib/melissadata/native_object/email.rb +2 -0
- data/lib/melissadata/native_object/geo.rb +2 -0
- data/lib/melissadata/native_object/ip_locator.rb +2 -0
- data/lib/melissadata/native_object/name.rb +2 -0
- data/lib/melissadata/native_object/phone.rb +2 -0
- data/lib/melissadata/server.rb +10 -0
- data/lib/melissadata/server/base.rb +145 -0
- data/lib/melissadata/server/tcp.rb +22 -0
- data/lib/melissadata/server/unix.rb +24 -0
- data/lib/melissadata/vagrant_plugin.rb +23 -0
- data/lib/melissadata/vagrant_plugin/actions.rb +9 -0
- data/lib/melissadata/vagrant_plugin/actions/base.rb +60 -0
- data/lib/melissadata/vagrant_plugin/actions/install.rb +78 -0
- data/lib/melissadata/vagrant_plugin/actions/update.rb +22 -0
- data/lib/melissadata/vagrant_plugin/command.rb +21 -0
- data/lib/melissadata/vagrant_plugin/config.rb +18 -0
- data/lib/melissadata/version.rb +1 -1
- data/locales/en.yml +16 -0
- data/melissadata.gemspec +11 -12
- data/pkg/melissadata-0.0.1.gem +0 -0
- data/spec/helpers/vagrant_helpers.rb +17 -0
- data/spec/melissadata/command/package_spec.rb +1 -1
- data/spec/melissadata/vagrant_plugin/actions/install_spec.rb +40 -0
- data/spec/melissadata/vagrant_plugin/config_spec.rb +17 -0
- data/spec/spec_helper.rb +12 -7
- metadata +201 -228
- data/bin/md +0 -4
- data/bin/md-rpc +0 -9
- data/bin/md-server +0 -18
- data/bin/melissadata +0 -4
- data/lib/melissadata/native_object/client.rb +0 -33
- data/lib/melissadata/prev/command_old.rb +0 -80
- data/lib/melissadata/prev/shared_objects.rb +0 -54
- data/lib/melissadata/rpc.rb +0 -39
- data/pkg/melissa-data-0.0.1.gem +0 -0
- data/pkg/melissa-data-0.0.2.gem +0 -0
- data/pkg/melissa-data-0.0.3.gem +0 -0
- data/templates/config.rb +0 -20
- data/templates/locales/en.yml +0 -4
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'msgpack'
|
2
|
+
require 'msgpack/rpc'
|
3
|
+
|
4
|
+
module MelissaData::Client
|
5
|
+
|
6
|
+
class Base
|
7
|
+
attr_reader :rpc
|
8
|
+
|
9
|
+
def self.available?
|
10
|
+
raise 'I should have been subclassed'
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(*args)
|
14
|
+
raise 'I should have been subclassed'
|
15
|
+
end
|
16
|
+
|
17
|
+
def process(opts={})
|
18
|
+
rpc.call :process, opts
|
19
|
+
end
|
20
|
+
|
21
|
+
def process_address(address=nil, zip=nil, city=nil, state=nil)
|
22
|
+
rpc.call :process_address, address, zip, city, state
|
23
|
+
end
|
24
|
+
alias_method :address, :process_address
|
25
|
+
|
26
|
+
def process_email(email=nil)
|
27
|
+
rpc.call :process_email, email
|
28
|
+
end
|
29
|
+
alias_method :email, :process_email
|
30
|
+
|
31
|
+
def process_geo(zip=nil, plus4=nil, dpc=nil)
|
32
|
+
rpc.call :process_geo, zip, plus4, dpc
|
33
|
+
end
|
34
|
+
alias_method :geo, :process_geo
|
35
|
+
|
36
|
+
def process_name(first_name=nil, last_name=nil)
|
37
|
+
rpc.call :process_name, first_name, last_name
|
38
|
+
end
|
39
|
+
alias_method :name, :process_name
|
40
|
+
|
41
|
+
def process_phone(phone=nil, zip=nil)
|
42
|
+
rpc.call :process_phone, phone, zip
|
43
|
+
end
|
44
|
+
alias_method :phone, :process_phone
|
45
|
+
|
46
|
+
def process_ip(ip)
|
47
|
+
rpc.call :process_ip, ip
|
48
|
+
end
|
49
|
+
alias_method :ip, :process_ip
|
50
|
+
|
51
|
+
def version
|
52
|
+
rpc.call :version
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module MelissaData::Client
|
2
|
+
|
3
|
+
class TCP < Base
|
4
|
+
class << self
|
5
|
+
def available?
|
6
|
+
TCPSocket.new(host, port)
|
7
|
+
true
|
8
|
+
rescue Errno::ECONNREFUSED
|
9
|
+
false
|
10
|
+
end
|
11
|
+
|
12
|
+
def host
|
13
|
+
'127.0.0.1'
|
14
|
+
end
|
15
|
+
|
16
|
+
def port
|
17
|
+
MelissaData::DEFAULT_TCP_PORT
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(host=self.class.host, port=self.class.port)
|
22
|
+
@host = host
|
23
|
+
@port = port
|
24
|
+
@rpc = MessagePack::RPC::Client.new(@host, @port)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rev'
|
2
|
+
require 'msgpack/rpc/transport/base'
|
3
|
+
require 'msgpack/rpc/transport/unix'
|
4
|
+
|
5
|
+
module MelissaData::Client
|
6
|
+
|
7
|
+
class Unix < Base
|
8
|
+
def self.available?
|
9
|
+
File.exists? socket_file
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.socket_file
|
13
|
+
MelissaData::DEFAULT_SOCKET_FILE
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
transport = MessagePack::RPC::UNIXTransport.new
|
18
|
+
@rpc = MessagePack::RPC::Client.new transport, self.class.socket_file
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/lib/melissadata/command.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
module MelissaData
|
2
|
+
module Command
|
3
|
+
class CompileCommand < Base
|
4
|
+
register "compile", "Compile the MelissaData shared objects"
|
5
|
+
|
6
|
+
def self.source_root
|
7
|
+
Dir['/Volumes/*'].detect{ |path| path =~ /DVD-\d{4}-\d{2}$/ }
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute
|
11
|
+
source_dir = Dir['/Volumes/*'].detect{ |path| path =~ /DVD-\d{4}-\d{2}$/ }
|
12
|
+
raise Errors::DiscNotFound if source_dir.blank?
|
13
|
+
|
14
|
+
dest_dir = "/tmp"
|
15
|
+
|
16
|
+
possible_objects = %w[ address email name phone ]
|
17
|
+
# objects = Dir.entries(source_dir).select{ |path| possible_objects.include?(path) }
|
18
|
+
objects = %w[ email name ]
|
19
|
+
|
20
|
+
objects.each do |obj|
|
21
|
+
Dir["#{source_dir}/#{obj}/linux/gcc34_64bit/*.h"].each do |filename|
|
22
|
+
copy_file filename, "/opt/melissadata/src/#{File.basename(filename)}"
|
23
|
+
end
|
24
|
+
|
25
|
+
filename = "#{source_dir}/#{obj}/linux/gcc34_64bit/libmd#{obj.capitalize}.so"
|
26
|
+
copy_file filename, "/opt/melissadata/lib/#{File.basename(filename)}"
|
27
|
+
|
28
|
+
filename = "#{source_dir}/#{obj}/linux/interfaces/ruby/md#{obj.capitalize}RubyWrapper.cpp"
|
29
|
+
copy_file filename, "/opt/melissadata/lib/#{File.basename(filename)}"
|
30
|
+
end
|
31
|
+
|
32
|
+
template "Makefile", "/opt/melissadata/src/Makefile"
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -1,83 +1,42 @@
|
|
1
1
|
module MelissaData
|
2
2
|
module Command
|
3
|
+
|
3
4
|
class PackageCommand < Base
|
4
|
-
# class_option :base, :type => :string, :default => nil
|
5
|
-
# class_option :output, :type => :string, :default => nil
|
6
|
-
# class_option :include, :type => :array, :default => nil
|
7
|
-
# class_option :melissadatafile, :type => :string, :default => nil
|
8
5
|
register "package", "Package up the MelissaData databases"
|
9
6
|
|
10
7
|
def execute
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
# # "#{source_dir}/#{obj}/linux/gcc34_64bit/*.h" => /opt/melissadata/src/
|
42
|
-
# # "#{source_dir}/#{obj}/linux/gcc34_64bit/libmdEmail.so" => /opt/melissadata/lib/
|
43
|
-
# # "#{source_dir}/#{obj}/linux/interfaces/ruby/mdEmailRubyWrapper.cpp" => /opt/melissadata/lib/
|
44
|
-
|
45
|
-
# # inside "#{source_dir}/#{obj}/linux/gcc34_64bit" do
|
46
|
-
# # run "tar czf #{data_file} data"
|
47
|
-
# # end
|
48
|
-
# end
|
49
|
-
# end
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
# return package_base if options[:base]
|
54
|
-
# package_target
|
8
|
+
source_dir = Dir['/Volumes/*'].detect{ |path| path =~ /DVD-\d{4}-\d{2}$/ }
|
9
|
+
raise Errors::DiscNotFound if source_dir.blank?
|
10
|
+
|
11
|
+
# dest_dir = "/tmp"
|
12
|
+
|
13
|
+
# possible_objects = %w[ address email name phone ]
|
14
|
+
# # objects = Dir.entries(source_dir).select{ |path| possible_objects.include?(path) }
|
15
|
+
# objects = %w[ email name ]
|
16
|
+
|
17
|
+
# objects.each do |obj|
|
18
|
+
# data_file = "#{dest_dir}/#{obj}.tgz"
|
19
|
+
# inside "#{source_dir}/#{obj}" do
|
20
|
+
# run "tar czf #{data_file} data"
|
21
|
+
# end
|
22
|
+
|
23
|
+
# say_status :upload, "#{obj}.tgz to #{options[:bucket_name]}"
|
24
|
+
# cf = CloudFiles::Connection.new(:username => options[:username], :api_key => options[:api_key])
|
25
|
+
# cont = cf.container options[:bucket_name]
|
26
|
+
# remote_object = cont.create_object "#{obj}.tgz", false
|
27
|
+
# remote_object.load_from_filename data_file
|
28
|
+
|
29
|
+
# # "#{source_dir}/#{obj}/linux/gcc34_64bit/*.h" => /opt/melissadata/src/
|
30
|
+
# # "#{source_dir}/#{obj}/linux/gcc34_64bit/libmdEmail.so" => /opt/melissadata/lib/
|
31
|
+
# # "#{source_dir}/#{obj}/linux/interfaces/ruby/mdEmailRubyWrapper.cpp" => /opt/melissadata/lib/
|
32
|
+
|
33
|
+
# # inside "#{source_dir}/#{obj}/linux/gcc34_64bit" do
|
34
|
+
# # run "tar czf #{data_file} data"
|
35
|
+
# # end
|
36
|
+
# end
|
37
|
+
# end
|
55
38
|
end
|
56
|
-
|
57
|
-
protected
|
58
|
-
|
59
|
-
# def package_base
|
60
|
-
# vm = VM.find(options[:base], env)
|
61
|
-
# raise Errors::BaseVMNotFound, :name => options[:base] if !vm.created?
|
62
|
-
# package_vm(vm)
|
63
|
-
# end
|
64
|
-
|
65
|
-
# def package_target
|
66
|
-
# raise Errors::MultiVMTargetRequired, :command => "package" if target_vms.length > 1
|
67
|
-
# vm = target_vms.first
|
68
|
-
# raise Errors::VMNotCreatedError if !vm.created?
|
69
|
-
# package_vm(vm)
|
70
|
-
# end
|
71
|
-
|
72
|
-
# def package_vm(vm)
|
73
|
-
# opts = options.inject({}) do |acc, data|
|
74
|
-
# k,v = data
|
75
|
-
# acc["package.#{k}"] = v
|
76
|
-
# acc
|
77
|
-
# end
|
78
|
-
|
79
|
-
# vm.package(opts)
|
80
|
-
# end
|
81
39
|
end
|
40
|
+
|
82
41
|
end
|
83
42
|
end
|
@@ -1,12 +1,13 @@
|
|
1
1
|
module MelissaData
|
2
|
-
|
2
|
+
|
3
3
|
module Constants
|
4
|
-
|
5
|
-
|
4
|
+
DEFAULT_TCP_ADDRESS = '0.0.0.0'
|
5
|
+
DEFAULT_TCP_PORT = 1404
|
6
|
+
DEFAULT_SOCKET_FILE = '/tmp/melissadata.sock'
|
6
7
|
|
7
|
-
|
8
|
-
DEFAULT_PORT = 6000
|
8
|
+
DEFAULT_VAGRANT_TCP_PORT = 14004
|
9
9
|
end
|
10
|
+
|
10
11
|
end
|
11
12
|
|
12
13
|
module MelissaData
|
@@ -1,18 +1,37 @@
|
|
1
1
|
$LOAD_PATH.unshift File.expand_path('..', File.dirname(__FILE__)) unless $LOAD_PATH.include?(File.expand_path('..', File.dirname(__FILE__)))
|
2
|
+
require 'rubygems'
|
2
3
|
require 'pathname'
|
3
4
|
require 'i18n'
|
4
5
|
require 'thor'
|
5
6
|
require 'thor/group'
|
6
7
|
require 'thor/actions'
|
7
|
-
require 'active_support/core_ext'
|
8
8
|
|
9
9
|
module MelissaData
|
10
10
|
module_function
|
11
11
|
|
12
|
-
autoload :Env,
|
13
|
-
autoload :CLI,
|
14
|
-
autoload :Errors,
|
15
|
-
autoload :Constants,
|
12
|
+
autoload :Env, 'melissadata/env'
|
13
|
+
autoload :CLI, 'melissadata/cli'
|
14
|
+
autoload :Errors, 'melissadata/errors'
|
15
|
+
autoload :Constants, 'melissadata/constants'
|
16
|
+
autoload :NativeObject, 'melissadata/native_object'
|
17
|
+
autoload :VagrantPlugin, 'melissadata/vagrant_plugin'
|
18
|
+
autoload :Server, 'melissadata/server'
|
19
|
+
autoload :Client, 'melissadata/client'
|
20
|
+
|
21
|
+
def client
|
22
|
+
if MelissaData::Client::Unix.available?
|
23
|
+
MelissaData::Client::Unix.new
|
24
|
+
|
25
|
+
elsif MelissaData::Client::TCP.available?
|
26
|
+
MelissaData::Client::TCP.new
|
27
|
+
|
28
|
+
elsif MelissaData::Client::Vagrant.available?
|
29
|
+
MelissaData::Client::Vagrant.new
|
30
|
+
|
31
|
+
else
|
32
|
+
raise 'No client connection available'
|
33
|
+
end
|
34
|
+
end
|
16
35
|
|
17
36
|
ENVIRONMENTS = [:development, :production, :test, :staging]
|
18
37
|
|
@@ -73,92 +92,8 @@ module MelissaData
|
|
73
92
|
end
|
74
93
|
end
|
75
94
|
|
76
|
-
I18n.load_path << File.expand_path("
|
95
|
+
I18n.load_path << File.expand_path("locales/en.yml", MelissaData.gem_root)
|
77
96
|
|
97
|
+
require 'melissadata/constants'
|
78
98
|
require 'melissadata/command'
|
79
99
|
require 'melissadata/version'
|
80
|
-
|
81
|
-
|
82
|
-
# require 'rubygems'
|
83
|
-
# require 'active_support/core_ext'
|
84
|
-
# require 'melissadata/constants'
|
85
|
-
# require 'melissadata/commands'
|
86
|
-
# require 'melissadata/exceptions'
|
87
|
-
|
88
|
-
# module MelissaData
|
89
|
-
# module_function
|
90
|
-
|
91
|
-
# ENVIRONMENTS = [:development, :production, :vagrant, :test, :staging]
|
92
|
-
|
93
|
-
# # Retrieves the current MelissaData environment
|
94
|
-
# #
|
95
|
-
# # @return [String] the current environment
|
96
|
-
# def env
|
97
|
-
# @env or fail "environment has not been set"
|
98
|
-
# end
|
99
|
-
|
100
|
-
# # Sets the current MelissaData environment
|
101
|
-
# #
|
102
|
-
# # @param [String|Symbol] env the environment symbol of [dev | development | prod | production | test]
|
103
|
-
# def env=(e)
|
104
|
-
# es = case(e.to_sym)
|
105
|
-
# when :dev then :development
|
106
|
-
# when :prod then :production
|
107
|
-
# else e.to_sym
|
108
|
-
# end
|
109
|
-
|
110
|
-
# if ENVIRONMENTS.include?(es)
|
111
|
-
# @env = es
|
112
|
-
# else
|
113
|
-
# fail "did not recognize environment: #{e}, expected one of: #{ENVIRONMENTS.join(', ')}"
|
114
|
-
# end
|
115
|
-
# end
|
116
|
-
|
117
|
-
# def client=(c)
|
118
|
-
# @client = c
|
119
|
-
# end
|
120
|
-
|
121
|
-
# def client
|
122
|
-
# raise "Client has not yet been setup" if @client.nil?
|
123
|
-
# @client
|
124
|
-
# end
|
125
|
-
|
126
|
-
# def lib_path
|
127
|
-
# @lib_path ||= File.dirname(__FILE__)
|
128
|
-
# end
|
129
|
-
|
130
|
-
# # Determines if we are in the production environment
|
131
|
-
# #
|
132
|
-
# # @return [Boolean] true if current environment is production, false otherwise
|
133
|
-
# def prod?
|
134
|
-
# env == :production
|
135
|
-
# end
|
136
|
-
|
137
|
-
# # Determines if we are in the development environment
|
138
|
-
# #
|
139
|
-
# # @return [Boolean] true if current environment is development, false otherwise
|
140
|
-
# def dev?
|
141
|
-
# env == :development
|
142
|
-
# end
|
143
|
-
|
144
|
-
# # Determines if we are in the test environment
|
145
|
-
# #
|
146
|
-
# # @return [Boolean] true if current environment is test, false otherwise
|
147
|
-
# def test?
|
148
|
-
# env == :test
|
149
|
-
# end
|
150
|
-
|
151
|
-
# # Determines if we are in the staging environment
|
152
|
-
# #
|
153
|
-
# # @return [Boolean] true if current environment is staging.
|
154
|
-
# def staging?
|
155
|
-
# env == :staging
|
156
|
-
# end
|
157
|
-
|
158
|
-
# # Determines if we are in the vagrant environment
|
159
|
-
# #
|
160
|
-
# # @return [Boolean] true if current environment is vagrant.
|
161
|
-
# def vagrant?
|
162
|
-
# env == :vagrant
|
163
|
-
# end
|
164
|
-
# end
|
@@ -1,8 +1,6 @@
|
|
1
1
|
module MelissaData
|
2
2
|
module NativeObject
|
3
3
|
autoload :Base, 'melissadata/native_object/base'
|
4
|
-
autoload :Client, 'melissadata/native_object/client'
|
5
|
-
|
6
4
|
autoload :Address, 'melissadata/native_object/address'
|
7
5
|
autoload :Email, 'melissadata/native_object/email'
|
8
6
|
autoload :Geo, 'melissadata/native_object/geo'
|
@@ -11,9 +9,3 @@ module MelissaData
|
|
11
9
|
autoload :Phone, 'melissadata/native_object/phone'
|
12
10
|
end
|
13
11
|
end
|
14
|
-
|
15
|
-
%w[
|
16
|
-
mdAddrRubyWrapper mdEmailRubyWrapper mdGeoRubyWrapper mdNameRubyWrapper mdPhoneRubyWrapper mdIpLocatorRubyWrapper
|
17
|
-
].each do |obj|
|
18
|
-
require File.join('/opt/melissadata/lib', obj)
|
19
|
-
end
|