gridcli 0.0.1 → 0.0.2

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/README.rdoc CHANGED
@@ -35,7 +35,16 @@ To send a status update, like, or dislike to your friends:
35
35
  grid like <like message>
36
36
  grid dislike <dislike message>
37
37
 
38
+ == Updating
39
+ To update all messages / likes / dislikes / etc, run:
40
+ grid update
41
+
42
+ == Searching
43
+ You can search any type (or all types) for something. Will eventually use Chronic to allow users to specify when to search.
44
+ grid search <like|dislike|message|status|all> "ruby gem"
45
+
38
46
  = To Do
47
+ grid block <user>
39
48
  grid list likes [<count>]
40
- grid search <type | 'all'> "ruby gem" yesterday
41
- grid update
49
+
50
+
@@ -15,7 +15,7 @@ module GridCLI
15
15
 
16
16
  begin
17
17
  log "Trying to send a dislike '#{body}' to your friends"
18
- post = Post.create :body => body, :recipients => "friends", :posttype => 'dislike'
18
+ post = Post::Dislike.create :body => body, :recipients => "friends", :posttype => 'dislike'
19
19
  rescue ActiveResource::ClientError
20
20
  puts "There was an error sending your dislike. Please make sure it's not empty."
21
21
  return
@@ -15,7 +15,7 @@ module GridCLI
15
15
 
16
16
  begin
17
17
  log "Trying to send a like '#{body}' to your friends"
18
- post = Post.create :body => body, :recipients => "friends", :posttype => 'like'
18
+ post = Post::Like.create :body => body, :recipients => "friends", :posttype => 'like'
19
19
  rescue ActiveResource::ClientError
20
20
  puts "There was an error sending your like. Please make sure it's not empty."
21
21
  return
@@ -21,7 +21,7 @@ module GridCLI
21
21
 
22
22
  begin
23
23
  log "Trying to send a message '#{subject}' to '#{recipients}'"
24
- post = Post.create :subject => subject, :body => body, :recipients => recipients, :posttype => 'message'
24
+ post = Post::Message.create :subject => subject, :body => body, :recipients => recipients, :posttype => 'message'
25
25
  rescue ActiveResource::ClientError
26
26
  puts "There was an error sending your message. Please make sure everyone in your recipient list is a friend, and the message body isn't empty."
27
27
  return
@@ -0,0 +1,24 @@
1
+ module GridCLI
2
+ class SearchCommand < BaseCommand
3
+ def initialize
4
+ super "search", "Search posts"
5
+ end
6
+
7
+ def usage
8
+ super "<like|dislike|message|status|all> <query> [<since time>]"
9
+ end
10
+
11
+ def run(args)
12
+ usage if args.length < 2
13
+ type = args.shift
14
+ usage if not [ 'like', 'dislike', 'status', 'message', 'all' ].include? type
15
+ query = args.shift
16
+ dates = (args.length > 0 and not args.first.start_with? '-') ? args.shift : nil
17
+ parse_opts args
18
+
19
+ GridCLI.storage.search(type, query, dates)
20
+ end
21
+ end
22
+
23
+ Runner.register "search", SearchCommand
24
+ end
@@ -15,7 +15,7 @@ module GridCLI
15
15
 
16
16
  begin
17
17
  log "Trying to send a status update '#{body}' to your friends"
18
- post = Post.create :body => body, :recipients => "friends", :posttype => 'status'
18
+ post = Post::Status.create :body => body, :recipients => "friends", :posttype => 'status'
19
19
  rescue ActiveResource::ClientError
20
20
  puts "There was an error sending your status. Please make sure it's not empty."
21
21
  return
@@ -0,0 +1,42 @@
1
+ module GridCLI
2
+ class UpdateCommand < BaseCommand
3
+ def initialize
4
+ super "update", "Download all messages"
5
+ end
6
+
7
+ def run(args)
8
+ parse_opts args
9
+ last_sha = @config['last_sha']
10
+
11
+ begin
12
+ if last_sha.nil?
13
+ log "Trying to download all messages."
14
+ posts = Post::Message.find(:all)
15
+ else
16
+ log "Trying to download all messages since '#{last_sha}'"
17
+ posts = Post::Message.find(:all, :params => { :id => last_sha })
18
+ end
19
+ rescue ActiveResource::ClientError
20
+ puts "There was an error updating your messages."
21
+ return
22
+ end
23
+
24
+ save posts
25
+ end
26
+
27
+ def save(posts)
28
+ if posts.length == 0
29
+ puts "Up to date."
30
+ else
31
+ posts.each { |p| puts "#{p.to_s}\n\n" }
32
+ @config['last_sha'] = GridCLI.storage.append(posts)
33
+ @config.save
34
+
35
+ # run again if we got back 300 posts
36
+ run(args) if posts.length == 300
37
+ end
38
+ end
39
+ end
40
+
41
+ Runner.register "update", UpdateCommand
42
+ end
@@ -1,4 +1,18 @@
1
1
  module GridCLI
2
- class Post < BaseResource
2
+ module Post
3
+ class Message < BaseResource
4
+ self.element_name = "post"
5
+ end
6
+ class Like < BaseResource
7
+ self.element_name = "post"
8
+ end
9
+ class Dislike < BaseResource
10
+ self.element_name = "post"
11
+ end
12
+ class Status < BaseResource
13
+ self.element_name = "post"
14
+ end
3
15
  end
4
16
  end
17
+
18
+
@@ -0,0 +1,15 @@
1
+ module GridCLI
2
+ class StorageBase
3
+ def initialize
4
+ @config = GridCLI.config
5
+ end
6
+
7
+ def append(posts)
8
+ raise "Not implemented"
9
+ end
10
+
11
+ def search(type, query, dates)
12
+ raise "Not implemented"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,52 @@
1
+ require 'fileutils'
2
+
3
+ module GridCLI
4
+ class FileStorage < StorageBase
5
+ def initialize
6
+ super
7
+ @basedir = File.expand_path(File.join("~", ".grid"))
8
+ @types = [ 'like', 'dislike', 'status', 'message' ]
9
+ @types.each { |type|
10
+ path = File.join(@basedir, type)
11
+ Dir.mkdir(path) if not File.exists?(path)
12
+ }
13
+ @handles = {}
14
+ end
15
+
16
+ # return sha of last post
17
+ def append(posts)
18
+ obj = nil
19
+ posts.each { |post|
20
+ type = post.known_attributes.first
21
+ obj = post.send(type)
22
+ write_post obj, type
23
+ }
24
+ obj.sha
25
+ end
26
+
27
+ def write_post(post, type)
28
+ created_at = Date.parse(post.created_at)
29
+ json = post.to_json(:root => type) + "\n"
30
+ open(type, created_at).write json
31
+ end
32
+
33
+ def open(type, date)
34
+ dir = File.join(@basedir, type, date.year.to_s, date.month.to_s)
35
+ path = File.join(dir, date.day.to_s + ".json")
36
+ unless @handles.has_key? path
37
+ FileUtils.mkdir_p dir
38
+ @handles[path] = File.open(path, 'a')
39
+ end
40
+ @handles[path]
41
+ end
42
+
43
+ def search(type, query, dates)
44
+ types = (type == "all") ? @types : [type]
45
+ types.each { |t|
46
+ path = File.join(@basedir, t)
47
+ system "grep -R \"#{query}\" #{path}"
48
+ }
49
+ end
50
+
51
+ end
52
+ end
@@ -1,3 +1,3 @@
1
1
  module GridCLI
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/gridcli.rb CHANGED
@@ -1,11 +1,18 @@
1
1
  require 'active_resource'
2
2
 
3
- module GridCLI
4
- autoload :Config, 'gridcli/config'
3
+ require 'gridcli/storage/base'
4
+ require 'gridcli/storage/files'
5
+
6
+ require 'gridcli/config'
5
7
 
8
+ module GridCLI
6
9
  def self.config
7
10
  @config ||= Config.new
8
11
  end
12
+
13
+ def self.storage
14
+ @storage ||= FileStorage.new
15
+ end
9
16
  end
10
17
 
11
18
  require 'gridcli/version'
@@ -21,6 +28,8 @@ require 'gridcli/commands/message'
21
28
  require 'gridcli/commands/status'
22
29
  require 'gridcli/commands/like'
23
30
  require 'gridcli/commands/dislike'
31
+ require 'gridcli/commands/update'
32
+ require 'gridcli/commands/search'
24
33
 
25
34
  require 'gridcli/resources/base'
26
35
  require 'gridcli/resources/user'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gridcli
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Brian Muller
@@ -61,14 +61,18 @@ files:
61
61
  - lib/gridcli/commands/like.rb
62
62
  - lib/gridcli/commands/message.rb
63
63
  - lib/gridcli/commands/profile.rb
64
+ - lib/gridcli/commands/search.rb
64
65
  - lib/gridcli/commands/signup.rb
65
66
  - lib/gridcli/commands/status.rb
67
+ - lib/gridcli/commands/update.rb
66
68
  - lib/gridcli/config.rb
67
69
  - lib/gridcli/resources/base.rb
68
70
  - lib/gridcli/resources/friendship.rb
69
71
  - lib/gridcli/resources/post.rb
70
72
  - lib/gridcli/resources/user.rb
71
73
  - lib/gridcli/runner.rb
74
+ - lib/gridcli/storage/base.rb
75
+ - lib/gridcli/storage/files.rb
72
76
  - lib/gridcli/version.rb
73
77
  has_rdoc: true
74
78
  homepage: ""