codekindly-utils 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 79e5249e9ed97eff6928cca7d011ceac0a38096f
4
- data.tar.gz: 68941b4466394d7ca8b382b5ef54790bdbddcb4b
3
+ metadata.gz: 553c215327bff6738d763dfa4ee525917c2f6758
4
+ data.tar.gz: d614eca29822630cca1e30724ae12e3809b382cf
5
5
  SHA512:
6
- metadata.gz: 9ef2549c010847f4e85f94b3ceaccc2e9f8df9b029ce8cbfaa1f9398aeeaa36176524fb9a1e422712c41d63b486ecbebe7fe0574a89b645c0abc4cb4197ccc6b
7
- data.tar.gz: 350c87f7b7a90a55641403347e5e8ebd39d898c3bc4aabb4c0a73cb10e373f5dbe82fec8f9a3143036b5825ee8139b5021532965b0b7a4f9ed6cffc66a377ee5
6
+ metadata.gz: 137a2c92900370c9ac9401a253e39ba7878aaaa4bd3fa0cfd27a85aa4b7616019cb15d0acf46ae8bdaf9f94ee68371067d4dadcb8f5d7e07230134de2f0dde0e
7
+ data.tar.gz: 3ab9789d44c40fa6361761678bf733f67edff3f5e237a9b78338787fec548bf563a71002b21830550420a3fcea01f2fe6680489c79229c8be8558c2469448b03
data/README.md CHANGED
@@ -22,6 +22,13 @@ Or install it yourself as:
22
22
 
23
23
  $ gem install codekindly-utils
24
24
 
25
+ ## Publishing
26
+
27
+ ```Shell
28
+ be rake install
29
+ gem push vendor/ruby/2.2.0/cache/codekindly-utils-0.0.x.gem
30
+ ```
31
+
25
32
  ## Usage
26
33
 
27
34
  I occasionally use these utilities in the main logic of an app, but usually
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
+ spec.required_ruby_version = ">= 2.2"
25
+
24
26
  spec.add_development_dependency "bundler", "~> 1.16"
25
27
  spec.add_development_dependency "rake", "~> 10.0"
26
28
  spec.add_development_dependency "rspec", "~> 3.0"
@@ -2,9 +2,62 @@ module CodeKindly
2
2
  module Utils
3
3
  class ActiveRecord
4
4
  class << self
5
- def config (name = nil)
6
- name ||= Rails.env
7
- YAML.load_file(::File.join(Rails.root, %w[config database.yml]))[name]
5
+ def active_record_classes_by_connection
6
+ @active_record_classes_by_connection ||= begin
7
+ sets = {}.with_indifferent_access
8
+ find_active_record_classes.each do |klass|
9
+ config_name = configurations.keys.select { |k| configurations[k]["database"] == klass.connection.current_database }.first
10
+ sets[config_name] ||= []
11
+ sets[config_name] << klass
12
+ end
13
+ sets
14
+ end
15
+ end
16
+
17
+ def clear_scope (scope)
18
+ if 0 == scope.count
19
+ puts "Nothing to clear"
20
+ else
21
+ puts "Clearing #{scope.count} #{scope.name} records"
22
+ scope.delete_all
23
+ end
24
+ end
25
+
26
+ def configurations
27
+ return unless active_record_available?
28
+ @configurations ||= YAML.load_file(::Rails.root.join(*%w[config database.yml]))
29
+ end
30
+
31
+ def config(name = nil)
32
+ return unless active_record_available?
33
+ name ||= ::Rails.env
34
+ configurations[name]
35
+ end
36
+
37
+ def default_connection_class (connection = nil)
38
+ return unless active_record_available?
39
+ connection ||= ::Rails.env
40
+ @default_connection_class ||= {}.with_indifferent_access
41
+ @default_connection_class[connection] ||= active_record_classes_by_connection.fetch(connection, []).first
42
+ end
43
+
44
+ private
45
+
46
+ def active_record_available?
47
+ begin
48
+ ::ActiveRecord
49
+ true
50
+ rescue NameError
51
+ raise NotImplementedError, "ActiveRecord is not loaded."
52
+ false
53
+ end
54
+ end
55
+
56
+ def find_active_record_classes
57
+ if ::Rails.env.development?
58
+ ::Dir.glob(::Rails.root.join("app", "models").to_s + "/**/*.rb") { |f| require f }
59
+ end
60
+ ObjectSpace.each_object(Class).select { |klass| klass < ::ActiveRecord::Base && !klass.abstract_class }.sort_by(&:name)
8
61
  end
9
62
  end
10
63
  end
@@ -2,8 +2,8 @@ module CodeKindly
2
2
  module Utils
3
3
  class Boolean
4
4
  # modified from ActiveRecord::ConnectionAdapters::Column (4.2.9)
5
- TRUE_VALUES = [true, 1, '1', 't', 'T', 'true', 'TRUE', 'on', 'ON', 'y', 'yes']
6
- FALSE_VALUES = [false, 0, '0', 'f', 'F', 'false', 'FALSE', 'off', 'OFF', 'n', 'no']
5
+ TRUE_VALUES = [true, 1, "1", "t", "T", "true", "TRUE", "on", "ON", "y", "yes"]
6
+ FALSE_VALUES = [false, 0, "0", "f", "F", "false", "FALSE", "off", "OFF", "n", "no"]
7
7
 
8
8
  class << self
9
9
  def from (value)
@@ -3,7 +3,7 @@ module CodeKindly
3
3
  class Dir
4
4
  class << self
5
5
  def all (path)
6
- require 'fileutils'
6
+ require "fileutils"
7
7
  return [] unless ::Dir.exist?(path)
8
8
  files = ::Dir.entries(path)
9
9
  files.reject!{ |f| "." == f || ".." == f || ".DS_Store" == f || ".keep" == f }
@@ -11,7 +11,7 @@ module CodeKindly
11
11
  end
12
12
 
13
13
  def find (path)
14
- require 'fileutils'
14
+ require "fileutils"
15
15
  all(path).select { |entry| ::File.directory?("#{path}/#{entry}") }
16
16
  end
17
17
  end
@@ -6,11 +6,10 @@ module CodeKindly
6
6
  CodeKindly::Utils::Dir.all path
7
7
  end
8
8
 
9
- def choose_from_options (task, h = nil)
9
+ def choose_from_options (directory_path, h = nil)
10
10
  require "highline"
11
11
  h ||= HighLine.new
12
- dir_path = ::File.join(Rails.root, "db", "data", task.name.split(":").last)
13
- file_opts = file_options(dir_path)
12
+ file_opts = file_options(directory_path)
14
13
  return nil if file_opts.blank?
15
14
  msg = "Select an existing file:"
16
15
  file_opts.each do |k,v|
@@ -20,13 +19,13 @@ module CodeKindly
20
19
  option = h.ask(msg, Integer)
21
20
  file_path = file_opts.fetch(option, nil)
22
21
  if file_path.present?
23
- file_path = ::File.join(dir_path, file_path)
22
+ file_path = ::File.join(directory_path, file_path)
24
23
  end
25
24
  file_path
26
25
  end
27
26
 
28
27
  def file_options (path)
29
- require 'map'
28
+ require "map"
30
29
  options = Map.new
31
30
  key = 0
32
31
  find(path).each do |file|
@@ -36,21 +35,21 @@ module CodeKindly
36
35
  end
37
36
 
38
37
  def find (path)
39
- require 'fileutils'
38
+ require "fileutils"
40
39
  all(path).select { |entry| ::File.file?("#{path}/#{entry}") }
41
40
  end
42
41
 
43
42
  def trash! (file_string)
44
- require 'open3'
43
+ require "open3"
45
44
  stdin, stdout, stderr = Open3.popen3("ls #{file_string}")
46
45
  if stdout.gets
47
46
  # move to trash (or delete) existing downloaded files
48
47
  # sudo gem install osx-trash (http://www.dribin.org/dave/blog/archives/2008/05/24/osx_trash/)
49
- stdin, stdout, stderr = Open3.popen3('which trash')
48
+ stdin, stdout, stderr = Open3.popen3("which trash")
50
49
  trash = stdout.gets
51
50
  command = case
52
51
  when trash then "#{trash.strip} #{file_string}" # output of `which` has ending \n
53
- when ::File.directory?('~/.Trash') then "mv #{file_string} ~/.Trash"
52
+ when ::File.directory?("~/.Trash") then "mv #{file_string} ~/.Trash"
54
53
  else "rm #{file_string}"
55
54
  end
56
55
  Kernel.system(command)
@@ -3,8 +3,8 @@ module CodeKindly
3
3
  class OS
4
4
  class << self
5
5
  def notify (message)
6
- require 'open3'
7
- stdin, stdout, stderr = Open3.popen3('which terminal-notifier')
6
+ require "open3"
7
+ stdin, stdout, stderr = Open3.popen3("which terminal-notifier")
8
8
  tn_path = stdout.gets
9
9
  if tn_path.present?
10
10
  Kernel.system("#{tn_path.chomp} -message \"#{message}\" -sound Submarine")
@@ -0,0 +1,41 @@
1
+ module CodeKindly
2
+ module Utils
3
+ class SQL
4
+ class << self
5
+ def method_missing (method, *args)
6
+ method_name = method.to_s
7
+ return process(method_name, *args) if respond_to_missing?(method_name)
8
+ select_method_name = "select_" + method_name
9
+ return process(select_method_name, *args) if respond_to_missing?(select_method_name)
10
+ super
11
+ end
12
+
13
+ def respond_to_missing? (method, _include_all = false)
14
+ default_connection_class && default_connection_class.connection.respond_to?(method)
15
+ end
16
+
17
+ protected
18
+
19
+ def default_connection_class
20
+ @default_connection_class ||= CodeKindly::Utils::ActiveRecord.default_connection_class
21
+ end
22
+
23
+ def process (method_name, query, connection_class = nil)
24
+ if query.is_a?(::ActiveRecord::Relation)
25
+ connection_class = query.klass
26
+ query = query.to_sql
27
+ else
28
+ if connection_class.respond_to? :to_sym
29
+ connection_class = CodeKindly::Utils::ActiveRecord.default_connection_class(connection_class)
30
+ else
31
+ connection_class = connection_class.class unless connection_class.is_a?(Class)
32
+ connection_class = nil if connection_class < ::ActiveRecord::Base
33
+ end
34
+ connection_class ||= default_connection_class
35
+ end
36
+ connection_class.connection.send(method_name, query)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -3,7 +3,7 @@ module CodeKindly
3
3
  class Shell
4
4
  class << self
5
5
  def run (command)
6
- require 'open3'
6
+ require "open3"
7
7
  command = command.join(" ") if command.is_a?(Array)
8
8
  stdout_str, stderr_str, status = Open3.capture3(command)
9
9
  end
@@ -1,5 +1,5 @@
1
1
  module CodeKindly
2
2
  module Utils
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -7,4 +7,4 @@ require_relative "utils/o_s"
7
7
  require_relative "utils/shell"
8
8
 
9
9
  require_relative "utils/active_record"
10
- require_relative "utils/database"
10
+ require_relative "utils/s_q_l"
@@ -1 +1,7 @@
1
- require_relative "code_kindly/utils"
1
+ require_relative "code_kindly/utils"
2
+
3
+ if Kernel.const_defined? :CK
4
+ warn "`CK` is already defined as a constant, so you will need to use the full `CodeKindly::Utils` module name in this project."
5
+ else
6
+ CK = CodeKindly::Utils
7
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codekindly-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Weathers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-07 00:00:00.000000000 Z
11
+ date: 2018-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,10 +73,10 @@ files:
73
73
  - lib/code_kindly/utils.rb
74
74
  - lib/code_kindly/utils/active_record.rb
75
75
  - lib/code_kindly/utils/boolean.rb
76
- - lib/code_kindly/utils/database.rb
77
76
  - lib/code_kindly/utils/dir.rb
78
77
  - lib/code_kindly/utils/file.rb
79
78
  - lib/code_kindly/utils/o_s.rb
79
+ - lib/code_kindly/utils/s_q_l.rb
80
80
  - lib/code_kindly/utils/shell.rb
81
81
  - lib/code_kindly/utils/version.rb
82
82
  - lib/codekindly-utils.rb
@@ -92,7 +92,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - ">="
94
94
  - !ruby/object:Gem::Version
95
- version: '0'
95
+ version: '2.2'
96
96
  required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  requirements:
98
98
  - - ">="
@@ -1,16 +0,0 @@
1
- module CodeKindly
2
- module Utils
3
- class Database
4
- class << self
5
- def clear_scope (scope)
6
- if 0 == scope.count
7
- puts "Nothing to clear"
8
- else
9
- puts "Clearing #{scope.count} #{scope.name} records"
10
- scope.delete_all
11
- end
12
- end
13
- end
14
- end
15
- end
16
- end