springpad 0.0.2 → 0.0.3
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.md +11 -0
- data/bin/springpad +12 -6
- data/lib/springpad.rb +12 -1
- data/lib/springpad/api.rb +58 -0
- data/lib/springpad/blocks/note.rb +15 -0
- data/lib/springpad/blocks/task.rb +16 -1
- data/lib/springpad/version.rb +1 -1
- data/test/springpad/api_test.rb +33 -0
- metadata +13 -13
data/Readme.md
CHANGED
@@ -21,8 +21,19 @@ data:
|
|
21
21
|
## Usage
|
22
22
|
|
23
23
|
$ gem install springpad
|
24
|
+
|
25
|
+
Listing notes/tasks:
|
26
|
+
|
24
27
|
$ springpad list note
|
25
28
|
$ springpad list task
|
29
|
+
|
30
|
+
Adding a new note or task:
|
31
|
+
|
32
|
+
$ springpad add note
|
33
|
+
$ (edit with your editor)
|
34
|
+
|
35
|
+
Help about the commands:
|
36
|
+
|
26
37
|
$ springpad --help
|
27
38
|
|
28
39
|
## Running the tests
|
data/bin/springpad
CHANGED
@@ -26,13 +26,19 @@ command :list do |c|
|
|
26
26
|
end
|
27
27
|
|
28
28
|
command :add do |c|
|
29
|
-
c.syntax = 'springpad add
|
30
|
-
c.summary = 'Adds an element of a certain
|
31
|
-
c.description = ''
|
32
|
-
c.example '
|
33
|
-
c.option '--
|
29
|
+
c.syntax = 'springpad add TYPE [options]'
|
30
|
+
c.summary = 'Adds an element of a certain TYPE.'
|
31
|
+
c.description = 'Creates a new element of TYPE with custom properties [options]. $EDITOR will be used to create the element. The first line of the element will be its name, the other lines will vary accordying the element type.'
|
32
|
+
c.example 'Create a new private note', 'springpad add note --private'
|
33
|
+
c.option '--private', 'Make the new block private'
|
34
34
|
c.action do |args, options|
|
35
|
-
|
35
|
+
type = args.first
|
36
|
+
unless type
|
37
|
+
warn "A TYPE must be specified. To know about available types, run:"
|
38
|
+
warn " $ springpad types"
|
39
|
+
abort
|
40
|
+
end
|
41
|
+
Springpad.add(type, options)
|
36
42
|
end
|
37
43
|
end
|
38
44
|
|
data/lib/springpad.rb
CHANGED
@@ -23,7 +23,18 @@ module Springpad
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
def self.add
|
26
|
+
def self.add(type, options)
|
27
|
+
cli = Springpad::CLI.new
|
28
|
+
options = {}
|
29
|
+
options.merge({:public => false}) if options[:private]
|
30
|
+
contents = cli.edit
|
27
31
|
|
32
|
+
api = Springpad::API.new
|
33
|
+
case type
|
34
|
+
when "note"
|
35
|
+
p api.add_note(contents, options)
|
36
|
+
when "task"
|
37
|
+
p api.add_task(contents, options)
|
38
|
+
end
|
28
39
|
end
|
29
40
|
end
|
data/lib/springpad/api.rb
CHANGED
@@ -41,7 +41,65 @@ module Springpad
|
|
41
41
|
get_blocks("Task", filters)
|
42
42
|
end
|
43
43
|
|
44
|
+
# Public: Adds a new note to Springpad.
|
45
|
+
#
|
46
|
+
# contents - the Array contents of the note
|
47
|
+
#
|
48
|
+
# Returns the Boolean response.
|
49
|
+
def add_note(contents, options={})
|
50
|
+
note = Blocks::Note.new(contents.first, contents[1..-1].join("\n"))
|
51
|
+
post_block(note)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Public: Adds a new task to Springpad.
|
55
|
+
#
|
56
|
+
# contents - the Array contents of the task
|
57
|
+
#
|
58
|
+
# Returns the Boolean response.
|
59
|
+
def add_task(contents, options={})
|
60
|
+
task = Blocks::Task.new(contents.first, contents[1..-1].join("\n"))
|
61
|
+
post_block(task)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Public: Pushes a block to Springpad.
|
65
|
+
#
|
66
|
+
# contents - the Block to be pushed
|
67
|
+
#
|
68
|
+
# Returns the Boolean response.
|
69
|
+
def post_block(block)
|
70
|
+
shard = get_shard
|
71
|
+
|
72
|
+
JSON.parse(
|
73
|
+
RestClient.post(
|
74
|
+
@url + "/users/me/commands",
|
75
|
+
block.to_params(shard),
|
76
|
+
headers.update({
|
77
|
+
"Content-Type" => "application/json"
|
78
|
+
})
|
79
|
+
)
|
80
|
+
)["success"]
|
81
|
+
end
|
82
|
+
|
44
83
|
## Internal methods: to be extracted
|
84
|
+
#
|
85
|
+
# Internal: Authentication headers to perform API calls.
|
86
|
+
#
|
87
|
+
# Returns the Hash headers.
|
88
|
+
def headers
|
89
|
+
{
|
90
|
+
"X-Spring-Username" => @user,
|
91
|
+
"X-Spring-Password" => @password,
|
92
|
+
"X-Spring-Api-Token" => @token,
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
96
|
+
# Internal: Gets the user shard through an API call.
|
97
|
+
#
|
98
|
+
# Returns the String shard.
|
99
|
+
def get_shard
|
100
|
+
JSON.parse(RestClient.get(@url + "/users/me", headers))["shard"]
|
101
|
+
end
|
102
|
+
|
45
103
|
|
46
104
|
# Internal: Gets a collection of blocks of a given type applying some
|
47
105
|
# filters.
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'highline'
|
2
2
|
require 'stringio'
|
3
|
+
require 'securerandom'
|
3
4
|
|
4
5
|
module Springpad
|
5
6
|
module Blocks
|
@@ -48,6 +49,20 @@ module Springpad
|
|
48
49
|
#{@text}
|
49
50
|
RENDER
|
50
51
|
end
|
52
|
+
|
53
|
+
# Public: Creates a query to create a Note in Springpad.
|
54
|
+
#
|
55
|
+
# shard - the String user shard.
|
56
|
+
#
|
57
|
+
# Returns the String JSON commands.
|
58
|
+
def to_params(shard)
|
59
|
+
uuid = "/UUID(#{shard}3#{SecureRandom.uuid[3..-1]})/"
|
60
|
+
[
|
61
|
+
["create", "Note", uuid],
|
62
|
+
["set", uuid, "name", @name],
|
63
|
+
["set", uuid, "text", @text]
|
64
|
+
].to_json
|
65
|
+
end
|
51
66
|
end
|
52
67
|
end
|
53
68
|
end
|
@@ -30,7 +30,7 @@ module Springpad
|
|
30
30
|
# name - the String name
|
31
31
|
# description - the String description
|
32
32
|
# category - the String category
|
33
|
-
def initialize(name, description, category)
|
33
|
+
def initialize(name, description, category="")
|
34
34
|
@name = name
|
35
35
|
@description = description
|
36
36
|
@category = category
|
@@ -48,6 +48,21 @@ module Springpad
|
|
48
48
|
#{@description}
|
49
49
|
RENDER
|
50
50
|
end
|
51
|
+
|
52
|
+
# Public: Creates a query to create a Task in Springpad.
|
53
|
+
#
|
54
|
+
# shard - the String user shard.
|
55
|
+
#
|
56
|
+
# Returns the String JSON commands.
|
57
|
+
def to_params(shard)
|
58
|
+
uuid = "/UUID(#{shard}3#{SecureRandom.uuid[3..-1]})/"
|
59
|
+
[
|
60
|
+
["create", "Note", uuid],
|
61
|
+
["set", uuid, "name", @name],
|
62
|
+
["set", uuid, "description", @description],
|
63
|
+
["set", uuid, "category", @category]
|
64
|
+
].to_json
|
65
|
+
end
|
51
66
|
end
|
52
67
|
end
|
53
68
|
end
|
data/lib/springpad/version.rb
CHANGED
data/test/springpad/api_test.rb
CHANGED
@@ -22,5 +22,38 @@ module Springpad
|
|
22
22
|
tasks.length.must_be :>, 0
|
23
23
|
tasks.first.must_be_kind_of Blocks::Task
|
24
24
|
end
|
25
|
+
|
26
|
+
it "posts a note" do
|
27
|
+
contents = [
|
28
|
+
"Note title",
|
29
|
+
["Note body", "yeah"]
|
30
|
+
]
|
31
|
+
|
32
|
+
api.expects(:post_block).with do |note|
|
33
|
+
note.name.must_equal "Note title"
|
34
|
+
note.text.must_equal "Note body\nyeah"
|
35
|
+
end.returns true
|
36
|
+
|
37
|
+
api.add_note(contents).must_equal true
|
38
|
+
end
|
39
|
+
|
40
|
+
it "posts a task" do
|
41
|
+
contents = [
|
42
|
+
"Task title",
|
43
|
+
["Task description", "yeah"]
|
44
|
+
]
|
45
|
+
|
46
|
+
api.expects(:post_block).with do |task|
|
47
|
+
task.name.must_equal "Task title"
|
48
|
+
task.description.must_equal "Task description\nyeah"
|
49
|
+
end.returns true
|
50
|
+
|
51
|
+
api.add_task(contents).must_equal true
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'posts a block' do
|
55
|
+
note = Blocks::Note.new("Note title", "Note body")
|
56
|
+
api.post_block(note).must_equal true
|
57
|
+
end
|
25
58
|
end
|
26
59
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: springpad
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-12-08 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
16
|
-
requirement: &
|
16
|
+
requirement: &70199660179120 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70199660179120
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: mocha
|
27
|
-
requirement: &
|
27
|
+
requirement: &70199660178600 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70199660178600
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: vcr
|
38
|
-
requirement: &
|
38
|
+
requirement: &70199660178020 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70199660178020
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: webmock
|
49
|
-
requirement: &
|
49
|
+
requirement: &70199660177100 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70199660177100
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rest-client
|
60
|
-
requirement: &
|
60
|
+
requirement: &70199660176380 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70199660176380
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: commander
|
71
|
-
requirement: &
|
71
|
+
requirement: &70199660175760 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70199660175760
|
80
80
|
description: Command-line client for Springpad.
|
81
81
|
email:
|
82
82
|
- josep.m.bach@gmail.com
|