lyre 0.0.0 → 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/.gitignore CHANGED
@@ -1,3 +1,6 @@
1
+ #ignore any TODO files
2
+ *.todo
3
+
1
4
  #ignore the build directory
2
5
  /pkg
3
6
 
data/Gemfile.lock CHANGED
@@ -2,15 +2,39 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  lyre (0.0.0)
5
+ capybara
5
6
  sinatra
6
7
 
7
8
  GEM
8
9
  remote: http://rubygems.org/
9
10
  specs:
11
+ capybara (2.0.2)
12
+ mime-types (>= 1.16)
13
+ nokogiri (>= 1.3.3)
14
+ rack (>= 1.0.0)
15
+ rack-test (>= 0.5.4)
16
+ selenium-webdriver (~> 2.0)
17
+ xpath (~> 1.0.0)
18
+ childprocess (0.3.8)
19
+ ffi (~> 1.0, >= 1.0.11)
20
+ columnize (0.3.6)
21
+ debugger (1.3.1)
22
+ columnize (>= 0.3.1)
23
+ debugger-linecache (~> 1.1.1)
24
+ debugger-ruby_core_source (~> 1.1.8)
25
+ debugger-linecache (1.1.2)
26
+ debugger-ruby_core_source (>= 1.1.1)
27
+ debugger-ruby_core_source (1.1.8)
10
28
  diff-lcs (1.1.3)
29
+ ffi (1.3.1)
30
+ mime-types (1.21)
31
+ multi_json (1.6.0)
32
+ nokogiri (1.5.6)
11
33
  rack (1.5.2)
12
34
  rack-protection (1.3.2)
13
35
  rack
36
+ rack-test (0.6.2)
37
+ rack (>= 1.0)
14
38
  rake (10.0.3)
15
39
  rspec (2.12.0)
16
40
  rspec-core (~> 2.12.0)
@@ -20,16 +44,26 @@ GEM
20
44
  rspec-expectations (2.12.1)
21
45
  diff-lcs (~> 1.1.3)
22
46
  rspec-mocks (2.12.2)
47
+ rubyzip (0.9.9)
48
+ selenium-webdriver (2.29.0)
49
+ childprocess (>= 0.2.5)
50
+ multi_json (~> 1.0)
51
+ rubyzip
52
+ websocket (~> 1.0.4)
23
53
  sinatra (1.3.4)
24
54
  rack (~> 1.4)
25
55
  rack-protection (~> 1.3)
26
56
  tilt (~> 1.3, >= 1.3.3)
27
57
  tilt (1.3.3)
58
+ websocket (1.0.7)
59
+ xpath (1.0.0)
60
+ nokogiri (~> 1.3)
28
61
 
29
62
  PLATFORMS
30
63
  ruby
31
64
 
32
65
  DEPENDENCIES
66
+ debugger
33
67
  lyre!
34
68
  rake
35
69
  rspec
data/README.md ADDED
@@ -0,0 +1,8 @@
1
+ # Notes
2
+
3
+ http://robots.thoughtbot.com/post/34761570235/using-capybara-to-test-javascript-that-makes-http
4
+
5
+ Check out the set_configuration call below:
6
+ https://github.com/thoughtbot/fake_braintree/blob/master/lib/fake_braintree.rb
7
+
8
+ http://www.sinatrarb.com/intro#Rack%20Middleware
data/Rakefile CHANGED
@@ -13,5 +13,5 @@ task :default => [:spec]
13
13
 
14
14
  desc "Clean build artifacts"
15
15
  task :clean do
16
- `rm *.gem`
16
+ `rm pkg/*.gem`
17
17
  end
data/lib/lyre/app.rb ADDED
@@ -0,0 +1,55 @@
1
+ require 'lyre/registry'
2
+ require 'sinatra'
3
+
4
+ module Lyre
5
+
6
+ #NOTE: Not sure this is the right name for this class
7
+ class App < Sinatra::Base
8
+
9
+ attr_accessor :host, :port
10
+
11
+ class << self
12
+ attr_accessor :setup_block, :teardown_block
13
+
14
+ def setup(&block)
15
+ self.setup_block = block
16
+ end
17
+
18
+ def teardown(&block)
19
+ self.teardown_block = block
20
+ end
21
+
22
+ alias_method :create, :new! #Sinatra redefines new as new!, so make it easy to access
23
+ end
24
+
25
+ def start
26
+ return if started?
27
+ Lyre::Registry.register_and_run self
28
+ self.instance_eval(&self.class.setup_block) if self.class.setup_block
29
+ self.started = true
30
+ self
31
+ end
32
+
33
+ def stop
34
+ return unless started?
35
+ Lyre::Registry.stop_and_deregister self
36
+ self.instance_eval(&self.class.teardown_block) if self.class.teardown_block
37
+ self.started = false
38
+ self
39
+ end
40
+
41
+ def endpoint
42
+ "http://#{host}:#{port}" #may want to make http/https configurable
43
+ end
44
+
45
+ def started?
46
+ started
47
+ end
48
+
49
+ private
50
+
51
+ attr_accessor :started
52
+
53
+ end
54
+
55
+ end
@@ -0,0 +1,3 @@
1
+ module Lyre
2
+ START_PORT = 49_152
3
+ end
@@ -0,0 +1,27 @@
1
+ require 'capybara'
2
+
3
+ module Lyre
4
+ module Registry
5
+
6
+ @@registry = {}
7
+
8
+ def self.register_and_run(lyre)
9
+ raise "Lyre already registered" if @@registry.has_key? lyre.class
10
+
11
+ @@registry[lyre.class] = Capybara::Server.new(lyre).tap do |server|
12
+ server.boot
13
+
14
+ lyre.host = server.host
15
+ lyre.port = server.port
16
+ end
17
+ end
18
+
19
+ def self.stop_and_deregister(lyre)
20
+ raise "Lyre not registered" unless @@registry.has_key? lyre.class
21
+
22
+ #server cannot be stopped
23
+
24
+ @@registry.delete(lyre.class)
25
+ end
26
+ end
27
+ end
data/lib/lyre/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lyre
2
- VERSION = '0.0.0'
2
+ VERSION = '0.0.1'
3
3
  end
data/lib/lyre.rb CHANGED
@@ -1 +1,3 @@
1
1
  require 'lyre/version'
2
+ require 'lyre/constants'
3
+ require 'lyre/app'
data/lyre.gemspec CHANGED
@@ -18,7 +18,9 @@ Gem::Specification.new do |s|
18
18
  s.require_paths = ['lib']
19
19
 
20
20
  s.add_dependency 'sinatra'
21
+ s.add_dependency 'capybara'
21
22
 
22
23
  s.add_development_dependency 'rake'
23
24
  s.add_development_dependency 'rspec'
25
+ s.add_development_dependency 'debugger'
24
26
  end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'End to end test - Refactor later' do
4
+
5
+ before(:all) do
6
+ @lyre = FakeServiceLyre.create.start
7
+ end
8
+
9
+ after(:all) do
10
+ @lyre.stop
11
+ end
12
+
13
+ it "should mock the endpoint that FakeService tries to access" do
14
+ FakeService.call_service.should == 'Hello World'
15
+ end
16
+
17
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe FakeService do
4
+ it "should return an empty string when default values are used" do
5
+ expect { FakeService.call_service }.to raise_error(SocketError, 'getaddrinfo: nodename nor servname provided, or not known')
6
+ end
7
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Lifecycle Tests" do
4
+
5
+ describe "setup and teardown are called" do
6
+ before(:each) { @lyre = LifeCycleLyre.create.start }
7
+ after(:each) { @lyre.stop }
8
+
9
+ it "should call setup block when the lyre is started" do
10
+ LifeCycleLyre.setup_called.should be_true
11
+ end
12
+
13
+ it "should call teardown block when the lyre is stopped" do
14
+ @lyre.stop
15
+
16
+ LifeCycleLyre.setup_called.should be_true
17
+ end
18
+ end
19
+
20
+ describe "setup and teardown are optional" do
21
+ before(:each) { @lyre = NoLifeCycleLyre.create }
22
+ after(:each) { @lyre.stop }
23
+
24
+ it "should not fail if the lyre has no setup" do
25
+ @lyre.start
26
+ end
27
+
28
+ it "should not fail of the lyre has no teardown" do
29
+ @lyre.stop
30
+ end
31
+ end
32
+
33
+ describe "start and stop are idempotent" do
34
+ before(:each) { @lyre = NoLifeCycleLyre.create }
35
+ after(:each) { @lyre.stop }
36
+
37
+ it "should allow start to be called twice" do
38
+ @lyre.start.start
39
+ end
40
+
41
+ it "should allow stop to be called twice" do
42
+ @lyre.start.stop.stop
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Lyre registration" do
4
+
5
+ before(:each) do
6
+ @lyre_one = FakeServiceLyre.create
7
+ @lyre_two = FakeServiceLyre.create
8
+ end
9
+
10
+ after(:each) do
11
+ @lyre_one.stop
12
+ @lyre_two.stop
13
+ end
14
+
15
+ it "should not allow two instances of the same lyre to run simultaneously" do
16
+ @lyre_one.start
17
+ expect { @lyre_two.start }.to raise_error('Lyre already registered')
18
+ end
19
+
20
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,9 @@
1
- require 'rspec'
1
+ require 'lyre'
2
2
 
3
3
  PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..')).freeze
4
4
 
5
5
  Dir[File.join(PROJECT_ROOT, 'spec', 'support', '**', '*.rb')].each { |file| require(file) }
6
+
7
+ RSpec.configure do |config|
8
+ config.order = :random
9
+ end
@@ -4,7 +4,7 @@ class FakeService
4
4
 
5
5
  class << self
6
6
  def endpoint
7
- @endpoint || 'example.com'
7
+ @endpoint || 'http://nowhere.example.com'
8
8
  end
9
9
 
10
10
  def endpoint=(value)
@@ -12,7 +12,9 @@ class FakeService
12
12
  end
13
13
 
14
14
  def call_service
15
- http = Net::HTTP.new(endpoint)
15
+ url = URI.parse(endpoint)
16
+
17
+ http = Net::HTTP.new(url.host, url.port)
16
18
  request = Net::HTTP::Get.new("/")
17
19
  response = http.request(request)
18
20
 
@@ -0,0 +1,16 @@
1
+ class FakeServiceLyre < Lyre::App
2
+
3
+ setup do
4
+ @original_endpoint = FakeService.endpoint
5
+ FakeService.endpoint = endpoint
6
+ end
7
+
8
+ teardown do
9
+ FakeService.endpoint = @original_endpoint
10
+ end
11
+
12
+ get '/' do
13
+ 'Hello World'
14
+ end
15
+
16
+ end
@@ -0,0 +1,27 @@
1
+ class LifeCycleLyre < Lyre::App
2
+
3
+ setup do
4
+ LifeCycleLyre.setup_called = true
5
+ end
6
+
7
+ teardown do
8
+ LifeCycleLyre.teardown_called = true
9
+ end
10
+
11
+ def self.setup_called
12
+ @@setup_called
13
+ end
14
+
15
+ def self.setup_called=(value)
16
+ @@setup_called = value
17
+ end
18
+
19
+ def self.teardown_called
20
+ @@teardown_called
21
+ end
22
+
23
+ def self.teardown_called=(value)
24
+ @@teardown_called = value
25
+ end
26
+
27
+ end
@@ -0,0 +1,2 @@
1
+ class NoLifeCycleLyre < Lyre::App
2
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lyre
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-11 00:00:00.000000000 Z
12
+ date: 2013-02-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
@@ -27,6 +27,22 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: capybara
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
30
46
  - !ruby/object:Gem::Dependency
31
47
  name: rake
32
48
  requirement: !ruby/object:Gem::Requirement
@@ -59,6 +75,22 @@ dependencies:
59
75
  - - ! '>='
60
76
  - !ruby/object:Gem::Version
61
77
  version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: debugger
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
62
94
  description: Awesome mocks of external REST API dependencies
63
95
  email:
64
96
  - dev@sortfolio.com
@@ -70,12 +102,23 @@ files:
70
102
  - .rvmrc
71
103
  - Gemfile
72
104
  - Gemfile.lock
105
+ - README.md
73
106
  - Rakefile
74
107
  - lib/lyre.rb
108
+ - lib/lyre/app.rb
109
+ - lib/lyre/constants.rb
110
+ - lib/lyre/registry.rb
75
111
  - lib/lyre/version.rb
76
112
  - lyre.gemspec
113
+ - spec/end_to_end_spec.rb
114
+ - spec/fake_service_spec.rb
115
+ - spec/lifecycle_spec.rb
116
+ - spec/registration_spec.rb
77
117
  - spec/spec_helper.rb
78
118
  - spec/support/fake_service.rb
119
+ - spec/support/fake_service_lyre.rb
120
+ - spec/support/life_cycle_lyre.rb
121
+ - spec/support/no_life_cycle_lyre.rb
79
122
  homepage: ''
80
123
  licenses: []
81
124
  post_install_message:
@@ -101,5 +144,12 @@ signing_key:
101
144
  specification_version: 3
102
145
  summary: Awesome mocks of external REST API dependencies
103
146
  test_files:
147
+ - spec/end_to_end_spec.rb
148
+ - spec/fake_service_spec.rb
149
+ - spec/lifecycle_spec.rb
150
+ - spec/registration_spec.rb
104
151
  - spec/spec_helper.rb
105
152
  - spec/support/fake_service.rb
153
+ - spec/support/fake_service_lyre.rb
154
+ - spec/support/life_cycle_lyre.rb
155
+ - spec/support/no_life_cycle_lyre.rb