crabfarm 0.0.2 → 0.0.3
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 +4 -4
- data/lib/crabfarm/cli.rb +15 -7
- data/lib/crabfarm/configuration.rb +83 -61
- data/lib/crabfarm/context.rb +1 -1
- data/lib/crabfarm/driver_bucket_pool.rb +2 -2
- data/lib/crabfarm/loader.rb +50 -36
- data/lib/crabfarm/modes/console.rb +15 -21
- data/lib/crabfarm/modes/server.rb +4 -6
- data/lib/crabfarm/module_helper.rb +3 -2
- data/lib/crabfarm/phantom_runner.rb +7 -7
- data/lib/crabfarm/support/gli.rb +34 -0
- data/lib/crabfarm/templates/Crabfile.erb +2 -3
- data/lib/crabfarm/templates/boot.rb.erb +4 -6
- data/lib/crabfarm/templates/dot_gitignore.erb +1 -0
- data/lib/crabfarm/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cc45d8d0e358193e3729c8ca8d38715680470c78
|
4
|
+
data.tar.gz: 30c698146ec3b2d4032cddf4d4b3011af4edaa75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85c7b65ee73ea096635260495077002c74d4891ecab632814de81a474eed2cfc9b9eebbfe4f60a200d927a60e7cbbf00e9910b6988fc9cc73abbee8368bb7163
|
7
|
+
data.tar.gz: 9607b619d00a96ae83a20238492d47897976498bf48e63400e5845765e5585c2bf872d31b2d9803479ee4900ca23433ee6b58c391c05d8441298566716d2e1f4
|
data/lib/crabfarm/cli.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'gli'
|
2
|
+
require 'crabfarm/support/gli'
|
2
3
|
|
3
4
|
module Crabfarm
|
4
5
|
class CLI
|
@@ -6,16 +7,17 @@ module Crabfarm
|
|
6
7
|
|
7
8
|
program_desc 'Crabfarm toolbelt'
|
8
9
|
|
9
|
-
pre do |global_options,command,options,args|
|
10
|
-
# Things to do before
|
11
|
-
true
|
12
|
-
end
|
13
|
-
|
14
10
|
desc "Starts the crawler in console mode"
|
15
11
|
command [:console, :c] do |c|
|
12
|
+
|
13
|
+
Support::GLI.generate_options c
|
14
|
+
|
16
15
|
c.action do |global_options,options,args|
|
16
|
+
next puts "This command can only be run inside a crabfarm application" unless defined? CF_LOADER
|
17
|
+
|
17
18
|
require "crabfarm/modes/console"
|
18
|
-
|
19
|
+
CF_LOADER.load Support::GLI.parse_options options
|
20
|
+
Crabfarm::Modes::Console.start CF_LOADER
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
@@ -30,13 +32,19 @@ module Crabfarm
|
|
30
32
|
c.desc "Set the server min and max threads, defaults to 0:16"
|
31
33
|
c.flag [:t,:threads]
|
32
34
|
|
35
|
+
Support::GLI.generate_options c
|
36
|
+
|
33
37
|
c.action do |global_options,options,args|
|
38
|
+
next puts "This command can only be run inside a crabfarm application" unless defined? CF_LOADER
|
39
|
+
|
34
40
|
require "crabfarm/modes/server"
|
35
41
|
server_options = {}
|
36
42
|
server_options[:Host] = options[:host] unless options[:host].nil?
|
37
43
|
server_options[:Port] = options[:port] || 3100
|
38
44
|
server_options[:Threads] = options[:threads] unless options[:threads].nil?
|
39
|
-
|
45
|
+
|
46
|
+
CF_LOADER.load Support::GLI.parse_options options
|
47
|
+
Crabfarm::Modes::Server.start CF_LOADER, server_options
|
40
48
|
end
|
41
49
|
end
|
42
50
|
|
@@ -2,81 +2,103 @@ module Crabfarm
|
|
2
2
|
|
3
3
|
class Configuration
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
5
|
+
class Option < Struct.new(:name, :type, :text); end
|
6
|
+
|
7
|
+
OPTIONS = [
|
8
|
+
[:default_dsl, :string, 'Default dsl used by parsers and states'],
|
9
|
+
[:driver_factory, :mixed, 'Driver factory, disabled if phantom_mode is used'],
|
10
|
+
[:log_path, :string, 'Path where logs should be stored'],
|
11
|
+
|
12
|
+
# Default driver configuration parameters
|
13
|
+
[:driver, ['chrome', 'firefox', 'phantomjs', 'remote'], 'Webdriver to be user, common options: chrome, firefox, phantomjs, remote.'],
|
14
|
+
[:driver_host, :string, 'Remote host, only available in driver: remote'],
|
15
|
+
[:driver_port, :integer, 'Remote port, only available in driver: remote'],
|
16
|
+
[:driver_capabilities, :mixed, 'Driver capabilities, depends on selected driver.'],
|
17
|
+
[:driver_remote_timeout, :float, 'Request timeout in seconds, only available for remote or phatomjs driver.'],
|
18
|
+
[:driver_window_width, :integer, 'Initial browser window width.'],
|
19
|
+
[:driver_window_height, :integer, 'Initial browser window height.'],
|
20
|
+
|
21
|
+
# Phantom launcher configuration
|
22
|
+
[:phantom_load_images, :boolean, 'Phantomjs image loading, only for phantomjs driver.'],
|
23
|
+
[:phantom_proxy, :string, 'Phantonjs proxy address, only for phantomjs driver.'],
|
24
|
+
[:phantom_ssl, ['sslv3', 'sslv2', 'tlsv1', 'any'], 'Phantomjs ssl mode: sslv3, sslv2, tlsv1 or any, only for phantomjs driver.'],
|
25
|
+
[:phantom_bin_path, :string, 'Phantomjs binary path, only for phantomjs driver.'],
|
26
|
+
[:phantom_lock_file, :string, 'Phantomjs lock file path, only for phantomjs driver.']
|
27
|
+
]
|
28
|
+
.map { |o| Option.new *o }
|
29
|
+
|
30
|
+
OPTIONS.each do |var|
|
31
|
+
define_method "set_#{var.name}" do |val|
|
32
|
+
@values[var.name] = val
|
33
|
+
end
|
34
|
+
|
35
|
+
define_method "#{var.name}" do
|
36
|
+
@values[var.name]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def initialize
|
41
|
+
@values = {
|
42
|
+
default_dsl: :surfer,
|
43
|
+
driver_factory: nil,
|
44
|
+
log_path: 'logs',
|
45
|
+
|
46
|
+
driver: 'phantomjs',
|
47
|
+
driver_capabilities: Selenium::WebDriver::Remote::Capabilities.firefox,
|
48
|
+
driver_host: 'localhost',
|
49
|
+
driver_port: '8080',
|
50
|
+
driver_remote_timeout: 120,
|
51
|
+
driver_window_width: 1280,
|
52
|
+
driver_window_height: 800,
|
53
|
+
|
54
|
+
phantom_load_images: false,
|
55
|
+
phantom_proxy: nil,
|
56
|
+
phantom_ssl: 'any',
|
57
|
+
phantom_bin_path: 'phantomjs',
|
58
|
+
phantom_lock_file: nil
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
def set(_options)
|
63
|
+
@values.merge! _options
|
64
|
+
end
|
65
|
+
|
66
|
+
def driver_remote_host
|
67
|
+
if driver_host then nil
|
68
|
+
elsif driver_port then "http://#{driver_host}"
|
69
|
+
else "http://#{driver_host}:#{driver_port}"
|
70
|
+
end
|
71
|
+
end
|
26
72
|
|
27
73
|
def driver_config
|
28
74
|
{
|
29
|
-
name:
|
30
|
-
capabilities:
|
75
|
+
name: driver,
|
76
|
+
capabilities: driver_capabilities,
|
31
77
|
remote_host: driver_remote_host,
|
32
|
-
remote_timeout:
|
33
|
-
window_width:
|
34
|
-
window_height:
|
78
|
+
remote_timeout: driver_remote_timeout,
|
79
|
+
window_width: driver_window_width,
|
80
|
+
window_height: driver_window_height
|
35
81
|
}
|
36
82
|
end
|
37
83
|
|
38
|
-
def
|
39
|
-
|
84
|
+
def phantom_mode_enabled?
|
85
|
+
driver.to_s == 'phantomjs'
|
40
86
|
end
|
41
87
|
|
42
88
|
def phantom_config
|
43
89
|
{
|
44
|
-
load_images:
|
45
|
-
proxy:
|
46
|
-
ssl:
|
47
|
-
bin_path:
|
48
|
-
lock_file:
|
90
|
+
load_images: phantom_load_images,
|
91
|
+
proxy: phantom_proxy,
|
92
|
+
ssl: phantom_ssl,
|
93
|
+
bin_path: phantom_bin_path,
|
94
|
+
lock_file: phantom_lock_file,
|
95
|
+
log_file: log_path ? File.join(log_path, 'phantom.log') : nil
|
49
96
|
}
|
50
97
|
end
|
51
98
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
@driver_name = :chrome
|
57
|
-
@driver_capabilities = Selenium::WebDriver::Remote::Capabilities.firefox
|
58
|
-
@driver_host = 'localhost'
|
59
|
-
@driver_port = '8080'
|
60
|
-
@driver_remote_timeout = 120
|
61
|
-
@driver_window_width = 1280
|
62
|
-
@driver_window_height = 800
|
63
|
-
|
64
|
-
@phantom_enabled = false
|
65
|
-
@phantom_load_images = false
|
66
|
-
@phantom_proxy = nil
|
67
|
-
@phantom_ssl = 'any'
|
68
|
-
@phantom_bin_path = 'phantomjs'
|
69
|
-
@phantom_lock_file = nil
|
70
|
-
end
|
71
|
-
|
72
|
-
private
|
73
|
-
|
74
|
-
def driver_remote_host
|
75
|
-
if @driver_host.nil? then nil
|
76
|
-
elsif @driver_port.nil? then "http://#{@driver_host}"
|
77
|
-
else "http://#{@driver_host}:#{@driver_port}"
|
78
|
-
end
|
79
|
-
end
|
99
|
+
# Add enviroment support (like a Gemfile)
|
100
|
+
# group :test { set_driver :phantom }
|
101
|
+
# set_driver :phantom, group: :test
|
80
102
|
|
81
103
|
end
|
82
104
|
|
data/lib/crabfarm/context.rb
CHANGED
@@ -29,14 +29,14 @@ module Crabfarm
|
|
29
29
|
private
|
30
30
|
|
31
31
|
def init_phantom_if_required
|
32
|
-
if @module.settings.
|
32
|
+
if @module.settings.phantom_mode_enabled?
|
33
33
|
@phantom = PhantomRunner.new @module.settings.phantom_config
|
34
34
|
@phantom.start
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
def build_driver_factory
|
39
|
-
if @module.settings.
|
39
|
+
if @module.settings.phantom_mode_enabled?
|
40
40
|
PhantomDriverFactory.new @phantom, @module.settings.driver_config
|
41
41
|
else
|
42
42
|
return @module.settings.driver_factory if @module.settings.driver_factory
|
data/lib/crabfarm/loader.rb
CHANGED
@@ -6,58 +6,75 @@ module Crabfarm
|
|
6
6
|
|
7
7
|
attr_reader :module
|
8
8
|
|
9
|
-
def initialize(_base_path,
|
9
|
+
def initialize(_base_path, _module=Object)
|
10
10
|
@path = _base_path
|
11
|
-
@
|
12
|
-
@
|
13
|
-
@
|
14
|
-
"::#{@name}".constantize rescue nil
|
15
|
-
else nil end
|
11
|
+
@module = _module
|
12
|
+
@config = nil
|
13
|
+
@source_loaded = false
|
16
14
|
end
|
17
15
|
|
18
|
-
def
|
19
|
-
|
16
|
+
def load(_overrides=nil)
|
17
|
+
load_config _overrides
|
18
|
+
load_source
|
20
19
|
end
|
21
20
|
|
22
|
-
def
|
23
|
-
|
21
|
+
def load_config(_overrides=nil)
|
22
|
+
raise ConfigurationError.new 'Source already loaded, call unload_source first' if @source_loaded
|
23
|
+
raise ConfigurationError.new 'Crabfile not found' unless File.exists? crafile_path
|
24
|
+
|
25
|
+
@config = read_crabfile crafile_path
|
26
|
+
@config.set _overrides unless _overrides.nil?
|
27
|
+
end
|
28
|
+
|
29
|
+
def load_source
|
30
|
+
raise ConfigurationError.new 'Crabfile must be loaded first' if @config.nil?
|
31
|
+
raise ConfigurationError.new 'Source already loaded, call reload_source instead' if @source_loaded
|
32
|
+
|
33
|
+
require_from_path source_path
|
34
|
+
@source_loaded = true
|
35
|
+
end
|
36
|
+
|
37
|
+
def unload_source
|
38
|
+
# TODO: unload every class in a list
|
39
|
+
@source_loaded = false
|
24
40
|
end
|
25
41
|
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
@module.send(:remove_const, :CF_CONFIG) rescue nil
|
30
|
-
@module.const_set :CF_CONFIG, crabfile
|
42
|
+
def reload_source
|
43
|
+
unload_source if @source_loaded
|
44
|
+
load_source
|
31
45
|
end
|
32
46
|
|
33
|
-
def
|
34
|
-
|
35
|
-
Context.new @module
|
47
|
+
def is_loaded?
|
48
|
+
@source_loaded
|
36
49
|
end
|
37
50
|
|
38
|
-
def
|
39
|
-
|
40
|
-
@module
|
51
|
+
def load_context(_overrides={})
|
52
|
+
raise ConfigurationError.new 'Must load source first' unless @source_loaded
|
53
|
+
Context.new ModuleHelper.new @module, @config
|
41
54
|
end
|
42
55
|
|
43
56
|
private
|
44
57
|
|
45
|
-
def
|
46
|
-
|
58
|
+
def crafile_path
|
59
|
+
File.join @path, 'Crabfile'
|
60
|
+
end
|
61
|
+
|
62
|
+
def source_path
|
63
|
+
File.join @path, 'app'
|
64
|
+
end
|
65
|
+
|
66
|
+
def read_crabfile(_path)
|
47
67
|
config = Configuration.new
|
48
|
-
config.instance_eval
|
49
|
-
@config_block.call(config) unless @config_block.nil?
|
68
|
+
config.instance_eval File.read crafile_path
|
50
69
|
return config
|
51
70
|
end
|
52
71
|
|
53
|
-
def
|
54
|
-
|
55
|
-
|
56
|
-
|
72
|
+
def require_from_path(_src_path)
|
73
|
+
@module.module_eval do
|
74
|
+
# TODO: put every loaded class in a list, store last update or hash so next time is required
|
75
|
+
# it can be reloaded automatically.
|
57
76
|
|
58
|
-
|
59
|
-
loader_code = "
|
60
|
-
pending = Dir.glob('#{File.join(_src_path, '**/*')}').select { |f| f.end_with? '.rb' }.map { |f| f[0...-3] }
|
77
|
+
pending = Dir.glob(File.join(_src_path, '**/*')).select { |f| f.end_with? '.rb' }.map { |f| f[0...-3] }
|
61
78
|
|
62
79
|
while pending.size > 0
|
63
80
|
new_pending = []
|
@@ -72,10 +89,7 @@ module Crabfarm
|
|
72
89
|
require new_pending.first if new_pending.size == pending.size
|
73
90
|
pending = new_pending
|
74
91
|
end
|
75
|
-
|
76
|
-
|
77
|
-
loader_code = "module ::#{_name}; #{loader_code}; end" if _name.present?
|
78
|
-
Object.instance_eval loader_code
|
92
|
+
end
|
79
93
|
end
|
80
94
|
|
81
95
|
end
|
@@ -20,7 +20,7 @@ module Crabfarm
|
|
20
20
|
unless @context.nil?
|
21
21
|
puts "Reloading crawler source".color(:green)
|
22
22
|
@context.release
|
23
|
-
@loader.
|
23
|
+
@loader.reload_source
|
24
24
|
end
|
25
25
|
|
26
26
|
@context = @loader.load_context
|
@@ -56,29 +56,23 @@ module Crabfarm
|
|
56
56
|
alias :r :reset
|
57
57
|
end
|
58
58
|
|
59
|
-
def self.
|
59
|
+
def self.start(_loader)
|
60
|
+
dsl = ConsoleDsl.new(_loader)
|
60
61
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
rescue SystemExit, Interrupt
|
71
|
-
break
|
72
|
-
rescue => e
|
73
|
-
puts "Unknown command".color(:red)
|
74
|
-
end
|
62
|
+
loop do
|
63
|
+
begin
|
64
|
+
dsl.instance_eval Readline.readline("> ", true)
|
65
|
+
rescue SyntaxError => se
|
66
|
+
puts "Syntax error: #{se.message}".color(:red)
|
67
|
+
rescue SystemExit, Interrupt
|
68
|
+
break
|
69
|
+
rescue => e
|
70
|
+
puts "Unknown command".color(:red)
|
75
71
|
end
|
76
|
-
|
77
|
-
puts "Releasing crawling context".color(:green)
|
78
|
-
dsl.context.release
|
79
|
-
else
|
80
|
-
puts "This command can only be run inside a crabfarm application".color(:red)
|
81
72
|
end
|
73
|
+
|
74
|
+
puts "Releasing crawling context".color(:green)
|
75
|
+
dsl.context.release
|
82
76
|
end
|
83
77
|
|
84
78
|
end
|
@@ -8,7 +8,7 @@ module Crabfarm
|
|
8
8
|
|
9
9
|
class API < Grape::API
|
10
10
|
|
11
|
-
|
11
|
+
DEFAULT_WAIT = 60.0 * 5
|
12
12
|
|
13
13
|
format :json
|
14
14
|
prefix :api
|
@@ -27,9 +27,7 @@ module Crabfarm
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def wait
|
30
|
-
|
31
|
-
[params[:wait].to_f, MAX_WAIT].min
|
32
|
-
else MAX_WAIT end
|
30
|
+
params.fetch(:wait, DEFAULT_WAIT)
|
33
31
|
end
|
34
32
|
|
35
33
|
def print_state(_state)
|
@@ -63,8 +61,8 @@ module Crabfarm
|
|
63
61
|
@@evaluator
|
64
62
|
end
|
65
63
|
|
66
|
-
def self.start(_options)
|
67
|
-
@@evaluator = Engines::SafeStateLoop.new
|
64
|
+
def self.start(_loader, _options)
|
65
|
+
@@evaluator = Engines::SafeStateLoop.new _loader
|
68
66
|
begin
|
69
67
|
Support::CustomPuma.run API, _options
|
70
68
|
ensure
|
@@ -5,12 +5,13 @@ module Crabfarm
|
|
5
5
|
|
6
6
|
attr_reader :dsl
|
7
7
|
|
8
|
-
def initialize(_module)
|
8
|
+
def initialize(_module, _config=nil)
|
9
9
|
@module = _module
|
10
|
+
@config = _config || @module::CF_CONFIG
|
10
11
|
end
|
11
12
|
|
12
13
|
def settings
|
13
|
-
@
|
14
|
+
@config
|
14
15
|
end
|
15
16
|
|
16
17
|
def load_state(_name)
|
@@ -33,24 +33,24 @@ module Crabfarm
|
|
33
33
|
cmd << "--webdriver=#{@port}"
|
34
34
|
cmd << "--ssl-protocol=#{@config[:ssl]}" unless @config[:ssl].nil?
|
35
35
|
cmd << "--ignore-ssl-errors=true"
|
36
|
-
cmd << "--webdriver-loglevel=
|
37
|
-
|
36
|
+
cmd << "--webdriver-loglevel=WARN"
|
37
|
+
cmd << "--webdriver-logfile=#{@config[:log_file]}" unless @config[:log_file].nil?
|
38
38
|
cmd.join(' ')
|
39
39
|
end
|
40
40
|
|
41
41
|
def find_available_port
|
42
42
|
with_lock do
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
socket = Socket.new(:INET, :STREAM, 0)
|
44
|
+
socket.bind(Addrinfo.tcp("127.0.0.1", 0))
|
45
|
+
@port = socket.local_address.ip_port
|
46
|
+
socket.close
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
49
50
|
def wait_for_server
|
50
51
|
loop do
|
51
52
|
begin
|
52
|
-
|
53
|
-
Net::HTTP.get_response(URI.parse("http://127.0.0.1:#{@port}"))
|
53
|
+
Net::HTTP.get_response(URI.parse("http://127.0.0.1:#{@port}/status"))
|
54
54
|
break
|
55
55
|
rescue
|
56
56
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Crabfarm
|
2
|
+
module Support
|
3
|
+
module GLI
|
4
|
+
def self.generate_options(_cmd)
|
5
|
+
Configuration::OPTIONS.each do |opt|
|
6
|
+
if opt.type != :mixed
|
7
|
+
_cmd.desc opt.text
|
8
|
+
_cmd.flag "cf-#{opt.name}"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.parse_options(_options)
|
14
|
+
config_overrides = {}
|
15
|
+
Configuration::OPTIONS.each do |opt|
|
16
|
+
value = _options["cf-#{opt.name}"]
|
17
|
+
next if value.nil?
|
18
|
+
|
19
|
+
value = if opt.type.is_a? Array
|
20
|
+
opt.type.find { |t| t.to_s == value }
|
21
|
+
elsif opt.type == :integer then value.to_i
|
22
|
+
elsif opt.type == :float then value.to_f
|
23
|
+
elsif opt.type == :boolean then [true, false].find { |t| t.to_s == value }
|
24
|
+
elsif opt.type == :string then value
|
25
|
+
else nil end
|
26
|
+
next if value.nil?
|
27
|
+
|
28
|
+
config_overrides[opt.name] = value
|
29
|
+
end
|
30
|
+
config_overrides
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -1,3 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# self.phantom_enabled = true
|
1
|
+
set_default_dsl :surfer
|
2
|
+
set_driver :phantomjs
|
@@ -1,13 +1,11 @@
|
|
1
|
-
# Load gems listed in the Gemfile.
|
2
|
-
|
3
1
|
require 'bundler'
|
4
2
|
|
5
|
-
|
6
|
-
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
|
3
|
+
# Load gems listed in the Gemfile.
|
7
4
|
|
8
|
-
|
5
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __FILE__)
|
6
|
+
Bundler.require :default
|
9
7
|
|
10
8
|
# Run code loader
|
11
9
|
|
12
10
|
CF_PATH = File.expand_path('../', __FILE__)
|
13
|
-
CF_LOADER = Crabfarm::Loader.new CF_PATH
|
11
|
+
CF_LOADER = Crabfarm::Loader.new CF_PATH
|
data/lib/crabfarm/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crabfarm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ignacio Baixas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jbuilder
|
@@ -317,6 +317,7 @@ files:
|
|
317
317
|
- lib/crabfarm/rspec.rb
|
318
318
|
- lib/crabfarm/state_store.rb
|
319
319
|
- lib/crabfarm/support/custom_puma.rb
|
320
|
+
- lib/crabfarm/support/gli.rb
|
320
321
|
- lib/crabfarm/templates/boot.rb.erb
|
321
322
|
- lib/crabfarm/templates/crabfarm_bin.erb
|
322
323
|
- lib/crabfarm/templates/Crabfile.erb
|