interstate 0.0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +10 -0
- data/Gemfile +4 -0
- data/Rakefile +2 -0
- data/bin/interstate +6 -0
- data/interstate.gemspec +29 -0
- data/lib/api.rb +42 -0
- data/lib/interstate.rb +125 -0
- data/lib/interstate/version.rb +3 -0
- data/lib/memfetcher.rb +0 -0
- data/lib/store.rb +118 -0
- data/lib/table.rb +79 -0
- metadata +175 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
data/bin/interstate
ADDED
data/interstate.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "interstate/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "interstate"
|
7
|
+
s.version = Interstate::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Alec Sloman"]
|
10
|
+
s.email = ["alec@suprfrends.com"]
|
11
|
+
s.homepage = "http://www.bakedcode.com"
|
12
|
+
s.summary = %q{Interstate-CLI}
|
13
|
+
s.description = %q{A command line utility for Interstate, in Ruby using Thor}
|
14
|
+
|
15
|
+
s.add_dependency "thor"
|
16
|
+
s.add_dependency "json"
|
17
|
+
s.add_dependency "oauth2"
|
18
|
+
s.add_dependency "nestful"
|
19
|
+
s.add_dependency "terminal-table"
|
20
|
+
s.add_dependency "rainbow"
|
21
|
+
s.add_dependency "time-ago-in-words"
|
22
|
+
|
23
|
+
s.rubyforge_project = "interstate"
|
24
|
+
|
25
|
+
s.files = `git ls-files`.split("\n")
|
26
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
27
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
28
|
+
s.require_paths = ["lib"]
|
29
|
+
end
|
data/lib/api.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require "nestful"
|
2
|
+
require "lib/store"
|
3
|
+
|
4
|
+
class API
|
5
|
+
|
6
|
+
@@token = Store.load_config["api"]
|
7
|
+
|
8
|
+
def self.roadmaps()
|
9
|
+
url = "https://api.interstateapp.com/v1/roadmap/listAll.json?oauth_token=#{@@token}"
|
10
|
+
return (Nestful.json_get url)["response"]
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.roads(_id)
|
14
|
+
url = "https://api.interstateapp.com/v1/roadmap/roads/id/#{_id}.json?oauth_token=#{@@token}"
|
15
|
+
return (Nestful.json_get url)["response"]
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.road(_id)
|
19
|
+
url = "https://api.interstateapp.com/v1/road/#{_id}.json?oauth_token=#{@@token}"
|
20
|
+
return (Nestful.json_get url)["response"]
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.update_road(_id, message, status)
|
24
|
+
params = { "update" => "#{message}" }
|
25
|
+
if status != nil
|
26
|
+
params["status"] = status
|
27
|
+
end
|
28
|
+
url = "https://api.interstateapp.com/v1/road/update/id/#{_id}.json?oauth_token=#{@@token}"
|
29
|
+
return JSON.parse(Nestful.post url, :params => params)["response"]
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.staff(_id)
|
33
|
+
url = "https://api.interstateapp.com/v1/roadmap/staff/id/#{_id}.json?oauth_token=#{@@token}"
|
34
|
+
return (Nestful.json_get url)["response"]
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.add_road(params)
|
38
|
+
url = "https://api.interstateapp.com/v1/road/new.json?oauth_token=#{@@token}"
|
39
|
+
return JSON.parse(Nestful.post url, :params => params)["response"]
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
data/lib/interstate.rb
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
require "rubygems" # ruby1.9 doesn't "require" it though
|
2
|
+
require "thor"
|
3
|
+
require "json"
|
4
|
+
require "rainbow"
|
5
|
+
require "nestful"
|
6
|
+
require "pp"
|
7
|
+
require "time-ago-in-words"
|
8
|
+
require "lib/store"
|
9
|
+
require "lib/api"
|
10
|
+
require "lib/table"
|
11
|
+
|
12
|
+
# Interstate-CLI by BakedCode
|
13
|
+
|
14
|
+
class Interstate < Thor
|
15
|
+
|
16
|
+
# Load the config files etc.
|
17
|
+
config = Store.load_config
|
18
|
+
@@maps = Store.load_maps
|
19
|
+
@@roads = Store.load_roads
|
20
|
+
@@staff = Store.load_staff
|
21
|
+
@@current_map = config["current_map"]
|
22
|
+
|
23
|
+
# maps
|
24
|
+
desc "maps", "List roadmaps"
|
25
|
+
method_option :reload, :type => :boolean, :force => true, :aliases => "-r"
|
26
|
+
def maps
|
27
|
+
Table.maps(@@maps, @@current_map)
|
28
|
+
end
|
29
|
+
|
30
|
+
# switch
|
31
|
+
desc "switch", "Switch to a different roadmap"
|
32
|
+
def switch(roadmapID)
|
33
|
+
if (@@maps[roadmapID])
|
34
|
+
Store.set_current_map(roadmapID)
|
35
|
+
puts "\nSwitch >> " + "#{@@maps[roadmapID]["title"]}\n".bright
|
36
|
+
else
|
37
|
+
puts "No roadmap with that shortcode".bright.color(:red)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# roads
|
42
|
+
desc "roads", "List roads in roadmap"
|
43
|
+
method_option :status, :type => :boolean, :aliases => "-r", :default => false, :desc => "Displays a guide and prompts you for a new status code."
|
44
|
+
def roads
|
45
|
+
currentRoads = @@roads[@@current_map]
|
46
|
+
currentMap = @@maps[@@current_map]
|
47
|
+
if options.status != nil
|
48
|
+
puts "Caching roads...".color(:green)
|
49
|
+
roads = API.roads(currentMap["_id"])
|
50
|
+
Store.overwrite_roads(roads, @@current_map)
|
51
|
+
@@roads = Store.load_roads
|
52
|
+
currentRoads = @@roads[@@current_map]
|
53
|
+
end
|
54
|
+
Table.roads(currentRoads, currentMap["title"])
|
55
|
+
end
|
56
|
+
|
57
|
+
# show
|
58
|
+
desc "show", "Show details for particular road"
|
59
|
+
def show(roadID)
|
60
|
+
if @@roads[@@current_map][roadID] == nil
|
61
|
+
puts "\nA roadmap with that shortcode does not exist.\n".bright.color(:red)
|
62
|
+
else
|
63
|
+
id = @@roads[@@current_map][roadID]["_id"]
|
64
|
+
staff = @@staff["#{@@current_map}"]
|
65
|
+
road = API.road(id)
|
66
|
+
Table.road(road, roadID, staff)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# add
|
71
|
+
desc "add", "Add a new road to current roadmap"
|
72
|
+
def add
|
73
|
+
# Get user input
|
74
|
+
id = @@maps[@@current_map]["_id"]
|
75
|
+
puts "\nAdding a road to #{@@maps[@@current_map]["title"]}".bright
|
76
|
+
puts "Title".bright
|
77
|
+
title = STDIN.gets
|
78
|
+
puts "Description".bright
|
79
|
+
desc = STDIN.gets
|
80
|
+
params = { :roadmapId => "#{id}", :title => "#{title}", :description => "#{desc}" }
|
81
|
+
|
82
|
+
# POST the road to the API
|
83
|
+
road = API.add_road(params)
|
84
|
+
# Get latest from API
|
85
|
+
roads = API.roads(@@maps[@@current_map]["_id"])
|
86
|
+
# Overwrite .roads with new latest list
|
87
|
+
Store.overwrite_roads(roads, @@current_map)
|
88
|
+
|
89
|
+
# Reprint the new road list
|
90
|
+
puts "\n#{road["title"]} was added successfully.\n".bright.color(:green)
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
# update
|
95
|
+
desc "update", "Update a road"
|
96
|
+
method_option :message, :type => :string, :aliases => "-m", :required => true, :desc => "A required update message."
|
97
|
+
method_option :status, :type => :boolean, :aliases => "-s", :default => false, :desc => "Displays a guide and prompts you for a new status code."
|
98
|
+
def update(roadID)
|
99
|
+
if @@roads[@@current_map][roadID] == nil
|
100
|
+
puts "\nA road with that shortcode does not exist.\n".bright.color(:red)
|
101
|
+
else
|
102
|
+
status = nil
|
103
|
+
if options.status == true
|
104
|
+
puts "\n" + "Message".bright + " #{options.message}"
|
105
|
+
Table.status
|
106
|
+
puts "Enter a new status code and press return".bright
|
107
|
+
status = STDIN.gets
|
108
|
+
end
|
109
|
+
id = @@roads[@@current_map][roadID]["_id"]
|
110
|
+
road = API.update_road(id, options.message, status)
|
111
|
+
staff = @@staff["#{@@current_map}"]
|
112
|
+
puts "\n#{road["title"]} was updated successfully.".bright.color(:green)
|
113
|
+
Table.road(road, roadID, staff)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
# reset
|
118
|
+
desc "reset", "Reset all config files"
|
119
|
+
def reset
|
120
|
+
Store.reset_config
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
Interstate.start
|
data/lib/memfetcher.rb
ADDED
File without changes
|
data/lib/store.rb
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
class Store
|
2
|
+
|
3
|
+
def self.load_config()
|
4
|
+
begin
|
5
|
+
Marshal.load(File.read(".config"))
|
6
|
+
rescue
|
7
|
+
puts "Welcome to Interstate! No config was detected. Enter API key to continue:".color:yellow
|
8
|
+
settings = {"api" => STDIN.gets, "current_map" => nil}
|
9
|
+
open('.config', 'wb') { |f| f.puts Marshal.dump(settings) }
|
10
|
+
Marshal.load(File.read(".config"))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.load_maps()
|
15
|
+
begin
|
16
|
+
Marshal.load(File.read(".maps"))
|
17
|
+
rescue
|
18
|
+
puts "Caching roadmaps...".color:green
|
19
|
+
apps = API.roadmaps
|
20
|
+
newData = {}
|
21
|
+
apps.each_pair do |key, app|
|
22
|
+
app.each do |roadmap|
|
23
|
+
shortcode = "#{Array.new(1) { (rand(122-97) + 97).chr }}#{10 + rand(89)}"
|
24
|
+
newData["#{shortcode}"] = {"title" => roadmap["title"], "_id" => roadmap["_id"]}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
open('.maps', 'wb') { |f| f.puts Marshal.dump(newData) }
|
28
|
+
Marshal.load(File.read('.maps'))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.load_roads()
|
33
|
+
begin
|
34
|
+
Marshal.load(File.read(".roads"))
|
35
|
+
rescue
|
36
|
+
puts "Caching roads...".color:green
|
37
|
+
roadmapHash = {}
|
38
|
+
maps = self.load_maps
|
39
|
+
maps.each_pair do |key, roadmap|
|
40
|
+
roads = API.roads(roadmap["_id"])
|
41
|
+
roadHash = {}
|
42
|
+
roads.each do |road|
|
43
|
+
if road["isRoute"]
|
44
|
+
road["roads"].each do |subRoad|
|
45
|
+
shortcode = "#{Array.new(1) { (rand(122-97) + 97).chr }}#{10 + rand(89)}"
|
46
|
+
roadHash["#{shortcode}"] = {"title" => subRoad["title"], "_id" => subRoad["_id"], "description" => subRoad["description"], "route" => road["title"]}
|
47
|
+
end
|
48
|
+
else
|
49
|
+
shortcode = "#{Array.new(1) { (rand(122-97) + 97).chr }}#{10 + rand(89)}"
|
50
|
+
roadHash["#{shortcode}"] = {"title" => road["title"], "_id" => road["_id"], "description" => road["description"], "route" => ""}
|
51
|
+
end
|
52
|
+
end
|
53
|
+
roadmapHash[key] = roadHash
|
54
|
+
end
|
55
|
+
data = Marshal.dump(roadmapHash)
|
56
|
+
open('.roads', 'wb') { |f| f.puts data }
|
57
|
+
data = File.read('.roads')
|
58
|
+
Marshal.load(data)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.overwrite_roads(roads, current_map)
|
63
|
+
allRoads = self.load_roads
|
64
|
+
roadHash = {}
|
65
|
+
roads.each do |road|
|
66
|
+
if road["isRoute"]
|
67
|
+
road["roads"].each do |subRoad|
|
68
|
+
shortcode = "#{Array.new(1) { (rand(122-97) + 97).chr }}#{10 + rand(89)}"
|
69
|
+
roadHash["#{shortcode}"] = {"title" => subRoad["title"], "_id" => subRoad["_id"], "description" => subRoad["description"], "route" => road["title"]}
|
70
|
+
end
|
71
|
+
else
|
72
|
+
shortcode = "#{Array.new(1) { (rand(122-97) + 97).chr }}#{10 + rand(89)}"
|
73
|
+
roadHash["#{shortcode}"] = {"title" => road["title"], "_id" => road["_id"], "description" => road["description"], "route" => ""}
|
74
|
+
end
|
75
|
+
end
|
76
|
+
allRoads[current_map] = roadHash
|
77
|
+
open('.roads', 'wb') { |f| f.puts Marshal.dump(allRoads) }
|
78
|
+
return self.load_roads
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.load_staff()
|
82
|
+
begin
|
83
|
+
Marshal.load(File.read('.staff'))
|
84
|
+
rescue
|
85
|
+
puts "Caching staff...".color(:green)
|
86
|
+
roadmapHash = {}
|
87
|
+
maps = self.load_maps
|
88
|
+
maps.each_pair do |key, roadmap|
|
89
|
+
roadmap = API.staff(roadmap["_id"])
|
90
|
+
staffHash = {}
|
91
|
+
roadmap.each do |staff|
|
92
|
+
staffHash[staff["_id"]] = staff["fullName"]
|
93
|
+
end
|
94
|
+
roadmapHash[key] = staffHash
|
95
|
+
end
|
96
|
+
open('.staff', 'wb') { |f| f.puts Marshal.dump(roadmapHash) }
|
97
|
+
Marshal.load(File.read('.staff'))
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.set_current_map(id)
|
102
|
+
config = Marshal.load(File.read(".config"))
|
103
|
+
data = Marshal.dump({"api" => config["api"], "current_map" => id})
|
104
|
+
open('.config', 'wb') { |f| f.puts data }
|
105
|
+
end
|
106
|
+
|
107
|
+
def self.reset_config()
|
108
|
+
File.delete(".config")
|
109
|
+
File.delete(".maps")
|
110
|
+
File.delete(".roads")
|
111
|
+
File.delete(".staff")
|
112
|
+
self.load_config
|
113
|
+
self.load_maps
|
114
|
+
self.load_roads
|
115
|
+
self.load_staff
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
data/lib/table.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require "terminal-table/import"
|
2
|
+
|
3
|
+
class Table
|
4
|
+
|
5
|
+
# Print the maps table
|
6
|
+
def self.maps(maps, currentMap)
|
7
|
+
user_table = table do |t|
|
8
|
+
t.headings = 'ID', 'Title'
|
9
|
+
maps.each_pair do |key, roadmap|
|
10
|
+
t << [key ,roadmap["title"]]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
puts "\n"
|
14
|
+
puts user_table
|
15
|
+
begin
|
16
|
+
puts "Current " + "#{currentMap}".bright.background(:blue) + " >> " + "#{maps[currentMap]["title"]}".bright
|
17
|
+
rescue
|
18
|
+
puts "None selected.".bright.color(:yellow)
|
19
|
+
end
|
20
|
+
puts "\n"
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.roads(roads, currentMap)
|
24
|
+
begin
|
25
|
+
user_table = table do |t|
|
26
|
+
t.headings = 'ID', 'Title', 'Route', 'Description'
|
27
|
+
roads.each_pair do |shortcode, road|
|
28
|
+
t << [shortcode ,road["title"], road["route"], "#{road["description"][0, 100]}..."]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
puts "\n"
|
32
|
+
puts "Roads for #{currentMap}".bright
|
33
|
+
puts user_table
|
34
|
+
puts "\n"
|
35
|
+
rescue
|
36
|
+
puts "Could not get roads"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.road(road, roadID, allStaff)
|
41
|
+
puts "\n"
|
42
|
+
puts "#{roadID.bright} >> ".background(:blue) + "#{road["title"]}".bright
|
43
|
+
puts "#{road["description"]}"
|
44
|
+
puts "#{road["status"]["status"]}".bright
|
45
|
+
|
46
|
+
updates = road["updates"]
|
47
|
+
|
48
|
+
if updates.count > 0
|
49
|
+
user_table = table do |t|
|
50
|
+
t.headings = 'Staff', 'Message', 'Time'
|
51
|
+
updates.each do |update|
|
52
|
+
staff = allStaff["#{update["staffId"]}"]
|
53
|
+
time = Time.at(update["time"])
|
54
|
+
t << ["#{staff}", "#{update["update"]}", time.ago_in_words]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
puts "\n"
|
58
|
+
puts user_table
|
59
|
+
puts "\n"
|
60
|
+
else
|
61
|
+
puts "\n"
|
62
|
+
puts "No Updates"
|
63
|
+
puts "\n"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.status()
|
68
|
+
statuses = ["Stopped", "Started", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "Ready", "Launched", "Proposed", "Postponed"]
|
69
|
+
user_table = table do |t|
|
70
|
+
t.headings = "Status", "Code"
|
71
|
+
statuses.each_with_index do |value, index|
|
72
|
+
t << [value, index]
|
73
|
+
end
|
74
|
+
end
|
75
|
+
puts "\n"
|
76
|
+
puts user_table
|
77
|
+
puts "\n"
|
78
|
+
end
|
79
|
+
end
|
metadata
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: interstate
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 69
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 2
|
10
|
+
- 1
|
11
|
+
version: 0.0.2.1
|
12
|
+
platform: ruby
|
13
|
+
authors:
|
14
|
+
- Alec Sloman
|
15
|
+
autorequire:
|
16
|
+
bindir: bin
|
17
|
+
cert_chain: []
|
18
|
+
|
19
|
+
date: 2011-06-04 00:00:00 Z
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: thor
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: json
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: oauth2
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
61
|
+
type: :runtime
|
62
|
+
version_requirements: *id003
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: nestful
|
65
|
+
prerelease: false
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
hash: 3
|
72
|
+
segments:
|
73
|
+
- 0
|
74
|
+
version: "0"
|
75
|
+
type: :runtime
|
76
|
+
version_requirements: *id004
|
77
|
+
- !ruby/object:Gem::Dependency
|
78
|
+
name: terminal-table
|
79
|
+
prerelease: false
|
80
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
hash: 3
|
86
|
+
segments:
|
87
|
+
- 0
|
88
|
+
version: "0"
|
89
|
+
type: :runtime
|
90
|
+
version_requirements: *id005
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: rainbow
|
93
|
+
prerelease: false
|
94
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
hash: 3
|
100
|
+
segments:
|
101
|
+
- 0
|
102
|
+
version: "0"
|
103
|
+
type: :runtime
|
104
|
+
version_requirements: *id006
|
105
|
+
- !ruby/object:Gem::Dependency
|
106
|
+
name: time-ago-in-words
|
107
|
+
prerelease: false
|
108
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
hash: 3
|
114
|
+
segments:
|
115
|
+
- 0
|
116
|
+
version: "0"
|
117
|
+
type: :runtime
|
118
|
+
version_requirements: *id007
|
119
|
+
description: A command line utility for Interstate, in Ruby using Thor
|
120
|
+
email:
|
121
|
+
- alec@suprfrends.com
|
122
|
+
executables:
|
123
|
+
- interstate
|
124
|
+
extensions: []
|
125
|
+
|
126
|
+
extra_rdoc_files: []
|
127
|
+
|
128
|
+
files:
|
129
|
+
- .gitignore
|
130
|
+
- Gemfile
|
131
|
+
- Rakefile
|
132
|
+
- bin/interstate
|
133
|
+
- interstate.gemspec
|
134
|
+
- lib/.DS_Store
|
135
|
+
- lib/api.rb
|
136
|
+
- lib/interstate.rb
|
137
|
+
- lib/interstate/version.rb
|
138
|
+
- lib/memfetcher.rb
|
139
|
+
- lib/store.rb
|
140
|
+
- lib/table.rb
|
141
|
+
homepage: http://www.bakedcode.com
|
142
|
+
licenses: []
|
143
|
+
|
144
|
+
post_install_message:
|
145
|
+
rdoc_options: []
|
146
|
+
|
147
|
+
require_paths:
|
148
|
+
- lib
|
149
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
150
|
+
none: false
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
hash: 3
|
155
|
+
segments:
|
156
|
+
- 0
|
157
|
+
version: "0"
|
158
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
|
+
none: false
|
160
|
+
requirements:
|
161
|
+
- - ">="
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
hash: 3
|
164
|
+
segments:
|
165
|
+
- 0
|
166
|
+
version: "0"
|
167
|
+
requirements: []
|
168
|
+
|
169
|
+
rubyforge_project: interstate
|
170
|
+
rubygems_version: 1.8.5
|
171
|
+
signing_key:
|
172
|
+
specification_version: 3
|
173
|
+
summary: Interstate-CLI
|
174
|
+
test_files: []
|
175
|
+
|