rails_dt 0.1.4 → 1.2.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 +16 -0
- data/.yardopts +2 -0
- data/Gemfile +14 -0
- data/MIT-LICENSE +1 -1
- data/README.md +43 -135
- data/lib/dt.rb +31 -215
- data/lib/dt/config.rb +74 -0
- data/lib/dt/instance.rb +117 -0
- data/lib/rails_dt.rb +3 -2
- data/lib/rails_dt/version.rb +4 -0
- data/rails_dt.gemspec +12 -50
- data/spec/lib/dt/config_spec.rb +76 -0
- data/spec/lib/dt/instance_spec.rb +173 -0
- data/spec/lib/dt_spec.rb +14 -0
- data/spec/lib/rails_dt_spec.rb +6 -0
- data/spec/lib/spec/alias_method_matcher_spec.rb +16 -0
- data/spec/lib/spec/context_when_spec.rb +32 -0
- data/spec/lib/spec/let_m_spec.rb +104 -0
- data/spec/lib/spec/use_custom_let_spec.rb +46 -0
- data/spec/spec_helper.rb +6 -0
- data/spec/support/00extend_x.rb +23 -0
- data/spec/support/alias_method_matcher.rb +20 -0
- data/spec/support/context_when.rb +39 -0
- data/spec/support/let_m.rb +27 -0
- data/spec/support/use_custom_let.rb +80 -0
- metadata +43 -52
- data/README.html +0 -171
- data/Rakefile +0 -68
- data/VERSION.yml +0 -4
- data/generators/rails_dt/USAGE +0 -11
- data/generators/rails_dt/WARNING +0 -2
- data/generators/rails_dt/rails_dt_generator.rb +0 -9
- data/generators/rails_dt/templates/INSTALL +0 -20
- data/generators/rails_dt/templates/dt.css +0 -27
- data/generators/rails_dt/templates/dt.rb +0 -4
- data/init.rb +0 -2
- data/lib/dt/action_controller_extensions.rb +0 -29
- data/lib/generators/rails_dt/USAGE +0 -11
- data/lib/generators/rails_dt/rails_dt_generator.rb +0 -9
- data/lib/generators/rails_dt/templates/INSTALL +0 -20
- data/lib/generators/rails_dt/templates/dt.css +0 -27
- data/lib/generators/rails_dt/templates/dt.rb +0 -4
data/spec/lib/dt_spec.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
RSpec.describe DT do
|
3
|
+
subject { described_class.public_send(m) }
|
4
|
+
|
5
|
+
describe ".conf" do
|
6
|
+
let_m
|
7
|
+
it { is_expected.to be_a described_class::Config }
|
8
|
+
end
|
9
|
+
|
10
|
+
describe ".instance" do
|
11
|
+
let_m
|
12
|
+
it { is_expected.to be_a described_class::Instance }
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
RSpec.describe "`alias_method` matcher" do
|
3
|
+
describe "klass" do
|
4
|
+
let(:klass) do
|
5
|
+
Class.new do
|
6
|
+
def is_one
|
7
|
+
end
|
8
|
+
alias_method :one?, :is_one
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
subject { klass.new }
|
13
|
+
|
14
|
+
it { is_expected.to alias_method(:one?, :is_one) }
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
RSpec.describe ".context_when" do
|
5
|
+
context "when default" do
|
6
|
+
context_when a: 1, "b" => 2, x: "y" do
|
7
|
+
description = self.description
|
8
|
+
it { expect(description).to eq 'when {a: 1, "b"=>2, x: "y"}' }
|
9
|
+
it { expect { c }.to raise_error(NameError, /^undefined local variable or method `c'/) }
|
10
|
+
it { expect([a, b, x]).to eq [1, 2, "y"] }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context "when customized" do
|
15
|
+
context_when({a: 1, x: "y"}, format_proc: ->(h) { "when #{h.to_json}" }) do
|
16
|
+
description = self.description
|
17
|
+
it { expect(description).to eq 'when {"a":1,"x":"y"}' }
|
18
|
+
it { expect([a, x]).to eq [1, "y"] }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "with `def` in the block" do
|
23
|
+
context_when a: 1 do
|
24
|
+
def ar
|
25
|
+
[a, 2]
|
26
|
+
end
|
27
|
+
|
28
|
+
it { expect(a).to eq 1 }
|
29
|
+
it { expect(ar).to eq [1, 2] }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
|
2
|
+
RSpec.describe ".let_m" do
|
3
|
+
describe "describe/it scope" do
|
4
|
+
describe "#some_method" do
|
5
|
+
let_m
|
6
|
+
self_m = m
|
7
|
+
it { expect(self_m).to eq :some_method }
|
8
|
+
it { expect(m).to eq :some_method }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "`let` argument handling" do
|
13
|
+
describe "#some_method" do
|
14
|
+
let_m(:x)
|
15
|
+
self_x = x
|
16
|
+
it { expect(self_x).to eq :some_method }
|
17
|
+
it { expect(x).to eq :some_method }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "when invalid argument like ..." do
|
22
|
+
def self.doit
|
23
|
+
# OPTIMIZE: There's a more optimal implementation of this in `extract_to_spec.rb`.
|
24
|
+
begin; let_m; rescue ArgumentError => e; let(:message) { e.message }; end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#some_method!!" do
|
28
|
+
doit
|
29
|
+
it { expect(message).to eq "Unknown description format: \"#some_method!!\"" }
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#some method" do
|
33
|
+
doit
|
34
|
+
it { expect(message).to eq "Unknown description format: \"#some method\"" }
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "method" do
|
38
|
+
doit
|
39
|
+
it { expect(message).to eq "Unknown description format: \"method\"" }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "when valid argument like ..." do
|
44
|
+
describe "#some_method" do
|
45
|
+
let_m
|
46
|
+
it { expect(m).to eq :some_method }
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "#some_method?" do
|
50
|
+
let_m
|
51
|
+
it { expect(m).to eq :some_method? }
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "#some_method!" do
|
55
|
+
let_m
|
56
|
+
it { expect(m).to eq :some_method! }
|
57
|
+
end
|
58
|
+
|
59
|
+
describe ".some_method" do
|
60
|
+
let_m
|
61
|
+
it { expect(m).to eq :some_method }
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "::some_method" do
|
65
|
+
let_m
|
66
|
+
it { expect(m).to eq :some_method }
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "#[]" do
|
70
|
+
let_m
|
71
|
+
it { expect(m).to eq :[] }
|
72
|
+
end
|
73
|
+
|
74
|
+
describe ".[]" do
|
75
|
+
let_m
|
76
|
+
it { expect(m).to eq :[] }
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "::[]" do
|
80
|
+
let_m
|
81
|
+
it { expect(m).to eq :[] }
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "GET some_action" do
|
85
|
+
let_m
|
86
|
+
it { expect(m).to eq :some_action }
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "POST some_action" do
|
90
|
+
let_m
|
91
|
+
it { expect(m).to eq :some_action }
|
92
|
+
end
|
93
|
+
|
94
|
+
describe "PUT some_action" do
|
95
|
+
let_m
|
96
|
+
it { expect(m).to eq :some_action }
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "DELETE some_action" do
|
100
|
+
let_m
|
101
|
+
it { expect(m).to eq :some_action }
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
|
2
|
+
RSpec.describe ".use_custom_let" do
|
3
|
+
use_custom_let(:let_a, :attrs)
|
4
|
+
|
5
|
+
describe "straight usage" do
|
6
|
+
describe "attrs" do
|
7
|
+
let_a(:name) { "Joe" }
|
8
|
+
let_a(:age) { 25 }
|
9
|
+
let(:gender) { :male }
|
10
|
+
it do
|
11
|
+
expect(name).to eq "Joe"
|
12
|
+
expect(age).to eq 25
|
13
|
+
expect(attrs).to eq(name: "Joe", age: 25)
|
14
|
+
expect(attrs(include: [:gender])).to eq(name: "Joe", age: 25, gender: :male)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "declarative (no block) usage" do
|
20
|
+
let_a(:name)
|
21
|
+
|
22
|
+
subject { attrs }
|
23
|
+
|
24
|
+
context "when no other `let` value" do
|
25
|
+
it { is_expected.to eq({}) }
|
26
|
+
end
|
27
|
+
|
28
|
+
context "when `let`" do
|
29
|
+
let(:name) { "Joe" }
|
30
|
+
it { is_expected.to eq(name: "Joe") }
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when `let_a`" do
|
34
|
+
let_a(:name) { "Joe" }
|
35
|
+
it { is_expected.to eq(name: "Joe") }
|
36
|
+
end
|
37
|
+
|
38
|
+
context_when name: "Joe" do
|
39
|
+
context_when name: "Moe" do
|
40
|
+
it { is_expected.to eq(name: "Moe") }
|
41
|
+
end
|
42
|
+
|
43
|
+
it { is_expected.to eq(name: "Joe") }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# Convenience methods to extend RSpec metalanguage.
|
4
|
+
# This file must be loaded before other support files.
|
5
|
+
#
|
6
|
+
|
7
|
+
module Kernel
|
8
|
+
def extend_describe(&block)
|
9
|
+
raise ArgumentError, "Code block must be given" unless block
|
10
|
+
|
11
|
+
::RSpec.configure do |config|
|
12
|
+
config.extend Module.new(&block)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def extend_it(&block)
|
17
|
+
raise ArgumentError, "Code block must be given" unless block
|
18
|
+
|
19
|
+
::RSpec.configure do |config|
|
20
|
+
config.include Module.new(&block)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# Method alias matcher.
|
4
|
+
#
|
5
|
+
# describe User do
|
6
|
+
# it { is_expected.to alias_method(:admin?, :is_admin) }
|
7
|
+
# end
|
8
|
+
#
|
9
|
+
# Originally from: https://gist.github.com/1950961, but heavily reworked consistency-wise.
|
10
|
+
#
|
11
|
+
|
12
|
+
RSpec::Matchers.define :alias_method do |new_name, old_name|
|
13
|
+
match do |subject|
|
14
|
+
expect(subject.method(new_name)).to eq subject.method(old_name)
|
15
|
+
end
|
16
|
+
|
17
|
+
description do
|
18
|
+
"have #{new_name.inspect} aliased to #{old_name.inspect}"
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
extend_describe do
|
3
|
+
# Create a `context "when ..."`, with a set of let variables defined.
|
4
|
+
#
|
5
|
+
# context_when a: 1, x: "y" do
|
6
|
+
# it { expect(a).to eq 1 } # Success.
|
7
|
+
# it { expect(x).to eq "y" } # Success.
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# , is identical to:
|
11
|
+
#
|
12
|
+
# context "when {a: 1, x: \"y\"}" do
|
13
|
+
# let(:a) { 1 }
|
14
|
+
# let(:x) { "y" }
|
15
|
+
# ...
|
16
|
+
#
|
17
|
+
# @param h [Hash]
|
18
|
+
# @param format_proc [Proc]
|
19
|
+
# @return [void]
|
20
|
+
def context_when(h, format_proc: context_when_default_format_proc, &block)
|
21
|
+
context format_proc[h] do
|
22
|
+
h.each do |k, v|
|
23
|
+
let(k) { v }
|
24
|
+
end
|
25
|
+
class_eval(&block)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Default <tt>format_proc</tt> for {.context_when}.
|
30
|
+
# @return [Proc]
|
31
|
+
# @see .context_when
|
32
|
+
def context_when_default_format_proc
|
33
|
+
->(h) do
|
34
|
+
# Primitive readability hack. Might screw string values, too.
|
35
|
+
inspected = h.inspect.gsub(/:(\w+)=>/, "\\1: ")
|
36
|
+
"when #{inspected}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
extend_describe do
|
3
|
+
# Add a variable, named <tt>m</tt> by default, containing the symbolized method name from the
|
4
|
+
# description. Example:
|
5
|
+
#
|
6
|
+
# describe "#some_method" do
|
7
|
+
# let_m
|
8
|
+
#
|
9
|
+
# , is identical to:
|
10
|
+
#
|
11
|
+
# describe "#some_method" do
|
12
|
+
# let(:m) { :some_method }
|
13
|
+
# def self.m; :some_method; end
|
14
|
+
#
|
15
|
+
# @param let [Symbol] Name of the variable to create.
|
16
|
+
# @return [void]
|
17
|
+
def let_m(let = :m)
|
18
|
+
if (mat = (description = self.description).match(/^(?:(?:#|\.|::)(\w+(?:\?|!|)|\[\])|(?:DELETE|GET|PUT|POST) (\w+))$/))
|
19
|
+
s = mat[1] || mat[2]
|
20
|
+
sym = s.to_sym
|
21
|
+
let(let) { sym }
|
22
|
+
define_singleton_method(let) { sym }
|
23
|
+
else
|
24
|
+
raise ArgumentError, "Unknown description format: #{description.inspect}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
|
2
|
+
extend_describe do
|
3
|
+
# Define methods to manage of <tt>let</tt> variables which act as a distinct subset.
|
4
|
+
#
|
5
|
+
# RSpec.describe SomeKlass do
|
6
|
+
# use_custom_let(:let_a, :attrs) # (1)
|
7
|
+
# use_custom_let(:let_p, :params) # (2)
|
8
|
+
# ...
|
9
|
+
#
|
10
|
+
# In above examples, (1) provides our suite with:
|
11
|
+
#
|
12
|
+
# def self.let_a(let, &block)
|
13
|
+
# def attrs(include: [])
|
14
|
+
#
|
15
|
+
# , thus this now becomes possible:
|
16
|
+
#
|
17
|
+
# describe "attrs" do
|
18
|
+
# let_a(:name) { "Joe" }
|
19
|
+
# let_a(:age) { 25 }
|
20
|
+
# let(:gender) { :male }
|
21
|
+
# it do
|
22
|
+
# expect(name).to eq "Joe"
|
23
|
+
# expect(age).to eq 25
|
24
|
+
# expect(attrs).to eq(name: "Joe", age: 25)
|
25
|
+
# expect(attrs(include: [:gender])).to eq(name: "Joe", age: 25, gender: :male)
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
# By not providing a block it's possible to <b>declare</b> a custom <tt>let</tt> variable
|
30
|
+
# and be able to redefine it later via regular <tt>let</tt>. This will work:
|
31
|
+
#
|
32
|
+
# describe "declarative (no block) usage" do
|
33
|
+
# let_a(:name)
|
34
|
+
#
|
35
|
+
# subject { attrs }
|
36
|
+
#
|
37
|
+
# context "when no other `let` value" do
|
38
|
+
# it { is_expected.to eq({}) }
|
39
|
+
# end
|
40
|
+
#
|
41
|
+
# context "when `let`" do
|
42
|
+
# let(:name) { "Joe" }
|
43
|
+
# it { is_expected.to eq(name: "Joe") }
|
44
|
+
# end
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# NOTE: At the moment the feature only works if <tt>use_custom_let</tt> is invoked from a
|
48
|
+
# top-level (<tt>RSpec.describe</tt>) context. Correct usage in sub-context is yet not possible.
|
49
|
+
def use_custom_let(let_method, collection_method)
|
50
|
+
class_eval %{
|
51
|
+
def self.#{let_method}(let, &block)
|
52
|
+
#{let_method}_keys << let
|
53
|
+
let(let, &block) if block
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.#{let_method}_keys
|
57
|
+
@#{let_method}_keys ||= []
|
58
|
+
end
|
59
|
+
|
60
|
+
# OPTIMIZE: Consider removing `include:` altogether as we've got declarative mode now.
|
61
|
+
def #{collection_method}(include: [])
|
62
|
+
# NOTE: We don't store computation in a @variable since we have an argument. The result
|
63
|
+
# may vary.
|
64
|
+
begin
|
65
|
+
keys, klass = include, self.class
|
66
|
+
begin
|
67
|
+
keys += klass.#{let_method}_keys
|
68
|
+
end while (klass = klass.superclass) < RSpec::Core::ExampleGroup
|
69
|
+
# NOTE: `< RSpec::Core::ExampleGroup` is probably the reason why we can't use this in
|
70
|
+
# sub-contexts. The need for such use is highly questionable since this feature in
|
71
|
+
# effect extends RSpec syntax.
|
72
|
+
|
73
|
+
{}.tap do |_|
|
74
|
+
keys.uniq.each { |k| begin; _[k] = public_send(k); rescue NoMethodError; end }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
} # class_eval
|
79
|
+
end
|
80
|
+
end
|
metadata
CHANGED
@@ -1,77 +1,68 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_dt
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.1.4
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.0
|
6
5
|
platform: ruby
|
7
|
-
authors:
|
6
|
+
authors:
|
8
7
|
- Alex Fortuna
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
|
13
|
-
date: 2011-07-13 00:00:00 +04:00
|
14
|
-
default_executable:
|
11
|
+
date: 2018-03-23 00:00:00.000000000 Z
|
15
12
|
dependencies: []
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
description:
|
14
|
+
email:
|
15
|
+
- fortunadze@gmail.com
|
19
16
|
executables: []
|
20
|
-
|
21
17
|
extensions: []
|
22
|
-
|
23
|
-
|
24
|
-
-
|
25
|
-
-
|
26
|
-
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- ".gitignore"
|
21
|
+
- ".yardopts"
|
22
|
+
- Gemfile
|
27
23
|
- MIT-LICENSE
|
28
|
-
- README.html
|
29
24
|
- README.md
|
30
|
-
- Rakefile
|
31
|
-
- VERSION.yml
|
32
|
-
- generators/rails_dt/USAGE
|
33
|
-
- generators/rails_dt/WARNING
|
34
|
-
- generators/rails_dt/rails_dt_generator.rb
|
35
|
-
- generators/rails_dt/templates/INSTALL
|
36
|
-
- generators/rails_dt/templates/dt.css
|
37
|
-
- generators/rails_dt/templates/dt.rb
|
38
|
-
- init.rb
|
39
25
|
- lib/dt.rb
|
40
|
-
- lib/dt/
|
41
|
-
- lib/
|
42
|
-
- lib/generators/rails_dt/rails_dt_generator.rb
|
43
|
-
- lib/generators/rails_dt/templates/INSTALL
|
44
|
-
- lib/generators/rails_dt/templates/dt.css
|
45
|
-
- lib/generators/rails_dt/templates/dt.rb
|
26
|
+
- lib/dt/config.rb
|
27
|
+
- lib/dt/instance.rb
|
46
28
|
- lib/rails_dt.rb
|
29
|
+
- lib/rails_dt/version.rb
|
47
30
|
- rails_dt.gemspec
|
48
|
-
|
31
|
+
- spec/lib/dt/config_spec.rb
|
32
|
+
- spec/lib/dt/instance_spec.rb
|
33
|
+
- spec/lib/dt_spec.rb
|
34
|
+
- spec/lib/rails_dt_spec.rb
|
35
|
+
- spec/lib/spec/alias_method_matcher_spec.rb
|
36
|
+
- spec/lib/spec/context_when_spec.rb
|
37
|
+
- spec/lib/spec/let_m_spec.rb
|
38
|
+
- spec/lib/spec/use_custom_let_spec.rb
|
39
|
+
- spec/spec_helper.rb
|
40
|
+
- spec/support/00extend_x.rb
|
41
|
+
- spec/support/alias_method_matcher.rb
|
42
|
+
- spec/support/context_when.rb
|
43
|
+
- spec/support/let_m.rb
|
44
|
+
- spec/support/use_custom_let.rb
|
49
45
|
homepage: http://github.com/dadooda/rails_dt
|
50
46
|
licenses: []
|
51
|
-
|
47
|
+
metadata: {}
|
52
48
|
post_install_message:
|
53
49
|
rdoc_options: []
|
54
|
-
|
55
|
-
require_paths:
|
50
|
+
require_paths:
|
56
51
|
- lib
|
57
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
-
|
59
|
-
requirements:
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
60
54
|
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version:
|
63
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
-
|
65
|
-
requirements:
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
66
59
|
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version:
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
69
62
|
requirements: []
|
70
|
-
|
71
63
|
rubyforge_project:
|
72
|
-
rubygems_version:
|
64
|
+
rubygems_version: 2.5.2
|
73
65
|
signing_key:
|
74
|
-
specification_version:
|
75
|
-
summary: Rails
|
66
|
+
specification_version: 4
|
67
|
+
summary: Ruby/Rails debug toolkit
|
76
68
|
test_files: []
|
77
|
-
|