excursion 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a338401c82ff6fa83f39996a473dd5f2b7fba259
4
- data.tar.gz: 91e8a13deb73fde5d74ea5dd23aa08bda277ae83
3
+ metadata.gz: ee64e15f8d7724efbe4740ea2df2536c720a2865
4
+ data.tar.gz: 45927cde8ec41918fca4bcc1144075d0e40d0c4f
5
5
  SHA512:
6
- metadata.gz: 6d9ed0f02c70a928a718d063cac0e1f75bff1830b3606cb5d0685de09282e1e230ed0f8742fa1ac9a9fd2ae2fc67eb7048d89e4be13b972344bdb1a75228f9c9
7
- data.tar.gz: 1ba2d82ddc48b48d550eb6ed37ac3e5ca90782be1d37814c112d91ef4693b58e7be15fa950d00e352a728b8c9fa824f3a7ee35737ce16166b9e0a25da8a7a1fc
6
+ metadata.gz: 039ba40d1e6aa5f66f262a751f64b65a04f03eed7a0f3237d020850e942790826644d2d6d2453b20aa839e4c85a210e35f4016497b5c24ea7ce30052b6166955
7
+ data.tar.gz: 0d2ba1e113445f529f6c86e1a78b014eed8554987b524cb4142e08de997968caf20f13d4fb2401f59d2af978fe6b6045e5f6dc39874a2ac1ef83702a80bcc325
@@ -36,6 +36,12 @@ module Excursion
36
36
  end
37
37
  alias_method :unset, :delete
38
38
 
39
+ def all
40
+ hash = HashWithIndifferentAccess.new
41
+ @model.all.each { |m| hash[m.key.to_sym] = m.value }
42
+ hash
43
+ end
44
+
39
45
  protected
40
46
 
41
47
  def initialize
@@ -28,6 +28,14 @@ module Excursion
28
28
  end
29
29
  alias_method :unset, :delete
30
30
 
31
+ def all
32
+ hash = @cache.all
33
+ return hash unless hash.nil? || hash.empty?
34
+ @model.all
35
+ rescue Dalli::RingError => e
36
+ rescue_from_dalli_ring_error(e) && retry
37
+ end
38
+
31
39
  protected
32
40
 
33
41
  def initialize(server)
@@ -7,12 +7,20 @@ module Excursion
7
7
  Excursion::Pool::Application.from_cache(read(key))
8
8
  end
9
9
 
10
+ def all_apps
11
+ app_hash = HashWithIndifferentAccess.new
12
+ all.each do |k,v|
13
+ app_hash[k.to_sym] = Excursion::Pool::Application.from_cache(v)
14
+ end
15
+ end
16
+
10
17
  def read(key); end
11
18
  alias_method :get, :read
12
19
  def write(key, value); end
13
20
  alias_method :set, :write
14
21
  def delete(key); end
15
22
  alias_method :unset, :delete
23
+ def all; end
16
24
 
17
25
  end
18
26
  end
@@ -26,6 +26,10 @@ module Excursion
26
26
  end
27
27
  alias_method :unset, :delete
28
28
 
29
+ def all
30
+ HashWithIndifferentAccess.new(read_file)
31
+ end
32
+
29
33
  protected
30
34
 
31
35
  def initialize(path)
@@ -5,6 +5,7 @@ require 'excursion/exceptions/memcache'
5
5
  module Excursion
6
6
  module Datastores
7
7
  class Memcache < Datastore
8
+ REGISTERED_KEYS = 'registered_keys'
8
9
 
9
10
  def read(key)
10
11
  @client.get(key.to_s)
@@ -14,20 +15,30 @@ module Excursion
14
15
  alias_method :get, :read
15
16
 
16
17
  def write(key, value)
17
- value if @client.set(key.to_s, value)
18
+ value if @client.set(key.to_s, value) && @client.set(REGISTERED_KEYS, (registered_keys << key.to_s).join(','))
18
19
  rescue Dalli::RingError => e
19
20
  rescue_from_dalli_ring_error(e) && retry
20
21
  end
21
22
  alias_method :set, :write
22
23
 
23
24
  def delete(key)
24
- value = @client.get(key)
25
- value if @client.delete(key)
25
+ regd_keys = registered_keys
26
+ regd_keys.delete(key.to_s)
27
+ value = @client.get(key.to_s)
28
+ value if @client.delete(key.to_s) && @client.set(REGISTERED_KEYS, regd_keys.join(','))
26
29
  rescue Dalli::RingError => e
27
30
  rescue_from_dalli_ring_error(e) && retry
28
31
  end
29
32
  alias_method :unset, :delete
30
33
 
34
+ def all
35
+ hash = HashWithIndifferentAccess.new
36
+ registered_keys.each { |key| hash[key.to_s] = @client.get(key.to_s) }
37
+ hash
38
+ rescue Dalli::RingError => e
39
+ rescue_from_dalli_ring_error(e) && retry
40
+ end
41
+
31
42
  protected
32
43
 
33
44
  def initialize(server)
@@ -35,6 +46,12 @@ module Excursion
35
46
  @client = Dalli::Client.new(server, {namespace: "excursion"})
36
47
  end
37
48
 
49
+ def registered_keys
50
+ @client.get(REGISTERED_KEYS).split(',')
51
+ rescue
52
+ []
53
+ end
54
+
38
55
  # TODO if we're using memcache, and the server goes away, it might be a good idea
39
56
  # to make sure to re-register this app in the pool when it comes back, just in case
40
57
  # the server crashed and the pool is lost.
@@ -10,6 +10,13 @@ module Excursion
10
10
  def app(key)
11
11
  Excursion::Pool::DummyApplication.from_cache(read(key))
12
12
  end
13
+
14
+ def all_apps
15
+ app_hash = HashWithIndifferentAccess.new
16
+ all.each do |k,v|
17
+ app_hash[k.to_sym] = Excursion::Pool::DummyApplication.from_cache(v)
18
+ end
19
+ end
13
20
 
14
21
  def read(key)
15
22
  return unless Excursion.configuration.test_providers.nil? || Excursion.configuration.test_providers.map(&:to_sym).include?(key.to_sym)
@@ -27,6 +34,10 @@ module Excursion
27
34
  end
28
35
  alias_method :unset, :delete
29
36
 
37
+ def all
38
+ HashWithIndifferentAccess.new(@pool)
39
+ end
40
+
30
41
  protected
31
42
 
32
43
  def initialize(pool=nil)
@@ -0,0 +1,12 @@
1
+ module Excursion
2
+ module Helpers
3
+ module JavascriptHelper
4
+ def render_excursion_javascript_helpers
5
+ content_tag :script, raw("Excursion.loadPool(#{raw Excursion::Pool.datastore.all.to_json});"), type: "text/javascript"
6
+ end
7
+
8
+ end
9
+ end
10
+ end
11
+
12
+ ActionController::Base.send :helper, Excursion::Helpers::JavascriptHelper
@@ -12,10 +12,14 @@ module Excursion
12
12
  if route.nil?
13
13
  super
14
14
  else
15
- url_opts = (@application.default_url_options || {}).clone
16
- url_opts.merge!(args.slice!(args.length-1)) if args.last.is_a?(Hash) #&& args.last.has_key?(:host)
17
-
18
- ActionDispatch::Http::URL.url_for(url_opts.merge({path: replaced_path(route, args)}))
15
+ if meth.to_s.match(/_url\Z/)
16
+ url_opts = (@application.default_url_options || {}).clone
17
+ url_opts.merge!(args.slice!(args.length-1)) if args.last.is_a?(Hash) #&& args.last.has_key?(:host)
18
+
19
+ ActionDispatch::Http::URL.url_for(url_opts.merge({path: replaced_path(route, args)}))
20
+ elsif meth.to_s.match(/_path\Z/)
21
+ replaced_path(route, args)
22
+ end
19
23
  end
20
24
  end
21
25
 
@@ -1,5 +1,6 @@
1
1
  require 'excursion/helpers/url_helper'
2
2
  require 'excursion/helpers/application_helper'
3
+ require 'excursion/helpers/javascript_helper'
3
4
 
4
5
  module Excursion
5
6
  module Helpers
@@ -6,6 +6,10 @@ module Excursion
6
6
  module Pool
7
7
  @@applications = {}
8
8
 
9
+ def self.all_applications
10
+ datastore.all_apps
11
+ end
12
+
9
13
  def self.application(name)
10
14
  return @@applications[name] if @@applications.has_key?(name) && !@@applications[name].nil?
11
15
 
@@ -1,4 +1,9 @@
1
1
  module Excursion
2
+ class Engine < Rails::Engine
3
+ # automatically registers excursion as an engine and allows
4
+ # using the javascript helpers
5
+ end
6
+
2
7
  class Railtie < Rails::Railtie
3
8
  config.after_initialize do |app|
4
9
  if Excursion.configuration.register_app == true && !Excursion.configuration.datastore.nil? && !defined?(Rails::Generators::Base) # HACK is there a better way to attempt to check if we're running a generator?
@@ -1,3 +1,3 @@
1
1
  module Excursion
2
- VERSION = '0.0.11'
2
+ VERSION = '0.0.12'
3
3
  end
@@ -80,26 +80,38 @@ describe 'Excursion::Datastores::ActiveRecord' do
80
80
  end
81
81
  end
82
82
 
83
- context '#delete' do
83
+ describe '#delete' do
84
84
  describe 'key' do
85
85
  it 'should be required' do
86
86
  expect { subject.delete }.to raise_exception(ArgumentError)
87
87
  end
88
88
  end
89
-
90
- it 'should remove the key from the datastore' do
91
- subject.read('key1').should_not eql(nil)
92
- subject.delete('key1')
93
- subject.read('key1').should be(nil)
94
- end
95
89
 
96
- it 'should return the value of the deleted key if it exists' do
97
- keyval = subject.read('key1')
98
- subject.delete('key1').should eql(keyval)
90
+ context 'when the key exists' do
91
+ it 'should remove the key from the datastore' do
92
+ subject.read('key1').should_not eql(nil)
93
+ subject.delete('key1')
94
+ subject.read('key1').should be(nil)
95
+ end
96
+
97
+ it 'should return the value of the deleted key' do
98
+ keyval = subject.read('key1')
99
+ subject.delete('key1').should eql(keyval)
100
+ end
99
101
  end
100
102
 
101
- it 'should return nil if the deleted key does not exist' do
102
- subject.delete('non_existent_key').should eql(nil)
103
+ context 'when the key does not exist' do
104
+ it 'should return nil' do
105
+ subject.delete('non_existent_key').should eql(nil)
106
+ end
107
+ end
108
+ end
109
+
110
+ describe '#all' do
111
+ it 'should return a hash of all the registered keys and their values' do
112
+ Excursion::Specs::Mocks::SIMPLE_VALUES.each do |k,v|
113
+ expect(subject.all[k.to_sym]).to eql(v)
114
+ end
103
115
  end
104
116
  end
105
117
 
@@ -18,6 +18,7 @@ describe 'Excursion::Datastores::ActiveRecordWithMemcache' do
18
18
  dalli_client.set(key, val)
19
19
  Excursion::RoutePool.create key: key, value: val
20
20
  end
21
+ dalli_client.set(Excursion::Datastores::Memcache::REGISTERED_KEYS, Excursion::Specs::Mocks::SIMPLE_VALUES.keys.map(&:to_s).join(','))
21
22
  end
22
23
 
23
24
  subject do
@@ -114,7 +115,7 @@ describe 'Excursion::Datastores::ActiveRecordWithMemcache' do
114
115
  end
115
116
  end
116
117
 
117
- context '#delete' do
118
+ describe '#delete' do
118
119
  before(:each) do
119
120
  fill_pool
120
121
  end
@@ -154,5 +155,13 @@ describe 'Excursion::Datastores::ActiveRecordWithMemcache' do
154
155
  subject.delete('non_existent_key').should eql(nil)
155
156
  end
156
157
  end
158
+
159
+ describe '#all' do
160
+ it 'should return a hash of all the registered keys and their values' do
161
+ Excursion::Specs::Mocks::SIMPLE_VALUES.each do |k,v|
162
+ expect(subject.all[k.to_sym]).to eql(v)
163
+ end
164
+ end
165
+ end
157
166
 
158
167
  end
@@ -93,26 +93,38 @@ describe 'Excursion::Datastores::File' do
93
93
  end
94
94
  end
95
95
 
96
- context '#delete' do
96
+ describe '#delete' do
97
97
  describe 'key' do
98
98
  it 'should be required' do
99
99
  expect { subject.delete }.to raise_exception(ArgumentError)
100
100
  end
101
101
  end
102
-
103
- it 'should remove the key from the datastore' do
104
- subject.read('key1').should_not eql(nil)
105
- subject.delete('key1')
106
- subject.read('key1').should be(nil)
102
+
103
+ context 'when the key exists' do
104
+ it 'should remove the key from the datastore' do
105
+ subject.read('key1').should_not eql(nil)
106
+ subject.delete('key1')
107
+ subject.read('key1').should be(nil)
108
+ end
109
+
110
+ it 'should return the value of the deleted key' do
111
+ keyval = subject.read('key1')
112
+ subject.delete('key1').should eql(keyval)
113
+ end
107
114
  end
108
115
 
109
- it 'should return the value of the deleted key if it exists' do
110
- keyval = subject.read('key1')
111
- subject.delete('key1').should eql(keyval)
116
+ context 'when the key does not exist' do
117
+ it 'should return nil' do
118
+ subject.delete('non_existent_key').should eql(nil)
119
+ end
112
120
  end
121
+ end
113
122
 
114
- it 'should return nil if the deleted key does not exist' do
115
- subject.delete('non_existent_key').should eql(nil)
123
+ describe '#all' do
124
+ it 'should return a hash of all the registered keys and their values' do
125
+ Excursion::Specs::Mocks::SIMPLE_VALUES.each do |k,v|
126
+ expect(subject.all[k.to_sym]).to eql(v)
127
+ end
116
128
  end
117
129
  end
118
130
 
@@ -13,6 +13,7 @@ describe 'Excursion::Datastores::Memcache' do
13
13
  Excursion::Specs::Mocks::SIMPLE_VALUES.each do |key,val|
14
14
  dc.set(key,val)
15
15
  end
16
+ dc.set(Excursion::Datastores::Memcache::REGISTERED_KEYS, Excursion::Specs::Mocks::SIMPLE_VALUES.keys.map(&:to_s).join(','))
16
17
  end
17
18
 
18
19
  subject do
@@ -94,26 +95,38 @@ describe 'Excursion::Datastores::Memcache' do
94
95
  end
95
96
  end
96
97
 
97
- context '#delete' do
98
+ describe '#delete' do
98
99
  describe 'key' do
99
100
  it 'should be required' do
100
101
  expect { subject.delete }.to raise_exception(ArgumentError)
101
102
  end
102
103
  end
103
104
 
104
- it 'should remove the key from the datastore' do
105
- subject.read('key1').should_not eql(nil)
106
- subject.delete('key1')
107
- subject.read('key1').should be(nil)
108
- end
105
+ context 'when the key exists' do
106
+ it 'should remove the key from the datastore' do
107
+ subject.read('key1').should_not eql(nil)
108
+ subject.delete('key1')
109
+ subject.read('key1').should be(nil)
110
+ end
109
111
 
110
- it 'should return the value of the deleted key if it exists' do
111
- keyval = subject.read('key1')
112
- subject.delete('key1').should eql(keyval)
112
+ it 'should return the value of the deleted key' do
113
+ keyval = subject.read('key1')
114
+ subject.delete('key1').should eql(keyval)
115
+ end
113
116
  end
114
117
 
115
- it 'should return nil if the deleted key does not exist' do
116
- subject.delete('non_existent_key').should eql(nil)
118
+ context 'when the key does not exist' do
119
+ it 'should return nil' do
120
+ subject.delete('non_existent_key').should eql(nil)
121
+ end
122
+ end
123
+ end
124
+
125
+ describe '#all' do
126
+ it 'should return a hash of all the registered keys and their values' do
127
+ Excursion::Specs::Mocks::SIMPLE_VALUES.each do |k,v|
128
+ expect(subject.all[k.to_sym]).to eql(v)
129
+ end
117
130
  end
118
131
  end
119
132
 
@@ -85,27 +85,38 @@ describe 'Excursion::Datastores::Test' do
85
85
  end
86
86
  end
87
87
 
88
- context '#delete' do
88
+ describe '#delete' do
89
89
  describe 'key' do
90
90
  it 'should be required' do
91
91
  expect { subject.delete }.to raise_exception(ArgumentError)
92
92
  end
93
93
  end
94
94
 
95
- it 'should remove the key from the datastore' do
96
- subject.write('key1', Excursion::Specs::Mocks::SIMPLE_VALUES['key1'])
97
- subject.read('key1').should eql(Excursion::Specs::Mocks::SIMPLE_VALUES['key1'])
98
- subject.delete('key1')
99
- subject.read('key1').should_not eql(Excursion::Specs::Mocks::SIMPLE_VALUES['key1'])
100
- end
95
+ context 'when the key exists' do
96
+ it 'should remove the key from the datastore' do
97
+ subject.write('key1', Excursion::Specs::Mocks::SIMPLE_VALUES['key1'])
98
+ subject.read('key1').should eql(Excursion::Specs::Mocks::SIMPLE_VALUES['key1'])
99
+ subject.delete('key1')
100
+ subject.read('key1').should_not eql(Excursion::Specs::Mocks::SIMPLE_VALUES['key1'])
101
+ end
101
102
 
102
- it 'should return the value of the deleted key if it exists' do
103
- keyval = subject.read('key1')
104
- subject.delete('key1').should eql(keyval)
103
+ it 'should return the value of the deleted' do
104
+ keyval = subject.read('key1')
105
+ subject.delete('key1').should eql(keyval)
106
+ end
105
107
  end
106
108
 
107
- it 'should return nil if the deleted key does not exist' do
108
- subject.delete('non_existent_key').should eql(nil)
109
+ context 'when the key does not exist' do
110
+ it 'should return nil' do
111
+ subject.delete('non_existent_key').should eql(nil)
112
+ end
113
+ end
114
+ end
115
+
116
+ describe '#all' do
117
+ it 'should return a hash of all the registered keys and their values' do
118
+ Excursion::Specs::Mocks::SIMPLE_VALUES.each { |k,v| subject.write(k.to_sym, v) }
119
+ Excursion::Specs::Mocks::SIMPLE_VALUES.each { |k,v| expect(subject.all[k.to_sym]).to eql(v) }
109
120
  end
110
121
  end
111
122
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: excursion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Rebec
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-24 00:00:00.000000000 Z
11
+ date: 2013-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -85,6 +85,7 @@ files:
85
85
  - lib/excursion/railtie.rb
86
86
  - lib/excursion/configuration.rb
87
87
  - lib/excursion/helpers/url_helper.rb
88
+ - lib/excursion/helpers/javascript_helper.rb
88
89
  - lib/excursion/helpers/application_helper.rb
89
90
  - lib/excursion/exceptions.rb
90
91
  - lib/excursion/datastores/datastore.rb
@@ -129,7 +130,6 @@ files:
129
130
  - spec/dummy/db/schema.rb
130
131
  - spec/dummy/config.ru
131
132
  - spec/dummy/README.rdoc
132
- - spec/dummy/log/development.log
133
133
  - spec/dummy/script/rails
134
134
  - spec/dummy/doc/README_FOR_APP
135
135
  - spec/dummy/app/views/layouts/application.html.erb
@@ -208,7 +208,6 @@ test_files:
208
208
  - spec/dummy/db/schema.rb
209
209
  - spec/dummy/config.ru
210
210
  - spec/dummy/README.rdoc
211
- - spec/dummy/log/development.log
212
211
  - spec/dummy/script/rails
213
212
  - spec/dummy/doc/README_FOR_APP
214
213
  - spec/dummy/app/views/layouts/application.html.erb