sinatra-switch 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.rdoc ADDED
@@ -0,0 +1,34 @@
1
+ = Sinatra Switch
2
+
3
+ Set and retrieve an arbitrary switch flag via get and post.
4
+
5
+ == Use
6
+
7
+ require "sinatra/switch"
8
+
9
+ use_switch "light"
10
+
11
+ == Functionality
12
+
13
+ This will expose:
14
+
15
+ A route to get the current state of the switch:
16
+ /switch/light
17
+
18
+ A route for flicking the switch to ON:
19
+ /switch/light/on
20
+
21
+ A route for flicking the switch to OFF:
22
+ /switch/light/off
23
+
24
+ The switch state is stored in a file:
25
+ /var/light_switch
26
+
27
+ == Switch state possibilities
28
+
29
+ File doesn't exist
30
+ switch is on
31
+ File contains ON
32
+ switch is on
33
+ File contains OFF
34
+ server is off
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ require "rubygems"
2
+ require "bundler"
3
+ Bundler.require
4
+
5
+ require "rake/testtask"
6
+
7
+ Rake::TestTask.new do |t|
8
+ t.libs << "test"
9
+ t.test_files = FileList["test/*_test.rb"]
10
+ t.verbose = true
11
+ end
12
+
13
+ begin
14
+ require "mg"
15
+ MG.new("sinatra-switch.gemspec")
16
+ rescue LoadError
17
+ end
@@ -0,0 +1,36 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'sinatra/base'
4
+
5
+ module Sinatra
6
+ module Switch
7
+ def use_switch app_name
8
+ file = "/tmp/#{app_name}"
9
+ on_message = "ON"
10
+ off_message = "OFF"
11
+
12
+ get "/switch/#{app_name}" do
13
+ result = unless File.exist? file
14
+ on_message
15
+ else
16
+ File.open(file, 'r').read
17
+ end
18
+
19
+ if result.include? off_message
20
+ status 400
21
+ else
22
+ status 200
23
+ end
24
+ "Switch says #{app_name} is #{result}..."
25
+ end
26
+
27
+ post "/switch/#{app_name}/on" do
28
+ File.open(file, 'w') {|f| f.write(on_message) }
29
+ end
30
+
31
+ post "/switch/#{app_name}/off" do
32
+ File.open(file, 'w') {|f| f.write(off_message) }
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,19 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "sinatra-switch"
3
+ s.version = "0.0.1"
4
+ s.date = "2014-10-28"
5
+ s.summary = "Set and retrieve an arbitrary switch."
6
+ s.description = "Set and retrieve an arbitrary switch flag via get and post."
7
+ s.homepage = "http://github.com/Allinthedata/sinatra-switch"
8
+ s.email = "hi@aframe.com"
9
+ s.authors = ["mikesten"]
10
+ s.has_rdoc = false
11
+ s.files = %w[
12
+ README.rdoc
13
+ Rakefile
14
+ sinatra-switch.gemspec
15
+ lib/sinatra/switch.rb
16
+ test/switch_test.rb
17
+ ]
18
+ s.add_dependency("sinatra", [">= 1.4.0"])
19
+ end
@@ -0,0 +1,47 @@
1
+ require "rubygems"
2
+ require "bundler"
3
+ Bundler.require(:test)
4
+
5
+ require File.dirname(__FILE__) + "/../lib/sinatra/switch"
6
+
7
+ require "sinatra/base"
8
+ class SomeApp < Sinatra::Base
9
+ register Sinatra::Switch
10
+ use_switch "some_app"
11
+ end
12
+
13
+ class SinatraSwitchTest < Test::Unit::TestCase
14
+ def cleanup
15
+ File.delete("/tmp/some_app") if File.exists?("/tmp/some_app")
16
+ end
17
+
18
+ def setup
19
+ cleanup
20
+ @session = Rack::Test::Session.new(SomeApp)
21
+ end
22
+
23
+ def teardown
24
+ cleanup
25
+ end
26
+
27
+ def test_it_defaults_to_on
28
+ @session.get "/switch/some_app"
29
+ assert_equal @session.last_response.status, 200
30
+ assert_include @session.last_response.body, "some_app is ON"
31
+ end
32
+
33
+ def test_it_can_be_set_to_off
34
+ @session.post "/switch/some_app/off"
35
+ @session.get "/switch/some_app"
36
+ assert_equal @session.last_response.status, 400
37
+ assert_include @session.last_response.body, "some_app is OFF"
38
+ end
39
+
40
+ def test_it_can_be_set_to_on
41
+ @session.post "/switch/some_app/off"
42
+ @session.post "/switch/some_app/on"
43
+ @session.get "/switch/some_app"
44
+ assert_equal @session.last_response.status, 200
45
+ assert_include @session.last_response.body, "some_app is ON"
46
+ end
47
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sinatra-switch
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - mikesten
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-10-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sinatra
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.4.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.4.0
30
+ description: Set and retrieve an arbitrary switch flag via get and post.
31
+ email: hi@aframe.com
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - README.rdoc
37
+ - Rakefile
38
+ - sinatra-switch.gemspec
39
+ - lib/sinatra/switch.rb
40
+ - test/switch_test.rb
41
+ homepage: http://github.com/Allinthedata/sinatra-switch
42
+ licenses: []
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ none: false
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ segments:
54
+ - 0
55
+ hash: 3191485038812799727
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project:
64
+ rubygems_version: 1.8.25
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: Set and retrieve an arbitrary switch.
68
+ test_files: []