mars_base_10 0.3.0 → 0.4.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 +4 -4
- data/lib/.DS_Store +0 -0
- data/lib/mars_base_10/action_bar.rb +1 -1
- data/lib/mars_base_10/comm_central.rb +1 -1
- data/lib/mars_base_10/graph_rover.rb +50 -32
- data/lib/mars_base_10/pane.rb +91 -34
- data/lib/mars_base_10/ship.rb +11 -7
- data/lib/mars_base_10/subject.rb +29 -19
- data/lib/mars_base_10/version.rb +1 -1
- data/mars_base_10.gemspec +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd093ec957e418592f791bb2dfc1e1e7efa56973fd553534278a6dcb818f3482
|
4
|
+
data.tar.gz: 478b185df1d0c2280788691e4bd61bfac817c200348e63bb29a7a36e05f1eb84
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e9044477c9eb149f2212f5dd5e7e44eb8d0fa247e0db7a382aa5256708ba53027e8c48c18f992b4c2c7dde36281cd5f725f86662283d71f713f50ed6a08662a2
|
7
|
+
data.tar.gz: ac4c86d4ab841a92e262138bdf6a290af01d93e65d1afe514d6076681bb217dc59bde4ec2e90ccd3e10d4936ae298387ae0d662565e3030e88658a1f0a78deb6
|
data/lib/.DS_Store
ADDED
Binary file
|
@@ -11,7 +11,7 @@ module MarsBase10
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.Default
|
14
|
-
ActionBar.new actions: {'j': 'Move Down', 'k': 'Move Up', 'q': 'Quit'}
|
14
|
+
ActionBar.new actions: {'j': 'Move Down', 'k': 'Move Up', 'J': 'Page Down', 'K': 'Page Up', 'q': 'Quit'}
|
15
15
|
end
|
16
16
|
|
17
17
|
def actions_first_col
|
@@ -14,66 +14,69 @@ module MarsBase10
|
|
14
14
|
@viewport = viewport
|
15
15
|
@viewport.controller = self
|
16
16
|
|
17
|
-
|
17
|
+
self.wire_up_panes
|
18
|
+
self.viewport.action_bar = ActionBar.Default.add_action({'i': 'Inspect'})
|
19
|
+
self.viewport.activate pane: @graph_list_pane
|
20
|
+
self.resync
|
21
|
+
end
|
18
22
|
|
19
|
-
|
20
|
-
@
|
21
|
-
|
23
|
+
def active_node_index
|
24
|
+
@node_list_pane.current_subject_index
|
25
|
+
end
|
22
26
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
@node_list_pane.viewing subject: @ship.node_list
|
27
|
+
def active_node
|
28
|
+
self.ship.fetch_node(resource: self.active_resource, index: self.active_node_index)
|
29
|
+
end
|
27
30
|
|
28
|
-
|
29
|
-
@
|
30
|
-
|
31
|
-
@node_view_pane.viewing subject: @ship.node
|
31
|
+
def active_resource
|
32
|
+
@graph_list_pane.current_subject_index
|
33
|
+
end
|
32
34
|
|
33
|
-
|
34
|
-
self.viewport.
|
35
|
-
self.
|
35
|
+
def load_history
|
36
|
+
return 0 unless @node_list_pane == self.viewport.active_pane
|
37
|
+
new_content = self.ship.fetch_older_nodes(resource: self.active_resource, node: self.active_node)
|
38
|
+
@node_list_pane.subject.prepend_content(ary: new_content)
|
39
|
+
new_content.length
|
36
40
|
end
|
37
41
|
|
38
42
|
#
|
39
43
|
# Called by a pane in this controller for bubbling a key press up
|
40
44
|
#
|
41
45
|
def send(key:)
|
46
|
+
resync_needed = true
|
42
47
|
case key
|
43
48
|
when 'd' # (D)ive
|
44
49
|
begin
|
45
50
|
if @node_view_pane.subject.contents[4].include?('true')
|
46
51
|
self.viewport.action_bar.add_action({'p': 'Pop Out'})
|
47
|
-
|
48
|
-
node_index = @node_list_pane.current_subject
|
49
|
-
@stack.push(resource)
|
52
|
+
@stack.push(self.active_resource)
|
50
53
|
@node_list_pane.clear
|
51
|
-
@node_list_pane.subject.contents = self.ship.fetch_node_children
|
52
|
-
@node_list_pane.index = 0
|
54
|
+
@node_list_pane.subject.contents = self.ship.fetch_node_children(resource: self.active_resource, index: self.active_node_index)
|
53
55
|
end
|
54
56
|
end
|
55
57
|
when 'i' # (I)nspect
|
56
58
|
begin
|
57
59
|
self.viewport.activate pane: @node_list_pane
|
58
60
|
self.viewport.action_bar = ActionBar.Default.add_action({'d': 'Dive In', 'g': 'Graph List'})
|
61
|
+
resync_needed = false
|
59
62
|
end
|
60
63
|
when 'g' # (G)raph View
|
61
64
|
unless @graph_list_pane.active?
|
62
65
|
self.viewport.activate pane: @graph_list_pane
|
66
|
+
# resync_needed = false
|
63
67
|
end
|
64
68
|
when 'p' # (P)op
|
65
69
|
begin
|
66
70
|
if (resource = @stack.pop)
|
67
71
|
@node_list_pane.clear
|
68
72
|
@node_list_pane.subject.contents = self.ship.fetch_node_list(resource: resource)
|
69
|
-
@node_list_pane.index = 0
|
70
73
|
end
|
71
74
|
if (@stack.length == 0)
|
72
75
|
self.viewport.action_bar.remove_action(:p)
|
73
76
|
end
|
74
77
|
end
|
75
78
|
end
|
76
|
-
self.resync
|
79
|
+
self.resync if resync_needed
|
77
80
|
end
|
78
81
|
|
79
82
|
def start
|
@@ -87,25 +90,24 @@ module MarsBase10
|
|
87
90
|
private
|
88
91
|
|
89
92
|
def resync
|
90
|
-
self.
|
93
|
+
self.resync_node_list
|
94
|
+
self.resync_node_view
|
91
95
|
end
|
92
96
|
|
93
97
|
def resync_node_list
|
94
|
-
resource = @graph_list_pane.current_subject
|
95
98
|
if @graph_list_pane == self.viewport.active_pane
|
96
|
-
@node_list_pane.subject.title = "Nodes of #{resource}"
|
97
99
|
@node_list_pane.clear
|
98
|
-
@node_list_pane.subject.
|
99
|
-
@node_list_pane.subject.contents = self.ship.fetch_node_list
|
100
|
+
@node_list_pane.subject.title = "Nodes of #{self.active_resource}"
|
101
|
+
@node_list_pane.subject.contents = self.ship.fetch_node_list(resource: self.active_resource)
|
100
102
|
end
|
101
|
-
|
103
|
+
nil
|
102
104
|
end
|
103
105
|
|
104
|
-
def resync_node_view
|
105
|
-
|
106
|
-
@node_view_pane.subject.title = "Node #{self.short_index node_index}"
|
106
|
+
def resync_node_view
|
107
|
+
@node_view_pane.subject.title = "Node #{self.short_index self.active_node_index}"
|
107
108
|
@node_view_pane.clear
|
108
|
-
@node_view_pane.subject.contents = self.ship.fetch_node_contents(resource:
|
109
|
+
@node_view_pane.subject.contents = self.ship.fetch_node_contents(resource: self.active_resource, index: self.active_node_index)
|
110
|
+
nil
|
109
111
|
end
|
110
112
|
|
111
113
|
def short_index(index)
|
@@ -113,5 +115,21 @@ module MarsBase10
|
|
113
115
|
tokens = index.split('.')
|
114
116
|
"#{tokens[0]}..#{tokens[tokens.size - 2]}.#{tokens[tokens.size - 1]}"
|
115
117
|
end
|
118
|
+
|
119
|
+
def wire_up_panes
|
120
|
+
@panes = []
|
121
|
+
|
122
|
+
# The graph list is a fixed width, variable height (full screen) pane on the left.
|
123
|
+
@graph_list_pane = @viewport.add_pane width_pct: 0.3
|
124
|
+
@graph_list_pane.view(subject: @ship.graph_names)
|
125
|
+
|
126
|
+
# The node list is a variable width, fixed height pane in the upper right.
|
127
|
+
@node_list_pane = @viewport.add_variable_width_pane at_col: @graph_list_pane.last_col, height_pct: 0.5
|
128
|
+
@node_list_pane.view(subject: @ship.empty_node_list)
|
129
|
+
|
130
|
+
# The single node viewer is a variable width, variable height pane in the lower right.
|
131
|
+
@node_view_pane = @viewport.add_variable_both_pane at_row: @node_list_pane.last_row, at_col: @graph_list_pane.last_col
|
132
|
+
@node_view_pane.view(subject: @ship.empty_node)
|
133
|
+
end
|
116
134
|
end
|
117
135
|
end
|
data/lib/mars_base_10/pane.rb
CHANGED
@@ -10,11 +10,13 @@ module MarsBase10
|
|
10
10
|
@top_row = at_row
|
11
11
|
@left_edge_col = at_col
|
12
12
|
@height_pct = height_pct
|
13
|
-
@index =
|
14
|
-
@latch =
|
13
|
+
@index = 1
|
14
|
+
@latch = ''
|
15
|
+
@latch_depth = 0
|
15
16
|
@subject = nil
|
16
17
|
@win = nil
|
17
18
|
@viewport = viewport
|
19
|
+
@visible_content_shift = 0
|
18
20
|
@width_pct = width_pct
|
19
21
|
end
|
20
22
|
|
@@ -23,6 +25,7 @@ module MarsBase10
|
|
23
25
|
end
|
24
26
|
|
25
27
|
def clear
|
28
|
+
self.reset
|
26
29
|
self.prepare_for_writing_contents
|
27
30
|
(0..(self.last_row - 1)).each do |item|
|
28
31
|
self.window.setpos(self.draw_row, self.draw_col)
|
@@ -32,19 +35,35 @@ module MarsBase10
|
|
32
35
|
end
|
33
36
|
end
|
34
37
|
|
35
|
-
def
|
36
|
-
self.subject.at
|
38
|
+
def current_subject_index
|
39
|
+
self.subject.at(index: self.index)
|
37
40
|
end
|
38
41
|
|
39
42
|
def draw
|
40
43
|
self.prepare_for_writing_contents
|
41
44
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
self.
|
47
|
-
|
45
|
+
first_draw_row = self.first_row
|
46
|
+
last_draw_row = self.last_drawable_row
|
47
|
+
|
48
|
+
(first_draw_row..last_draw_row).each do |index|
|
49
|
+
self.draw_line
|
50
|
+
item_index = index + @visible_content_shift
|
51
|
+
self.window.attron(Curses::A_REVERSE) if item_index == self.index
|
52
|
+
|
53
|
+
if self.subject.line_length_at(index: item_index) > self.last_col
|
54
|
+
chunks = self.subject.line_at(index: item_index).chars.each_slice(self.last_col).map(&:join)
|
55
|
+
chunks.each do |c|
|
56
|
+
self.window.addstr(c)
|
57
|
+
self.draw_row += 1
|
58
|
+
self.draw_line
|
59
|
+
last_draw_row -= 1 # pull the last drawing row in 1 for each new line added.
|
60
|
+
end
|
61
|
+
self.draw_row -= 1
|
62
|
+
else
|
63
|
+
self.window.addstr("#{self.subject.line_at(index: item_index)}")
|
64
|
+
end
|
65
|
+
|
66
|
+
self.window.attroff(Curses::A_REVERSE) if item_index == self.index
|
48
67
|
self.window.clrtoeol
|
49
68
|
self.draw_row += 1
|
50
69
|
end
|
@@ -59,9 +78,13 @@ module MarsBase10
|
|
59
78
|
self.window.attroff(Curses.color_pair(1) | Curses::A_BOLD) if self.active?
|
60
79
|
end
|
61
80
|
|
81
|
+
def draw_line
|
82
|
+
self.window.setpos(self.draw_row, self.draw_col)
|
83
|
+
end
|
84
|
+
|
62
85
|
def draw_title
|
63
86
|
self.window.setpos(0, 2)
|
64
|
-
self.window.addstr(" #{self.subject.title} (#{self.
|
87
|
+
self.window.addstr(" #{self.subject.title} (#{self.max_contents_rows} total) ")
|
65
88
|
end
|
66
89
|
|
67
90
|
def first_col
|
@@ -73,7 +96,7 @@ module MarsBase10
|
|
73
96
|
end
|
74
97
|
|
75
98
|
def gutter_width
|
76
|
-
|
99
|
+
self.subject.index_width
|
77
100
|
end
|
78
101
|
|
79
102
|
#
|
@@ -83,6 +106,10 @@ module MarsBase10
|
|
83
106
|
[(self.viewport.max_cols * self.width_pct).floor, self.min_column_width].max
|
84
107
|
end
|
85
108
|
|
109
|
+
def last_drawable_row
|
110
|
+
[self.last_visible_row, self.max_contents_rows].min
|
111
|
+
end
|
112
|
+
|
86
113
|
#
|
87
114
|
# This is the _relative_ last row, e.g. the height of the pane in columns.
|
88
115
|
#
|
@@ -90,19 +117,23 @@ module MarsBase10
|
|
90
117
|
(self.viewport.max_rows * self.height_pct).floor
|
91
118
|
end
|
92
119
|
|
120
|
+
def last_visible_row
|
121
|
+
self.last_row - 2
|
122
|
+
end
|
123
|
+
|
93
124
|
#
|
94
125
|
# The pane is latched if it has consumed 1 key 0-9 and is awaiting the next key.
|
95
126
|
#
|
96
127
|
def latched?
|
97
|
-
|
128
|
+
@latch_depth > 0
|
98
129
|
end
|
99
130
|
|
100
131
|
def max_contents_rows
|
101
|
-
self.subject.
|
132
|
+
self.subject.item_index_range.last
|
102
133
|
end
|
103
134
|
|
104
135
|
def min_column_width
|
105
|
-
self.gutter_width + self.subject.
|
136
|
+
self.gutter_width + self.subject.max_content_width + self.right_pad
|
106
137
|
end
|
107
138
|
|
108
139
|
def prepare_for_writing_contents
|
@@ -121,17 +152,27 @@ module MarsBase10
|
|
121
152
|
key = self.window.getch.to_s
|
122
153
|
case key
|
123
154
|
when 'j'
|
124
|
-
self.set_row(self.index + 1)
|
155
|
+
self.index = self.set_row(self.index + 1)
|
125
156
|
when 'k'
|
126
|
-
self.set_row(self.index - 1)
|
157
|
+
self.index = self.set_row(self.index - 1)
|
158
|
+
when 'J'
|
159
|
+
self.index = self.set_row([self.index + (self.last_visible_row), self.max_contents_rows].min)
|
160
|
+
when 'K'
|
161
|
+
self.index = self.set_row(self.index - (self.last_visible_row))
|
127
162
|
when 'q'
|
128
163
|
exit 0
|
129
164
|
when ('0'..'9')
|
130
165
|
if self.latched?
|
131
|
-
self.
|
132
|
-
|
166
|
+
self.latch << key
|
167
|
+
@latch_depth += 1
|
168
|
+
if @latch_depth == self.gutter_width
|
169
|
+
self.index = self.set_row(self.latch.to_i)
|
170
|
+
self.latch = ""
|
171
|
+
@latch_depth = 0
|
172
|
+
end
|
133
173
|
else
|
134
|
-
self.latch = key
|
174
|
+
self.latch = key
|
175
|
+
@latch_depth = 1
|
135
176
|
end
|
136
177
|
end
|
137
178
|
|
@@ -139,38 +180,54 @@ module MarsBase10
|
|
139
180
|
self.viewport.controller.send key: key
|
140
181
|
end
|
141
182
|
|
183
|
+
def reset
|
184
|
+
@index = 1
|
185
|
+
@latch = ''
|
186
|
+
@latch_depth = 0
|
187
|
+
@visible_content_shift = 0
|
188
|
+
end
|
189
|
+
|
142
190
|
def right_pad
|
143
191
|
2
|
144
192
|
end
|
145
193
|
|
194
|
+
def scroll_to_row(index)
|
195
|
+
if index > self.index
|
196
|
+
# Scrolling down
|
197
|
+
@visible_content_shift = [(index - self.last_drawable_row), 0].max
|
198
|
+
else
|
199
|
+
# Scrolling up
|
200
|
+
@visible_content_shift = [(index - self.first_row), 0].max
|
201
|
+
end
|
202
|
+
[index, 1].max
|
203
|
+
end
|
204
|
+
|
146
205
|
#
|
147
206
|
# this is a no-op if the index is out of range
|
148
207
|
#
|
149
208
|
def set_row(i)
|
150
|
-
|
151
|
-
|
152
|
-
if (i < 0)
|
153
|
-
self.subject.scroll_up
|
154
|
-
i = 0
|
155
|
-
end
|
209
|
+
return i if self.visible_content_range.include?(i)
|
156
210
|
|
157
211
|
# If we've reached the end of the content, it's a no-op.
|
158
|
-
|
159
|
-
|
160
|
-
end
|
212
|
+
current_index = self.index
|
213
|
+
return self.max_contents_rows if (i > self.max_contents_rows)
|
161
214
|
|
162
|
-
if (i
|
163
|
-
|
164
|
-
i
|
215
|
+
# Check if we have tried to move "above" the visible screen limit (i = 1) and retrieve more items, if possible.
|
216
|
+
if (i < 1)
|
217
|
+
i = [self.viewport.controller.load_history, 1].max
|
165
218
|
end
|
166
219
|
|
167
|
-
|
220
|
+
return self.scroll_to_row(i)
|
168
221
|
end
|
169
222
|
|
170
|
-
def
|
223
|
+
def view(subject:)
|
171
224
|
@subject = subject
|
172
225
|
end
|
173
226
|
|
227
|
+
def visible_content_range
|
228
|
+
((self.first_row + @visible_content_shift)..(self.last_drawable_row + @visible_content_shift))
|
229
|
+
end
|
230
|
+
|
174
231
|
def window
|
175
232
|
return @win if @win
|
176
233
|
@win = Curses::Window.new(self.last_row, self.last_col, self.top_row, self.left_edge_col)
|
data/lib/mars_base_10/ship.rb
CHANGED
@@ -8,18 +8,18 @@ module MarsBase10
|
|
8
8
|
@ship = connection
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
12
|
-
Subject.new title: 'Graphs', contents: @ship.graph_names
|
13
|
-
end
|
14
|
-
|
15
|
-
def node
|
11
|
+
def empty_node
|
16
12
|
Subject.new title: 'Node', contents: []
|
17
13
|
end
|
18
14
|
|
19
|
-
def
|
15
|
+
def empty_node_list
|
20
16
|
Subject.new title: 'Node List', contents: []
|
21
17
|
end
|
22
18
|
|
19
|
+
def graph_names
|
20
|
+
Subject.new title: 'Graphs', contents: @ship.graph_names
|
21
|
+
end
|
22
|
+
|
23
23
|
def fetch_node(resource:, index:)
|
24
24
|
@ship.graph(resource: resource).node(index: index)
|
25
25
|
end
|
@@ -34,7 +34,11 @@ module MarsBase10
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def fetch_node_list(resource:)
|
37
|
-
@ship.graph(resource: resource).newest_nodes(count:
|
37
|
+
@ship.graph(resource: resource).newest_nodes(count: 60).map {|node| node.index}.sort
|
38
|
+
end
|
39
|
+
|
40
|
+
def fetch_older_nodes(resource:, node:)
|
41
|
+
@ship.graph(resource: resource).older_sibling_nodes(node: node, count: 60).map {|node| node.index}.sort
|
38
42
|
end
|
39
43
|
end
|
40
44
|
end
|
data/lib/mars_base_10/subject.rb
CHANGED
@@ -2,22 +2,21 @@
|
|
2
2
|
|
3
3
|
module MarsBase10
|
4
4
|
class Subject
|
5
|
-
attr_accessor :
|
5
|
+
attr_accessor :current_item, :scroll_limit, :title
|
6
6
|
|
7
7
|
def initialize(title: 'Untitled', contents:)
|
8
|
-
@contents
|
9
|
-
@
|
10
|
-
@title = title
|
8
|
+
@contents = contents
|
9
|
+
@title = title
|
11
10
|
end
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
self.contents[self.first_row + index]
|
12
|
+
def prepend_content(ary:)
|
13
|
+
self.contents = ary + self.contents
|
16
14
|
end
|
17
15
|
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
# Returns the item at: the index: relative to the current_item.
|
17
|
+
def at(index:)
|
18
|
+
index = [1, index].max
|
19
|
+
self.contents[index - 1]
|
21
20
|
end
|
22
21
|
|
23
22
|
def contents
|
@@ -25,22 +24,33 @@ module MarsBase10
|
|
25
24
|
end
|
26
25
|
|
27
26
|
def contents=(a_contents_array)
|
28
|
-
@rows = nil
|
29
|
-
$cols = nil
|
30
27
|
@contents = a_contents_array
|
31
28
|
end
|
32
29
|
|
33
|
-
def
|
34
|
-
|
35
|
-
|
30
|
+
def index_width
|
31
|
+
[self.item_count.to_s.length, 2].max
|
32
|
+
end
|
33
|
+
|
34
|
+
def line_at(index:)
|
35
|
+
# The string here is the gutter followed by the window contents. improving the gutter is tbd.
|
36
|
+
"#{"%0#{self.index_width}d" % (index)} #{self.at(index: index)}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def line_length_at(index:)
|
40
|
+
return 0 if self.at(index: index).nil?
|
41
|
+
(self.at(index: index)).length
|
42
|
+
end
|
43
|
+
|
44
|
+
def item_count
|
45
|
+
@contents.size
|
36
46
|
end
|
37
47
|
|
38
|
-
def
|
39
|
-
|
48
|
+
def item_index_range
|
49
|
+
1..self.item_count
|
40
50
|
end
|
41
51
|
|
42
|
-
def
|
43
|
-
|
52
|
+
def max_content_width
|
53
|
+
@contents.inject(0) {|a, n| n.length > a ? n.length : a}
|
44
54
|
end
|
45
55
|
end
|
46
56
|
end
|
data/lib/mars_base_10/version.rb
CHANGED
data/mars_base_10.gemspec
CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_dependency "sorted_set", "~> 1.0"
|
33
33
|
spec.add_dependency "thor", "~> 1.1"
|
34
34
|
spec.add_dependency "tty-font", "~> 0.5"
|
35
|
-
spec.add_dependency "urbit-api", "~> 0.
|
35
|
+
spec.add_dependency "urbit-api", "~> 0.5"
|
36
36
|
|
37
37
|
spec.add_development_dependency "pry", "~> 0.13"
|
38
38
|
spec.add_development_dependency "rspec", "~> 3.10"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mars_base_10
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daryl Richter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curses
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.
|
89
|
+
version: '0.5'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.
|
96
|
+
version: '0.5'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: pry
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -146,6 +146,7 @@ extensions: []
|
|
146
146
|
extra_rdoc_files: []
|
147
147
|
files:
|
148
148
|
- bin/mb10
|
149
|
+
- lib/.DS_Store
|
149
150
|
- lib/mars_base_10.rb
|
150
151
|
- lib/mars_base_10/action_bar.rb
|
151
152
|
- lib/mars_base_10/cli.rb
|