card-mod-monkey 0.11.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/db/migrate_core_cards/20160812112513_add_developer_cards.rb +11 -0
- data/lib/card/mod/monkey.rb +10 -0
- data/lib/cardio/pry.rb +111 -0
- data/lib/cardio/pry/commands.rb +63 -0
- data/lib/cardio/pry/intro.txt +34 -0
- data/set/all/event_viz.rb +64 -0
- data/set/all/view_viz.rb +23 -0
- data/set/right/debug.rb +88 -0
- metadata +180 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: dd42d4f0bc0d9579387e2ea1635f65a4b3eda7a9a652133c12e4d9c1946f70cf
|
4
|
+
data.tar.gz: 935dcf7306c5cbc030875a27120694be45b96178fa9ccaa01e7dfdd2e4d85a0a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 041023b89d990c023a10f44c940c07d9e568fe2e0ce43e3db7ed71674f62819d781756cba231aaf950ff0adc7aaaede6ae2bb5aba55293784b43ea6d6ca0140c
|
7
|
+
data.tar.gz: 0762cacbac60d29f7d83a89b2c95b74e4a1d140573afa6b6f44b45e5b01fc3e499d526b52f02898292ab7d4af0f94415f4755c1835fbf3215c4cc58eb02e23d3
|
data/lib/cardio/pry.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
module Cardio
|
2
|
+
# These commands are available in the console when using binding.pry for breakpoints.
|
3
|
+
module Pry
|
4
|
+
require "rails/console/app"
|
5
|
+
require "cardio/pry/commands"
|
6
|
+
include Rails::ConsoleMethods
|
7
|
+
include Commands
|
8
|
+
|
9
|
+
def create name="test card", content="some content", type="basic"
|
10
|
+
if name.is_a? Hash
|
11
|
+
Card.create! name
|
12
|
+
elsif content.is_a? Hash
|
13
|
+
Card.create! content.merge(name: name)
|
14
|
+
else
|
15
|
+
Card.create! name: name, content: content, type: type
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def update name="test card", *args
|
20
|
+
card_attr = {}
|
21
|
+
if args.first.is_a? String
|
22
|
+
card_attr[:content] = args.shift
|
23
|
+
card_attr.merge!(args.first)
|
24
|
+
else
|
25
|
+
card_attr = args.first
|
26
|
+
end
|
27
|
+
Card.fetch(name).update_attributes card_attr
|
28
|
+
end
|
29
|
+
|
30
|
+
# Shortcut for fetching cards. You can continue to work with the
|
31
|
+
# last fetched card by calling `fe` without arguments.
|
32
|
+
# If the first call of `fe` is without argument, fe points to the card "Home"
|
33
|
+
# Example:
|
34
|
+
# fe.name # => "Home"
|
35
|
+
# fe "Basic"
|
36
|
+
# fe.name # => "Basic"
|
37
|
+
# fe.type # => "cardtype"
|
38
|
+
def fe name=nil
|
39
|
+
if name
|
40
|
+
@fe = Card.fetch name
|
41
|
+
else
|
42
|
+
@fe ||= Card.fetch "home"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def cr name=nil, content="some content", type="basic"
|
47
|
+
if name
|
48
|
+
@cr = create name, content, type
|
49
|
+
else
|
50
|
+
@cr ||= create
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def ab
|
55
|
+
Card::Auth.as_bot
|
56
|
+
end
|
57
|
+
|
58
|
+
# use syntax highlighting if html is detected
|
59
|
+
def puts *args
|
60
|
+
text = args.first
|
61
|
+
return super unless args.size == 1 && htmlish?(text)
|
62
|
+
html = Nokogiri::XML text, &:noblanks
|
63
|
+
puts_html(html, text) { |*super_args| super(*super_args) }
|
64
|
+
end
|
65
|
+
|
66
|
+
def htmlish? text
|
67
|
+
text.is_a?(String) && (text.match?(%r{</\w+>}) || text.include?("\e"))
|
68
|
+
end
|
69
|
+
|
70
|
+
def puts_html html, text, &block
|
71
|
+
if html.errors.present?
|
72
|
+
puts_html_errors html, text, &block
|
73
|
+
else
|
74
|
+
puts_highlighted_html html, &block
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def puts_html_errors html, text
|
79
|
+
yield text
|
80
|
+
puts
|
81
|
+
yield "WARNING: detected invalid html".red
|
82
|
+
yield html.errors
|
83
|
+
end
|
84
|
+
|
85
|
+
def puts_highlighted_html html
|
86
|
+
# yield "with syntax highlighting:\n"
|
87
|
+
yield CodeRay.scan(html.root.to_s, :html).term
|
88
|
+
end
|
89
|
+
|
90
|
+
def hputs text
|
91
|
+
text = Nokogiri::XML(text, &:noblanks).root.to_s
|
92
|
+
print CodeRay.scan(text, :html).term
|
93
|
+
print "\n"
|
94
|
+
end
|
95
|
+
|
96
|
+
def _a
|
97
|
+
@_array ||= (1..6).to_a
|
98
|
+
end
|
99
|
+
|
100
|
+
def _h
|
101
|
+
@_hash ||= { hello: "world", free: "of charge" }
|
102
|
+
end
|
103
|
+
|
104
|
+
def _u
|
105
|
+
@_user ||= Card.fetch "Joe User"
|
106
|
+
end
|
107
|
+
|
108
|
+
intro = File.read File.expand_path("../pry/intro.txt", __FILE__)
|
109
|
+
puts intro
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Cardio
|
2
|
+
module Pry
|
3
|
+
# Pry command configuration
|
4
|
+
module Commands
|
5
|
+
class << self
|
6
|
+
def alias_command *args
|
7
|
+
::Pry.config.commands.alias_command(*args)
|
8
|
+
end
|
9
|
+
|
10
|
+
def block_command *args
|
11
|
+
::Pry.commands.block_command(*args)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
::Pry.config.editor = proc { |file, line| "mine #{file}:#{line}" }
|
16
|
+
|
17
|
+
alias_command "h", "hist -T 20", desc: "Last 20 commands"
|
18
|
+
alias_command "hg", "hist -T 20 -G", desc: "Up to 20 commands matching expression"
|
19
|
+
alias_command "hG", "hist -G", desc: "Commands matching expression ever used"
|
20
|
+
alias_command "hr", "hist -r", desc: "hist -r <command number> to run a command"
|
21
|
+
alias_command "clear", "break --delete-all", desc: "remove all break points"
|
22
|
+
|
23
|
+
# Hit Enter to repeat last command
|
24
|
+
::Pry::Commands.command(/^$/, "repeat last command") do
|
25
|
+
pry_instance.run_command ::Pry.history.to_a.last
|
26
|
+
end
|
27
|
+
|
28
|
+
if defined?(PryByebug)
|
29
|
+
::Pry.commands.alias_command "c", "continue"
|
30
|
+
::Pry.commands.alias_command "s", "step"
|
31
|
+
::Pry.commands.alias_command "n", "next"
|
32
|
+
::Pry.commands.alias_command "f", "finish"
|
33
|
+
end
|
34
|
+
|
35
|
+
# breakpoint commands
|
36
|
+
block_command "try", "play expression in current line" do |offset|
|
37
|
+
line = target.eval("__LINE__")
|
38
|
+
line = line.to_i + offset.to_i if offset
|
39
|
+
run "play -e #{line}"
|
40
|
+
end
|
41
|
+
|
42
|
+
block_command "breakview",
|
43
|
+
"set break point where view is rendered" do |view_name, cardish|
|
44
|
+
breakpoint = "break #{Cardio.gem_root}/lib/card/format/render.rb:43"
|
45
|
+
|
46
|
+
breakpoint += " if view.to_sym == \\'#{view_name}\\'.to_sym" if view_name
|
47
|
+
breakpoint += " && card.key == \\'#{cardish}\\'.to_name.key" if cardish
|
48
|
+
run breakpoint
|
49
|
+
end
|
50
|
+
|
51
|
+
block_command "breaknest", "set break point where nest is rendered" do |card_key|
|
52
|
+
breakpoint = "break #{Cardio.gem_root}/lib/card/format/nest.rb:19"
|
53
|
+
if card_key
|
54
|
+
breakpoint += " if cardish.to_name.key == \\'#{card_key}\\'.to_name.key"
|
55
|
+
end
|
56
|
+
run breakpoint
|
57
|
+
end
|
58
|
+
|
59
|
+
alias_command "bv", "breakview"
|
60
|
+
alias_command "bn", "breaknest"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
== Command history ==
|
2
|
+
h : hist -T 20 Last 20 commands
|
3
|
+
hg : hist -T 20 -G Up to 20 commands matching expression
|
4
|
+
hG : hist -G Commands matching expression ever used
|
5
|
+
hr : hist -r hist -r <command number> to run a command
|
6
|
+
Hit Enter to repeat last command
|
7
|
+
|
8
|
+
== Variables ==
|
9
|
+
_u : Card["Joe User"]
|
10
|
+
_a : [1, 2, 3, 4, 5, 6]
|
11
|
+
_h : { hello: "world", free: "of charge" }
|
12
|
+
|
13
|
+
== Card commands ==
|
14
|
+
create : Card.create :name=>$1, :content=>($2||"some content"), :type=>($3||"basic")
|
15
|
+
update : Card.update :name=>$1, :content=>($2||"some content"), :type=>($3||"basic")
|
16
|
+
ab : Card::Auth.as_bot
|
17
|
+
cr : create card and assign it to cr
|
18
|
+
(default: name=>"test card", content=>"some content", type=>"basic")
|
19
|
+
fe : fetch card and assign it to fe (default: "Home")
|
20
|
+
|
21
|
+
== Breakpoints ==
|
22
|
+
breakview (bv) : set break point where view is rendered
|
23
|
+
(takes a view name and a card mark as optional argument)
|
24
|
+
breaknest (bn) : set break point where nest is rendered
|
25
|
+
(takes a card mark as optional argument)
|
26
|
+
clear : remove all break points
|
27
|
+
|
28
|
+
== Helpful debugger shortcuts ==
|
29
|
+
hputs : puts with html syntax highlighting
|
30
|
+
n : next
|
31
|
+
s : step
|
32
|
+
c : continue
|
33
|
+
f : finish
|
34
|
+
try : execute current line (without stepping forward)
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# the events method is a developer's tool for visualizing the event order
|
2
|
+
# for a given card.
|
3
|
+
# For example, from a console you might run
|
4
|
+
#
|
5
|
+
# puts mycard.events :update
|
6
|
+
#
|
7
|
+
# to see the order of events that will be executed on mycard.
|
8
|
+
# The indention and arrows (^v) indicate event dependencies.
|
9
|
+
#
|
10
|
+
# Note: as of yet, the functionality is a bit rough. It does not display events
|
11
|
+
# that are called directly from within other events,
|
12
|
+
# and certain event requirements (like the presence of an 'act') may
|
13
|
+
# prevent events from showing up in the tree.
|
14
|
+
def events action
|
15
|
+
@action = action
|
16
|
+
events = Director::Stages::STAGES.map { |stage| events_tree "#{stage}_stage" }
|
17
|
+
@action = nil
|
18
|
+
print_events events
|
19
|
+
end
|
20
|
+
|
21
|
+
def events_tree filt
|
22
|
+
try("_#{filt}_callbacks")&.each_with_object({ name: filt }) do |callback, hash|
|
23
|
+
events_branch hash, callback.kind, callback.filter if callback.applies? self
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def print_events events, prefix="", depth=0
|
30
|
+
depth += 1
|
31
|
+
space = " " * (depth * 2)
|
32
|
+
text = ""
|
33
|
+
events.each do |event|
|
34
|
+
text += print_event_pre event, depth, space
|
35
|
+
text += print_event_main event, prefix
|
36
|
+
text += print_event_post event, depth, space
|
37
|
+
end
|
38
|
+
text
|
39
|
+
end
|
40
|
+
|
41
|
+
def print_event_pre event, depth, space
|
42
|
+
if event[:before]
|
43
|
+
print_events event[:before], space + "v ", depth
|
44
|
+
elsif event[:around]
|
45
|
+
print_events event[:around], space + "vv ", depth
|
46
|
+
else
|
47
|
+
""
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def print_event_main event, prefix
|
52
|
+
"#{prefix}#{event[:name]}\n"
|
53
|
+
end
|
54
|
+
|
55
|
+
def print_event_post event, depth, space
|
56
|
+
return "" unless event[:after]
|
57
|
+
|
58
|
+
print_events event[:after], space + "^ ", depth
|
59
|
+
end
|
60
|
+
|
61
|
+
def events_branch hash, kind, filter
|
62
|
+
hash[kind] ||= []
|
63
|
+
hash[kind] << events_tree(filter)
|
64
|
+
end
|
data/set/all/view_viz.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
format :html do
|
2
|
+
view :views_by_format do
|
3
|
+
format_views =
|
4
|
+
self.class.ancestors.each_with_object({}) do |format_class, hash|
|
5
|
+
views =
|
6
|
+
format_class.instance_methods.map do |method|
|
7
|
+
next unless method.to_s =~ /^_view_(.+)$/
|
8
|
+
Regexp.last_match(1)
|
9
|
+
end.compact
|
10
|
+
next unless views.present?
|
11
|
+
format_class.name =~ /^Card(::Set)?::(.+?)$/ #::(\w+Format)
|
12
|
+
hash[Regexp.last_match(2)] = views
|
13
|
+
end
|
14
|
+
accordion_group format_views
|
15
|
+
end
|
16
|
+
|
17
|
+
view :views_by_name do
|
18
|
+
views = methods.map do |method|
|
19
|
+
Regexp.last_match(1) if method.to_s.match?(/^_view_(.+)$/)
|
20
|
+
end.compact.sort
|
21
|
+
list_group views
|
22
|
+
end
|
23
|
+
end
|
data/set/right/debug.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
def virtual?
|
2
|
+
new?
|
3
|
+
end
|
4
|
+
|
5
|
+
format :html do
|
6
|
+
view :core do
|
7
|
+
core_section_config(card.left).map do |item|
|
8
|
+
section(*item)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def core_section_config subject
|
13
|
+
[["Sets", tabs("set modules" => set_modules_accordion(subject),
|
14
|
+
"all modules" => singleton_modules_list(subject),
|
15
|
+
"patterns" => set_patterns_breadcrumb(subject))],
|
16
|
+
["Views", tabs("by format" => subformat(subject)._render_views_by_format,
|
17
|
+
"by name" => subformat(subject)._render_views_by_name)],
|
18
|
+
["Events", tabs(create: "<pre>#{subject.events(:create)}</pre>",
|
19
|
+
update: "<pre>#{subject.events(:update)}</pre>",
|
20
|
+
delete: "<pre>#{subject.events(:delete)}</pre>")],
|
21
|
+
["Cache/DB Comparison", cache_comparison_table(subject)]]
|
22
|
+
end
|
23
|
+
|
24
|
+
# rubocop:disable AccessorMethodName
|
25
|
+
def set_modules_accordion subject
|
26
|
+
sets = subject.set_modules.each_with_object({}) do |sm, hash|
|
27
|
+
ans = sm.ancestors
|
28
|
+
ans.shift
|
29
|
+
hash[sm.to_s] = ans
|
30
|
+
end
|
31
|
+
accordion_group sets
|
32
|
+
end
|
33
|
+
|
34
|
+
def set_patterns_breadcrumb subject
|
35
|
+
links = subject.patterns.reverse.map { |pattern| link_to_card pattern.to_s }
|
36
|
+
breadcrumb links
|
37
|
+
end
|
38
|
+
# rubocop:enable AccessorMethodName
|
39
|
+
|
40
|
+
def singleton_modules_list subject
|
41
|
+
all_mods = subject.singleton_class.ancestors.map(&:to_s)
|
42
|
+
all_mods.shift
|
43
|
+
list_group all_mods
|
44
|
+
end
|
45
|
+
|
46
|
+
def cache_comparison_table subject
|
47
|
+
cache_card = Card.fetch(subject.key)
|
48
|
+
db_card = Card.find_by_key(subject.key)
|
49
|
+
return unless cache_card && db_card
|
50
|
+
table(
|
51
|
+
%i[name updated_at updater_id content inspect].map do |field|
|
52
|
+
[field.to_s,
|
53
|
+
h(cache_card.send(field)),
|
54
|
+
h(db_card.send(field))]
|
55
|
+
end,
|
56
|
+
header: ["Field", "Cache Val", "Database Val"]
|
57
|
+
)
|
58
|
+
end
|
59
|
+
|
60
|
+
def section title, content
|
61
|
+
%(
|
62
|
+
<h2>#{title}</h2>
|
63
|
+
#{content}
|
64
|
+
)
|
65
|
+
end
|
66
|
+
|
67
|
+
def class_locations klass
|
68
|
+
methods = defined_methods(klass)
|
69
|
+
file_groups = methods.group_by { |sl| sl[0] }
|
70
|
+
file_counts = file_groups.map do |file, sls|
|
71
|
+
lines = sls.map { |sl| sl[1] }
|
72
|
+
count = lines.size
|
73
|
+
line = lines.min
|
74
|
+
{ file: file, count: count, line: line }
|
75
|
+
end
|
76
|
+
file_counts.sort_by! { |fc| fc[:count] }
|
77
|
+
file_counts.map { |fc| [fc[:file], fc[:line]] }
|
78
|
+
end
|
79
|
+
|
80
|
+
def defined_methods klass
|
81
|
+
methods =
|
82
|
+
klass.methods(false).map { |m| klass.method(m) } +
|
83
|
+
klass.instance_methods(false).map { |m| klass.instance_method(m) }
|
84
|
+
methods.map!(&:source_location)
|
85
|
+
methods.compact!
|
86
|
+
methods
|
87
|
+
end
|
88
|
+
end
|
metadata
ADDED
@@ -0,0 +1,180 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: card-mod-monkey
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.11.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ethan McCutchen
|
8
|
+
- Philipp Kühl
|
9
|
+
- Gerry Gleason
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2020-12-24 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: card
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - '='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.101.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - '='
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: 1.101.0
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: colorize
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: html2haml
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: rubocop
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - '='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0.88'
|
64
|
+
type: :runtime
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - '='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0.88'
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: better_errors
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
type: :runtime
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: pry-rails
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
type: :runtime
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: pry-rescue
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
type: :runtime
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: pry-stack_explorer
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
type: :runtime
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: pry-byebug
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
141
|
+
description: ''
|
142
|
+
email:
|
143
|
+
- info@decko.org
|
144
|
+
executables: []
|
145
|
+
extensions: []
|
146
|
+
extra_rdoc_files: []
|
147
|
+
files:
|
148
|
+
- db/migrate_core_cards/20160812112513_add_developer_cards.rb
|
149
|
+
- lib/card/mod/monkey.rb
|
150
|
+
- lib/cardio/pry.rb
|
151
|
+
- lib/cardio/pry/commands.rb
|
152
|
+
- lib/cardio/pry/intro.txt
|
153
|
+
- set/all/event_viz.rb
|
154
|
+
- set/all/view_viz.rb
|
155
|
+
- set/right/debug.rb
|
156
|
+
homepage: http://decko.org
|
157
|
+
licenses:
|
158
|
+
- GPL-3.0
|
159
|
+
metadata:
|
160
|
+
card-mod: monkey
|
161
|
+
post_install_message:
|
162
|
+
rdoc_options: []
|
163
|
+
require_paths:
|
164
|
+
- lib
|
165
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - ">="
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '2.5'
|
170
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
175
|
+
requirements: []
|
176
|
+
rubygems_version: 3.0.3
|
177
|
+
signing_key:
|
178
|
+
specification_version: 4
|
179
|
+
summary: dev support for mod developers (monkeys)
|
180
|
+
test_files: []
|