drg 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.gem
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
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.1
4
+ before_install: gem install bundler -v 1.10.4
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in drg.gemspec
4
+ gemspec
5
+
6
+ group :development, :test do
7
+ gem "pry", '~> 0.10'
8
+ gem 'object_tracker', '>= 1.0.5'
9
+ gem 'byebug'
10
+ end
11
+ gem 'slop'
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
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.unshift './lib'
2
+ require 'drg'
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec) do |spec|
6
+ spec.pattern = 'spec/lib/**/*_spec.rb'
7
+ end
8
+
9
+ desc 'Run specs'
10
+ task default: :spec
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
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
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
@@ -0,0 +1,4 @@
1
+ module DRG
2
+ class Let < Struct.new(:name, :value)
3
+ end
4
+ end
@@ -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
@@ -0,0 +1,3 @@
1
+ module Drg
2
+ VERSION = '0.1.0'.freeze
3
+ end
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'
@@ -0,0 +1,8 @@
1
+ require 'rake'
2
+
3
+ namespace :drg do
4
+ desc 'Pins your gems in the Gemfile to the current version (using Gemfile.lock)'
5
+ task :pin do
6
+ DRG::Tasks::Pinner.new.perform
7
+ end
8
+ end
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: []