larrow-runner 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +25 -0
  3. data/.rspec +2 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +80 -0
  8. data/Rakefile +2 -0
  9. data/bin/larrow +4 -0
  10. data/larrow-runner.gemspec +42 -0
  11. data/lib/larrow/runner/cli/build.rb +41 -0
  12. data/lib/larrow/runner/cli/main.rb +35 -0
  13. data/lib/larrow/runner/cli/tools.rb +34 -0
  14. data/lib/larrow/runner/cli.rb +11 -0
  15. data/lib/larrow/runner/errors.rb +1 -0
  16. data/lib/larrow/runner/helper.rb +0 -0
  17. data/lib/larrow/runner/logger.rb +69 -0
  18. data/lib/larrow/runner/manager.rb +114 -0
  19. data/lib/larrow/runner/manifest/adapter/blank.rb +8 -0
  20. data/lib/larrow/runner/manifest/adapter/larrow.rb +32 -0
  21. data/lib/larrow/runner/manifest/adapter/travis.rb +73 -0
  22. data/lib/larrow/runner/manifest/base_loader.rb +21 -0
  23. data/lib/larrow/runner/manifest/configuration.rb +126 -0
  24. data/lib/larrow/runner/manifest.rb +48 -0
  25. data/lib/larrow/runner/model/app.rb +62 -0
  26. data/lib/larrow/runner/model/node.rb +73 -0
  27. data/lib/larrow/runner/service/cloud.rb +54 -0
  28. data/lib/larrow/runner/service/executor.rb +56 -0
  29. data/lib/larrow/runner/service.rb +8 -0
  30. data/lib/larrow/runner/session.rb +64 -0
  31. data/lib/larrow/runner/vcs/base.rb +17 -0
  32. data/lib/larrow/runner/vcs/file_system.rb +58 -0
  33. data/lib/larrow/runner/vcs/github.rb +48 -0
  34. data/lib/larrow/runner/vcs.rb +20 -0
  35. data/lib/larrow/runner/version.rb +5 -0
  36. data/lib/larrow/runner.rb +34 -0
  37. data/spec/fixtures/travis_erlang.yml +8 -0
  38. data/spec/fixtures/travis_ruby.yml +9 -0
  39. data/spec/integration/build_cmds_spec.rb +18 -0
  40. data/spec/integration/test_cmds_spec.rb +13 -0
  41. data/spec/manifest/travis_spec.rb +42 -0
  42. data/spec/model/node_spec.rb +18 -0
  43. data/spec/service/executor_spec.rb +26 -0
  44. data/spec/spec_helper.rb +10 -0
  45. data/spec/vcs/github_spec.rb +33 -0
  46. metadata +340 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 556f8afefdbfa12b93f7c7f3029fcc5bf55b23f9
4
+ data.tar.gz: 170901120bc4eeec5370639ae6bb00c33c6ebf14
5
+ SHA512:
6
+ metadata.gz: 2b9e24d845add9b4f3e99cb968e5146541f2e8aa025fc20dc97df7aac5d2a85286e318fe10cec77c1dafdf02f95749280eefe55a1183fda70ccf016f8b105789
7
+ data.tar.gz: 3597ae6bd3f599e1edb2b645fd9b752d46caf9a2b5c865303d1a7b8a10588e71e873b460e056dfca6d10349e8430e8485caecd2a2279dddcdbbd7bc95d11dff9
data/.gitignore ADDED
@@ -0,0 +1,25 @@
1
+ *.swp
2
+ *.gem
3
+ *.rbc
4
+ *.log
5
+ .bundle
6
+ .config
7
+ .yardoc
8
+ Gemfile.lock
9
+ InstalledFiles
10
+ _yardoc
11
+ coverage
12
+ doc/
13
+ lib/bundler/man
14
+ pkg
15
+ rdoc
16
+ spec/reports
17
+ test/tmp
18
+ test/version_tmp
19
+ tmp
20
+ *.bundle
21
+ *.so
22
+ *.o
23
+ *.a
24
+ mkmf.log
25
+ tags
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format documentation
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.1
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ # Specify your gem's dependencies in larrow-runner.gemspec
2
+ source 'https://rubygems.org'
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 lifu
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # Larrow::Runner
2
+
3
+ It is a command line tool with the following goals:
4
+
5
+ * build your application
6
+ * make a quick image for developer
7
+ * save best practices on devops of your team
8
+ * help to build the CI service
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+ ```
14
+ $ gem 'larrow-runner'
15
+ ```
16
+
17
+ And then execute:
18
+ ```
19
+ $ bundle
20
+ ```
21
+
22
+ Or install it yourself as:
23
+ ```
24
+ $ gem install larrow-runner
25
+ ```
26
+
27
+ You should setup your cloud access ( why qingcloud ? ) before using larrow
28
+
29
+ ```
30
+ $ larrow login
31
+ please setup your account of Qing Cloud:
32
+ access id: ******
33
+ secret key: ******
34
+ keypair id: ******
35
+ zone_id(default: pek1): pek1
36
+ Congratulation! Now you can use larrow to help your develop works.
37
+ ```
38
+
39
+ ## Usage
40
+
41
+ ### testing
42
+
43
+ unit test, integration test, system test, etc.)
44
+ ```
45
+ $ larrow go <source_url>
46
+ ```
47
+
48
+ ### application startup
49
+
50
+ make a standalone application and start it(if necessary)
51
+ ```
52
+ $ larrow build server <source_url>
53
+ ```
54
+
55
+ ### build image
56
+
57
+ use image to speed-up your development
58
+
59
+ * build a image of your application
60
+ ```
61
+ $ larrow build image <source_url>
62
+ ```
63
+
64
+ * build a image from local LarrowFile
65
+ ```
66
+ $ larrow build image <larrow_file_path>
67
+ ```
68
+
69
+ ## Larrow File
70
+
71
+ Larrow need to know how to setup/make/install/start... your application. So developer could write a `Larrow File` to declare these things.
72
+
73
+ Larrow can be used as a CI worker like travis.
74
+ ## Contributing
75
+
76
+ 1. Fork it ( http://github.com/fsword/larrow-core/fork )
77
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
78
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
79
+ 4. Push to the branch (`git push origin my-new-feature`)
80
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+ require 'parallel_tests/tasks'
data/bin/larrow ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'larrow/runner'
3
+
4
+ Larrow::Runner::Cli::Main.start
@@ -0,0 +1,42 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'larrow/runner/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "larrow-runner"
8
+ spec.version = Larrow::Runner::VERSION
9
+ spec.authors = ["fsword"]
10
+ spec.email = ["li.jianye@gmail.com"]
11
+ spec.summary = %q{Core application of larrow, CLI based}
12
+ spec.description = %q{Automatically build your app from source code}
13
+ spec.homepage = "http://github.com/fsword/larrow-core"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency 'rake', '~> 10'
23
+ spec.add_development_dependency "rspec",'~> 3.0'
24
+ spec.add_development_dependency "simplecov", '~> 0.9'
25
+ spec.add_development_dependency "parallel_tests", '~> 1.0'
26
+
27
+ spec.add_runtime_dependency 'tilt', '~> 2'
28
+ spec.add_runtime_dependency 'thor', '~> 0.19'
29
+ spec.add_runtime_dependency "activesupport", "~> 4.1"
30
+ spec.add_runtime_dependency "pry", '~> 0.10', '0.10.0'
31
+ spec.add_runtime_dependency "pry-nav", '~> 0.2', '0.2.4'
32
+ spec.add_runtime_dependency "minitest", '~> 5.4', '5.4.1'
33
+
34
+ spec.add_runtime_dependency 'net-ssh', '~> 2.9'
35
+ spec.add_runtime_dependency 'net-scp', '~> 1.2'
36
+
37
+ spec.add_runtime_dependency "faraday", '~> 0.9'
38
+
39
+ spec.add_runtime_dependency 'larrow-qingcloud', '~> 0'
40
+ spec.add_runtime_dependency 'promising', '~> 0.3'
41
+
42
+ end
@@ -0,0 +1,41 @@
1
+ module Larrow::Runner
2
+ module Cli
3
+ class Build < ::Thor
4
+
5
+ desc 'server <URL/path>','build the server'
6
+ long_desc <<-EOF.gsub("\n", "\x5")
7
+ Setup a server for application:
8
+ * assign resource
9
+ * init environment
10
+ * prepare server
11
+ * start server
12
+ EOF
13
+ option :debug
14
+ option :nocolor
15
+ def server url
16
+ RunOption.update options
17
+ RunOption[:keep] = true
18
+ RunLogger.nocolor if RunOption.key? :nocolor
19
+ Manager.new(url).build_server
20
+ end
21
+
22
+ desc 'image <URL/path>', 'build a base image'
23
+ long_desc <<-EOF.gsub("\n", "\x5")
24
+ Reduce the time is very important for CI or other develop activity.
25
+ There is a best practise to build a image as base system for the project.
26
+ Larrow will help you to make it simple and reuse the configuration items.
27
+
28
+ Your can use a single Larrowfile as the argument.
29
+ EOF
30
+ option :debug
31
+ option :nocolor
32
+ def image url
33
+ RunOption.update options
34
+ RunLogger.nocolor if RunOption.key? :nocolor
35
+ Manager.new(url).build_image
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+
@@ -0,0 +1,35 @@
1
+ module Larrow::Runner
2
+ module Cli
3
+ class Main < ::Thor
4
+ desc 'version','show version of larrow-runner'
5
+ def version
6
+ puts VERSION
7
+ end
8
+
9
+ desc 'go [URL]','execute your app'
10
+ long_desc <<-EOF
11
+ larrow will build a whole world for your application
12
+ EOF
13
+ option :debug
14
+ option :nocolor
15
+ def go url
16
+ RunOption.update options
17
+ RunLogger.nocolor if RunOption.key? :nocolor
18
+ Manager.new(url).go
19
+ end
20
+
21
+ desc 'login', 'log into Qingcloud service'
22
+ option :force
23
+ def login
24
+ RunOption.update options
25
+ Session.login
26
+ end
27
+
28
+ desc 'build [SUBCOMMAND]', 'build your server or images'
29
+ subcommand 'build', Build
30
+
31
+ desc 'tools [SUBCOMMAND]', 'some tools'
32
+ subcommand 'tools', Tools
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,34 @@
1
+ module Larrow::Runner
2
+ module Cli
3
+ class Tools < ::Thor
4
+ desc 'dump [URL]','convert and dump configuration of the project'
5
+ long_desc <<-EOF.gsub("\n", "\x5")
6
+ Read other CI file(eg:.travis.yml), conert to larrow style and dump to STDOUT.
7
+ You can save it as .larrow.yml on the project root folder.
8
+ EOF
9
+ def dump url
10
+ vcs = Vcs.detect url
11
+ configuration = vcs.configuration false
12
+ puts configuration.dump
13
+ end
14
+
15
+ desc 'resource','show all resource in Resource.yml'
16
+ long_desc <<-EOF.gsub("\n", "\x5")
17
+ Read .larrow.resource from current directory, show information.
18
+ resource: instance, eip, etc...
19
+ EOF
20
+ def resource
21
+ Manager.resource
22
+ end
23
+
24
+ desc 'cleanup','cleanup all resource in Resource.yml'
25
+ long_desc <<-EOF.gsub("\n", "\x5")
26
+ Read .larrow.resource from current directory, and release all resources.
27
+ resource: instance, eip, etc...
28
+ EOF
29
+ def cleanup
30
+ Manager.cleanup
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,11 @@
1
+ require 'thor'
2
+
3
+ module Larrow
4
+ module Runner
5
+ module Cli
6
+ autoload :Main, 'larrow/runner/cli/main'
7
+ autoload :Build, 'larrow/runner/cli/build'
8
+ autoload :Tools, 'larrow/runner/cli/tools'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1 @@
1
+ ExecutionError = Class.new StandardError
File without changes
@@ -0,0 +1,69 @@
1
+ require 'logger'
2
+
3
+ module Larrow::Runner
4
+ # usage:
5
+ # logger = Larrow::Runner::Logger filename
6
+ # logger.level(3).color('red').info 'hello'
7
+ # logger.level(3).title 'hello'
8
+ # logger.level(3).detail 'hello'
9
+ class Logger
10
+ def initialize logger, level:nil, color:'magenta'
11
+ @inner_logger = if logger.is_a? ::Logger
12
+ logger
13
+ else
14
+ ::Logger.new logger
15
+ end
16
+ @inner_logger.formatter = proc do |_severity, datetime, _progname, msg|
17
+ "[#{datetime.strftime('%H:%M:%S')}] #{msg}\n"
18
+ end
19
+ @level = level
20
+ @color = color
21
+ end
22
+
23
+ def nocolor
24
+ @color = nil
25
+ end
26
+
27
+ def level level
28
+ Logger.new @inner_logger, level: level, color: @color
29
+ end
30
+
31
+ def color color
32
+ return self if RunOption.key? :nocolor # skip color when no color
33
+ Logger.new @inner_logger, level: @level, color: color
34
+ end
35
+
36
+ def info msg
37
+ indent = " " * (@level || 0)
38
+ wrapped = wrap_color msg
39
+ @inner_logger.info "#{indent}#{wrapped}"
40
+ end
41
+
42
+ def title msg
43
+ color('yellow').info msg
44
+ end
45
+
46
+ def detail msg
47
+ color('green').info msg
48
+ end
49
+
50
+ def err msg
51
+ color('red').info msg
52
+ end
53
+
54
+ def wrap_color msg
55
+ return msg if @color.nil?
56
+ code = case @color.downcase
57
+ when 'black' then '30'
58
+ when 'red' then '31'
59
+ when 'green' then '32'
60
+ when 'yellow' then '33'
61
+ when 'blue' then '34'
62
+ when 'magenta' then '35'
63
+ when 'cyan' then '36'
64
+ when 'white' then '37'
65
+ end
66
+ "\033[#{code}m#{msg}\033[0m"
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,114 @@
1
+ gem 'pry', '0.10.0'
2
+ gem 'pry-nav', '0.2.4'
3
+ require 'pry'
4
+ require 'pry-nav'
5
+ module Larrow::Runner
6
+ class Manager
7
+ include Service
8
+
9
+ attr_accessor :vcs
10
+ attr_accessor :app
11
+ def initialize target_url
12
+ signal_trap
13
+ self.vcs = Vcs.detect target_url
14
+ self.app = Model::App.new vcs
15
+ end
16
+
17
+ def signal_trap
18
+ trap('INT') do
19
+ RunLogger.title 'try to release'
20
+ release
21
+ ::Kernel.exit
22
+ end
23
+ end
24
+
25
+ def go
26
+ handle_exception do
27
+ app.allocate
28
+ app.action :all
29
+ end
30
+ end
31
+
32
+ def build_image
33
+ handle_exception do
34
+ app.allocate
35
+ app.build_image
36
+ end
37
+ end
38
+
39
+ def build_server
40
+ handle_exception do
41
+ app.allocate
42
+ app.deploy
43
+ end
44
+ end
45
+
46
+ def handle_exception
47
+ yield
48
+ rescue => e
49
+ RunOption[:keep] = true if e.is_a?(ExecutionError)
50
+ if e.is_a?(ExecutionError) && !debug?
51
+ data = eval(e.message)
52
+ RunLogger.level(1).err "Execute fail: #{data[:status]}"
53
+ RunLogger.level(1).err "-> #{data[:errmsg]}"
54
+ else
55
+ debug? ? binding.pry : raise(e)
56
+ end
57
+ ensure
58
+ if keep?
59
+ store_resource
60
+ else
61
+ release
62
+ end
63
+ end
64
+
65
+ def debug?
66
+ RunOption.key? :debug
67
+ end
68
+
69
+ def keep?
70
+ RunOption.key? :keep
71
+ end
72
+
73
+ def store_resource
74
+ resource = app.dump
75
+ File.write '.larrow.resource', YAML.dump(resource)
76
+ RunLogger.title 'store resource'
77
+ end
78
+
79
+ def release
80
+ RunLogger.title 'release resource'
81
+ begin_at = Time.new
82
+ if app && app.node
83
+ app.node.destroy if @state != :release
84
+ end
85
+ during = sprintf('%.2f', Time.new - begin_at)
86
+ RunLogger.level(1).detail "released(#{during}s)"
87
+ end
88
+
89
+ def self.resource
90
+ resource_iterator do |clazz, array|
91
+ RunLogger.detail clazz.name.split("::").last
92
+ clazz.show array, 1
93
+ end
94
+ end
95
+
96
+ def self.cleanup
97
+ resource_iterator do |clazz, array|
98
+ clazz.cleanup array
99
+ end
100
+ RunLogger.title 'resource cleaned'
101
+ end
102
+
103
+ def self.resource_iterator
104
+ resource = YAML.load(File.read '.larrow.resource') rescue nil
105
+ return if resource.nil?
106
+ resource.each_pair do |k,array|
107
+ case k
108
+ when :nodes
109
+ yield Model::Node, array
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,8 @@
1
+ module Larrow::Runner::Manifest
2
+ class Blank < BaseLoader
3
+ def load
4
+ self.configuration = Configuration.new
5
+ end
6
+ end
7
+ end
8
+
@@ -0,0 +1,32 @@
1
+ module Larrow::Runner::Manifest
2
+ class Larrow < BaseLoader
3
+ def config_file
4
+ source_accessor.larrow_file || '.larrow.yml'
5
+ end
6
+
7
+ # TODO manifest validation
8
+ def parse content
9
+ data = YAML.load(content).with_indifferent_access
10
+ if data.is_a? Array # stages as a Array
11
+ # TODO
12
+ elsif data.is_a? Hash # steps as a Hash
13
+ configuration.image = data[:image]
14
+ Configuration::DEFINED_GROUPS[:custom].each do |title|
15
+ v = data[title]
16
+ build_step title,v if v
17
+ end
18
+ end
19
+ end
20
+
21
+ def build_step title, lines
22
+ source_dir = if title == :init
23
+ nil
24
+ else
25
+ configuration.source_dir
26
+ end
27
+ scripts = lines.map{|s| Script.new s, base_dir: source_dir}
28
+ configuration.put_to_step title, scripts
29
+ end
30
+ end
31
+ end
32
+
@@ -0,0 +1,73 @@
1
+ require 'yaml'
2
+
3
+ module Larrow::Runner::Manifest
4
+ class Travis < BaseLoader
5
+ CONFIG_FILE='.travis.yml'
6
+ attr_accessor :data
7
+
8
+ def parse content
9
+ self.data = YAML.load(content).with_indifferent_access
10
+ build_language
11
+ map_step :prepare, :before_script
12
+ map_step :functional_test, :script
13
+ end
14
+
15
+ def map_step title, travis_title
16
+ source_dir = configuration.source_dir
17
+ scripts = (data[travis_title] || []).map do |cmd|
18
+ Script.new cmd, base_dir: source_dir
19
+ end
20
+ return nil if scripts.empty?
21
+
22
+ configuration.put_to_step title, scripts
23
+ end
24
+
25
+ def build_language
26
+ return if data[:language].nil?
27
+ clazz = eval data[:language].camelize
28
+ clazz.fulfill(data,configuration)
29
+ end
30
+ end
31
+ class Erlang
32
+ TEMPLATE_PATH='/opt/install/erlang/%s'
33
+ def self.fulfill data, configuration
34
+ revision = case data[:otp_release].last
35
+ when /R15/ then 'R15B03'
36
+ when /R16/ then 'R16B03'
37
+ when /17/ then '17.1'
38
+ end rescue '17'
39
+ install_dir = sprintf(TEMPLATE_PATH,revision.downcase)
40
+ lines = <<-EOF
41
+ echo '-s' >> .curlrc
42
+ curl https://raw.githubusercontent.com/spawngrid/kerl/master/kerl -o /usr/local/bin/kerl
43
+ chmod a+x /usr/local/bin/kerl
44
+ kerl update releases
45
+ kerl build #{revision} #{revision}
46
+ kerl install #{revision} #{install_dir}
47
+ echo 'source #{install_dir}/activate' >> $HOME/.bashrc
48
+ EOF
49
+ lines.split(/\n/).each do |line|
50
+ s = Script.new line
51
+ configuration.put_to_step :init, s
52
+ end
53
+ end
54
+ end
55
+
56
+ class Ruby
57
+ def self.fulfill data, configuration
58
+ return unless data[:rvm] # only rvm is supported for ruby
59
+ version = data[:rvm].last
60
+ lines = <<-EOF
61
+ echo '-s' >> .curlrc
62
+ curl -sSL https://get.rvm.io | bash -s stable
63
+ echo 'source /etc/profile.d/rvm.sh' >> .bashrc
64
+ rvm install #{version}
65
+ EOF
66
+ lines.split(/\n/).each do |line|
67
+ s = Script.new line
68
+ configuration.put_to_step :init, s
69
+ end
70
+ end
71
+ end
72
+ end
73
+
@@ -0,0 +1,21 @@
1
+ module Larrow::Runner::Manifest
2
+ class BaseLoader
3
+ attr_accessor :source_accessor,:configuration
4
+ def initialize source_accessor
5
+ self.source_accessor = source_accessor
6
+ end
7
+
8
+ def load
9
+ content = source_accessor.get config_file
10
+ return nil if content.nil?
11
+
12
+ self.configuration = Configuration.new
13
+ parse content
14
+ self.configuration
15
+ end
16
+
17
+ def config_file
18
+ self.class.const_get('CONFIG_FILE')
19
+ end
20
+ end
21
+ end