excursion 0.0.11 → 0.0.12

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 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