simple_stack 0.0.27 → 0.0.28

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 564184d6c196cb5f443bc0ceda251d9c2b7e68f5
4
+ data.tar.gz: ac515a412f16537fb71f22119073c48ad732743d
5
+ SHA512:
6
+ metadata.gz: 8a0f4da480ab25fd95b088984a31872c61be55a5edfd048c1ed603d5a05a7e5717dd52759f5d53b35567c8b0494c845708975e20ba5bcb12d07ceb4cefc8b40f
7
+ data.tar.gz: 4d5bb43f57d3709ca6a559d669a88a9a7610c5cd5467cc089899a3f8c110f616d573a8a807466e1ca139e48399fc1812ff6a8c4e2dec3ba9938aae5578c37e21
metadata CHANGED
@@ -1,92 +1,73 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_stack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.27
5
- prerelease:
4
+ version: 0.0.28
6
5
  platform: ruby
7
6
  authors:
8
7
  - Thiago Morello
8
+ - Willian Molinari
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-13 00:00:00.000000000 Z
12
+ date: 2013-09-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &2164282760 !ruby/object:Gem::Requirement
17
- none: false
16
+ requirement: !ruby/object:Gem::Requirement
18
17
  requirements:
19
- - - ! '>='
18
+ - - '>='
20
19
  - !ruby/object:Gem::Version
21
20
  version: '0'
22
21
  type: :development
23
22
  prerelease: false
24
- version_requirements: *2164282760
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
25
28
  - !ruby/object:Gem::Dependency
26
29
  name: httparty
27
- requirement: &2164282340 !ruby/object:Gem::Requirement
28
- none: false
30
+ requirement: !ruby/object:Gem::Requirement
29
31
  requirements:
30
- - - ! '>='
32
+ - - '>='
31
33
  - !ruby/object:Gem::Version
32
34
  version: '0'
33
35
  type: :runtime
34
36
  prerelease: false
35
- version_requirements: *2164282340
36
- description: A Simple Stack gem
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ description: A simple gem to work with simplestack project
37
43
  email:
38
44
  - thiago.morello@locaweb.com.br
45
+ - willian.molinari@locaweb.com.br
39
46
  executables: []
40
47
  extensions: []
41
48
  extra_rdoc_files: []
42
- files:
43
- - .gitignore
44
- - Gemfile
45
- - README.markdown
46
- - Rakefile
47
- - lib/simple_stack.rb
48
- - lib/simple_stack/cacheable.rb
49
- - lib/simple_stack/collection.rb
50
- - lib/simple_stack/connection.rb
51
- - lib/simple_stack/disk.rb
52
- - lib/simple_stack/entity.rb
53
- - lib/simple_stack/exception.rb
54
- - lib/simple_stack/guest.rb
55
- - lib/simple_stack/host.rb
56
- - lib/simple_stack/hypervisor.rb
57
- - lib/simple_stack/network_interface.rb
58
- - lib/simple_stack/snapshot.rb
59
- - lib/simple_stack/storage.rb
60
- - lib/simple_stack/version.rb
61
- - simple_stack.gemspec
62
- - spec/simple_stack/connection_spec.rb
63
- - spec/simple_stack/hypervisor_spec.rb
64
- - spec/spec_helper.rb
65
- homepage: ''
49
+ files: []
50
+ homepage: https://github.com/locaweb/ruby-simplestack-client
66
51
  licenses: []
52
+ metadata: {}
67
53
  post_install_message:
68
54
  rdoc_options: []
69
55
  require_paths:
70
56
  - lib
71
57
  required_ruby_version: !ruby/object:Gem::Requirement
72
- none: false
73
58
  requirements:
74
- - - ! '>='
59
+ - - '>='
75
60
  - !ruby/object:Gem::Version
76
61
  version: '0'
77
62
  required_rubygems_version: !ruby/object:Gem::Requirement
78
- none: false
79
63
  requirements:
80
- - - ! '>='
64
+ - - '>='
81
65
  - !ruby/object:Gem::Version
82
66
  version: '0'
83
67
  requirements: []
84
68
  rubyforge_project: simple_stack
85
- rubygems_version: 1.8.10
69
+ rubygems_version: 2.0.3
86
70
  signing_key:
87
- specification_version: 3
88
- summary: A Simple Stack gem
89
- test_files:
90
- - spec/simple_stack/connection_spec.rb
91
- - spec/simple_stack/hypervisor_spec.rb
92
- - spec/spec_helper.rb
71
+ specification_version: 4
72
+ summary: A simple gem to work with simplestack project
73
+ test_files: []
data/.gitignore DELETED
@@ -1,4 +0,0 @@
1
- *.gem
2
- .bundle
3
- Gemfile.lock
4
- pkg/*
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- # Specify your gem's dependencies in simplestack.gemspec
4
- gemspec
data/README.markdown DELETED
@@ -1,67 +0,0 @@
1
- # Simple Stack Gem
2
-
3
- A simple gem to deal with Simple Stack project.
4
-
5
- Get a simplestack class:
6
-
7
- stack = SimpleStack::Connection.new :url => url, :username => username, :password => password
8
-
9
- Connecting to hypervisor:
10
-
11
- vmware = stack.connect_to("vmware", :host => host, :username => username, :password => password)
12
-
13
- Pool informations:
14
-
15
- vmware.info
16
- vmware.guests
17
-
18
- # TODO:
19
- # vmware.used_memory
20
- # vmware.total_memory
21
- # vmware.import vm_file
22
-
23
- ### Working with Guests
24
-
25
- guest = vmware.guests.find(vm.uuid)
26
- guest.info
27
- guest.update(:name => "Guest name", :memory => 512)
28
- guest.delete
29
-
30
- Shutdown and power on and reboot
31
- guest.stop
32
- guest.start
33
- guest.reboot
34
-
35
- Force the guest shutdown
36
- guest.force_stop
37
-
38
- Resume and suspend guests
39
-
40
- guest.resume
41
- guest.pause
42
-
43
- TODO:
44
-
45
- file = guest.export :to => file_path
46
-
47
- #### Snapshots
48
-
49
- List snapshots
50
-
51
- guest.snapshots
52
-
53
- Find a snapshot
54
-
55
- guest.snapshots.find(snap.uuid)
56
-
57
- Create a new snapshot
58
-
59
- snap = guest.snapshots.create :name => :snapshot_name
60
-
61
- Delete a snapshot
62
-
63
- snap.delete
64
-
65
- Revert a snapshot
66
-
67
- snap.use
data/Rakefile DELETED
@@ -1 +0,0 @@
1
- require "bundler/gem_tasks"
@@ -1,24 +0,0 @@
1
- module SimpleStack
2
- module Cacheable
3
- def reload
4
- @cached_attributes = {}
5
- self
6
- end
7
-
8
- def cacheable?
9
- if respond_to? :connection
10
- connection.cache_enabled
11
- else
12
- false
13
- end
14
- end
15
-
16
- def cached_attributes
17
- if cacheable?
18
- @cached_attributes ||= {}
19
- else
20
- {}
21
- end
22
- end
23
- end
24
- end
@@ -1,45 +0,0 @@
1
- module SimpleStack
2
- class Collection
3
- include SimpleStack::Cacheable
4
-
5
- attr_accessor :hypervisor, :parent, :url, :clazz
6
-
7
- def initialize(hypervisor, parent, url, clazz)
8
- self.hypervisor = hypervisor
9
- self.parent = parent
10
- self.url = url.to_s
11
- self.clazz = clazz
12
- end
13
-
14
- def to_a
15
- cached_attributes[:items] ||= hypervisor.get(url).map do |item|
16
- clazz.new hypervisor, self, "#{url}/#{item["id"]}"
17
- end
18
- end
19
-
20
- def find(id)
21
- clazz.new hypervisor, self, "#{url}/#{id}"
22
- end
23
-
24
- def create(options={})
25
- response = hypervisor.post(url, options)
26
- entity_path = response.headers["location"].sub(/^\//, "").sub(/\/$/, "")
27
- entity_url = "#{connection.url}/#{entity_path}"
28
- new_item = clazz.new hypervisor, self, entity_url
29
- reload if cacheable?
30
- new_item
31
- end
32
-
33
- def method_missing(method, *args, &block)
34
- to_a.send(method, *args, &block)
35
- end
36
-
37
- def inspect
38
- to_a.inspect
39
- end
40
-
41
- def connection
42
- hypervisor.connection
43
- end
44
- end
45
- end
@@ -1,21 +0,0 @@
1
- module SimpleStack
2
- class Connection
3
- attr_accessor :url, :graceful_degradation, :cache_enabled, :timeout, :read_timeout
4
-
5
- def initialize(options = {})
6
- self.url = options[:url].to_s.sub(/\/$/, "")
7
- self.graceful_degradation = options[:graceful_degradation]
8
- self.cache_enabled = options[:cache_enabled]
9
- self.timeout = options[:timeout] || 60
10
- self.read_timeout = options[:read_timeout] || timeout
11
- end
12
-
13
- def connect_to(type, options)
14
- SimpleStack::Hypervisor.new self, type, options
15
- end
16
-
17
- def token
18
- "TODO"
19
- end
20
- end
21
- end
@@ -1,4 +0,0 @@
1
- module SimpleStack
2
- class Disk < Entity
3
- end
4
- end
@@ -1,44 +0,0 @@
1
- module SimpleStack
2
- class Entity
3
- include SimpleStack::Cacheable
4
-
5
- attr_accessor :hypervisor, :parent, :url
6
-
7
- def initialize(hypervisor, parent, url)
8
- self.hypervisor = hypervisor
9
- self.parent = parent
10
- self.url = url.to_s
11
- end
12
-
13
- def info
14
- cached_attributes[:info] ||= hypervisor.get(url).parsed_response
15
- end
16
-
17
- def update(attributes = {})
18
- hypervisor.put url, attributes
19
- end
20
-
21
- def delete
22
- response = hypervisor.delete url
23
- parent.reload if cacheable?
24
- response
25
- end
26
-
27
- def inspect
28
- "#<#{self.class} info=#{info.to_json}>"
29
- end
30
-
31
- def connection
32
- hypervisor.connection
33
- end
34
-
35
- def method_missing(method, *args, &block)
36
- entity_info = info
37
- if entity_info.keys.include?(method.to_s)
38
- entity_info[method.to_s]
39
- else
40
- super
41
- end
42
- end
43
- end
44
- end
@@ -1,87 +0,0 @@
1
- module SimpleStack
2
- class Exception < ::Exception
3
- def self.factory(error)
4
- return Exception.new(error.inspect) if !error.is_a?(Hash)
5
- case error["error"]
6
- when "EntityNotFound"
7
- EntityNotFound.new(error["message"])
8
- when "FeatureNotImplemented"
9
- NotImplemented.new(error["message"])
10
- when "FeatureNotAvailable"
11
- NotImplemented.new(error["message"])
12
- when "HypervisorError"
13
- HypervisorError.new(error["message"])
14
- else
15
- Exception.new(error.inspect)
16
- end
17
- end
18
- end
19
-
20
- class EntityNotFound < Exception
21
- end
22
-
23
- class HypervisorError < Exception
24
- end
25
-
26
- class NotImplemented < Exception
27
- end
28
-
29
- class GracefulObject
30
- def [](key)
31
- GracefulObject.new
32
- end
33
-
34
- def []=(key, value)
35
- GracefulObject.new
36
- end
37
-
38
- def +(other)
39
- other + self
40
- end
41
-
42
- def -(other)
43
- -(other - self)
44
- end
45
-
46
- def *(other)
47
- other * self
48
- end
49
-
50
- def to_i
51
- 0
52
- end
53
-
54
- def to_f
55
- 0.0
56
- end
57
-
58
- def to_str
59
- "GracefulObject"
60
- end
61
- alias :to_s :to_str
62
-
63
- def to_ary
64
- []
65
- end
66
- alias :to_a :to_ary
67
-
68
- def to_hash
69
- {}
70
- end
71
-
72
- def coerce(other)
73
- coerced = if other.is_a? Fixnum
74
- self.to_i
75
- elsif other.is_a? String
76
- self.to_s
77
- elsif other.is_a? Array
78
- self.to_a
79
- elsif other.is_a? Hash
80
- self.to_hash
81
- else
82
- nil
83
- end
84
- [coerced, other]
85
- end
86
- end
87
- end
@@ -1,86 +0,0 @@
1
- module SimpleStack
2
- class Guest < Entity
3
- def disks
4
- cached_attributes[:disks] ||= SimpleStack::Collection.new hypervisor, self, "#{url}/disks", SimpleStack::Disk
5
- end
6
-
7
- def network_interfaces
8
- cached_attributes[:network_interfaces] ||= SimpleStack::Collection.new hypervisor, self, "#{url}/network_interfaces", SimpleStack::NetworkInterface
9
- end
10
-
11
- def snapshots
12
- cached_attributes[:snapshots] ||= SimpleStack::Collection.new hypervisor, self, "#{url}/snapshots", SimpleStack::Snapshot
13
- end
14
-
15
- def tags
16
- cached_attributes[:tags] ||= hypervisor.get("#{url}/tags").parsed_response
17
- end
18
-
19
- def add_tag(tag)
20
- hypervisor.post "#{url}/tags", :name => tag
21
- reload if cacheable?
22
- tag
23
- end
24
-
25
- def remove_tag(tag)
26
- hypervisor.delete "#{url}/tags/#{tag}"
27
- reload if cacheable?
28
- tag
29
- end
30
-
31
- def reboot(opts={:force => false})
32
- hypervisor.put "#{url}/reboot", :force => opts[:force]
33
- end
34
-
35
- def export(opts={})
36
- opts = {:to => "/tmp/export_file"}.merge(opts)
37
- file = File.open(opts[:to], "wb")
38
-
39
- hypervisor.get_stream("#{url}/export", file)
40
-
41
- opts[:to]
42
- ensure
43
- file.close rescue nil
44
- end
45
-
46
- def revert_to(snapshot)
47
- snapshot.revert
48
- end
49
-
50
- def clone(opts={})
51
- response = hypervisor.post("#{url}/clone", opts)
52
- entity_path = response.headers["location"].sub(/^\//, "").sub(/\/$/, "")
53
- entity_url = "#{connection.url}/#{entity_path}"
54
- new_item = SimpleStack::Guest.new hypervisor, self, entity_url
55
- end
56
-
57
- def insert_media(media_name, opts={})
58
- media_options = opts.merge(:name => media_name)
59
- hypervisor.put("#{url}/media_device", media_options)
60
- reload if cacheable?
61
- end
62
-
63
- def eject_media
64
- hypervisor.put("#{url}/media_device", :name => nil)
65
- reload if cacheable?
66
- end
67
-
68
- def inserted_media
69
- if cached_attributes.key? :inserted_media
70
- cached_attributes[:inserted_media]
71
- else
72
- cached_attributes[:inserted_media] = hypervisor.get("#{url}/media_device").parsed_response["name"]
73
- end
74
- end
75
-
76
- def power_state=(state)
77
- hypervisor.put "#{url}/power", :state => state
78
- end
79
-
80
- ["start", "stop", "force_stop", "pause", "resume"].each do |state|
81
- define_method(state) do
82
- self.power_state = state
83
- end
84
- end
85
- end
86
- end
@@ -1,4 +0,0 @@
1
- module SimpleStack
2
- class Host < Entity
3
- end
4
- end
@@ -1,130 +0,0 @@
1
- module SimpleStack
2
- class Hypervisor
3
- include SimpleStack::Cacheable
4
-
5
- attr_accessor :connection, :type, :host, :username, :password
6
-
7
- def initialize(connection, type, options)
8
- self.connection = connection
9
- self.type = type
10
- self.host = options[:host]
11
- self.username = options[:username]
12
- self.password = options[:password]
13
- end
14
-
15
- def url
16
- "#{connection.url}/#{type}/#{host}"
17
- end
18
-
19
- def headers
20
- {
21
- "x-simplestack-version" => "1.0",
22
- "x-simplestack-token" => connection.token,
23
- "x-simplestack-hypervisor-token" => token,
24
- "Content-Type" => "application/json"
25
- }
26
- end
27
-
28
- def http_options
29
- {
30
- :timeout => connection.timeout,
31
- :read_timeout => connection.read_timeout,
32
- :no_follow => true,
33
- :headers => headers
34
- }
35
- end
36
-
37
- def token
38
- Base64.encode64("#{username}:#{password}").split("\n").join("")
39
- end
40
-
41
- def info
42
- cached_attributes[:info] ||= self.get url
43
- end
44
-
45
- def hosts
46
- cached_attributes[:hosts] ||= SimpleStack::Collection.new self, self, "#{url}/hosts", SimpleStack::Host
47
- end
48
-
49
- def storages
50
- cached_attributes[:storages] ||= SimpleStack::Collection.new self, self, "#{url}/storages", SimpleStack::Storage
51
- end
52
-
53
- def guests
54
- cached_attributes[:guests] ||= SimpleStack::Collection.new self, self, "#{url}/guests", SimpleStack::Guest
55
- end
56
-
57
- def import(opts={})
58
- file = File.open(opts[:from], "rb")
59
-
60
- response = post_stream("#{url}/guests", file)
61
- entity_path = response["location"].sub(/^\//, "").sub(/\/$/, "")
62
- entity_url = "#{connection.url}/#{entity_path}"
63
- SimpleStack::Guest.new self, guests.reload, entity_url
64
- ensure
65
- file.close rescue nil
66
- end
67
-
68
- def get(url)
69
- http_call { HTTParty.get(url, http_options) }
70
- end
71
-
72
- def get_stream(url, io)
73
- uri = URI.parse url
74
- http = Net::HTTP.new(uri.host, uri.port)
75
- request = Net::HTTP::Get.new(uri.path)
76
-
77
- headers.each_pair do |k, v|
78
- request.add_field(k, v)
79
- end
80
-
81
- http.request(request) do |res|
82
- res.read_body {|chunk| io.write chunk }
83
- end
84
- end
85
-
86
- def post(url, body)
87
- http_call { HTTParty.post(url, http_options.merge(:body => JSON.dump(body))) }
88
- end
89
-
90
- def put(url, body)
91
- http_call { HTTParty.put(url, http_options.merge(:body => JSON.dump(body))) }
92
- end
93
-
94
- def post_stream(url, io)
95
- uri = URI.parse url
96
- http = Net::HTTP.new(uri.host, uri.port)
97
- request = Net::HTTP::Post.new(uri.path, {})
98
-
99
- headers.each_pair do |k, v|
100
- request.add_field(k, v)
101
- end
102
-
103
- request.body_stream = io
104
- request.content_length = io.size
105
- response = http.request(request)
106
-
107
- if response.code.to_i >= 400
108
- parsed_response = JSON.load(response.body) rescue response.body
109
- raise SimpleStack::Exception.factory(parsed_response)
110
- end
111
-
112
- response
113
- end
114
-
115
- def delete(url)
116
- http_call { HTTParty.delete(url, http_options) }
117
- end
118
-
119
- def http_call
120
- response = yield
121
- return SimpleStack::GracefulObject.new if response.code == 501 && connection.graceful_degradation
122
- raise SimpleStack::Exception.factory(response.parsed_response) if response.code >= 400
123
- response
124
- end
125
-
126
- def inspect
127
- "#<#{self.class} url=#{url}>"
128
- end
129
- end
130
- end
@@ -1,4 +0,0 @@
1
- module SimpleStack
2
- class NetworkInterface < Entity
3
- end
4
- end
@@ -1,11 +0,0 @@
1
- module SimpleStack
2
- class Snapshot < Entity
3
- def use
4
- revert
5
- end
6
-
7
- def revert
8
- hypervisor.put "#{url}/revert", {}
9
- end
10
- end
11
- end
@@ -1,14 +0,0 @@
1
- module SimpleStack
2
- class Storage < Entity
3
- def import(opts={})
4
- file = File.open(opts[:from], "rb")
5
-
6
- response = hypervisor.post_stream("#{url}/guests", file)
7
- entity_path = response["location"].sub(/^\//, "").sub(/\/$/, "")
8
- entity_url = "#{connection.url}/#{entity_path}"
9
- SimpleStack::Guest.new hypervisor, hypervisor.guests.reload, entity_url
10
- ensure
11
- file.close rescue nil
12
- end
13
- end
14
- end
@@ -1,3 +0,0 @@
1
- module SimpleStack
2
- VERSION = "0.0.27"
3
- end
data/lib/simple_stack.rb DELETED
@@ -1,22 +0,0 @@
1
- require "json"
2
- require "base64"
3
- require "httparty"
4
- require "simple_stack/version"
5
- require "simple_stack/exception"
6
- require "simple_stack/connection"
7
- require "simple_stack/cacheable"
8
- require "simple_stack/collection"
9
- require "simple_stack/hypervisor"
10
- require "simple_stack/entity"
11
- require "simple_stack/host"
12
- require "simple_stack/storage"
13
- require "simple_stack/guest"
14
- require "simple_stack/snapshot"
15
- require "simple_stack/network_interface"
16
- require "simple_stack/disk"
17
-
18
- module SimpleStack
19
- def self.client
20
- HTTParty
21
- end
22
- end
data/simple_stack.gemspec DELETED
@@ -1,24 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "simple_stack/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "simple_stack"
7
- s.version = SimpleStack::VERSION
8
- s.authors = ["Thiago Morello"]
9
- s.email = ["thiago.morello@locaweb.com.br"]
10
- s.homepage = ""
11
- s.summary = %q{A Simple Stack gem}
12
- s.description = %q{A Simple Stack gem}
13
-
14
- s.rubyforge_project = "simple_stack"
15
-
16
- s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
- s.require_paths = ["lib"]
20
-
21
- # specify any dependencies here; for example:
22
- s.add_development_dependency "rspec"
23
- s.add_runtime_dependency "httparty"
24
- end
@@ -1,19 +0,0 @@
1
- # -*- coding: UTF-8 -*-
2
- require "spec_helper"
3
-
4
- describe SimpleStack::Connection do
5
- let(:url) {"http://simplestack.server"}
6
- subject {SimpleStack::Connection.new :url => url}
7
-
8
- it "should keep the connection url" do
9
- subject.url.should == url
10
- end
11
-
12
- it "should connect to a hypervisor" do
13
- host = "hypervisor_host"
14
- hypervisor = subject.connect_to :mock, host: host
15
- hypervisor.type.should == :mock
16
- hypervisor.host.should == host
17
- hypervisor.url.should == "#{url}/mock/#{host}"
18
- end
19
- end
@@ -1,25 +0,0 @@
1
- # -*- coding: UTF-8 -*-
2
- require "spec_helper"
3
-
4
- describe SimpleStack::Hypervisor do
5
- let(:url) {"http://simplestack.server"}
6
- let(:host) {"hypervisor_host"}
7
- subject {SimpleStack::Connection.new(:url => url).connect_to :mock, host: host}
8
-
9
- it "should keep the connection url" do
10
- subject.url.should == "#{url}/mock/#{host}"
11
- end
12
-
13
- it "should connect to a hypervisor" do
14
- subject.headers.should have_key("x-simplestack-version")
15
- subject.headers.should have_key("x-simplestack-token")
16
- subject.headers.should have_key("x-simplestack-hypervisor-token")
17
- subject.headers["Content-Type"].should == "application/json"
18
- end
19
-
20
- it "should have a base64 encoded username:password token for now" do
21
- subject.username = "admin"
22
- subject.password = "secret"
23
- subject.token.should == "YWRtaW46c2VjcmV0"
24
- end
25
- end
data/spec/spec_helper.rb DELETED
@@ -1,2 +0,0 @@
1
- $LOAD_PATH.unshift(File.expand_path(__FILE__, "../lib"))
2
- require "simple_stack"