interstate 0.0.2.1
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.
- 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
|
+
|