drg 0.1.0
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.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +11 -0
- data/README.md +41 -0
- data/Rakefile +10 -0
- data/bin/console +37 -0
- data/bin/setup +7 -0
- data/drg.gemspec +25 -0
- data/lib/drg/file_context.rb +201 -0
- data/lib/drg/file_reader.rb +44 -0
- data/lib/drg/judge.rb +19 -0
- data/lib/drg/let.rb +4 -0
- data/lib/drg/scanner.rb +69 -0
- data/lib/drg/tasks/gemfile_line.rb +27 -0
- data/lib/drg/tasks/pinner.rb +51 -0
- data/lib/drg/version.rb +3 -0
- data/lib/drg.rb +17 -0
- data/lib/tasks/drg.rake +8 -0
- metadata +151 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7e52689c00f9c11fe0a845187c639503111478a2
|
4
|
+
data.tar.gz: 7adbad6788c9342dac8b7924cd3350ea4f152100
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8108423f078d9bc28ccb16b8390b3d65f4174f4dd2118492ede2ea420f071a667a6b2a079c1eb8f6cf0b6f32b25de7780afe813608957168671bdce8aaf701bf
|
7
|
+
data.tar.gz: 41a66f0004ab961863457dcb40d1f102fa40da682ee46c34d461309a8b7ad05ea9d9e3643f4428eafc90737e8252f8f2a4cbe7b435cb258202529642e3699f63
|
data/.gitignore
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
drg
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.2.1
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# DRG
|
2
|
+
|
3
|
+
A Ruby utility to help automate common tasks! Currently includes stuff like enhanced dependency management using Bundler and RSpec scaffolding.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'drg'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install drg
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
### Pinning Gems
|
24
|
+
|
25
|
+
DRG can help you manage your project's gems by updating your Gemfile with pinned versions. Just run:
|
26
|
+
|
27
|
+
```bash
|
28
|
+
rake drg:pin
|
29
|
+
```
|
30
|
+
|
31
|
+
Will also try to update all your gems to the most recent version (coming soon).
|
32
|
+
|
33
|
+
## Development
|
34
|
+
|
35
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake false` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
36
|
+
|
37
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
38
|
+
|
39
|
+
## Contributing
|
40
|
+
|
41
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/ridiculous/drg.
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'pp'
|
5
|
+
|
6
|
+
require 'ruby2ruby'
|
7
|
+
require 'ruby_parser'
|
8
|
+
|
9
|
+
require 'rspec'
|
10
|
+
require 'object_tracker'
|
11
|
+
require_relative '../spec/spec_helper'
|
12
|
+
|
13
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
14
|
+
# with your gem easier. You can also use a different console, if you like.
|
15
|
+
|
16
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
17
|
+
# require 'pry'
|
18
|
+
# Pry.start
|
19
|
+
require 'irb'
|
20
|
+
|
21
|
+
def sexp
|
22
|
+
ruby = File.readlines(FIXTURE_ROOT.join 'report.rb').join
|
23
|
+
parser = RubyParser.new
|
24
|
+
ruby2ruby = Ruby2Ruby.new
|
25
|
+
parser.process(ruby)
|
26
|
+
# ruby2ruby.process(sexp)
|
27
|
+
end
|
28
|
+
|
29
|
+
def sexp_spec
|
30
|
+
ruby = File.readlines(FIXTURE_ROOT.join 'report_spec.rb').join
|
31
|
+
parser = RubyParser.new
|
32
|
+
ruby2ruby = Ruby2Ruby.new
|
33
|
+
parser.process(ruby)
|
34
|
+
# ruby2ruby.process(sexp)
|
35
|
+
end
|
36
|
+
|
37
|
+
IRB.start
|
data/bin/setup
ADDED
data/drg.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'drg/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "drg"
|
8
|
+
spec.version = Drg::VERSION
|
9
|
+
spec.authors = ["Ryan Buckley"]
|
10
|
+
spec.email = ["arebuckley@gmail.com"]
|
11
|
+
spec.summary = %q{DRG automation}
|
12
|
+
spec.description = %q{DRG automates common tasks}
|
13
|
+
spec.homepage = "https://github.com/ridiculous/drg"
|
14
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
15
|
+
spec.bindir = "exe"
|
16
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
17
|
+
spec.require_paths = ["lib"]
|
18
|
+
|
19
|
+
spec.add_dependency 'ruby_parser', '>= 3.7.0', '< 4.0.0'
|
20
|
+
spec.add_dependency 'ruby2ruby', '>= 2.2.0', '< 3.0.0'
|
21
|
+
spec.add_dependency 'bundler', '~> 1.7'
|
22
|
+
|
23
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
24
|
+
spec.add_development_dependency 'rspec', '>= 3.2', '< 4'
|
25
|
+
end
|
@@ -0,0 +1,201 @@
|
|
1
|
+
module DRG
|
2
|
+
class FileContext
|
3
|
+
attr_writer :lines
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@lines = Set.new
|
7
|
+
@is_private = false
|
8
|
+
end
|
9
|
+
|
10
|
+
def add(raw_line, index = 0)
|
11
|
+
line_number = index + 1
|
12
|
+
line = parse_line(raw_line, line_number)
|
13
|
+
@lines << line
|
14
|
+
line
|
15
|
+
end
|
16
|
+
|
17
|
+
def inspect
|
18
|
+
%Q(#<DRG::FileContext:#{object_id} @lines=#{@lines.count}>, @is_private=false, @is_protected=false>)
|
19
|
+
end
|
20
|
+
|
21
|
+
def lines
|
22
|
+
@lines.to_a
|
23
|
+
end
|
24
|
+
|
25
|
+
=begin
|
26
|
+
|
27
|
+
def set_name *args
|
28
|
+
def get_name
|
29
|
+
def [](other)
|
30
|
+
def +
|
31
|
+
def -
|
32
|
+
def <=>
|
33
|
+
def /
|
34
|
+
def eql?
|
35
|
+
|
36
|
+
=end
|
37
|
+
def parse_line(line, line_number)
|
38
|
+
case line.to_s.chomp.strip
|
39
|
+
when /\A(=begin|=end)/
|
40
|
+
nil
|
41
|
+
when /class\s+([A-Z]+\w*)/
|
42
|
+
return ClassDef.new($1, line_number)
|
43
|
+
when /module\s+([A-Z]+\w*)/
|
44
|
+
return ModuleDef.new($1, line_number)
|
45
|
+
when /def self\.([a-z0-9\[\]_+-<=>?]+)\s*\(?/
|
46
|
+
# @todo check if within class << self
|
47
|
+
return ClassMethodDef.new($1, line_number, current_class_or_module, @is_private)
|
48
|
+
when /def ([a-z0-9\[\]_+-<=>?]+)\s*\(?/
|
49
|
+
return InstanceMethodDef.new($1, line_number, current_class_or_module, @is_private)
|
50
|
+
when /(.+)\s*(do|\{)(.*)(\}|end)/
|
51
|
+
return BlockDef.new($1, $2, $3, line_number, $4)
|
52
|
+
when /(.+)\s*(do|\{)(.*)/
|
53
|
+
return BlockDef.new($1, $2, $3, line_number)
|
54
|
+
when /#*\s*(private|protected)\b/i
|
55
|
+
@is_private = true
|
56
|
+
when /#*\s*public[\s\n]+/i
|
57
|
+
@is_private = false
|
58
|
+
when /\A(end|\})\b/i
|
59
|
+
close_current_definition unless current_definition.method?
|
60
|
+
else
|
61
|
+
nil
|
62
|
+
end
|
63
|
+
NullLine.new(line)
|
64
|
+
end
|
65
|
+
|
66
|
+
def current_definition
|
67
|
+
lines.reverse.detect { |line| line.open? } || Definition.new
|
68
|
+
end
|
69
|
+
|
70
|
+
def close_current_definition
|
71
|
+
current_definition.close
|
72
|
+
end
|
73
|
+
|
74
|
+
def current_class_or_module
|
75
|
+
current_definition = lines.reverse.detect { |line| line.open? && (line.class? || line.mod?) }
|
76
|
+
current_definition && current_definition.name
|
77
|
+
end
|
78
|
+
|
79
|
+
def classes
|
80
|
+
lines.select { |line| line.class? }
|
81
|
+
end
|
82
|
+
|
83
|
+
def modules
|
84
|
+
lines.select { |line| line.mod? }
|
85
|
+
end
|
86
|
+
|
87
|
+
def blocks
|
88
|
+
lines.select { |line| line.block? }
|
89
|
+
end
|
90
|
+
|
91
|
+
def methods
|
92
|
+
lines.select { |line| line.method? }
|
93
|
+
end
|
94
|
+
|
95
|
+
def last_method
|
96
|
+
lines.reverse.detect { |line| line.method? }
|
97
|
+
end
|
98
|
+
|
99
|
+
def last_class
|
100
|
+
lines.reverse.detect { |line| line.class? }
|
101
|
+
end
|
102
|
+
|
103
|
+
module NullDefinition
|
104
|
+
def class?
|
105
|
+
false
|
106
|
+
end
|
107
|
+
|
108
|
+
def mod?
|
109
|
+
false
|
110
|
+
end
|
111
|
+
|
112
|
+
def method?
|
113
|
+
false
|
114
|
+
end
|
115
|
+
|
116
|
+
def block?
|
117
|
+
false
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
class NullLine < DelegateClass(String)
|
122
|
+
include NullDefinition
|
123
|
+
|
124
|
+
def eql?(*)
|
125
|
+
false
|
126
|
+
end
|
127
|
+
|
128
|
+
def open?
|
129
|
+
false
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
class Definition < Object
|
134
|
+
include NullDefinition
|
135
|
+
attr_accessor :open, :name, :line_number
|
136
|
+
|
137
|
+
def initialize(name = nil, line_number = nil, open = true)
|
138
|
+
@name, @line_number, @open = name, line_number.to_i, open
|
139
|
+
end
|
140
|
+
|
141
|
+
def inspect
|
142
|
+
%Q(#<#{self.class.name} #{instance_variables.map { |i| %Q(#{i}="#{instance_variable_get(i)}") }.join(', ')}>)
|
143
|
+
end
|
144
|
+
|
145
|
+
alias to_s inspect
|
146
|
+
|
147
|
+
def eql?(other)
|
148
|
+
@name == other.name && @line_number == other.line_number
|
149
|
+
end
|
150
|
+
|
151
|
+
def close
|
152
|
+
@open = false
|
153
|
+
end
|
154
|
+
|
155
|
+
alias open? open
|
156
|
+
alias hash line_number
|
157
|
+
end
|
158
|
+
|
159
|
+
class MethodDefinition < Definition
|
160
|
+
attr_accessor :class_name, :is_private
|
161
|
+
|
162
|
+
def initialize(name, line_number, class_name, is_private)
|
163
|
+
super(name, line_number, false)
|
164
|
+
@class_name, @is_private = class_name, is_private
|
165
|
+
end
|
166
|
+
|
167
|
+
def method?
|
168
|
+
true
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
class ClassDef < Definition
|
173
|
+
def class?
|
174
|
+
true
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
class ModuleDef < Definition
|
179
|
+
def mod?
|
180
|
+
true
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
class ClassMethodDef < MethodDefinition
|
185
|
+
end
|
186
|
+
|
187
|
+
class InstanceMethodDef < MethodDefinition
|
188
|
+
end
|
189
|
+
|
190
|
+
class BlockDef < Definition
|
191
|
+
def initialize(name, body, opener, line_number, closer = nil)
|
192
|
+
super(name, line_number, !!closer) # not open if closer present (single line block)
|
193
|
+
@body, @opener, @closer, = body, opener, closer
|
194
|
+
end
|
195
|
+
|
196
|
+
def block?
|
197
|
+
true
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module DRG
|
2
|
+
class FileReader
|
3
|
+
# = Class
|
4
|
+
# Needs to keep track of the context of the file as we scan each line (e.g. what class the
|
5
|
+
# current method is defined). As well as an efficient way to loop through the lines
|
6
|
+
# @todo add SpecReader
|
7
|
+
#
|
8
|
+
|
9
|
+
include Enumerable
|
10
|
+
|
11
|
+
def initialize(file_path)
|
12
|
+
@file_path = file_path
|
13
|
+
end
|
14
|
+
|
15
|
+
def each
|
16
|
+
return to_enum unless block_given?
|
17
|
+
File.open(@file_path) do |f|
|
18
|
+
while line = f.gets
|
19
|
+
yield line
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def each_with_context
|
25
|
+
return enum_for __method__ unless block_given?
|
26
|
+
@context = nil
|
27
|
+
each_with_index do |line, i|
|
28
|
+
current_line = context.add(line, i)
|
29
|
+
yield current_line, context
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def read
|
34
|
+
@context = nil
|
35
|
+
each_with_index do |line, i|
|
36
|
+
context.add(line, i)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def context
|
41
|
+
@context ||= FileContext.new
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/drg/judge.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
module DRG
|
2
|
+
class Judge
|
3
|
+
attr_reader :spec, :file
|
4
|
+
|
5
|
+
def initialize(file, spec)
|
6
|
+
@file, @spec = file, spec
|
7
|
+
end
|
8
|
+
|
9
|
+
def missing_methods
|
10
|
+
describes = DRG::Scanner.new(spec).describes
|
11
|
+
DRG::Scanner.new(file).methods.select { |method_name|
|
12
|
+
describes.detect { |describe_name|
|
13
|
+
# turn Report.name or Report#name into .name and #name
|
14
|
+
describe_name[/#{Regexp.escape(method_name.sub(/^\w+(\.|#)/, '\1'))}/i]
|
15
|
+
}.nil?
|
16
|
+
}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/drg/let.rb
ADDED
data/lib/drg/scanner.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
module DRG
|
2
|
+
autoload :Let, 'drg/let'
|
3
|
+
|
4
|
+
class Scanner
|
5
|
+
attr_reader :file
|
6
|
+
|
7
|
+
def initialize(file)
|
8
|
+
@file = file
|
9
|
+
end
|
10
|
+
|
11
|
+
def lets
|
12
|
+
_lets = []
|
13
|
+
continuation = false
|
14
|
+
File.readlines(file).each do |line|
|
15
|
+
if continuation && continuation = line.strip != 'end'
|
16
|
+
_lets[-1].value << line
|
17
|
+
elsif line =~ /\A\s+let\(?:(\w+)\)?\s*do\s*\n/
|
18
|
+
continuation = true
|
19
|
+
_lets << Let.new($1.strip, '')
|
20
|
+
elsif line =~ /\A\s+let\(?:(\w+)\)?\s*\{(.+)\}/m
|
21
|
+
_lets << Let.new($1.strip, $2.strip)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
_lets
|
25
|
+
end
|
26
|
+
|
27
|
+
def indentation
|
28
|
+
line = nil
|
29
|
+
File.open(file) do |f|
|
30
|
+
previous_line = nil
|
31
|
+
until indent_size(previous_line) != indent_size(line = f.gets)
|
32
|
+
previous_line = line
|
33
|
+
end
|
34
|
+
end
|
35
|
+
indent_size(line)
|
36
|
+
end
|
37
|
+
|
38
|
+
def methods
|
39
|
+
items = []
|
40
|
+
klasses = Set.new
|
41
|
+
File.readlines(file).each do |line|
|
42
|
+
if line =~ /class (\w+)/
|
43
|
+
klasses << $1
|
44
|
+
end
|
45
|
+
case line.to_s.chomp.strip
|
46
|
+
when /#?\s*private/i
|
47
|
+
break
|
48
|
+
when /def (self)?(\.?[a-z0-9_]+)/
|
49
|
+
method_name = $2
|
50
|
+
if method_name !~ /\A\./
|
51
|
+
method_name = "##{method_name}"
|
52
|
+
end
|
53
|
+
items << "#{klasses.to_a.join('::')}#{method_name}"
|
54
|
+
else
|
55
|
+
nil
|
56
|
+
end
|
57
|
+
end
|
58
|
+
items
|
59
|
+
end
|
60
|
+
|
61
|
+
def describes
|
62
|
+
File.readlines(file).map { |line| $2 if line =~ /(describe|context)\s*['"%](.+)\s*['"%]/ }.compact
|
63
|
+
end
|
64
|
+
|
65
|
+
def indent_size(line)
|
66
|
+
line.to_s.chomp.rstrip[/\s{0,}/].size.to_i
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module DRG
|
2
|
+
module Tasks
|
3
|
+
class GemfileLine < Struct.new(:line, :index)
|
4
|
+
alias to_s line
|
5
|
+
|
6
|
+
def ==(other)
|
7
|
+
line.to_s == other.to_s
|
8
|
+
end
|
9
|
+
|
10
|
+
# @param [Gem::Version] version responds to version.approximate_recommendation (~> 5.0)
|
11
|
+
def update(version)
|
12
|
+
if line =~ /,.+\n?/
|
13
|
+
line.sub!(/,\s*(.+)\n?/, ", '#{version.to_s}'\n")
|
14
|
+
elsif line.end_with?("\n")
|
15
|
+
line.sub!("\n", ", '#{version.to_s}'\n")
|
16
|
+
else
|
17
|
+
line << ", '#{version.to_s}'\n"
|
18
|
+
end
|
19
|
+
line
|
20
|
+
end
|
21
|
+
|
22
|
+
def version
|
23
|
+
line[/, (.+)\n?/, 1]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
|
3
|
+
module DRG
|
4
|
+
module Tasks
|
5
|
+
class Pinner
|
6
|
+
def perform
|
7
|
+
log %Q(Pinning Gemfile "#{gemfile}")
|
8
|
+
Bundler.locked_gems.specs.each do |spec|
|
9
|
+
gem = find_by_name(spec.name)
|
10
|
+
next unless gem
|
11
|
+
lines[gem.index] = gem.update(spec.version)
|
12
|
+
end
|
13
|
+
write_to_gemfile
|
14
|
+
log %Q(Done)
|
15
|
+
end
|
16
|
+
|
17
|
+
def write_to_gemfile
|
18
|
+
File.open(gemfile, 'wb') do |f|
|
19
|
+
lines.each do |line|
|
20
|
+
f << line
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def find_by_name(name)
|
26
|
+
lines.each_with_index.each do |line, index|
|
27
|
+
next if line =~ /:?path:?\s*(=>)?\s*/
|
28
|
+
next if line =~ /:?git(hub)?:?\s*(=>)?\s*/
|
29
|
+
if line =~ /gem\s*['"]#{name}["']/
|
30
|
+
return GemfileLine.new line, index
|
31
|
+
end
|
32
|
+
end
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
|
36
|
+
def lines
|
37
|
+
@lines ||= File.readlines(gemfile)
|
38
|
+
end
|
39
|
+
|
40
|
+
def gemfile
|
41
|
+
Bundler.default_gemfile
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def log(msg = nil)
|
47
|
+
puts %Q( * #{msg})
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/drg/version.rb
ADDED
data/lib/drg.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'set'
|
3
|
+
require 'drg/version'
|
4
|
+
|
5
|
+
module DRG
|
6
|
+
autoload :FileReader, 'drg/file_reader'
|
7
|
+
autoload :Scanner, 'drg/scanner'
|
8
|
+
autoload :Judge, 'drg/judge'
|
9
|
+
autoload :FileContext, 'drg/file_context'
|
10
|
+
|
11
|
+
module Tasks
|
12
|
+
autoload :Pinner, 'drg/tasks/pinner'
|
13
|
+
autoload :GemfileLine, 'drg/tasks/gemfile_line'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
load 'tasks/drg.rake'
|
data/lib/tasks/drg.rake
ADDED
metadata
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: drg
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ryan Buckley
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-08-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ruby_parser
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.7.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 4.0.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.7.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 4.0.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: ruby2ruby
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 2.2.0
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 3.0.0
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 2.2.0
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 3.0.0
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: bundler
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '1.7'
|
60
|
+
type: :runtime
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '1.7'
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: rake
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '10.0'
|
74
|
+
type: :development
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '10.0'
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: rspec
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '3.2'
|
88
|
+
- - "<"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '4'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '3.2'
|
98
|
+
- - "<"
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '4'
|
101
|
+
description: DRG automates common tasks
|
102
|
+
email:
|
103
|
+
- arebuckley@gmail.com
|
104
|
+
executables: []
|
105
|
+
extensions: []
|
106
|
+
extra_rdoc_files: []
|
107
|
+
files:
|
108
|
+
- ".gitignore"
|
109
|
+
- ".ruby-gemset"
|
110
|
+
- ".ruby-version"
|
111
|
+
- ".travis.yml"
|
112
|
+
- Gemfile
|
113
|
+
- README.md
|
114
|
+
- Rakefile
|
115
|
+
- bin/console
|
116
|
+
- bin/setup
|
117
|
+
- drg.gemspec
|
118
|
+
- lib/drg.rb
|
119
|
+
- lib/drg/file_context.rb
|
120
|
+
- lib/drg/file_reader.rb
|
121
|
+
- lib/drg/judge.rb
|
122
|
+
- lib/drg/let.rb
|
123
|
+
- lib/drg/scanner.rb
|
124
|
+
- lib/drg/tasks/gemfile_line.rb
|
125
|
+
- lib/drg/tasks/pinner.rb
|
126
|
+
- lib/drg/version.rb
|
127
|
+
- lib/tasks/drg.rake
|
128
|
+
homepage: https://github.com/ridiculous/drg
|
129
|
+
licenses: []
|
130
|
+
metadata: {}
|
131
|
+
post_install_message:
|
132
|
+
rdoc_options: []
|
133
|
+
require_paths:
|
134
|
+
- lib
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
requirements: []
|
146
|
+
rubyforge_project:
|
147
|
+
rubygems_version: 2.4.6
|
148
|
+
signing_key:
|
149
|
+
specification_version: 4
|
150
|
+
summary: DRG automation
|
151
|
+
test_files: []
|