veslo 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/VERSION +1 -1
  2. data/lib/veslo.rb +31 -4
  3. data/spec/veslo_spec.rb +24 -1
  4. data/veslo.gemspec +3 -3
  5. metadata +67 -22
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/lib/veslo.rb CHANGED
@@ -8,6 +8,7 @@ class Veslo
8
8
  SUPPORTED_METHODS = ["put", "get"]
9
9
  SUPPORTED_RESOURCES = ["configurations"]
10
10
 
11
+ attr_accessor :server
11
12
  option :server_url,
12
13
  :short => "-s SERVER",
13
14
  :long => "--server SERVER",
@@ -17,7 +18,13 @@ class Veslo
17
18
  argv = parse_options(arguments)
18
19
  @server = RestClient::Resource.new(config[:server_url], :headers => {:accept => "application/octet"})
19
20
  parse_commands(argv)
20
- send(:"resource_#{@method}")
21
+ send(:"resource_#{@method}_cli")
22
+ end
23
+
24
+ def self.client(server)
25
+ client = self.new
26
+ client.server = RestClient::Resource.new(server, :headers => {:accept => "application/octet"})
27
+ client
21
28
  end
22
29
 
23
30
  def parse_commands(commands)
@@ -34,8 +41,18 @@ class Veslo
34
41
  raise NotImplementedError.new("resource #{@resource} not supported") unless SUPPORTED_RESOURCES.include?(@resource)
35
42
  end
36
43
 
44
+ def get(resource, name)
45
+ @resource = resource
46
+ @name = name
47
+ resource_get
48
+ end
49
+
37
50
  def resource_get
38
- result = @server["#{@resource}/#{@name}"].get
51
+ @server["#{@resource}/#{@name}"].get
52
+ end
53
+
54
+ def resource_get_cli
55
+ result = resource_get
39
56
  $stdout.puts result.to_str
40
57
  return 0
41
58
  rescue RestClient::ExceptionWithResponse => e
@@ -49,11 +66,21 @@ class Veslo
49
66
  end
50
67
  end
51
68
 
52
- def resource_put
69
+ def put(resource, name, data)
70
+ @resource = resource
71
+ @name = name
72
+ resource_put(data)
73
+ end
74
+
75
+ def resource_put(data)
76
+ @server["#{@resource}/#{@name}"].put(data)
77
+ end
78
+
79
+ def resource_put_cli
53
80
  raise NotImplementedError, "No STDIN yet" unless @file
54
81
  file_content = File.open(@file, 'r').read
55
82
  put_data = "{\"format\":\"app/octet\", \"body\":#{file_content.to_json}}"
56
- result = @server["#{@resource}/#{@name}"].put(put_data)
83
+ result = resource_put(put_data)
57
84
  $stdout.puts "Config uploaded"
58
85
  return 0
59
86
  rescue Errno::ENOENT
data/spec/veslo_spec.rb CHANGED
@@ -43,8 +43,31 @@ describe "Veslo", "parsing arguments" do
43
43
  lambda{@veslo.parse_commands(["foobars", "get", "baz"])}.should raise_error(NotImplementedError)
44
44
  end
45
45
  end
46
+ describe "Veslo", "interacting with server as a library" do
47
+ before :all do
48
+ @veslo = Veslo.client("http://example.com")
49
+ FakeWeb.register_uri(:get, "http://example.com/configurations/existing", :body => "Hello World!")
50
+ FakeWeb.register_uri(:get, "http://example.com/configurations/missing", :body => "Nothing to be found 'round here", :status => ["404", "Not Found"])
51
+ FakeWeb.register_uri(:put, "http://example.com/configurations/creating", :body => "Hello World!")
52
+ end
53
+
54
+ it "should get the a existing configuration" do
55
+ @veslo.get("configurations", "existing").should == "Hello World!"
56
+ end
46
57
 
47
- describe "Veslo", "interacting with server" do
58
+ it "should not get the a missing configuration" do
59
+ lambda{ @veslo.get("configurations", "missing")}.should raise_error(RestClient::ResourceNotFound)
60
+ end
61
+
62
+ it "should upload a config" do
63
+ lambda{
64
+ @veslo.put("configurations", "existing", "{\"format\":\"app/octet\", \"body\":\"foo:\\n bar: baz\\n foobar: foobaz\\n\"}")
65
+ }.should raise_error(RestClient::Found) # REALLY?
66
+ FakeWeb.last_request.method.should == "PUT"
67
+ FakeWeb.last_request.body.should == "{\"format\":\"app/octet\", \"body\":\"foo:\\n bar: baz\\n foobar: foobaz\\n\"}"
68
+ end
69
+ end
70
+ describe "Veslo", "interacting with server from the comand line" do
48
71
  before :all do
49
72
  @veslo = Veslo.new
50
73
  @base_argv = ["-s", "http://example.com", "configurations"]
data/veslo.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "veslo"
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Dimitri Krassovski"]
12
- s.date = "2011-12-07"
12
+ s.date = "2012-04-16"
13
13
  s.description = "Command line utility to manage Noah configurations"
14
14
  s.email = "dimitri@wix.com"
15
15
  s.executables = ["veslo", "veslo"]
@@ -39,7 +39,7 @@ Gem::Specification.new do |s|
39
39
  s.homepage = "http://github.com/Wixpress/veslo"
40
40
  s.licenses = ["MIT"]
41
41
  s.require_paths = ["lib"]
42
- s.rubygems_version = "1.8.10"
42
+ s.rubygems_version = "1.8.21"
43
43
  s.summary = "Command line Noah client"
44
44
 
45
45
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: veslo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-07 00:00:00.000000000 Z
12
+ date: 2012-04-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mixlib-cli
16
- requirement: &70200850496800 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70200850496800
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rest-client
27
- requirement: &70200850495880 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70200850495880
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: json
38
- requirement: &70200850495240 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '0'
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *70200850495240
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: rdoc
49
- requirement: &70200850493640 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70200850493640
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: fakeweb
60
- requirement: &70200850492720 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '0'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *70200850492720
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: rspec
71
- requirement: &70200850580500 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ~>
@@ -76,10 +101,15 @@ dependencies:
76
101
  version: 2.7.0
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *70200850580500
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 2.7.0
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: bundler
82
- requirement: &70200850579340 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
83
113
  none: false
84
114
  requirements:
85
115
  - - ~>
@@ -87,10 +117,15 @@ dependencies:
87
117
  version: 1.0.0
88
118
  type: :development
89
119
  prerelease: false
90
- version_requirements: *70200850579340
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 1.0.0
91
126
  - !ruby/object:Gem::Dependency
92
127
  name: jeweler
93
- requirement: &70200850591040 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
94
129
  none: false
95
130
  requirements:
96
131
  - - ~>
@@ -98,10 +133,15 @@ dependencies:
98
133
  version: 1.6.4
99
134
  type: :development
100
135
  prerelease: false
101
- version_requirements: *70200850591040
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: 1.6.4
102
142
  - !ruby/object:Gem::Dependency
103
143
  name: rcov
104
- requirement: &70200850588800 !ruby/object:Gem::Requirement
144
+ requirement: !ruby/object:Gem::Requirement
105
145
  none: false
106
146
  requirements:
107
147
  - - ! '>='
@@ -109,7 +149,12 @@ dependencies:
109
149
  version: '0'
110
150
  type: :development
111
151
  prerelease: false
112
- version_requirements: *70200850588800
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
113
158
  description: Command line utility to manage Noah configurations
114
159
  email: dimitri@wix.com
115
160
  executables:
@@ -151,7 +196,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
151
196
  version: '0'
152
197
  segments:
153
198
  - 0
154
- hash: -2319658070371930384
199
+ hash: -408740355878419037
155
200
  required_rubygems_version: !ruby/object:Gem::Requirement
156
201
  none: false
157
202
  requirements:
@@ -160,7 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
205
  version: '0'
161
206
  requirements: []
162
207
  rubyforge_project:
163
- rubygems_version: 1.8.10
208
+ rubygems_version: 1.8.21
164
209
  signing_key:
165
210
  specification_version: 3
166
211
  summary: Command line Noah client