excursion 0.0.5 → 0.0.6

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: f3dfd7605be2886786008e1c04475bf20279c51d
4
- data.tar.gz: 5ff9b50daa9541d28268394c45dd3293d6e176f0
3
+ metadata.gz: 970c66c03bce9f7cc650641b90518f7b81d0c716
4
+ data.tar.gz: d63f0475015ad67d34e5ef75a84d12f1f723cc81
5
5
  SHA512:
6
- metadata.gz: 4b61c03942b8842cfe658091e496586977d9d2e8c6c2c7e8be428a90d684da786272983b0d780936172d8ad06f5bd8d9c1352b45313fc5750f7c4797184f6522
7
- data.tar.gz: e2945a3964b874db4877b02c4b66c9b7ab5d1134d6230568016f323e04f6b5e0d6ff3b82e426224aa6010b5f962ec6e0071d58cad46fb63076dc173e33d4d3fc
6
+ metadata.gz: 4922ab494d86409741c2229dc85a5cfd5ffa5696bfdb44545c08f74c646608ab40e9ba35b012c3329fd8c7d7c178cabd5253819ab34c48d50c81217fa32f11dd
7
+ data.tar.gz: e219ee026b5d0d6615869a72efb30a18a911c5de42e6a214fa42c1a630f17e1926858b1566e953b6bc339754b05939d9208912cb1fc2654f33007f9fda8add16
@@ -0,0 +1,47 @@
1
+ require 'excursion/datastores/datastore'
2
+ require 'excursion/exceptions/active_record'
3
+
4
+ module Excursion
5
+ module Datastores
6
+ class ActiveRecord < Datastore
7
+
8
+ def model_find(key)
9
+ return @model.find_by(key: key) if Excursion.rails4?
10
+ return @model.find_by_key(key) if Excursion.rails3?
11
+ end
12
+
13
+ def read(key)
14
+ model_find(key).value
15
+ rescue
16
+ nil
17
+ end
18
+ alias_method :get, :read
19
+
20
+ def write(key, value)
21
+ written = model_find(key)
22
+ if written.nil?
23
+ written = @model.create key: key, value: value
24
+ else
25
+ written.update value: value
26
+ end
27
+ written.value
28
+ end
29
+ alias_method :set, :write
30
+
31
+ def delete(key)
32
+ deleted = model_find(key)
33
+ return nil if deleted.nil?
34
+ deleted.destroy
35
+ deleted.value
36
+ end
37
+ alias_method :unset, :delete
38
+
39
+ protected
40
+
41
+ def initialize
42
+ @model = Excursion::RoutePool
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,40 @@
1
+ require 'excursion/datastores/active_record'
2
+ require 'excursion/datastores/memcache'
3
+
4
+ module Excursion
5
+ module Datastores
6
+ class ActiveRecordWithMemcache < Datastore
7
+
8
+ def read(key)
9
+ value = @cache.read(key)
10
+ return value unless value.nil?
11
+
12
+ value = @model.read(key)
13
+ @cache.write(key, value) unless value.nil?
14
+
15
+ value
16
+ end
17
+ alias_method :get, :read
18
+
19
+ def write(key, value)
20
+ @model.write(key, value)
21
+ @cache.write(key, value)
22
+ end
23
+ alias_method :set, :write
24
+
25
+ def delete(key)
26
+ @model.delete(key)
27
+ @cache.delete(key)
28
+ end
29
+ alias_method :unset, :delete
30
+
31
+ protected
32
+
33
+ def initialize(server)
34
+ @model = Excursion::Datastores::ActiveRecord.new
35
+ @cache = Excursion::Datastores::Memcache.new(server)
36
+ end
37
+
38
+ end
39
+ end
40
+ end
@@ -36,11 +36,11 @@ module Excursion
36
36
  end
37
37
 
38
38
  def exists?
39
- ::File.exists(@path)
39
+ ::File.exists?(@path)
40
40
  end
41
41
 
42
42
  def read_file
43
- YAML.load_file(@path) || {}
43
+ exists? ? YAML.load_file(@path) : {}
44
44
  rescue
45
45
  {}
46
46
  end
@@ -48,7 +48,7 @@ module Excursion
48
48
  def write_file(results)
49
49
  FileUtils.mkpath(::File.dirname(@path))
50
50
  ::File.open(@path, 'w') { |f| f.write(results.to_yaml)}
51
- rescue
51
+ rescue StandardError => e
52
52
  raise DatastoreConfigurationError, "Could not write to the excursion route pool file: #{@path}"
53
53
  end
54
54
  end
@@ -0,0 +1,4 @@
1
+ module Excursion
2
+ class ActiveRecordError < Error; end
3
+ class TableDoesNotExist < ActiveRecordError; end
4
+ end
@@ -9,9 +9,14 @@ module Excursion
9
9
 
10
10
  def method_missing(meth, *args)
11
11
  if meth.to_s.match(/\A(#{routes.collect { |name,route| name }.join("|")})_(url|path)\Z/)
12
- ActionDispatch::Routing::RouteSet::NamedRouteCollection::UrlHelper.create(routes.get($1.to_sym), @application.default_url_options).call(Rails.application.routes, args)
13
- # Playing with getting Rails3 working
14
- #ActionDispatch::Http::URL.url_for(@application.default_url_options.merge({path: replaced_path(routes.get($1.to_sym), args) }))
12
+ if Excursion.rails4?
13
+ ActionDispatch::Routing::RouteSet::NamedRouteCollection::UrlHelper.create(routes.get($1.to_sym), @application.default_url_options).call(Rails.application.routes, args)
14
+ elsif Excursion.rails3?
15
+ # Playing with getting Rails3 working
16
+ #mapping = ActionDispatch::Routing::Mapper::Mapping.new(routes, {}, routes.get($1.to_sym).path.spec.to_s.dup, {:controller => 'dummy', :action => 'dummy'})
17
+ #puts mapping.send(:instance_variable_get, :@path)
18
+ ActionDispatch::Http::URL.url_for(@application.default_url_options.merge({path: replaced_path(routes.get($1.to_sym), args)}))
19
+ end
15
20
  else
16
21
  super
17
22
  end
@@ -24,13 +29,16 @@ module Excursion
24
29
  end
25
30
 
26
31
  # Playing with getting Rails3 working
27
- #def replaced_path(route, args)
28
- # path = route.path.spec.to_s.dup
29
- # route.required_parts.zip(args) do |part, arg|
30
- # path.gsub!(/(\*|:)#{part}/, Journey::Router::Utils.escape_fragment(arg.to_param))
31
- # end
32
- # path
33
- #end
32
+ def replaced_path(route, args)
33
+ path = route.path.spec.to_s.dup # ActionDispatch::Routing::Mapper.normalize_path(route.path.spec.to_s.dup)
34
+
35
+ route.required_parts.zip(args) do |part, arg|
36
+ path.gsub!(/(\*|:)#{part}/, Journey::Router::Utils.escape_fragment(arg.to_param))
37
+ end
38
+
39
+ path.gsub!(/\(\.:format\)/, '') # This is really gross, and :format should actually be supported
40
+ path
41
+ end
34
42
  end
35
43
  end
36
44
  end
@@ -42,6 +42,13 @@ module Excursion
42
42
  when :memcache
43
43
  raise MemcacheConfigurationError, "You must configure the :memcache datastore with a memcache_server" if Excursion.configuration.memcache_server.nil?
44
44
  @@datastore ||= Excursion::Datastores::Memcache.new(Excursion.configuration.memcache_server)
45
+ when :active_record
46
+ raise TableDoesNotExist, "To use the :active_record datastore you must first run `rails generate excursion:active_record` followed by `rake db:migrate` to create the storage table" unless Excursion::RoutePool.table_exists?
47
+ @@datastore ||= Excursion::Datastores::ActiveRecord.new
48
+ when :active_record_with_memcache
49
+ raise MemcacheConfigurationError, "You must configure the :active_record_with_memcache datastore with a memcache_server" if Excursion.configuration.memcache_server.nil?
50
+ raise TableDoesNotExist, "To use the :active_record_with_memcache datastore you must first run `rails generate excursion:active_record` followed by `rake db:migrate` to create the storage table" unless Excursion::RoutePool.table_exists?
51
+ @@datastore ||= Excursion::Datastores::ActiveRecord.new(Excursion.configuration.memcache_server)
45
52
  end
46
53
  end
47
54
  end
@@ -1,7 +1,7 @@
1
1
  module Excursion
2
2
  class Railtie < Rails::Railtie
3
3
  config.after_initialize do |app|
4
- unless Excursion.configuration.register_app == false
4
+ 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?
5
5
  app.reload_routes!
6
6
  Excursion::Pool.register_application(app)
7
7
  end
@@ -0,0 +1,5 @@
1
+ class Excursion::RoutePool < ActiveRecord::Base
2
+ self.table_name = 'excursion_route_pool'
3
+ serialize :value
4
+ attr_accessible :key, :value if Excursion.rails3?
5
+ end
@@ -1,3 +1,3 @@
1
1
  module Excursion
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
data/lib/excursion.rb CHANGED
@@ -21,6 +21,7 @@ module Excursion
21
21
  end
22
22
  end
23
23
 
24
+ require 'excursion/route_pool'
24
25
  require 'excursion/pool'
25
26
  require 'excursion/helpers'
26
27
  require 'excursion/railtie'
@@ -0,0 +1,19 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/migration'
3
+ require 'rails/generators/active_record'
4
+
5
+ module Excursion
6
+ class ActiveRecordGenerator < ::Rails::Generators::Base
7
+ include ::Rails::Generators::Migration
8
+
9
+ self.source_paths << File.join(File.dirname(__FILE__), 'templates')
10
+
11
+ def create_migration_file
12
+ migration_template 'migration.rb', 'db/migrate/create_excursion_route_pool.rb'
13
+ end
14
+
15
+ def self.next_migration_number(dirname)
16
+ ::ActiveRecord::Generators::Base.next_migration_number dirname
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ class CreateExcursionRoutePool < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :excursion_route_pool, :force => true do |table|
4
+ table.string :key, :null => false
5
+ table.text :value, :null => false
6
+ end
7
+
8
+ add_index :excursion_route_pool, :key, :name => 'excursion_route_pool_key', :unique => true
9
+ end
10
+
11
+ def self.down
12
+ drop_table :excursion_route_pool
13
+ end
14
+ end
@@ -5,9 +5,7 @@ Dummy::Application.configure do
5
5
  # every request. This slows down response time but is perfect for development
6
6
  # since you don't have to restart the web server when you make code changes.
7
7
  config.cache_classes = false
8
-
9
- # Log error messages when you accidentally call methods on nil.
10
- config.whiny_nils = true
8
+ config.eager_load = false
11
9
 
12
10
  # Show full error reports and disable caching
13
11
  config.consider_all_requests_local = true
@@ -6,14 +6,12 @@ Dummy::Application.configure do
6
6
  # your test database is "scratch space" for the test suite and is wiped
7
7
  # and recreated between test runs. Don't rely on the data there!
8
8
  config.cache_classes = true
9
+ config.eager_load = false
9
10
 
10
11
  # Configure static asset server for tests with Cache-Control for performance
11
12
  config.serve_static_assets = true
12
13
  config.static_cache_control = "public, max-age=3600"
13
14
 
14
- # Log error messages when you accidentally call methods on nil
15
- config.whiny_nils = true
16
-
17
15
  # Show full error reports and disable caching
18
16
  config.consider_all_requests_local = true
19
17
  config.action_controller.perform_caching = false
Binary file
@@ -0,0 +1,14 @@
1
+ class CreateExcursionRoutePool < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :excursion_route_pool, :force => true do |table|
4
+ table.string :key, :null => false
5
+ table.text :value, :null => false
6
+ end
7
+
8
+ add_index :excursion_route_pool, :key, :name => 'excursion_route_pool_key', :unique => true
9
+ end
10
+
11
+ def self.down
12
+ drop_table :excursion_route_pool
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended that you check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(version: 20130618222840) do
15
+
16
+ create_table "excursion_route_pool", force: true do |t|
17
+ t.string "key", null: false
18
+ t.text "value", null: false
19
+ end
20
+
21
+ add_index "excursion_route_pool", ["key"], name: "excursion_route_pool_key", unique: true
22
+
23
+ end
File without changes