frecon 0.4.0 → 0.5.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 +4 -4
- data/bin/frecon +81 -4
- data/config/default.yml +32 -0
- data/lib/frecon/base/variables.rb +1 -1
- data/lib/frecon/configuration.rb +67 -0
- data/lib/frecon/configuration_file.rb +45 -0
- data/lib/frecon/console.rb +6 -2
- data/lib/frecon/database.rb +4 -3
- data/lib/frecon/server.rb +20 -6
- data/lib/frecon.rb +2 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3695507c98a8055222ee241b01a4811d02f0aa96
|
4
|
+
data.tar.gz: 152e3d581b3f941762b1cba4b6dfb871408b042d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8da7107dd168433d62a49c08104e3c4f675543e0837c6c3041b67edcfd78710ea2b9ec3c0608f46ac4fc2c39269c005e4536258bd6a17be324cea4f6502757b
|
7
|
+
data.tar.gz: f9811d2b31a5c30fc0597a9357be77122df2d052686857e506a7945b0e85b8635e7626e14b4b1f7312e3774c464508b23c2b6bdc62056609905d35251aa9ca7c
|
data/bin/frecon
CHANGED
@@ -15,8 +15,85 @@ $LOAD_PATH.unshift(lib_directory) unless $LOAD_PATH.map { |directory| File.expan
|
|
15
15
|
|
16
16
|
require "frecon"
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
require "optparse"
|
19
|
+
|
20
|
+
options = {
|
21
|
+
mode: :server,
|
22
|
+
configuration: {}
|
23
|
+
}
|
24
|
+
|
25
|
+
defaults = FReCon::ConfigurationFile.default.read
|
26
|
+
|
27
|
+
optparse = OptionParser.new do |opts|
|
28
|
+
opts.banner = <<EOF
|
29
|
+
Usage: #{$0} [OPTIONS] [MODE]
|
30
|
+
|
31
|
+
If MODE is not present, FReCon starts the Server. If MODE is present, starts
|
32
|
+
with "c", and contains any of the letters of the word "console" in order, FReCon
|
33
|
+
instead starts the Console.
|
34
|
+
EOF
|
35
|
+
|
36
|
+
opts.separator ""
|
37
|
+
opts.separator "Server OPTIONS:"
|
38
|
+
|
39
|
+
opts.on("-o", "--host HOST", "Bind to HOST (default: #{defaults["frecon"]["server"]["host"]})") do |host|
|
40
|
+
options[:configuration] ||= {}
|
41
|
+
options[:configuration]["frecon"] ||= {}
|
42
|
+
options[:configuration]["frecon"]["server"] ||= {}
|
43
|
+
options[:configuration]["frecon"]["server"]["host"] = host
|
44
|
+
end
|
45
|
+
|
46
|
+
opts.on("-p", "--port PORT", "Bind to port PORT (default: #{defaults["frecon"]["server"]["port"]})") do |port|
|
47
|
+
options[:configuration] ||= {}
|
48
|
+
options[:configuration]["frecon"] ||= {}
|
49
|
+
options[:configuration]["frecon"]["server"] ||= {}
|
50
|
+
options[:configuration]["frecon"]["server"]["port"] = port
|
51
|
+
end
|
52
|
+
|
53
|
+
opts.separator ""
|
54
|
+
opts.separator "General OPTIONS:"
|
55
|
+
|
56
|
+
server_environment = defaults["frecon"]["server"]["environment"]
|
57
|
+
console_environment = defaults["frecon"]["console"]["environment"]
|
58
|
+
default_environment_string = server_environment == console_environment ? server_environment : "server: #{server_environment}, console: #{console_environment}"
|
59
|
+
|
60
|
+
opts.on("-E", "--env ENVIRONMENT", "Run in the ENVIRONMENT environment (default: #{default_environment_string})") do |environment|
|
61
|
+
options[:configuration] ||= {}
|
62
|
+
options[:configuration]["frecon"] ||= {}
|
63
|
+
options[:configuration]["frecon"]["server"] ||= {}
|
64
|
+
options[:configuration]["frecon"]["server"]["environment"] = environment
|
65
|
+
options[:configuration]["frecon"]["console"] ||= {}
|
66
|
+
options[:configuration]["frecon"]["console"]["environment"] = environment
|
67
|
+
end
|
68
|
+
|
69
|
+
# opts.on("-v", "--verbose", "Run more verbosely.") do
|
70
|
+
# options[:output_level] = :verbose
|
71
|
+
# end
|
72
|
+
|
73
|
+
# opts.on("-d", "--debug", "Print debugging messages.") do
|
74
|
+
# options[:output_level] = :debug
|
75
|
+
# end
|
76
|
+
|
77
|
+
opts.on("-h", "--help", "Print this usage message.") do
|
78
|
+
puts opts
|
79
|
+
exit
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
optparse.parse!
|
84
|
+
|
85
|
+
ARGV.select do |arg|
|
86
|
+
case arg
|
87
|
+
when /^co?n?s?o?l?e?$/i
|
88
|
+
options[:mode] = :console
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
configuration = FReCon::Configuration.construct!(argument_configuration: options[:configuration])
|
93
|
+
|
94
|
+
case options[:mode]
|
95
|
+
when :server
|
96
|
+
FReCon::Server.start(configuration: configuration)
|
97
|
+
when :console
|
98
|
+
FReCon::Console.start(configuration: configuration)
|
22
99
|
end
|
data/config/default.yml
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
frecon:
|
2
|
+
server:
|
3
|
+
host: "localhost"
|
4
|
+
port: 4567
|
5
|
+
environment: "development"
|
6
|
+
|
7
|
+
console:
|
8
|
+
environment: "development"
|
9
|
+
|
10
|
+
database:
|
11
|
+
mongoid:
|
12
|
+
development:
|
13
|
+
sessions:
|
14
|
+
default:
|
15
|
+
database: frecon
|
16
|
+
hosts:
|
17
|
+
- localhost:27017
|
18
|
+
|
19
|
+
options:
|
20
|
+
use_utc: true
|
21
|
+
raise_not_found_error: false
|
22
|
+
|
23
|
+
production:
|
24
|
+
sessions:
|
25
|
+
default:
|
26
|
+
database: frecon
|
27
|
+
hosts:
|
28
|
+
- localhost:27017
|
29
|
+
|
30
|
+
options:
|
31
|
+
use_utc: true
|
32
|
+
raise_not_found_error: false
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# lib/frecon/configuration.rb
|
2
|
+
#
|
3
|
+
# Copyright (C) 2015 Christopher Cooper, Sam Craig, Tiger Huang, Vincent Mai, Sam Mercier, and Kristofer Rye
|
4
|
+
#
|
5
|
+
# This file is part of FReCon, an API for scouting at FRC Competitions, which is
|
6
|
+
# licensed under the MIT license. You should have received a copy of the MIT
|
7
|
+
# license with this program. If not, please see
|
8
|
+
# <http://opensource.org/licenses/MIT>.
|
9
|
+
|
10
|
+
require "frecon/configuration_file"
|
11
|
+
|
12
|
+
module FReCon
|
13
|
+
class Configuration < Hash
|
14
|
+
def initialize(data)
|
15
|
+
data.each do |key, value|
|
16
|
+
self[key] = value
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_h
|
21
|
+
hash = {}
|
22
|
+
|
23
|
+
self.each do |key, value|
|
24
|
+
case value
|
25
|
+
when Configuration
|
26
|
+
hash[key] = value.to_h
|
27
|
+
else
|
28
|
+
hash[key] = value
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
hash
|
33
|
+
end
|
34
|
+
|
35
|
+
def merge(other)
|
36
|
+
case other
|
37
|
+
when Configuration, Hash
|
38
|
+
other.each do |key, value|
|
39
|
+
case value
|
40
|
+
when Configuration, Hash
|
41
|
+
me = Configuration.new(self[key] || {})
|
42
|
+
me.merge(Configuration.new(value))
|
43
|
+
self[key] = me
|
44
|
+
else
|
45
|
+
self[key] = value
|
46
|
+
end
|
47
|
+
end
|
48
|
+
when nil
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.construct!(default_configuration: ConfigurationFile.default.read,
|
53
|
+
system_configuration: ConfigurationFile.system.read,
|
54
|
+
user_configuration: ConfigurationFile.user.read,
|
55
|
+
argument_configuration: nil)
|
56
|
+
|
57
|
+
configuration_hierarchy = [default_configuration, system_configuration, user_configuration, argument_configuration]
|
58
|
+
|
59
|
+
configuration = Configuration.new({})
|
60
|
+
configuration_hierarchy.each do |other_configuration|
|
61
|
+
configuration.merge(other_configuration)
|
62
|
+
end
|
63
|
+
|
64
|
+
configuration
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# lib/frecon/configuration_file.rb
|
2
|
+
#
|
3
|
+
# Copyright (C) 2015 Christopher Cooper, Sam Craig, Tiger Huang, Vincent Mai, Sam Mercier, and Kristofer Rye
|
4
|
+
#
|
5
|
+
# This file is part of FReCon, an API for scouting at FRC Competitions, which is
|
6
|
+
# licensed under the MIT license. You should have received a copy of the MIT
|
7
|
+
# license with this program. If not, please see
|
8
|
+
# <http://opensource.org/licenses/MIT>.
|
9
|
+
|
10
|
+
require "yaml"
|
11
|
+
require "frecon/configuration"
|
12
|
+
|
13
|
+
module FReCon
|
14
|
+
class ConfigurationFile
|
15
|
+
attr_accessor :filename
|
16
|
+
|
17
|
+
def initialize(filename)
|
18
|
+
@filename = filename
|
19
|
+
end
|
20
|
+
|
21
|
+
def read
|
22
|
+
begin
|
23
|
+
data = open(@filename, "rb") do |io|
|
24
|
+
io.read
|
25
|
+
end
|
26
|
+
|
27
|
+
Configuration.new(YAML.load(data))
|
28
|
+
rescue Errno::ENOENT
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.default
|
34
|
+
self.new(File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "config", "default.yml")))
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.system
|
38
|
+
self.new(File.join("", "etc", "frecon", "config.yml"))
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.user
|
42
|
+
self.new(File.join(Dir.home, "config", "frecon.yml"))
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/frecon/console.rb
CHANGED
@@ -7,13 +7,17 @@
|
|
7
7
|
# license with this program. If not, please see
|
8
8
|
# <http://opensource.org/licenses/MIT>.
|
9
9
|
|
10
|
+
require "frecon/base/variables"
|
11
|
+
require "frecon/configuration"
|
10
12
|
require "frecon/database"
|
11
13
|
require "frecon/server"
|
12
14
|
|
13
15
|
module FReCon
|
14
16
|
class Console
|
15
|
-
def self.start
|
16
|
-
|
17
|
+
def self.start(configuration: Configuration.construct!)
|
18
|
+
environment = configuration["frecon"]["console"]["environment"]
|
19
|
+
mongoid = configuration["frecon"]["database"]["mongoid"]
|
20
|
+
Database.setup(environment: environment, mongoid: mongoid)
|
17
21
|
|
18
22
|
require "pry"
|
19
23
|
|
data/lib/frecon/database.rb
CHANGED
@@ -19,10 +19,11 @@ require "frecon/models"
|
|
19
19
|
|
20
20
|
module FReCon
|
21
21
|
class Database
|
22
|
-
def self.setup(environment,
|
23
|
-
if
|
22
|
+
def self.setup(environment: FReCon.environment, mongoid: nil)
|
23
|
+
if mongoid.is_a?(Hash)
|
24
24
|
mongoid_tempfile = Tempfile.new("FReCon")
|
25
|
-
|
25
|
+
|
26
|
+
mongoid_tempfile.write(mongoid.to_h.to_yaml)
|
26
27
|
mongoid_tempfile.rewind
|
27
28
|
|
28
29
|
Mongoid.load!(mongoid_tempfile.path, environment)
|
data/lib/frecon/server.rb
CHANGED
@@ -9,6 +9,8 @@
|
|
9
9
|
|
10
10
|
require "sinatra/base"
|
11
11
|
|
12
|
+
require "frecon/base/variables"
|
13
|
+
require "frecon/configuration"
|
12
14
|
require "frecon/database"
|
13
15
|
require "frecon/routes"
|
14
16
|
require "frecon/controllers"
|
@@ -21,15 +23,27 @@ module FReCon
|
|
21
23
|
content_type "application/json"
|
22
24
|
end
|
23
25
|
|
24
|
-
def self.
|
25
|
-
|
26
|
-
|
26
|
+
def self.start(**keyword_arguments)
|
27
|
+
run!(**keyword_arguments)
|
28
|
+
end
|
27
29
|
|
28
|
-
|
30
|
+
protected
|
31
|
+
|
32
|
+
def self.setup!(configuration: Configuration.construct!)
|
33
|
+
set :server, %w[thin HTTP webrick]
|
34
|
+
set :bind, configuration["frecon"]["server"]["host"]
|
35
|
+
set :port, configuration["frecon"]["server"]["port"]
|
36
|
+
set :environment, configuration["frecon"]["server"]["environment"]
|
37
|
+
|
38
|
+
mongoid = configuration["frecon"]["database"]["mongoid"]
|
39
|
+
|
40
|
+
Database.setup(environment: environment, mongoid: mongoid)
|
29
41
|
end
|
30
42
|
|
31
|
-
def self.
|
32
|
-
|
43
|
+
def self.run!(**keyword_arguments)
|
44
|
+
setup!(**keyword_arguments)
|
45
|
+
|
46
|
+
super
|
33
47
|
end
|
34
48
|
end
|
35
49
|
end
|
data/lib/frecon.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: frecon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Craig
|
@@ -80,11 +80,14 @@ extensions: []
|
|
80
80
|
extra_rdoc_files: []
|
81
81
|
files:
|
82
82
|
- bin/frecon
|
83
|
+
- config/default.yml
|
83
84
|
- lib/frecon.rb
|
84
85
|
- lib/frecon/base.rb
|
85
86
|
- lib/frecon/base/bson.rb
|
86
87
|
- lib/frecon/base/object.rb
|
87
88
|
- lib/frecon/base/variables.rb
|
89
|
+
- lib/frecon/configuration.rb
|
90
|
+
- lib/frecon/configuration_file.rb
|
88
91
|
- lib/frecon/console.rb
|
89
92
|
- lib/frecon/controller.rb
|
90
93
|
- lib/frecon/controllers.rb
|