fog-serverlove-0.1.1/0000755000175000017500000000000012477305477015764 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/LICENSE.md0000644000175000017500000000220312477305477017365 0ustar balasankarcbalasankarcThe MIT License (MIT) Copyright (c) 2014-2014 [CONTRIBUTORS.md](https://github.com/fog/fog-serverlove/blob/master/CONTRIBUTORS.md) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.fog-serverlove-0.1.1/Gemfile0000644000175000017500000000014312477305477017255 0ustar balasankarcbalasankarcsource 'https://rubygems.org' # Specify your gem's dependencies in fog-serverlove.gemspec gemspec fog-serverlove-0.1.1/gemfiles/0000755000175000017500000000000012477305477017557 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/gemfiles/Gemfile.1.9.3+0000644000175000017500000000016712477305477021600 0ustar balasankarcbalasankarcsource :rubygems gem 'activesupport', '>= 3.0', '< 4' gem 'mime-types', '< 2.0' gem 'fog-core' gemspec :path => '../'fog-serverlove-0.1.1/gemfiles/Gemfile.1.9.2-0000644000175000017500000000021012477305477021566 0ustar balasankarcbalasankarcsource :rubygems gem 'mime-types', '< 2.0' gem 'nokogiri', '< 1.6' gem 'rest-client', '~> 1.6.8' gem 'fog-core' gemspec :path => '../'fog-serverlove-0.1.1/.gitignore0000644000175000017500000000031012477305477017746 0ustar balasankarcbalasankarc*.gem *.rbc .bundle .config .yardoc Gemfile.lock InstalledFiles _yardoc coverage doc/ lib/bundler/man pkg rdoc spec/reports test/tmp test/version_tmp tmp *.bundle *.so *.o *.a mkmf.log gemfiles/*.lockfog-serverlove-0.1.1/fog-serverlove.gemspec0000644000175000017500000000243612477305477022303 0ustar balasankarcbalasankarc# coding: utf-8 lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require 'fog/serverlove/version' Gem::Specification.new do |spec| spec.name = "fog-serverlove" spec.version = Fog::Serverlove::VERSION spec.authors = ["Paulo Henrique Lopes Ribeiro"] spec.email = ["plribeiro3000@gmail.com"] spec.summary = %q{Module for the 'fog' gem to support ServerLove.} spec.description = %q{This library can be used as a module for `fog` or as standalone provider to use the ServerLove in applications.} spec.homepage = "" spec.license = "MIT" spec.files = `git ls-files -z`.split("\x0") spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] spec.add_dependency "fog-core" spec.add_dependency "fog-json" spec.add_development_dependency "rake" spec.add_development_dependency "minitest" spec.add_development_dependency "shindo" spec.add_development_dependency "turn" spec.add_development_dependency "pry" if RUBY_VERSION.to_f > 1.9 spec.add_development_dependency "coveralls" spec.add_development_dependency "rubocop" end end fog-serverlove-0.1.1/Rakefile0000644000175000017500000000056712477305477017441 0ustar balasankarcbalasankarcrequire 'bundler/gem_tasks' require 'rake/testtask' Rake::TestTask.new do |t| t.libs.push %w(spec) t.test_files = FileList['spec/**/*_spec.rb'] t.verbose = true end desc 'Default Task' task :default => [ :test, 'test:travis' ] namespace :test do mock = ENV['FOG_MOCK'] || 'true' task :travis do sh("export FOG_MOCK=#{mock} && bundle exec shindont") end endfog-serverlove-0.1.1/metadata.yml0000644000175000017500000001417612477305477020300 0ustar balasankarcbalasankarc--- !ruby/object:Gem::Specification name: fog-serverlove version: !ruby/object:Gem::Version version: 0.1.1 platform: ruby authors: - Paulo Henrique Lopes Ribeiro autorequire: bindir: bin cert_chain: [] date: 2014-12-22 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: fog-core requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: fog-json requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: rake requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: minitest requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: shindo requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: turn requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: pry requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: coveralls requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: rubocop requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' description: |- This library can be used as a module for `fog` or as standalone provider to use the ServerLove in applications. email: - plribeiro3000@gmail.com executables: [] extensions: [] extra_rdoc_files: [] files: - ".gitignore" - ".hound.yml" - ".rubocop.yml" - ".ruby-gemset" - ".ruby-version" - ".travis.yml" - CONTRIBUTING.md - CONTRIBUTORS.md - Gemfile - LICENSE.md - README.md - Rakefile - fog-serverlove.gemspec - gemfiles/Gemfile.1.9.2- - gemfiles/Gemfile.1.9.3+ - lib/fog/bin/serverlove.rb - lib/fog/compute/serverlove.rb - lib/fog/compute/serverlove/models/image.rb - lib/fog/compute/serverlove/models/images.rb - lib/fog/compute/serverlove/models/server.rb - lib/fog/compute/serverlove/models/servers.rb - lib/fog/compute/serverlove/password_generator.rb - lib/fog/compute/serverlove/requests/create_image.rb - lib/fog/compute/serverlove/requests/create_server.rb - lib/fog/compute/serverlove/requests/destroy_image.rb - lib/fog/compute/serverlove/requests/destroy_server.rb - lib/fog/compute/serverlove/requests/get_image.rb - lib/fog/compute/serverlove/requests/get_images.rb - lib/fog/compute/serverlove/requests/get_server.rb - lib/fog/compute/serverlove/requests/get_servers.rb - lib/fog/compute/serverlove/requests/load_standard_image.rb - lib/fog/compute/serverlove/requests/reset_server.rb - lib/fog/compute/serverlove/requests/shutdown_server.rb - lib/fog/compute/serverlove/requests/start_server.rb - lib/fog/compute/serverlove/requests/stop_server.rb - lib/fog/compute/serverlove/requests/update_image.rb - lib/fog/compute/serverlove/requests/update_server.rb - lib/fog/serverlove.rb - lib/fog/serverlove/compute.rb - lib/fog/serverlove/version.rb - spec/minitest_helper.rb - tests/compute/password_generator_tests.rb - tests/compute/requests/image_tests.rb - tests/compute/requests/server_tests.rb - tests/helper.rb - tests/helpers/collection_helper.rb - tests/helpers/flavors_helper.rb - tests/helpers/formats_helper.rb - tests/helpers/formats_helper_tests.rb - tests/helpers/model_helper.rb - tests/helpers/responds_to_helper.rb - tests/helpers/schema_validator_tests.rb - tests/helpers/server_helper.rb - tests/helpers/servers_helper.rb - tests/helpers/succeeds_helper.rb homepage: '' licenses: - MIT metadata: {} post_install_message: rdoc_options: [] require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' requirements: [] rubyforge_project: rubygems_version: 2.4.3 signing_key: specification_version: 4 summary: Module for the 'fog' gem to support ServerLove. test_files: - spec/minitest_helper.rb fog-serverlove-0.1.1/.ruby-gemset0000644000175000017500000000001712477305477020226 0ustar balasankarcbalasankarcfog-serverlove fog-serverlove-0.1.1/tests/0000755000175000017500000000000012477305477017126 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/tests/helper.rb0000644000175000017500000000144612477305477020737 0ustar balasankarcbalasankarcrequire 'excon' if ENV['COVERAGE'] require 'coveralls' require 'simplecov' SimpleCov.start do add_filter '/spec/' add_filter '/test/' end end require File.expand_path(File.join(File.dirname(__FILE__), '../lib/fog/serverlove')) Coveralls.wear! if ENV['COVERAGE'] Excon.defaults.merge!(:debug_request => true, :debug_response => true) # This overrides the default 600 seconds timeout during live test runs if Fog.mocking? FOG_TESTING_TIMEOUT = ENV['FOG_TEST_TIMEOUT'] || 2000 Fog.timeout = 2000 Fog::Logger.warning "Setting default fog timeout to #{Fog.timeout} seconds" else FOG_TESTING_TIMEOUT = Fog.timeout end def lorem_file File.open(File.dirname(__FILE__) + '/lorem.txt', 'r') end def array_differences(array_a, array_b) (array_a - array_b) | (array_b - array_a) endfog-serverlove-0.1.1/tests/compute/0000755000175000017500000000000012477305477020602 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/tests/compute/password_generator_tests.rb0000644000175000017500000000071712477305477026266 0ustar balasankarcbalasankarcShindo.tests('Fog::Compute::Serverlove::PasswordGenerator | generate password', ['serverlove']) do @password = Fog::Compute::Serverlove::PasswordGenerator.generate tests("@password.length").returns(8) do @password.length end tests("@password contains one capital letter").returns(true) do @password.match(/[A-Z]/) && true end tests("@password contains one lower case letter").returns(true) do @password.match(/[a-z]/) && true end end fog-serverlove-0.1.1/tests/compute/requests/0000755000175000017500000000000012477305477022455 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/tests/compute/requests/image_tests.rb0000644000175000017500000000357512477305477025320 0ustar balasankarcbalasankarcShindo.tests('Fog::Compute[:serverlove] | drive requests', ['serverlove']) do @image_format = { 'drive' => String, 'name' => String, 'user' => String, 'size' => Integer, 'claimed' => Fog::Nullable::String, 'status' => String, 'encryption:cipher' => String, 'read:bytes' => String, 'write:bytes' => String, 'read:requests' => String, 'write:requests' => String } tests('success') do attributes = { 'name' => 'Test', 'size' => '24234567890' } tests("#create_image").formats(@image_format) do pending @image = Fog::Compute[:serverlove].create_image(attributes).body end tests("#list_images").succeeds do pending Fog::Compute[:serverlove].images end tests("#update_image").returns(true) do pending @image['name'] = "Diff" Fog::Compute[:serverlove].update_image(@image['drive'], { :name => @image['name'], :size => @image['size']}) Fog::Compute[:serverlove].images.get(@image['drive']).name == "Diff" end tests("#load_standard_image").returns(true) do pending # Load centos Fog::Compute[:serverlove].load_standard_image(@image['drive'], '88ed067f-d2b8-42ce-a25f-5297818a3b6f') Fog::Compute[:serverlove].images.get(@image['drive']).imaging != "" # This will be "x%" when imaging end tests("waits for imaging...").returns(true) do pending while(percent_complete = Fog::Compute[:serverlove].images.get(@image['drive']).imaging) sleep(1) STDERR.print "#{percent_complete} " break if percent_complete.include?("100") end STDERR.print "100% " true end tests("#destroy_image").succeeds do pending Fog::Compute[:serverlove].destroy_image(@image['drive']) end end end fog-serverlove-0.1.1/tests/compute/requests/server_tests.rb0000644000175000017500000000632312477305477025536 0ustar balasankarcbalasankarcShindo.tests('Fog::Compute[:serverlove] | server requests', ['serverlove']) do @server_format = { 'server' => String, 'name' => String, 'user' => String, 'status' => String, 'started' => Fog::Nullable::String, 'cpu' => Integer, 'mem' => Integer, 'smp' => Fog::Nullable::String, 'persistent' => Fog::Nullable::String, 'vnc' => Fog::Nullable::String, 'vnc:password' => Fog::Nullable::String, 'nic:0:dhcp' => String, 'nic:0:model' => String } tests('success') do attributes = { 'name' => 'Test', 'cpu' => '1000', 'mem' => '1000', 'persistent' => 'true' } tests("#create_server").formats(@server_format) do pending @server = Fog::Compute[:serverlove].create_server(Fog::Compute::Serverlove::Server.defaults.merge(attributes)).body end tests("#list_servers").succeeds do pending Fog::Compute[:serverlove].servers end tests("#update_server").returns(true) do pending @server['name'] = "Diff" Fog::Compute[:serverlove].update_server(@server['server'], { :name => @server['name']}) Fog::Compute[:serverlove].servers.get(@server['server']).name == "Diff" end tests("assigns drive to server").succeeds do pending @image = Fog::Compute[:serverlove].create_image('name' => 'Test', 'size' => '24234567890').body # Load debian Fog::Compute[:serverlove].load_standard_image(@image['drive'], 'aca2fa0b-40bc-4e06-ad99-f1467690d5de') Fog::Compute[:serverlove].update_server(@server['server'], { 'ide:0:0' => @image['drive'], 'boot' => 'ide:0:0'}) end tests("waits for imaging...").returns(true) do pending while(percent_complete = Fog::Compute[:serverlove].images.get(@image['drive']).imaging) sleep(1) STDERR.print "#{percent_complete} " break if percent_complete.include?("100") end STDERR.print "100% " true end tests("#start_server").returns(true) do pending Fog::Compute[:serverlove].start_server(@server['server']) Fog::Compute[:serverlove].servers.get(@server['server']).status == "active" end tests("#reset_server").returns(true) do pending Fog::Compute[:serverlove].reset_server(@server['server']) Fog::Compute[:serverlove].servers.get(@server['server']).status == "active" end tests("#shutdown_server").succeeds do pending Fog::Compute[:serverlove].shutdown_server(@server['server']) # Can't guarantee the OS will honour this command so don't test status end tests("#stop_server").returns(true) do pending Fog::Compute[:serverlove].start_server(@server['server']) Fog::Compute[:serverlove].stop_server(@server['server']) Fog::Compute[:serverlove].servers.get(@server['server']).status == "stopped" end tests("#destroy_server").succeeds do pending Fog::Compute[:serverlove].destroy_server(@server['server']) end tests("destroy test drive").succeeds do pending Fog::Compute[:serverlove].destroy_image(@image['drive']) end end end fog-serverlove-0.1.1/tests/helpers/0000755000175000017500000000000012477305477020570 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/tests/helpers/server_helper.rb0000644000175000017500000000124612477305477023765 0ustar balasankarcbalasankarcdef server_tests(connection, params = {}, mocks_implemented = true) model_tests(connection.servers, params, mocks_implemented) do tests('#reload').returns(true) do pending if Fog.mocking? && !mocks_implemented @instance.wait_for { ready? } identity = @instance.identity !identity.nil? && identity == @instance.reload.identity end responds_to([:ready?, :state]) yield if block_given? tests('#reboot').succeeds do pending if Fog.mocking? && !mocks_implemented @instance.wait_for { ready? } @instance.reboot end if !Fog.mocking? || mocks_implemented @instance.wait_for { ready? } end end end fog-serverlove-0.1.1/tests/helpers/servers_helper.rb0000644000175000017500000000041012477305477024140 0ustar balasankarcbalasankarcdef servers_tests(connection, params = {}, mocks_implemented = true) collection_tests(connection.servers, params, mocks_implemented) do if !Fog.mocking? || mocks_implemented @instance.wait_for { ready? } yield if block_given? end end end fog-serverlove-0.1.1/tests/helpers/collection_helper.rb0000644000175000017500000000502712477305477024613 0ustar balasankarcbalasankarcdef collection_tests(collection, params = {}, mocks_implemented = true) tests('success') do tests("#new(#{params.inspect})").succeeds do pending if Fog.mocking? && !mocks_implemented collection.new(params) end tests("#create(#{params.inspect})").succeeds do pending if Fog.mocking? && !mocks_implemented @instance = collection.create(params) end # FIXME: work around for timing issue on AWS describe_instances mocks if Fog.mocking? && @instance.respond_to?(:ready?) @instance.wait_for { ready? } end tests("#all").succeeds do pending if Fog.mocking? && !mocks_implemented collection.all end if !Fog.mocking? || mocks_implemented @identity = @instance.identity end tests("#get(#{@identity})").succeeds do pending if Fog.mocking? && !mocks_implemented collection.get(@identity) end tests('Enumerable') do pending if Fog.mocking? && !mocks_implemented methods = [ 'all?', 'any?', 'find', 'detect', 'collect', 'map', 'find_index', 'flat_map', 'collect_concat', 'group_by', 'none?', 'one?' ] # JRuby 1.7.5+ issue causes a SystemStackError: stack level too deep # https://github.com/jruby/jruby/issues/1265 if RUBY_PLATFORM == "java" and JRUBY_VERSION =~ /1\.7\.[5-8]/ methods.delete('all?') end methods.each do |enum_method| if collection.respond_to?(enum_method) tests("##{enum_method}").succeeds do block_called = false collection.send(enum_method) {|x| block_called = true } block_called end end end [ 'max_by','min_by' ].each do |enum_method| if collection.respond_to?(enum_method) tests("##{enum_method}").succeeds do block_called = false collection.send(enum_method) {|x| block_called = true; 0 } block_called end end end end if block_given? yield(@instance) end if !Fog.mocking? || mocks_implemented @instance.destroy end end tests('failure') do if !Fog.mocking? || mocks_implemented @identity = @identity.to_s @identity = @identity.gsub(/[a-zA-Z]/) { Fog::Mock.random_letters(1) } @identity = @identity.gsub(/\d/) { Fog::Mock.random_numbers(1) } @identity end tests("#get('#{@identity}')").returns(nil) do pending if Fog.mocking? && !mocks_implemented collection.get(@identity) end end end fog-serverlove-0.1.1/tests/helpers/model_helper.rb0000644000175000017500000000141212477305477023552 0ustar balasankarcbalasankarcdef model_tests(collection, params = {}, mocks_implemented = true) tests('success') do @instance = collection.new(params) tests("#save").succeeds do pending if Fog.mocking? && !mocks_implemented @instance.save end if block_given? yield(@instance) end tests("#destroy").succeeds do pending if Fog.mocking? && !mocks_implemented @instance.destroy end end end # Generates a unique identifier with a random differentiator. # Useful when rapidly re-running tests, so we don't have to wait # serveral minutes for deleted objects to disappear from the API # E.g. 'fog-test-1234' def uniq_id(base_name = 'fog-test') # random_differentiator suffix = rand(65536).to_s(16).rjust(4, '0') [base_name, suffix] * '-' end fog-serverlove-0.1.1/tests/helpers/flavors_helper.rb0000644000175000017500000000146312477305477024134 0ustar balasankarcbalasankarcdef flavors_tests(connection, params = {}, mocks_implemented = true) tests('success') do tests("#all").succeeds do pending if Fog.mocking? && !mocks_implemented connection.flavors.all end if !Fog.mocking? || mocks_implemented @identity = connection.flavors.first.identity end tests("#get('#{@identity}')").succeeds do pending if Fog.mocking? && !mocks_implemented connection.flavors.get(@identity) end end tests('failure') do if !Fog.mocking? || mocks_implemented invalid_flavor_identity = connection.flavors.first.identity.to_s.gsub(/\w/, '0') end tests("#get('#{invalid_flavor_identity}')").returns(nil) do pending if Fog.mocking? && !mocks_implemented connection.flavors.get(invalid_flavor_identity) end end end fog-serverlove-0.1.1/tests/helpers/responds_to_helper.rb0000644000175000017500000000037412477305477025017 0ustar balasankarcbalasankarcmodule Shindo class Tests def responds_to(method_names) for method_name in [*method_names] tests("#respond_to?(:#{method_name})").returns(true) do @instance.respond_to?(method_name) end end end end end fog-serverlove-0.1.1/tests/helpers/succeeds_helper.rb0000644000175000017500000000020612477305477024250 0ustar balasankarcbalasankarcmodule Shindo class Tests def succeeds test('succeeds') do !!instance_eval(&Proc.new) end end end end fog-serverlove-0.1.1/tests/helpers/formats_helper_tests.rb0000644000175000017500000000702012477305477025350 0ustar balasankarcbalasankarcShindo.tests('test_helper', 'meta') do tests('comparing welcome data against schema') do data = {:welcome => "Hello" } data_matches_schema(:welcome => String) { data } end tests('#data_matches_schema') do tests('when value matches schema expectation') do data_matches_schema({"key" => String}) { {"key" => "Value"} } end tests('when values within an array all match schema expectation') do data_matches_schema({"key" => [Integer]}) { {"key" => [1, 2]} } end tests('when nested values match schema expectation') do data_matches_schema({"key" => {:nested_key => String}}) { {"key" => {:nested_key => "Value"}} } end tests('when collection of values all match schema expectation') do data_matches_schema([{"key" => String}]) { [{"key" => "Value"}, {"key" => "Value"}] } end tests('when collection is empty although schema covers optional members') do data_matches_schema([{"key" => String}], {:allow_optional_rules => true}) { [] } end tests('when additional keys are passed and not strict') do data_matches_schema({"key" => String}, {:allow_extra_keys => true}) { {"key" => "Value", :extra => "Bonus"} } end tests('when value is nil and schema expects NilClass') do data_matches_schema({"key" => NilClass}) { {"key" => nil} } end tests('when value and schema match as hashes') do data_matches_schema({}) { {} } end tests('when value and schema match as arrays') do data_matches_schema([]) { [] } end tests('when value is a Time') do data_matches_schema({"time" => Time}) { {"time" => Time.now} } end tests('when key is missing but value should be NilClass (#1477)') do data_matches_schema({"key" => NilClass}, {:allow_optional_rules => true}) { {} } end tests('when key is missing but value is nullable (#1477)') do data_matches_schema({"key" => Fog::Nullable::String}, {:allow_optional_rules => true}) { {} } end end tests('#formats backwards compatible changes') do tests('when value matches schema expectation') do formats({"key" => String}) { {"key" => "Value"} } end tests('when values within an array all match schema expectation') do formats({"key" => [Integer]}) { {"key" => [1, 2]} } end tests('when nested values match schema expectation') do formats({"key" => {:nested_key => String}}) { {"key" => {:nested_key => "Value"}} } end tests('when collection of values all match schema expectation') do formats([{"key" => String}]) { [{"key" => "Value"}, {"key" => "Value"}] } end tests('when collection is empty although schema covers optional members') do formats([{"key" => String}]) { [] } end tests('when additional keys are passed and not strict') do formats({"key" => String}, false) { {"key" => "Value", :extra => "Bonus"} } end tests('when value is nil and schema expects NilClass') do formats({"key" => NilClass}) { {"key" => nil} } end tests('when value and schema match as hashes') do formats({}) { {} } end tests('when value and schema match as arrays') do formats([]) { [] } end tests('when value is a Time') do formats({"time" => Time}) { {"time" => Time.now} } end tests('when key is missing but value should be NilClass (#1477)') do formats({"key" => NilClass}) { {} } end tests('when key is missing but value is nullable (#1477)') do formats({"key" => Fog::Nullable::String}) { {} } end end end fog-serverlove-0.1.1/tests/helpers/schema_validator_tests.rb0000644000175000017500000000723112477305477025647 0ustar balasankarcbalasankarcShindo.tests('Fog::Schema::DataValidator', 'meta') do validator = Fog::Schema::DataValidator.new tests('#validate') do tests('returns true') do returns(true, 'when value matches schema expectation') do validator.validate({"key" => "Value"}, {"key" => String}) end returns(true, 'when values within an array all match schema expectation') do validator.validate({"key" => [1, 2]}, {"key" => [Integer]}) end returns(true, 'when nested values match schema expectation') do validator.validate({"key" => {:nested_key => "Value"}}, {"key" => {:nested_key => String}}) end returns(true, 'when collection of values all match schema expectation') do validator.validate([{"key" => "Value"}, {"key" => "Value"}], [{"key" => String}]) end returns(true, 'when collection is empty although schema covers optional members') do validator.validate([], [{"key" => String}]) end returns(true, 'when additional keys are passed and not strict') do validator.validate({"key" => "Value", :extra => "Bonus"}, {"key" => String}, {:allow_extra_keys => true}) end returns(true, 'when value is nil and schema expects NilClass') do validator.validate({"key" => nil}, {"key" => NilClass}) end returns(true, 'when value and schema match as hashes') do validator.validate({}, {}) end returns(true, 'when value and schema match as arrays') do validator.validate([], []) end returns(true, 'when value is a Time') do validator.validate({"time" => Time.now}, {"time" => Time}) end returns(true, 'when key is missing but value should be NilClass (#1477)') do validator.validate({}, {"key" => NilClass}, {:allow_optional_rules => true}) end returns(true, 'when key is missing but value is nullable (#1477)') do validator.validate({}, {"key" => Fog::Nullable::String}, {:allow_optional_rules => true}) end end tests('returns false') do returns(false, 'when value does not match schema expectation') do validator.validate({"key" => nil}, {"key" => String}) end returns(false, 'when key formats do not match') do validator.validate({"key" => "Value"}, {:key => String}) end returns(false, 'when additional keys are passed and strict') do validator.validate({"key" => "Missing"}, {}) end returns(false, 'when some keys do not appear') do validator.validate({}, {"key" => String}) end returns(false, 'when collection contains a member that does not match schema') do validator.validate([{"key" => "Value"}, {"key" => 5}], [{"key" => String}]) end returns(false, 'when collection has multiple schema patterns') do validator.validate([{"key" => "Value"}], [{"key" => Integer}, {"key" => String}]) end returns(false, 'when hash and array are compared') do validator.validate({}, []) end returns(false, 'when array and hash are compared') do validator.validate([], {}) end returns(false, 'when a hash is expected but another data type is found') do validator.validate({"key" => {:nested_key => []}}, {"key" => {:nested_key => {}}}) end returns(false, 'when key is missing but value should be NilClass (#1477)') do validator.validate({}, {"key" => NilClass}, {:allow_optional_rules => false}) end returns(false, 'when key is missing but value is nullable (#1477)') do validator.validate({}, {"key" => Fog::Nullable::String}, {:allow_optional_rules => false}) end end end end fog-serverlove-0.1.1/tests/helpers/formats_helper.rb0000644000175000017500000000705612477305477024137 0ustar balasankarcbalasankarcrequire "fog/schema/data_validator" # format related hackery # allows both true.is_a?(Fog::Boolean) and false.is_a?(Fog::Boolean) # allows both nil.is_a?(Fog::Nullable::String) and ''.is_a?(Fog::Nullable::String) module Fog module Boolean; end module Nullable module Boolean; end module Integer; end module String; end module Time; end module Float; end module Hash; end module Array; end end end [FalseClass, TrueClass].each {|klass| klass.send(:include, Fog::Boolean)} [FalseClass, TrueClass, NilClass, Fog::Boolean].each {|klass| klass.send(:include, Fog::Nullable::Boolean)} [NilClass, String].each {|klass| klass.send(:include, Fog::Nullable::String)} [NilClass, Time].each {|klass| klass.send(:include, Fog::Nullable::Time)} [Integer, NilClass].each {|klass| klass.send(:include, Fog::Nullable::Integer)} [Float, NilClass].each {|klass| klass.send(:include, Fog::Nullable::Float)} [Hash, NilClass].each {|klass| klass.send(:include, Fog::Nullable::Hash)} [Array, NilClass].each {|klass| klass.send(:include, Fog::Nullable::Array)} module Shindo class Tests # Generates a Shindo test that compares a hash schema to the result # of the passed in block returning true if they match. # # The schema that is passed in is a Hash or Array of hashes that # have Classes in place of values. When checking the schema the # value should match the Class. # # Strict mode will fail if the data has additional keys. Setting # +strict+ to +false+ will allow additional keys to appear. # # @param [Hash] schema A Hash schema # @param [Hash] options Options to change validation rules # @option options [Boolean] :allow_extra_keys # If +true+ does not fail when keys are in the data that are # not specified in the schema. This allows new values to # appear in API output without breaking the check. # @option options [Boolean] :allow_optional_rules # If +true+ does not fail if extra keys are in the schema # that do not match the data. Not recommended! # @yield Data to check with schema # # @example Using in a test # Shindo.tests("comparing welcome data against schema") do # data = {:welcome => "Hello" } # data_matches_schema(:welcome => String) { data } # end # # comparing welcome data against schema # + data matches schema # # @example Example schema # { # "id" => String, # "ram" => Integer, # "disks" => [ # { # "size" => Float # } # ], # "dns_name" => Fog::Nullable::String, # "active" => Fog::Boolean, # "created" => DateTime # } # # @return [Boolean] def data_matches_schema(schema, options = {}) test('data matches schema') do validator = Fog::Schema::DataValidator.new valid = validator.validate(yield, schema, options) @message = validator.message unless valid valid end end # @deprecated #formats is deprecated. Use #data_matches_schema instead def formats(format, strict = true) test('has proper format') do if strict options = {:allow_extra_keys => false, :allow_optional_rules => true} else options = {:allow_extra_keys => true, :allow_optional_rules => true} end validator = Fog::Schema::DataValidator.new valid = validator.validate(yield, format, options) @message = validator.message unless valid valid end end end end fog-serverlove-0.1.1/lib/0000755000175000017500000000000012477305477016532 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/lib/fog/0000755000175000017500000000000012477305477017305 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/lib/fog/serverlove/0000755000175000017500000000000012477305477021501 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/lib/fog/serverlove/version.rb0000644000175000017500000000007712477305477023517 0ustar balasankarcbalasankarcmodule Fog module Serverlove VERSION = "0.1.1" end end fog-serverlove-0.1.1/lib/fog/serverlove/compute.rb0000644000175000017500000000000012477305477023470 0ustar balasankarcbalasankarcfog-serverlove-0.1.1/lib/fog/bin/0000755000175000017500000000000012477305477020055 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/lib/fog/bin/serverlove.rb0000644000175000017500000000143112477305477022575 0ustar balasankarcbalasankarcclass Serverlove < Fog::Bin class << self def class_for(key) case key when :compute Fog::Compute::Serverlove else raise ArgumentError, "Unrecognized service: #{key}" end end def [](service) @@connections ||= Hash.new do |hash, key| hash[key] = case key when :compute Fog::Logger.warning("Serverlove[:compute] is not recommended, use Compute[:serverlove] for portability") Fog::Compute.new(:provider => 'Serverlove') else raise ArgumentError, "Unrecognized service: #{key.inspect}" end end @@connections[service] end def services Fog::Serverlove.services end end endfog-serverlove-0.1.1/lib/fog/compute/0000755000175000017500000000000012477305477020761 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/lib/fog/compute/serverlove/0000755000175000017500000000000012477305477023155 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/lib/fog/compute/serverlove/password_generator.rb0000644000175000017500000000032712477305477027414 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class PasswordGenerator def self.generate ('a'...'z').to_a.concat(('A'...'Z').to_a).shuffle[0,8].join end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/models/0000755000175000017500000000000012477305477024440 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/lib/fog/compute/serverlove/models/server.rb0000644000175000017500000000374112477305477026300 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Server < Fog::Model identity :id, :aliases => 'server' attribute :name attribute :cpu attribute :mem attribute :smp attribute :ide_0_0, :aliases => 'ide:0:0' attribute :ide_0_1, :aliases => 'ide:0:1' attribute :ide_1_0, :aliases => 'ide:1:0' attribute :ide_1_1, :aliases => 'ide:1:1' attribute :boot attribute :persistent attribute :vnc attribute :vnc_password, :aliases => 'vnc:password' attribute :status attribute :user attribute :started attribute :nic_0_model, :aliases => 'nic:0:model' attribute :nic_0_dhcp, :aliases => 'nic:0:dhcp' def save attributes = {} if(identity) attributes = service.update_server(identity, allowed_attributes).body else requires :name requires :cpu attributes = service.create_server(self.class.defaults.merge(allowed_attributes)).body end merge_attributes(attributes) self end def destroy requires :identity service.destroy_server(identity) self end def allowed_attributes allowed = [ :name, :cpu, :smp, :mem, :persistent, :vnc_password, :vnc, :ide_0_0, :ide_0_1, :ide_1_0, :ide_1_1, :boot, :nic_0_model, :nic_0_dhcp ] attributes.select {|k,v| allowed.include? k} end def self.defaults # TODO: Document default settings. # Note that VNC password standards are strict (need explaining) { 'nic:0:model' => 'e1000', 'nic:0:dhcp' => 'auto', 'smp' => 'auto', 'vnc' => 'auto', 'vnc:password' => Fog::Compute::Serverlove::PasswordGenerator.generate } end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/models/image.rb0000644000175000017500000000231412477305477026047 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Image < Fog::Model identity :id, :aliases => 'drive' attribute :name attribute :user attribute :size attribute :claimed attribute :status attribute :imaging attribute :encryption_cipher, :aliases => 'encryption:cipher' def save attributes = {} if(identity) attributes = service.update_image(identity, allowed_attributes).body else requires :name requires :size attributes = service.create_image(allowed_attributes).body end merge_attributes(attributes) self end def load_standard_image(standard_image_uuid) requires :identity service.load_standard_image(identity, standard_image_uuid) end def ready? status.upcase == 'ACTIVE' end def destroy requires :identity service.destroy_image(identity) self end def allowed_attributes allowed = [:name, :size] attributes.select {|k,v| allowed.include? k} end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/models/servers.rb0000644000175000017500000000055612477305477026464 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Servers < Fog::Collection model Fog::Compute::Serverlove::Server def all data = service.get_servers.body load(data) end def get(server_id) data = service.get_server(server_id).body new(data) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/models/images.rb0000644000175000017500000000055012477305477026232 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Images < Fog::Collection model Fog::Compute::Serverlove::Image def all data = service.get_images.body load(data) end def get(image_id) data = service.get_image(image_id).body new(data) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/0000755000175000017500000000000012477305477025030 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/destroy_server.rb0000644000175000017500000000036012477305477030433 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def destroy_server(server_id) request(:method => "post", :path => "/servers/#{server_id}/destroy", :expects => 204) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/stop_server.rb0000644000175000017500000000035212477305477027730 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def stop_server(server_id) request(:method => "post", :path => "/servers/#{server_id}/stop", :expects => 204) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/update_server.rb0000644000175000017500000000057612477305477030235 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def update_server(identifier, options) return nil if identifier.nil? || identifier == "" return nil if options.empty? || options.nil? request(:method => "post", :path => "/servers/#{identifier}/set", :expects => 200, :options => options) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/destroy_image.rb0000644000175000017500000000035412477305477030212 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def destroy_image(drive_id) request(:method => "post", :path => "/drives/#{drive_id}/destroy", :expects => 204) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/update_image.rb0000644000175000017500000000057412477305477030007 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def update_image(identifier, options) return nil if identifier.nil? || identifier == "" return nil if options.empty? || options.nil? request(:method => "post", :path => "/drives/#{identifier}/set", :expects => 200, :options => options) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/load_standard_image.rb0000644000175000017500000000044712477305477031323 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def load_standard_image(destination_image, source_image) request(:method => "post", :path => "/drives/#{destination_image}/image/#{source_image}/gunzip", :expects => 204) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/start_server.rb0000644000175000017500000000035412477305477030102 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def start_server(server_id) request(:method => "post", :path => "/servers/#{server_id}/start", :expects => 200) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/shutdown_server.rb0000644000175000017500000000036212477305477030617 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def shutdown_server(server_id) request(:method => "post", :path => "/servers/#{server_id}/shutdown", :expects => 204) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/get_servers.rb0000644000175000017500000000032112477305477027701 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def get_servers request(:method => "get", :path => "/servers/info", :expects => 200) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/create_server.rb0000644000175000017500000000153112477305477030206 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def create_server(options) return nil if options.empty? || options.nil? request(:method => "post", :path => "/servers/create/stopped", :expects => 200, :options => options) end end class Mock def create_server(options = {}) response = Excon::Response.new response.status = 200 data = { 'server' => Fog::Mock.random_numbers(1000000).to_s, 'name' => options['name'] || 'Test', 'cpu' => options['cpu'] || 1000, 'persistent' => options['persistent'] || false, 'vnc:password' => options['vnc:password'] || 'T35tServER!' } response.body = data response end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/get_image.rb0000644000175000017500000000034412477305477027277 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def get_image(image_id) request(:method => "get", :path => "/drives/#{image_id}/info", :expects => 200) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/create_image.rb0000644000175000017500000000130112477305477027755 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def create_image(options) return nil if options.empty? || options.nil? request(:method => "post", :path => "/drives/create", :expects => 200, :options => options) end end class Mock def create_image(options = {}) response = Excon::Response.new response.status = 200 data = { 'drive' => Fog::Mock.random_numbers(1000000).to_s, 'name' => options['name'] || 'Test', 'size' => options['size'] || 12345 } response.body = data response end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/get_images.rb0000644000175000017500000000031712477305477027462 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def get_images request(:method => "get", :path => "/drives/info", :expects => 200) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/get_server.rb0000644000175000017500000000035012477305477027520 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def get_server(server_id) request(:method => "get", :path => "/servers/#{server_id}/info", :expects => 200) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove/requests/reset_server.rb0000644000175000017500000000035412477305477030067 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove class Real def reset_server(server_id) request(:method => "post", :path => "/servers/#{server_id}/reset", :expects => 204) end end end end end fog-serverlove-0.1.1/lib/fog/compute/serverlove.rb0000644000175000017500000000530612477305477023506 0ustar balasankarcbalasankarcmodule Fog module Compute class Serverlove < Fog::Service autoload :Image, 'fog/compute/serverlove/models/image' autoload :Images, 'fog/compute/serverlove/models/images' autoload :Server, 'fog/compute/serverlove/models/server' autoload :Servers, 'fog/compute/serverlove/models/servers' autoload :PasswordGenerator, 'fog/compute/serverlove/password_generator' API_HOST = "api.z1-man.serverlove.com" requires :serverlove_uuid, :serverlove_api_key recognizes :serverlove_api_url model_path 'fog/compute/serverlove/models' model :image collection :images model :server collection :servers request_path 'fog/compute/serverlove/requests' # Image request :get_image request :get_images request :destroy_image request :create_image request :update_image request :load_standard_image # Server request :get_servers request :get_server request :destroy_server request :create_server request :update_server request :start_server request :stop_server request :shutdown_server request :reset_server class Mock def initialize(options) @serverlove_uuid = options[:serverlove_uuid] @serverlove_api_key = options[:serverlove_api_key] end def request(options) raise "Not implemented" end end class Real def initialize(options) @api_uuid = options[:serverlove_uuid] || Fog.credentials[:serverlove_uuid] @api_key = options[:serverlove_api_key] || Fog.credentials[:serverlove_api_key] @api_host = options[:serverlove_api_url] || Fog.credentials[:serverlove_api_url] || API_HOST @connection = Fog::Core::Connection.new("https://#{@api_uuid}:#{@api_key}@#{@api_host}") end def request(params) params = params.merge!( :headers => { "Accept" => "application/json" } ) unless params[:options].nil? params[:body] = encode_pairs(params[:options]) params.delete(:options) end response = @connection.request(params) raise_if_error!(response) response.body = Fog::JSON.decode(response.body) if response.body && response.body.length > 0 response end def encode_pairs(params) params.keys.map do |key| "#{key} #{params[key]}" end.join("\n") end # TODO def raise_if_error!(response) case response.status when 400 then raise 'omg' end end end end end end fog-serverlove-0.1.1/lib/fog/serverlove.rb0000644000175000017500000000036712477305477022034 0ustar balasankarcbalasankarcrequire 'fog/serverlove/version' require 'fog/core' require 'fog/json' module Fog module Compute autoload :Serverlove, 'fog/compute/serverlove' end module Serverlove extend Fog::Provider service(:compute, 'Compute') end end fog-serverlove-0.1.1/.ruby-version0000644000175000017500000000000612477305477020425 0ustar balasankarcbalasankarc2.1.5 fog-serverlove-0.1.1/CONTRIBUTING.md0000644000175000017500000000157112477305477020221 0ustar balasankarcbalasankarc## Getting Involved New contributors are always welcome, when it doubt please ask questions. We strive to be an open and welcoming community. Please be nice to one another. ### Coding * Pick a task: * Offer feedback on open [pull requests](https://github.com/fog/fog-serverlove/pulls). * Review open [issues](https://github.com/fog/fog-serverlove/issues) for things to help on. * [Create an issue](https://github.com/fog/fog-serverlove/issues/new) to start a discussion on additions or features. * Fork the project, add your changes and tests to cover them in a topic branch. * Commit your changes and rebase against `fog/fog-serverlove` to ensure everything is up to date. * [Submit a pull request](https://github.com/fog/fog-serverlove/compare/) ### Non-Coding * Offer feedback on open [issues](https://github.com/fog/fog-serverlove/issues). * Organize or volunteer at events.fog-serverlove-0.1.1/spec/0000755000175000017500000000000012477305477016716 5ustar balasankarcbalasankarcfog-serverlove-0.1.1/spec/minitest_helper.rb0000644000175000017500000000150212477305477022434 0ustar balasankarcbalasankarcrequire 'minitest/spec' require 'minitest/autorun' require 'turn' Turn.config do |c| # use one of output formats: # :outline - turn's original case/test outline mode [default] # :progress - indicates progress with progress bar # :dotted - test/unit's traditional dot-progress mode # :pretty - new pretty reporter # :marshal - dump output as YAML (normal run mode only) # :cue - interactive testing # c.format = :outline # turn on invoke/execute tracing, enable full backtrace c.trace = 20 # use humanized test names (works only with :outline format) c.natural = true end if ENV['COVERAGE'] require 'coveralls' require 'simplecov' SimpleCov.start do add_filter '/spec/' end end require File.join(File.dirname(__FILE__), '../lib/fog/serverlove') Coveralls.wear! if ENV['COVERAGE'] fog-serverlove-0.1.1/CONTRIBUTORS.md0000644000175000017500000000044512477305477020246 0ustar balasankarcbalasankarc* Frederick Cheung * James Rose * Lance Ivy * Paul Thornthwaite * Paulo Henrique Lopes Ribeiro * Sean Handley * Wesley Beary fog-serverlove-0.1.1/.travis.yml0000644000175000017500000000066212477305477020101 0ustar balasankarcbalasankarcmatrix: include: - rvm: 1.8.7 gemfile: gemfiles/Gemfile.1.9.2- - rvm: 1.9.2 gemfile: gemfiles/Gemfile.1.9.2- - rvm: 1.9.3 gemfile: gemfiles/Gemfile.1.9.3+ - rvm: 2.0.0 gemfile: gemfiles/Gemfile.1.9.3+ - rvm: 2.1.4 gemfile: gemfiles/Gemfile.1.9.3+ env: COVERAGE=true - rvm: ree gemfile: gemfiles/Gemfile.1.9.2- - rvm: jruby gemfile: gemfiles/Gemfile.1.9.3+ fog-serverlove-0.1.1/.hound.yml0000644000175000017500000000047412477305477017707 0ustar balasankarcbalasankarcMetrics/LineLength: Enabled: false Style/EachWithObject: Enabled: false Style/Encoding: EnforcedStyle: when_needed Style/FormatString: Enabled: false Style/HashSyntax: EnforcedStyle: hash_rockets Style/SignalException: EnforcedStyle: only_raise Style/StringLiterals: EnforcedStyle: double_quotes fog-serverlove-0.1.1/README.md0000644000175000017500000000244712477305477017252 0ustar balasankarcbalasankarc# Fog::Serverlove ![Gem Version](https://badge.fury.io/rb/fog-serverlove.svg) [![Build Status](https://travis-ci.org/fog/fog-serverlove.svg?branch=master)](https://travis-ci.org/fog/fog-serverlove) [![Dependency Status](https://gemnasium.com/fog/fog-serverlove.svg)](https://gemnasium.com/fog/fog-serverlove) [![Coverage Status](https://img.shields.io/coveralls/fog/fog-serverlove.svg)](https://coveralls.io/r/fog/fog-serverlove?branch=master) [![Code Climate](https://codeclimate.com/github/fog/fog-serverlove.png)](https://codeclimate.com/github/fog/fog-serverlove) Module for the 'fog' gem to support ServerLove ## Help Needed This gem needs a maintainer. If you want to work on it, please contact [@geemus](mailto:geemus@gmail.com) or [@plribeiro3000](mailto:plribeiro3000@gmail.com) ## Installation Add this line to your application's Gemfile: ```ruby gem 'fog-serverlove' ``` And then execute: $ bundle Or install it yourself as: $ gem install fog-serverlove ## Usage TODO: Write usage instructions here ## Contributing 1. Fork it ( https://github.com/fog/fog-serverlove/fork ) 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create a new Pull Request fog-serverlove-0.1.1/.rubocop.yml0000644000175000017500000000047412477305477020243 0ustar balasankarcbalasankarcMetrics/LineLength: Enabled: false Style/EachWithObject: Enabled: false Style/Encoding: EnforcedStyle: when_needed Style/FormatString: Enabled: false Style/HashSyntax: EnforcedStyle: hash_rockets Style/SignalException: EnforcedStyle: only_raise Style/StringLiterals: EnforcedStyle: double_quotes