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.
@@ -0,0 +1,10 @@
1
+ *.gem
2
+ .bundle
3
+ .DS_Store
4
+ .config
5
+ .maps
6
+ .roads
7
+ .staff
8
+ Gemfile.lock
9
+ pkg/*
10
+
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in interstate.gemspec
4
+ gemspec
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib_dir = File.join(File.dirname(__FILE__), '..', 'lib')
4
+ $LOAD_PATH.unshift lib_dir if File.directory?(lib_dir)
5
+
6
+ require 'interstate'
@@ -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
@@ -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
@@ -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
@@ -0,0 +1,3 @@
1
+ module Interstate
2
+ VERSION = "0.0.2.1"
3
+ end
File without changes
@@ -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
@@ -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
+