evertils 0.3.7 → 0.3.8

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/bin/evertils +7 -38
  3. data/evertils.gemspec +1 -1
  4. data/lib/evertils/config.rb +55 -0
  5. data/lib/evertils/controller.rb +69 -0
  6. data/lib/{controllers → evertils/controllers}/convert.rb +1 -1
  7. data/lib/evertils/controllers/firstrun.rb +24 -0
  8. data/lib/{controllers → evertils/controllers}/generate.rb +11 -27
  9. data/lib/{controllers → evertils/controllers}/get.rb +3 -3
  10. data/lib/{controllers → evertils/controllers}/status.rb +2 -2
  11. data/lib/{helper.rb → evertils/helper.rb} +3 -3
  12. data/lib/{helpers → evertils/helpers}/api-enml-handler.rb +3 -10
  13. data/lib/{helpers → evertils/helpers}/evernote-markdown.rb +14 -14
  14. data/lib/{helpers → evertils/helpers}/formatting.rb +29 -27
  15. data/lib/evertils/request.rb +31 -0
  16. data/lib/evertils/router.rb +56 -0
  17. data/lib/{type.rb → evertils/type.rb} +8 -2
  18. data/lib/{types → evertils/types}/daily.rb +2 -5
  19. data/lib/{types → evertils/types}/monthly-task-summary.rb +2 -11
  20. data/lib/{types → evertils/types}/monthly.rb +3 -6
  21. data/lib/{types → evertils/types}/priority-queue.rb +3 -5
  22. data/lib/{types → evertils/types}/weekly.rb +4 -8
  23. data/lib/{utils.rb → evertils/utils.rb} +4 -4
  24. data/lib/evertils/version.rb +3 -0
  25. data/lib/evertils.rb +39 -0
  26. metadata +33 -34
  27. data/lib/command.rb +0 -179
  28. data/lib/config.rb +0 -65
  29. data/lib/controller.rb +0 -117
  30. data/lib/log.rb +0 -111
  31. data/lib/logs.rb +0 -34
  32. data/lib/request.rb +0 -23
  33. data/lib/router.rb +0 -67
  34. data/lib/version.rb +0 -3
  35. /data/lib/{configs → evertils/configs}/templates/daily.enml +0 -0
  36. /data/lib/{configs/templates/mts.enml → evertils/configs/templates/monthly-task-summaries.enml} +0 -0
  37. /data/lib/{configs → evertils/configs}/templates/monthly.enml +0 -0
  38. /data/lib/{configs → evertils/configs}/templates/pq.enml +0 -0
  39. /data/lib/{configs → evertils/configs}/templates/weekly.enml +0 -0
  40. /data/lib/{controllers → evertils/controllers}/new.rb +0 -0
  41. /data/lib/{helpers → evertils/helpers}/evernote-enml.rb +0 -0
  42. /data/lib/{helpers → evertils/helpers}/results.rb +0 -0
  43. /data/lib/{helpers → evertils/helpers}/time.rb +0 -0
  44. /data/lib/{kernel.rb → evertils/kernel.rb} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6bf3d2b3c26ba0ece79f8aa12e697f5cd7edae75
4
- data.tar.gz: 2fe5780fb6e21b93c3afb34f8dbd6f934f812f1c
3
+ metadata.gz: 9e842768fbe2f278375d2237fd4f574b5384bc0e
4
+ data.tar.gz: 2206bb78084adf5ea0f47d5efdb70be1e8ca808f
5
5
  SHA512:
6
- metadata.gz: 57861f7047caa63344d7a55f0f0a0f99a9d67d4d2f84463034a68ddf0633c09f4ec9b8aa7478ea0c28fb0057cdca6ee9fd38b581045e525bdc91c992bce83b36
7
- data.tar.gz: c7ffdb0d40287f62da1ad3291b882e29af084b4276de62a8c1200e56a3e28e12b6b0b408d96d7dfdaa164becbc828895cd48a134d30123b1cdf7ba0e2b6b5465
6
+ metadata.gz: 6219f5fcce8ada651fac7abcfa8b7f2e194bb3946e1045600bb74729d5f745473075ab14c46122d74cc9c34617725f4eb2490cac2e1b1dca222f251e95ea1943
7
+ data.tar.gz: c5dc1a67ae390280ddf15ce6709735bf8e1ea698c187589ace2d0e6791a4c3fdcc0c565be78cb020588033e62c7645ee35eea6b909b4ddb4fb7e1e7714f6b66c
data/bin/evertils CHANGED
@@ -1,46 +1,15 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'date'
4
- require 'time'
5
- require 'json'
6
- require 'optparse'
7
- require 'rbconfig'
8
- require 'evernote-thrift'
9
- require 'net/http'
10
- require 'uri'
11
- require 'fileutils'
12
- require 'cgi'
13
- require 'notifaction'
14
- require 'digest/md5'
15
- require 'mime/types'
16
- require 'evertils/common'
17
- require 'yaml'
18
- require 'nokogiri'
3
+ # fix load path
4
+ lib = File.expand_path('../../lib', __FILE__)
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
19
6
 
20
- # include required files
21
- require_relative '../lib/kernel'
22
- require_relative '../lib/version'
23
- require_relative '../lib/type'
24
- require_relative '../lib/helpers/time'
25
- require_relative '../lib/helpers/results'
26
- require_relative '../lib/helpers/api-enml-handler'
27
- require_relative '../lib/log'
28
- require_relative '../lib/config'
29
- require_relative '../lib/request'
30
- require_relative '../lib/utils'
31
- require_relative '../lib/logs'
32
- require_relative '../lib/command'
33
- require_relative '../lib/controller'
34
- require_relative '../lib/router'
35
- require_relative '../lib/helpers/formatting'
36
- require_relative '../lib/helpers/evernote-enml'
37
- require_relative '../lib/helper'
7
+ require 'evertils'
38
8
 
39
9
  # Modify configuration options here
40
- $config = Evertils::Cfg.new
41
- # Bootstrap!
42
- $config.bootstrap!
10
+ app = Evertils::Cfg.new
11
+ app.bootstrap!
43
12
 
44
13
  # Config file located, route the request
45
- req = Evertils::Router.new
14
+ req = Evertils::Router.new(app)
46
15
  req.route
data/evertils.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  lib = File.expand_path('../lib', __FILE__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
- require './lib/version'
4
+ require 'evertils/version'
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = 'evertils'
@@ -0,0 +1,55 @@
1
+ module Evertils
2
+ class Cfg
3
+ # Perform first run tasks and create or read config file values
4
+ def bootstrap!
5
+ populate_config
6
+
7
+ return if valid_config?
8
+
9
+ # no config file found, lets create one using the firstrun controller
10
+ require 'client/controller/firstrun'
11
+
12
+ controller = Evertils::Controller::Firstrun.new
13
+ controller.default
14
+
15
+ populate_config
16
+ end
17
+
18
+ # Returns a hash of all module constants and their values
19
+ def options
20
+ keys = Evertils.constants.select { |name| constant?(name) }
21
+ hash = {}
22
+
23
+ keys.each { |key| hash[key] = Evertils.const_get(key) }
24
+ hash
25
+ end
26
+
27
+ # Populates the internal hash which stores any values set in the config file
28
+ def populate_config
29
+ file = File.expand_path("~/.evertils/config.yml")
30
+ fmt = Evertils::Helper.load('Formatting')
31
+
32
+ @yml = fmt.symbolize(::YAML.load_file(file))
33
+ self
34
+ end
35
+
36
+ # Get a specific value from the config file data
37
+ # Params:
38
+ # +name+:: String/symbol key value
39
+ def get(name)
40
+ @yml[name.to_sym]
41
+ end
42
+
43
+ private
44
+
45
+ # Check if configuration data exists
46
+ def valid_config?
47
+ !@yml.nil?
48
+ end
49
+
50
+ # Checks if string is a constant
51
+ def constant?(name)
52
+ name == name.upcase
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,69 @@
1
+ module Evertils
2
+ module Controller
3
+ class Base
4
+ # Access the configuration object instance externally
5
+ attr_accessor :config
6
+ # Access the request object instance externally
7
+ attr_accessor :request
8
+
9
+ # Exit code to indicate everything is ok!
10
+ OK = 0
11
+ # Exit code to indicate a force quit (exit) call, meaning the program
12
+ # quit with an error
13
+ QUIT = 1
14
+ # Exit code to indicate that the program exited with a non-zero exit code,
15
+ # but not one that resulted in a force quit
16
+ QUIT_SOFT = 2
17
+
18
+ # Setup internal variables that will be used in subclasses
19
+ # Params:
20
+ # +config+:: Instance of Evertils::Cfg to enable access to config file
21
+ # +request+:: Instance of Evertils::Request, enables access to request
22
+ # parameters
23
+ def initialize(config, request)
24
+ @config = config
25
+ @request = request
26
+
27
+ pre_exec
28
+ end
29
+
30
+ # Perform pre-run tasks
31
+ def pre_exec
32
+ @format = Evertils::Helper.load('Formatting')
33
+ end
34
+
35
+ # Handle the request
36
+ def exec
37
+ if @request.param.nil?
38
+ send(@method.to_sym)
39
+ else
40
+ send(@method.to_sym, @request.flags.first)
41
+ end
42
+ end
43
+
44
+ # Perform post-run cleanup tasks, such as deleting old logs
45
+ def post_exec
46
+ end
47
+
48
+ # Determines if the command can execute
49
+ # Params:
50
+ # +command+:: Symbol containing the command we want to execute
51
+ def can_exec?(command)
52
+ # no command was passed, check if controller has a default method
53
+ if command.nil? && respond_to?(:default)
54
+ @method = :default
55
+ elsif respond_to? command
56
+ # check the controller for the requested method
57
+ @method = command
58
+ else
59
+ raise NoMethodError, "Invalid method: #{command}"
60
+ end
61
+ end
62
+
63
+ # Default method called by exec if no argument is passed
64
+ def sample
65
+ Notify.warning("Method not implemented")
66
+ end
67
+ end
68
+ end
69
+ end
@@ -37,7 +37,7 @@ module Evertils
37
37
 
38
38
  metadata.each_pair do |note_guid, note_content|
39
39
  # convert it here!
40
- puts note_content
40
+ Notify.spit(note_content)
41
41
  end
42
42
  else
43
43
  Notify.error("Could not pull data for notebook #{@notebook}")
@@ -0,0 +1,24 @@
1
+ module Evertils
2
+ module Controller
3
+ class Firstrun < Controller::Base
4
+ # Create the configuration file if it does not exist
5
+ def default
6
+ if File.exist?("#{Dir.home}/.evertils/config.yml")
7
+ Notify.error('Configuration already exists, this is not the first run! Exiting.', show_time: false)
8
+ end
9
+
10
+ File.open("#{Dir.home}/.evertils/config.yml", "w") do |f|
11
+ f.write <<-'CONTENTS'
12
+ templates:
13
+ Monthly:
14
+ "templates/monthly.enml"
15
+ Daily:
16
+ "templates/daily.enml"
17
+
18
+ provider: Evernote
19
+ CONTENTS
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -7,51 +7,35 @@ require_relative '../types/monthly'
7
7
  module Evertils
8
8
  module Controller
9
9
  class Generate < Controller::Base
10
- attr_accessor :force, :start, :name
11
-
12
- def pre_exec
13
- @methods_require_internet.push(:daily, :weekly, :monthly, :mts)
14
-
15
- OptionParser.new do |opt|
16
- opt.banner = "#{Evertils::PACKAGE_NAME} generate timeframe [...-flags]"
17
-
18
- opt.on("-n", "--name=NAME", "A name to pass to the script (not all commands support this flag)") do |name|
19
- @name = name
20
- end
21
- end.parse!
22
-
23
- super
24
- end
25
-
26
10
  # generate daily notes
27
11
  def daily
28
- note = Type::Daily.new
12
+ note = Type::Daily.new(@config)
29
13
  note.create
30
14
  end
31
15
 
32
16
  # generate weekly notes
33
17
  def weekly
34
- note = Type::Weekly.new
18
+ note = Type::Weekly.new(@config)
35
19
  note.create
36
20
  end
37
21
 
38
22
  # generate monthly notes
39
23
  def monthly
40
- note = Type::Monthly.new
24
+ note = Type::Monthly.new(@config)
41
25
  note.create
42
26
  end
43
27
 
44
28
  # generate monthly task summary templates
45
- def mts
46
- Notify.error('Name argument is required', {}) if @name.nil?
29
+ def mts(arg)
30
+ Notify.error('Name argument is required', {}) if arg.nil?
47
31
 
48
- note = Type::MonthlyTaskSummary.new(@name)
32
+ note = Type::MonthlyTaskSummary.new(@config, arg[1])
49
33
  note.create
50
34
  end
51
35
 
52
36
  # generate priority queue notes
53
37
  def pq
54
- note = Type::PriorityQueue.new
38
+ note = Type::PriorityQueue.new(@config)
55
39
  note.create
56
40
  end
57
41
 
@@ -61,16 +45,16 @@ module Evertils
61
45
  # - weekly (if today is Monday and there isn't a weekly log already)
62
46
  # - monthly (if today is the 1st and there isn't a monthly log already)
63
47
  def morning
64
- pq = Type::PriorityQueue.new
48
+ pq = Type::PriorityQueue.new(@config)
65
49
  pq.create
66
50
 
67
- daily = Type::Daily.new
51
+ daily = Type::Daily.new(@config)
68
52
  daily.create
69
53
 
70
- weekly = Type::Weekly.new
54
+ weekly = Type::Weekly.new(@config)
71
55
  weekly.create if weekly.should_create?
72
56
 
73
- monthly = Type::Monthly.new
57
+ monthly = Type::Monthly.new(@config)
74
58
  monthly.create if monthly.should_create?
75
59
  end
76
60
  end
@@ -6,7 +6,7 @@ module Evertils
6
6
  def pre_exec
7
7
  # command flag parser
8
8
  OptionParser.new do |opt|
9
- opt.banner = "#{Evertils::PACKAGE_NAME} new note [...-flags]"
9
+ opt.banner = "evertils new note [...-flags]"
10
10
 
11
11
  opt.on("-t", "--title=TITLE", "Set a custom title") do |title|
12
12
  @title = title
@@ -35,7 +35,7 @@ module Evertils
35
35
  Notify.info("Printing list of notes")
36
36
 
37
37
  metadata.notes.each do |note|
38
- puts note.title
38
+ Notify.spit note.title
39
39
  end
40
40
  else
41
41
  Notify.error("Could not pull data for notebook #{$request.custom[0]}", {})
@@ -46,7 +46,7 @@ module Evertils
46
46
  end
47
47
 
48
48
  def info
49
- $config.options.each_pair do |key, value|
49
+ @config.options.each_pair do |key, value|
50
50
  Notify.spit("#{key}: #{value}")
51
51
  end
52
52
  end
@@ -3,8 +3,8 @@ module Evertils
3
3
  class Status < Controller::Base
4
4
 
5
5
  def default
6
- $config.options.each_pair do |key, value|
7
- puts "#{key}: #{value}"
6
+ @config.options.each_pair do |key, value|
7
+ Notify.spit "#{key}: #{value}"
8
8
  end
9
9
  end
10
10
 
@@ -1,18 +1,18 @@
1
1
  module Evertils
2
2
  module Helper
3
- def self.load(klass, args = nil)
3
+ def self.load(klass, *args)
4
4
  begin
5
5
  klass_instance = Evertils::Helper.const_get(klass)
6
6
 
7
7
  if klass_instance
8
- if args.nil?
8
+ if args.empty?
9
9
  klass_instance.new
10
10
  else
11
11
  klass_instance.new(args)
12
12
  end
13
13
  end
14
14
  rescue => e
15
- Notify.error(e.message)
15
+ Notify.error("#{e}\n#{e.backtrace.join("\n")}", show_time: false)
16
16
  end
17
17
  end
18
18
  end
@@ -3,8 +3,8 @@ module Evertils
3
3
  class ApiEnmlHandler
4
4
  #
5
5
  # @since 0.3.7
6
- def initialize(enml = nil)
7
- convert_to_xml(enml) if enml
6
+ def initialize(config = nil)
7
+ @config = config
8
8
  self
9
9
  end
10
10
 
@@ -26,14 +26,7 @@ module Evertils
26
26
 
27
27
  # remove <br> tags
28
28
  note_xml.search('br').each(&:remove)
29
-
30
- enml = note_xml.inner_html.to_s
31
-
32
- # append custom sections to the end of the content if they exist
33
- return enml if $config.custom_sections.nil?
34
-
35
- enml += to_enml($config.custom_sections[NOTEBOOK_PRIORITY_QUEUE])
36
- enml
29
+ note_xml.inner_html.to_s
37
30
  end
38
31
 
39
32
  #
@@ -32,7 +32,7 @@ module Evertils
32
32
  @indent = 0
33
33
  @errors = []
34
34
  end
35
-
35
+
36
36
  # Invokes the HTML parsing by using a string. Returns the markdown code in @output.
37
37
  # To garantuee well-formed xml for REXML a <root> element will be added, but has no effect.
38
38
  # After parsing all elements, the 'reference style'-links will be inserted.
@@ -45,7 +45,7 @@ module Evertils
45
45
  insert_links()
46
46
  @output
47
47
  end
48
-
48
+
49
49
  # Parsing an element and its children (recursive) and writing its markdown code to @output
50
50
  # 1. do indent for nested list items
51
51
  # 2. add the markdown opening tag for this element
@@ -58,18 +58,18 @@ module Evertils
58
58
  @output << indent() if name.eql?(:li)
59
59
  # 2.
60
60
  @output << opening(element, parent)
61
-
61
+
62
62
  # 3a.
63
63
  if (element.has_text? and element.children.size < 2)
64
64
  @output << text_node(element, parent)
65
65
  end
66
-
66
+
67
67
  # 3b.
68
68
  if element.has_elements?
69
69
  element.children.each do |child|
70
70
  # increase indent if nested list
71
71
  @indent += 1 if element.name=~/(ul|ol)/ and parent.eql?(:li)
72
-
72
+
73
73
  if child.node_type.eql?(:element)
74
74
  parse_element(child, element.name.to_sym)
75
75
  else
@@ -79,12 +79,12 @@ module Evertils
79
79
  @output << child.to_s
80
80
  end
81
81
  end
82
-
82
+
83
83
  # decrease indent if end of nested list
84
84
  @indent -= 1 if element.name=~/(ul|ol)/ and parent.eql?(:li)
85
85
  end
86
86
  end
87
-
87
+
88
88
  # 4.
89
89
  @output << ending(element, parent)
90
90
  end
@@ -124,7 +124,7 @@ module Evertils
124
124
  ""
125
125
  end
126
126
  end
127
-
127
+
128
128
  # Returns the closing markdown tag, like opening()
129
129
  def ending(type, parent)
130
130
  case type.name.to_sym
@@ -160,7 +160,7 @@ module Evertils
160
160
  ""
161
161
  end
162
162
  end
163
-
163
+
164
164
  # Perform indent: two space, @indent times - quite simple! :)
165
165
  def indent
166
166
  str = ""
@@ -169,7 +169,7 @@ module Evertils
169
169
  end
170
170
  str
171
171
  end
172
-
172
+
173
173
  # Return the content of element, which should be just text.
174
174
  # If its a code block to indent of 4 spaces.
175
175
  # For block quotation add a leading '>'
@@ -182,7 +182,7 @@ module Evertils
182
182
  element.text
183
183
  end
184
184
  end
185
-
185
+
186
186
  # Insert the mentioned reference style links.
187
187
  def insert_links
188
188
  @output << "\n"
@@ -190,14 +190,14 @@ module Evertils
190
190
  @output << " [#{index+1}]: #{@links[index]}\n"
191
191
  end
192
192
  end
193
-
193
+
194
194
  # Print out all errors, that occured and have been written to @errors.
195
195
  def print_errors
196
196
  @errors.each do |error|
197
- puts error
197
+ Notify.error(error)
198
198
  end
199
199
  end
200
-
200
+
201
201
  # Perform a benchmark on a given string n-times.
202
202
  def speed_benchmark(string, n)
203
203
  initialize()
@@ -29,9 +29,9 @@ module Evertils
29
29
 
30
30
  IO.readlines(load_template(type), :encoding => 'UTF-8').join("").delete!("\n")
31
31
  rescue Errno::ENOENT => e
32
- Notify.error(e.message)
32
+ Notify.error("#{e}\n#{e.backtrace.join("\n")}", show_time: false)
33
33
  rescue ArgumentError => e
34
- Notify.error(e.message)
34
+ Notify.error("#{e}\n#{e.backtrace.join("\n")}", show_time: false)
35
35
  end
36
36
  end
37
37
 
@@ -51,9 +51,22 @@ module Evertils
51
51
  }
52
52
  end
53
53
 
54
- # format command as required by this model
55
- def command
56
- $request.command.capitalize
54
+ # Recursively symbolize keys in a hash
55
+ # Params:
56
+ # +h+:: The hash you want to symbolize
57
+ def symbolize(h)
58
+ case h
59
+ when Hash
60
+ Hash[
61
+ h.map do |k, v|
62
+ [k.respond_to?(:to_sym) ? k.to_sym : k, symbolize(v)]
63
+ end
64
+ ]
65
+ when Enumerable
66
+ h.map { |v| symbolize(v) }
67
+ else
68
+ h
69
+ end
57
70
  end
58
71
 
59
72
  private
@@ -61,34 +74,23 @@ module Evertils
61
74
  #
62
75
  # @since 0.3.1
63
76
  def load_template(type)
64
- template_type_map = {
65
- :Daily => "daily",
66
- :Weekly => "weekly",
67
- :Monthly => "monthly",
68
- :"Monthly Task Summaries" => "mts",
69
- :"Priority Queue" => "pq"
70
- }
71
-
72
- default = "#{Evertils::TEMPLATE_DIR}#{template_type_map[type]}.enml"
77
+ file_name = type.to_s.downcase.gsub(/\s/, '-')
78
+ installed_dir = Gem::Specification.find_by_name('evertils').gem_dir
79
+ local_installed_dir = "#{Dir.home}/.evertils/templates/"
80
+ template_file = "#{installed_dir}/#{file_name}.enml"
73
81
 
74
- return default if $config.custom_templates.nil?
82
+ if Dir.exist? local_installed_dir
83
+ template_file = "#{local_installed_dir}#{file_name}.enml"
75
84
 
76
- rval = default
77
- tmpl = $config.custom_templates[type]
78
-
79
- if !tmpl.nil?
80
- rval = $config.custom_path
81
-
82
- if tmpl.include?('~')
83
- rval += tmpl.gsub!(/~/, Dir.home)
84
- else
85
- rval += tmpl
85
+ # local config dir exists but the requested template does not, use
86
+ # the default template for this type
87
+ unless File.exist? template_file
88
+ template_file = "#{installed_dir}/#{file_name}.enml"
86
89
  end
87
90
  end
88
91
 
89
- rval
92
+ template_file
90
93
  end
91
-
92
94
  end
93
95
  end
94
96
  end
@@ -0,0 +1,31 @@
1
+ module Evertils
2
+ class Request
3
+ # Access controller variable property externally
4
+ attr_reader :controller
5
+ # Access command variable property externally
6
+ attr_reader :command
7
+ # Access custom variable property externally
8
+ attr_reader :custom
9
+ # Access flags variable property externally
10
+ attr_reader :flags
11
+ # Access raw_flags variable property externally
12
+ attr_reader :raw_flags
13
+ # Access param variable property externally
14
+ attr_reader :param
15
+
16
+ # Create the request object, parse ARGV for values
17
+ def initialize
18
+ raise ArgumentError, "ARGV is empty" if ARGV.empty?
19
+
20
+ @flags = ARGV.select { |f| f.start_with?('-') }.map { |f| f.split('=').map(&:to_sym) } || []
21
+ @raw_flags = ARGV.select { |f| f.start_with?('-') } || []
22
+ @controller = ARGV[0].to_sym unless ARGV[0].start_with?('-')
23
+ @command = ARGV[1].to_sym unless ARGV[1].nil?
24
+
25
+ return unless ARGV.size > 2
26
+
27
+ @custom = ARGV[2..ARGV.size].reject { |p| p.start_with?('-') }.map(&:to_sym) || []
28
+ @param = ARGV[2]
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,56 @@
1
+ module Evertils
2
+ class Router
3
+ # Create the router object
4
+ # Params:
5
+ # +config_instance+:: An instance of Evertils::Cfg
6
+ def initialize(config_instance)
7
+ @config = config_instance
8
+ end
9
+
10
+ # Prepare for routing
11
+ def pre_exec
12
+ @request = Request.new
13
+
14
+ begin
15
+ # include the controller
16
+ require "evertils/controllers/#{@request.controller}"
17
+ # include helpers
18
+ require "evertils/helpers/#{@request.controller}" if File.exist? "evertils/helpers/#{@request.controller}"
19
+ rescue LoadError
20
+ Notify.error("Controller not found: #{@request.controller}")
21
+ end
22
+ end
23
+
24
+ # Perform command routing
25
+ def route
26
+ pre_exec
27
+
28
+ # Create object context and pass it the required command line arguments
29
+ begin
30
+ unless @request.controller.nil?
31
+ controller = Evertils::Controller.const_get @request.controller.capitalize
32
+
33
+ # create an instance of the requested controller
34
+ context = controller.new(@config, @request)
35
+
36
+ if context.can_exec? @request.command
37
+ # Set things up
38
+ context.pre_exec
39
+
40
+ # Run the requested action
41
+ context.exec
42
+
43
+ # Run cleanup commands
44
+ context.post_exec
45
+ end
46
+ end
47
+ rescue NoMethodError => e
48
+ Notify.error("#{e}\n#{e.backtrace.join("\n")}", show_time: false)
49
+ rescue RuntimeError => e
50
+ Notify.error("#{e}\n#{e.backtrace.join("\n")}", show_time: false)
51
+ rescue NameError => e
52
+ Notify.error("#{e}\n#{e.backtrace.join("\n")}", show_time: false)
53
+ end
54
+ end
55
+ end
56
+ end