evertils 0.0.1

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/lib/logs.rb ADDED
@@ -0,0 +1,34 @@
1
+ module Granify
2
+ class Logs
3
+ MAX_LOGS_TO_STORE = 30
4
+
5
+ @files = Dir["#{Granify::LOG_DIR}/*/*.log"]
6
+
7
+ def self.clean
8
+ if @files.size > 0
9
+ @files.each do |file|
10
+ File.delete file if File.exist? file
11
+ end
12
+ Notify.info("Removed #{@files.size} old log files")
13
+ end
14
+ end
15
+
16
+ def self.dirty?
17
+ @files.size >= MAX_LOGS_TO_STORE
18
+ end
19
+
20
+ # Create a directory if required
21
+ def self.mkdir(name)
22
+ dir = "#{Granify::LOG_DIR}/#{name.downcase}"
23
+
24
+ if !Dir.exist? dir
25
+ Dir.mkdir dir
26
+ end
27
+
28
+ # Create the default .gitignore
29
+ File.open("#{dir}/.gitignore", "w+") do |file|
30
+ file.write "# Ignore everything in this directory\n*\n# Except this file\n!.gitignore"
31
+ end
32
+ end
33
+ end
34
+ end
data/lib/model.rb ADDED
@@ -0,0 +1,26 @@
1
+ module Granify
2
+ module Model
3
+ class Base
4
+ attr_accessor :data, :branch, :browser, :command, :start
5
+
6
+ def initialize(hash = nil)
7
+ @data = hash || Granify::Model::Data.new
8
+
9
+ # Current time
10
+ #@time = @data.start
11
+ # Time the command was executed
12
+ @start = Time.now
13
+ # Current working branch
14
+ @branch = @data.branch
15
+ # Browser to execute tests in
16
+ @browser = @data.browser
17
+ # Instantiate the command execution class
18
+ @command = Command::Exec.new
19
+ end
20
+
21
+ def bind(hash)
22
+ initialize(hash)
23
+ end
24
+ end
25
+ end
26
+ end
data/lib/model_data.rb ADDED
@@ -0,0 +1,97 @@
1
+ module Granify
2
+ module Model
3
+ class Data
4
+ attr_accessor :identifier, :branch, :browser, :files_with_errors
5
+
6
+ def initialize()
7
+ @d = Hash.new([])
8
+
9
+ # setup defaults
10
+ defaults = {
11
+ :issues => {:errors => 0, :warnings => 0},
12
+ :status => {:success => 0, :error => 0, :total => 0, :errors_per_file => 0},
13
+ :success_rate => {:int => 0, :str => "0%"},
14
+ :log => '',
15
+ :below_acceptable_limit => false
16
+ }
17
+
18
+ @branch = Command::Exec.git_current_branch
19
+ @files_with_errors = []
20
+
21
+ @d.merge! defaults
22
+ end
23
+
24
+ def unset(key)
25
+ @d.delete(key.to_sym)
26
+ end
27
+
28
+ def instance_var(key, val = nil)
29
+ self.class.__send__(:attr_accessor, key)
30
+ instance_variable_set("@#{key}", val)
31
+ end
32
+
33
+ def serialize
34
+ @d.to_json
35
+ end
36
+
37
+ def status
38
+ get(:status)
39
+ end
40
+
41
+ def success_rate
42
+ get(:success_rate)
43
+ end
44
+
45
+ def increment_issues(key, val)
46
+ @d[:issues][key.to_sym] += val
47
+ end
48
+
49
+ def increment_status(key, val)
50
+ @d[:status][key.to_sym] += val
51
+ end
52
+
53
+ def issues
54
+ get(:issues)
55
+ end
56
+
57
+ def issues=(val)
58
+ set(:issues, val)
59
+ end
60
+
61
+ def log
62
+ get(:log, Granify::DEFAULT_LOG)
63
+ end
64
+
65
+ def add_to_error_list(file)
66
+ @files_with_errors << file
67
+ end
68
+
69
+ def identifier=(val)
70
+ @identifier = val
71
+
72
+ # create the log file now
73
+ @d[:log] = Log.new(@branch, Time.now, @identifier)
74
+ end
75
+
76
+ def below_acceptable_limit?
77
+ get(:below_acceptable_limit) == true
78
+ end
79
+
80
+ def below_acceptable_limit=(val)
81
+ set(:below_acceptable_limit, val)
82
+ end
83
+
84
+ def bind!(seed_data)
85
+ @d = seed_data
86
+ end
87
+
88
+ def get(key, default = @d.default)
89
+ @d[key] || default
90
+ end
91
+
92
+ def set(key, val = nil)
93
+ @d[key] = val
94
+ end
95
+ end
96
+ end
97
+ end
data/lib/request.rb ADDED
@@ -0,0 +1,20 @@
1
+ module Granify
2
+ class Request
3
+ attr_reader :controller, :command, :custom, :flags, :raw_flags
4
+
5
+ def initialize
6
+ @controller = ARGV[0].to_sym rescue nil
7
+
8
+ if ARGV.size > 1
9
+ @command = ARGV[1].to_sym rescue nil
10
+
11
+ if ARGV.size > 2
12
+ @custom = ARGV[2..ARGV.size].select { |p| !p.start_with?('-') }.map &:to_sym || []
13
+ # TODO: parameterize flag key/values
14
+ @flags = ARGV[2..ARGV.size].select { |f| f.start_with?('-') }.map { |f| f.split("=").map &:to_sym } || []
15
+ @raw_flags = ARGV[2..ARGV.size].select { |f| f.start_with?('-') } || []
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
data/lib/router.rb ADDED
@@ -0,0 +1,73 @@
1
+ module Granify
2
+ class Router
3
+ def route
4
+ # Populate request params
5
+ $request = Request.new
6
+
7
+ # include the controller
8
+ if File.exists? "#{Granify::CONTROLLER_DIR}#{$request.controller}.rb"
9
+ require "#{Granify::CONTROLLER_DIR}#{$request.controller}.rb"
10
+ end
11
+
12
+ # include helpers
13
+ if File.exists? "#{Granify::HELPER_DIR}#{$request.controller}.rb"
14
+ require "#{Granify::HELPER_DIR}#{$request.controller}.rb"
15
+ end
16
+
17
+ # include models
18
+ if File.exists? "#{Granify::MODEL_DIR}#{$request.controller}.rb"
19
+ require "#{Granify::MODEL_DIR}#{$request.controller}.rb"
20
+ end
21
+
22
+ # Create object context and pass it the required command line arguments
23
+ begin
24
+ controller = Granify::Controller.const_get $request.controller.capitalize rescue false
25
+
26
+ if !controller
27
+ raise "Controller not found: #{$request.controller.capitalize}"
28
+ end
29
+
30
+ context = controller.new
31
+
32
+ if context.can_exec? $request.controller, $request.command
33
+ context.pre_exec
34
+
35
+ # no command sent? Use default to populate model data
36
+ model_method = ($request.command ? $request.command : context.default_method).to_s + "_data"
37
+
38
+ # populate model data
39
+ method = context.model.public_method(model_method) rescue false
40
+
41
+ # model is not set, use Base model instead so the controller still has
42
+ # access to model methods
43
+ if context.model.nil?
44
+ context.model = Model::Base.new
45
+ end
46
+
47
+ # If the method exists, set model data accordingly
48
+ # If it doesn't exist then just fail silently, the model may not
49
+ # be required by some controllers
50
+ if method.respond_to? :call
51
+ context.model.data = method.call($request.custom || [])
52
+ end
53
+
54
+ if context.methods_require_internet.include? $request.command
55
+ if !Utils.has_internet_connection?
56
+ raise RuntimeError, "Command `#{Granify::PACKAGE_NAME} #{$request.controller} #{$request.command}` requires a connection to the internet.\nPlease check your network configuration settings."
57
+ end
58
+ end
59
+
60
+ # Run the controller
61
+ context.exec
62
+
63
+ # Run cleanup commands
64
+ context.post_exec
65
+ end
66
+ rescue RuntimeError => e
67
+ Notify.error("#{e.to_s}")
68
+ rescue NameError => e
69
+ Notify.error("#{e.to_s}\n#{e.backtrace.join("\n")}")
70
+ end
71
+ end
72
+ end
73
+ end
data/lib/utils.rb ADDED
@@ -0,0 +1,123 @@
1
+ module Granify
2
+ class Utils
3
+ @cache = Hash.new
4
+
5
+ # Gets a list of files from the current directory with a specific extension
6
+ def self.get_files(ext)
7
+ @cache[:files] ||= Hash.new
8
+ @cache[:files][ext] ||= []
9
+
10
+ Dir["*.#{ext}"].each do |file|
11
+ @cache[:files][ext].push file
12
+ end
13
+
14
+ @cache[:files][ext]
15
+ end
16
+
17
+ # Gets a list of all files in the project with a specific extension
18
+ def self.get_all_files(ext, ignore_paths = '')
19
+ @cache[:files] ||= Hash.new
20
+ @cache[:files][ext] ||= []
21
+
22
+ if @cache[:files][ext].empty?
23
+ Dir["**/*.#{ext}"].each do |file|
24
+ if !ignore_paths.empty?
25
+ # file is a widget
26
+ if /\/#{ignore_paths}/.match(file)
27
+ @cache[:files][ext].push file
28
+ end
29
+ else
30
+ # file is not a widget
31
+ @cache[:files][ext].push file
32
+ end
33
+ end
34
+ end
35
+
36
+ @cache[:files][ext]
37
+ end
38
+
39
+ # Gets a list of files from the current git commit queue with a specific
40
+ # extension
41
+ def self.get_files_from_git(ext)
42
+ @cache[:files] ||= Hash.new
43
+ @cache[:files][ext] ||= []
44
+
45
+ modified_files = `git status --porcelain`.split("\n")
46
+ modified_files.each do |file|
47
+ if file.match(/#{ext}/)
48
+ @cache[:files][ext].push file.strip.match(/[A-Z ]+(.*)/)[1]
49
+ end
50
+ end
51
+
52
+ @cache[:files][ext]
53
+ end
54
+
55
+ # Generate a filename
56
+ def self.generate_path(branch, time, identifier)
57
+ # create the directory if needed
58
+ Logs.mkdir identifier
59
+
60
+ # create a new log file with a path based on the input parameters
61
+ #Log.new(identifier, branch, time)
62
+ end
63
+
64
+ # Convert hash keys to symbols
65
+ def self.symbolize_keys(hash)
66
+ Hash[hash.map{ |k, v| [k.to_sym, v] }]
67
+ end
68
+
69
+ # Create a directory wherever the script is called from, if required
70
+ def self.mklocaldir(name)
71
+ dir = "#{Dir.pwd}/#{name.downcase}/"
72
+
73
+ if !Dir.exist? dir
74
+ Dir.mkdir dir
75
+ else
76
+ dir
77
+ end
78
+ end
79
+
80
+ def self.os
81
+ begin
82
+ @os ||= (
83
+ host_os = RbConfig::CONFIG['host_os']
84
+ case host_os
85
+ when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
86
+ :windows
87
+ when /darwin|mac os/
88
+ :macosx
89
+ when /linux/
90
+ :linux
91
+ when /solaris|bsd/
92
+ :unix
93
+ else
94
+ raise TypeError, "unknown os: #{host_os.inspect}"
95
+ end
96
+ )
97
+ rescue err
98
+ Notify.error(err.message)
99
+ end
100
+ end
101
+
102
+ def self.json?(string)
103
+ begin
104
+ !!JSON.parse(string)
105
+ rescue
106
+ false
107
+ end
108
+ end
109
+
110
+ def self.http_response_code(url = nil)
111
+ begin
112
+ request = Net::HTTP.get_response(URI.parse(url || "http://google.com"))
113
+ request.code.to_i
114
+ rescue
115
+ 500
116
+ end
117
+ end
118
+
119
+ def self.has_internet_connection?
120
+ Utils.http_response_code < 499
121
+ end
122
+ end
123
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: evertils
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ryan Priebe
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-03 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Evernote utilities for your CLI workflow
14
+ email: hello@ryanpriebe.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/command.rb
20
+ - lib/config.rb
21
+ - lib/configs/templates/daily-friday.enml
22
+ - lib/configs/templates/daily.enml
23
+ - lib/configs/templates/monthly.enml
24
+ - lib/configs/templates/quarterly.enml
25
+ - lib/configs/templates/weekly.enml
26
+ - lib/constants.rb
27
+ - lib/controller.rb
28
+ - lib/controllers/convert.rb
29
+ - lib/controllers/generate.rb
30
+ - lib/controllers/get.rb
31
+ - lib/controllers/new.rb
32
+ - lib/helper.rb
33
+ - lib/helpers/evernote-enml.rb
34
+ - lib/helpers/evernote-markdown.rb
35
+ - lib/helpers/evernote.rb
36
+ - lib/helpers/generate.rb
37
+ - lib/helpers/time.rb
38
+ - lib/log.rb
39
+ - lib/logs.rb
40
+ - lib/model.rb
41
+ - lib/model_data.rb
42
+ - lib/request.rb
43
+ - lib/router.rb
44
+ - lib/utils.rb
45
+ homepage: http://rubygems.org/gems/evertils
46
+ licenses:
47
+ - MIT
48
+ metadata: {}
49
+ post_install_message:
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubyforge_project:
65
+ rubygems_version: 2.0.14
66
+ signing_key:
67
+ specification_version: 4
68
+ summary: EN (heart) CLI
69
+ test_files: []