dev_scripts 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0cb7a9f1d10cd5857d85a13ee4caeb8ad713596d8524560ac5c0dc5887d0394c
4
+ data.tar.gz: d35adf53359d2c11245aebba7c9594735b1ab003f660ed75db13d38d6968af90
5
+ SHA512:
6
+ metadata.gz: 94381be5ff01e167e9b981b5e279504d1698d761d34e145cfd23bda3843c2979366b511dddf5d047e32dbfdcd9404af0ac28adf68f2ece663739a2a64243741e
7
+ data.tar.gz: 3ec36a0cd58d909fa886a510913087cb186d0a3c86634c0ac20c998253f92c4125a6aa7aac8d6de50efdc80bc444bcbce081dcdf9b2204425d8c6271bf46ba64
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,7 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.6.3
7
+ before_install: gem install bundler -v 2.0.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in dev_scripts.gemspec
4
+ gemspec
@@ -0,0 +1,87 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ dev_scripts (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ activesupport (6.0.1)
10
+ concurrent-ruby (~> 1.0, >= 1.0.2)
11
+ i18n (>= 0.7, < 2)
12
+ minitest (~> 5.1)
13
+ tzinfo (~> 1.1)
14
+ zeitwerk (~> 2.2)
15
+ coderay (1.1.2)
16
+ concurrent-ruby (1.1.5)
17
+ diff-lcs (1.3)
18
+ ffi (1.11.3)
19
+ formatador (0.2.5)
20
+ guard (2.16.1)
21
+ formatador (>= 0.2.4)
22
+ listen (>= 2.7, < 4.0)
23
+ lumberjack (>= 1.0.12, < 2.0)
24
+ nenv (~> 0.1)
25
+ notiffany (~> 0.0)
26
+ pry (>= 0.9.12)
27
+ shellany (~> 0.0)
28
+ thor (>= 0.18.1)
29
+ guard-compat (1.2.1)
30
+ guard-rspec (4.7.3)
31
+ guard (~> 2.1)
32
+ guard-compat (~> 1.1)
33
+ rspec (>= 2.99.0, < 4.0)
34
+ i18n (1.7.0)
35
+ concurrent-ruby (~> 1.0)
36
+ listen (3.2.0)
37
+ rb-fsevent (~> 0.10, >= 0.10.3)
38
+ rb-inotify (~> 0.9, >= 0.9.10)
39
+ lumberjack (1.0.13)
40
+ method_source (0.9.2)
41
+ minitest (5.13.0)
42
+ nenv (0.3.0)
43
+ notiffany (0.1.3)
44
+ nenv (~> 0.1)
45
+ shellany (~> 0.0)
46
+ pry (0.12.2)
47
+ coderay (~> 1.1.0)
48
+ method_source (~> 0.9.0)
49
+ rake (10.5.0)
50
+ rb-fsevent (0.10.3)
51
+ rb-inotify (0.10.0)
52
+ ffi (~> 1.0)
53
+ rspec (3.9.0)
54
+ rspec-core (~> 3.9.0)
55
+ rspec-expectations (~> 3.9.0)
56
+ rspec-mocks (~> 3.9.0)
57
+ rspec-core (3.9.0)
58
+ rspec-support (~> 3.9.0)
59
+ rspec-expectations (3.9.0)
60
+ diff-lcs (>= 1.2.0, < 2.0)
61
+ rspec-support (~> 3.9.0)
62
+ rspec-mocks (3.9.0)
63
+ diff-lcs (>= 1.2.0, < 2.0)
64
+ rspec-support (~> 3.9.0)
65
+ rspec-support (3.9.0)
66
+ shellany (0.0.1)
67
+ thor (0.20.3)
68
+ thread_safe (0.3.6)
69
+ tzinfo (1.2.5)
70
+ thread_safe (~> 0.1)
71
+ zeitwerk (2.2.2)
72
+
73
+ PLATFORMS
74
+ ruby
75
+
76
+ DEPENDENCIES
77
+ activesupport
78
+ bundler (~> 2.0)
79
+ dev_scripts!
80
+ guard
81
+ guard-rspec
82
+ pry
83
+ rake (~> 10.0)
84
+ rspec (~> 3.0)
85
+
86
+ BUNDLED WITH
87
+ 2.0.2
@@ -0,0 +1,16 @@
1
+ guard :rspec, cmd: 'bundle exec rspec' do
2
+ require 'guard/rspec/dsl'
3
+ dsl = Guard::RSpec::Dsl.new(self)
4
+
5
+ # Feel free to open issues for suggestions and improvements
6
+
7
+ # RSpec files
8
+ rspec = dsl.rspec
9
+ watch(rspec.spec_helper) { rspec.spec_dir }
10
+ watch(rspec.spec_support) { rspec.spec_dir }
11
+ watch(rspec.spec_files)
12
+
13
+ # Ruby files
14
+ ruby = dsl.ruby
15
+ dsl.watch_spec_files_for(ruby.lib_files)
16
+ end
@@ -0,0 +1 @@
1
+ # dev_scripts
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "dev_scripts"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,30 @@
1
+ lib = File.expand_path("lib", __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "dev_scripts/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "dev_scripts"
7
+ spec.version = DevScripts::VERSION
8
+ spec.authors = ["Carlos Quinones"]
9
+ spec.email = ["cquinones100@gmail.com"]
10
+
11
+ spec.summary = 'Register and run scripts for ruby and rails development'
12
+ spec.description = 'Register and run scripts for ruby and rails development, with some defaults.'
13
+
14
+ # Specify which files should be added to the gem when it is released.
15
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
16
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
17
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ end
19
+ spec.bindir = "exe"
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_development_dependency "bundler", "~> 2.0"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rspec", "~> 3.0"
26
+ spec.add_development_dependency "pry"
27
+ spec.add_development_dependency "guard"
28
+ spec.add_development_dependency "guard-rspec"
29
+ spec.add_development_dependency "activesupport"
30
+ end
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require './lib/dev_scripts'
@@ -0,0 +1,99 @@
1
+ require "./lib/dev_scripts/version"
2
+
3
+ module DevScripts
4
+ class Error < StandardError; end
5
+ class Script
6
+ class Scripts < Array
7
+ def add(script_name:, &block)
8
+ self << Script.new(script_name: script_name, &block)
9
+ end
10
+ end
11
+
12
+ class << self
13
+ def scripts
14
+ @scripts ||= Scripts.new
15
+ end
16
+
17
+ def define_script(script_name, &block)
18
+ scripts.add(script_name: script_name, &block)
19
+ end
20
+
21
+ def execute(args)
22
+ script_name, *rest = args
23
+
24
+ script_to_execute = scripts.find { |script| script.name == script_name.to_sym }
25
+
26
+ script_to_execute.run(rest) if script_to_execute
27
+ end
28
+ end
29
+
30
+ attr_reader :name
31
+
32
+ def initialize(script_name:, &block)
33
+ @name = script_name
34
+ @block = block
35
+ @base = block.binding.receiver
36
+ @run_args = []
37
+ end
38
+
39
+ def run(args)
40
+ @run_args = args
41
+
42
+ instance_eval(&block)
43
+ end
44
+
45
+ private
46
+
47
+ attr_reader :block, :base, :run_args, :arg_names_to_args, :before_block
48
+
49
+ def let(name, &block)
50
+ define_singleton_method(name) do
51
+ found_value = instance_variable_get("@#{name}")
52
+ return found_value unless found_value.nil?
53
+
54
+ instance_variable_set("@#{name}", instance_eval(&block))
55
+ end
56
+ end
57
+
58
+ def before(&block)
59
+ @before_block = block
60
+ end
61
+
62
+ def execute(&block)
63
+ instance_eval(&before_block) if before_block
64
+
65
+ instance_eval(&block)
66
+ end
67
+
68
+ def args(*arg_names)
69
+ arg_names.each_with_index do |arg_name, index|
70
+ define_singleton_method(arg_name) do
71
+ found_value = instance_variable_get("@#{arg_name}")
72
+
73
+ return found_value unless found_value.nil?
74
+
75
+ instance_variable_set("@#{arg_name}", run_args[index])
76
+ end
77
+ end
78
+ end
79
+
80
+ def create_file_in_editor(file_path_to_open, &file_content_block)
81
+ File.open(file_path_to_open, 'w') do |file|
82
+ file.write(instance_eval(&file_content_block))
83
+ end
84
+ rescue Errno::ENOENT
85
+ Dir.mkdir file_path_to_open.split('/')[0..-2].join('/')
86
+
87
+ retry
88
+ end
89
+
90
+ def open_file_in_editor(file_path_to_open)
91
+ system "code -r #{file_path_to_open}"
92
+ end
93
+ end
94
+ end
95
+
96
+ require './scripts/open_spec_file.rb'
97
+ require './scripts/rubocop_metrics_method_length.rb'
98
+
99
+ DevScripts::Script.execute(ARGV)
@@ -0,0 +1,3 @@
1
+ module DevScripts
2
+ VERSION = "0.1.1"
3
+ end
@@ -0,0 +1,56 @@
1
+ DevScripts::Script.define_script :open_spec_file do
2
+ args :file_path
3
+
4
+ def file_exists?
5
+ !found_file_path.nil?
6
+ end
7
+
8
+ let(:file_path_without_extension) do
9
+ file_path.gsub('.rb', '')
10
+ end
11
+
12
+ let(:found_file_path) do
13
+ Dir['./spec/**/*.rb'].find do |path|
14
+ !(path =~ /#{file_path_without_extension}_spec.rb/).nil?
15
+ end
16
+ end
17
+
18
+ let(:spec_file_path) do
19
+ if file_exists?
20
+ found_file_path
21
+ else
22
+ "spec/#{file_path_without_extension}_spec.rb"
23
+ end
24
+ end
25
+
26
+ let(:constant_name) do
27
+ require 'active_support/inflector'
28
+
29
+ spec_file_path
30
+ .gsub(/spec\/|_spec\.rb/, '')
31
+ .split('/')
32
+ .map(&:camelize)
33
+ .join('::')
34
+ end
35
+
36
+ before do
37
+ if file_exists?
38
+ puts 'file already exists, opening file'
39
+ else
40
+ puts 'file does not exist, writing a new file'
41
+ end
42
+ end
43
+
44
+ execute do
45
+ if !file_exists?
46
+ create_file_in_editor spec_file_path do
47
+ <<-RUBY
48
+ Rspec.describe #{constant_name} do
49
+ end
50
+ RUBY
51
+ end
52
+ end
53
+
54
+ open_file_in_editor spec_file_path
55
+ end
56
+ end
@@ -0,0 +1,117 @@
1
+ DevScripts::Script.define_script :rubocop_metrics_method_length do
2
+ class RubocopMetricsMethodLength
3
+ class MethodReader
4
+ class Line
5
+ attr_reader :line, :index
6
+
7
+ def initialize(line, index)
8
+ @line = line
9
+ @index = index
10
+ end
11
+
12
+ def opening?
13
+ line =~ /def \w/
14
+ end
15
+
16
+ def closing?
17
+ line =~ /\A\s*end(\n)*/
18
+ end
19
+
20
+ def to_s
21
+ line
22
+ end
23
+
24
+ def indentation
25
+ line.scan(/\A\s*/).first
26
+ end
27
+ end
28
+
29
+ attr_reader :to_s
30
+
31
+ def initialize(file_path, line_number)
32
+ @file_path = file_path
33
+ @line_number = line_number
34
+ @block_openings = []
35
+ @block_closings = []
36
+ @all_lines = []
37
+
38
+ File.foreach(@file_path).with_index do |line, index|
39
+ next if index + 1 < line_number
40
+
41
+ next if reached_method_end?
42
+
43
+ wrapped_line = Line.new(line, index)
44
+
45
+ @block_openings << wrapped_line if wrapped_line.opening?
46
+ @block_closings << wrapped_line if wrapped_line.closing?
47
+ @all_lines << wrapped_line
48
+ end
49
+
50
+ @to_s = all_lines.map(&:to_s).join('')
51
+ end
52
+
53
+ def first_line
54
+ all_lines.first.index
55
+ end
56
+
57
+ def last_line
58
+ all_lines.last.index
59
+ end
60
+
61
+ def indentation
62
+ all_lines.first.indentation
63
+ end
64
+
65
+ private
66
+
67
+ attr_reader :all_lines
68
+
69
+ def reached_method_end?
70
+ return false if @block_openings.size.zero? || @block_closings.size.zero?
71
+
72
+ @block_openings.size == @block_closings.size
73
+ end
74
+ end
75
+
76
+ def initialize(file_path, line_number)
77
+ @file_path = file_path
78
+
79
+ @line_number = line_number.to_i
80
+ @all_lines = []
81
+
82
+ File.foreach(file_path) { |line| @all_lines << line }
83
+ end
84
+
85
+ def method_text
86
+ @method_text ||= method_reader.to_s
87
+ end
88
+
89
+ def method_reader
90
+ @method_reader ||= MethodReader.new(file_path, line_number)
91
+ end
92
+
93
+ def run
94
+ all_lines.insert(
95
+ method_reader.first_line,
96
+ "#{method_reader.indentation}# rubcop:disable Metrics/MethodLength\n"
97
+ )
98
+
99
+ all_lines.insert(
100
+ method_reader.last_line + 2,
101
+ "#{method_reader.indentation}# rubcop:enable Metrics/MethodLength\n"
102
+ )
103
+
104
+ File.open(file_path, 'w') { |file| file.write(all_lines.join('')) }
105
+ end
106
+
107
+ private
108
+
109
+ attr_reader :line_number, :file_path, :all_lines
110
+ end
111
+
112
+ args :file_path, :line_number
113
+
114
+ execute do
115
+ RubocopMetricsMethodLength.new(file_path, line_number).run
116
+ end
117
+ end
metadata ADDED
@@ -0,0 +1,157 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dev_scripts
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Carlos Quinones
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-11-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard-rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: activesupport
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Register and run scripts for ruby and rails development, with some defaults.
112
+ email:
113
+ - cquinones100@gmail.com
114
+ executables:
115
+ - dev_scripts
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - ".gitignore"
120
+ - ".rspec"
121
+ - ".travis.yml"
122
+ - Gemfile
123
+ - Gemfile.lock
124
+ - Guardfile
125
+ - README.md
126
+ - Rakefile
127
+ - bin/console
128
+ - bin/setup
129
+ - dev_scripts.gemspec
130
+ - exe/dev_scripts
131
+ - lib/dev_scripts.rb
132
+ - lib/dev_scripts/version.rb
133
+ - scripts/open_spec_file.rb
134
+ - scripts/rubocop_metrics_method_length.rb
135
+ homepage:
136
+ licenses: []
137
+ metadata: {}
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ requirements: []
153
+ rubygems_version: 3.0.3
154
+ signing_key:
155
+ specification_version: 4
156
+ summary: Register and run scripts for ruby and rails development
157
+ test_files: []