dusen 0.1.0
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 +8 -0
- data/README.md +4 -0
- data/Rakefile +32 -0
- data/dusen.gemspec +20 -0
- data/lib/dusen/active_record_ext.rb +29 -0
- data/lib/dusen/atom.rb +21 -0
- data/lib/dusen/description.rb +21 -0
- data/lib/dusen/parser.rb +32 -0
- data/lib/dusen/query.rb +23 -0
- data/lib/dusen/syntax.rb +42 -0
- data/lib/dusen/util.rb +34 -0
- data/lib/dusen/version.rb +3 -0
- data/lib/dusen.rb +10 -0
- data/spec/rails-2.3/Gemfile +9 -0
- data/spec/rails-2.3/Rakefile +11 -0
- data/spec/rails-2.3/app_root/config/boot.rb +128 -0
- data/spec/rails-2.3/app_root/config/database.yml +21 -0
- data/spec/rails-2.3/app_root/config/environment.rb +14 -0
- data/spec/rails-2.3/app_root/config/environments/in_memory.rb +0 -0
- data/spec/rails-2.3/app_root/config/environments/mysql.rb +0 -0
- data/spec/rails-2.3/app_root/config/environments/postgresql.rb +0 -0
- data/spec/rails-2.3/app_root/config/environments/sqlite.rb +0 -0
- data/spec/rails-2.3/app_root/config/environments/sqlite3.rb +0 -0
- data/spec/rails-2.3/app_root/config/preinitializer.rb +20 -0
- data/spec/rails-2.3/app_root/config/routes.rb +13 -0
- data/spec/rails-2.3/app_root/log/.gitignore +1 -0
- data/spec/rails-2.3/rcov.opts +2 -0
- data/spec/rails-2.3/spec.opts +4 -0
- data/spec/rails-2.3/spec_helper.rb +24 -0
- data/spec/rails-3.0/.rspec +2 -0
- data/spec/rails-3.0/Gemfile +9 -0
- data/spec/rails-3.0/Rakefile +11 -0
- data/spec/rails-3.0/app_root/.gitignore +4 -0
- data/spec/rails-3.0/app_root/config/application.rb +31 -0
- data/spec/rails-3.0/app_root/config/boot.rb +13 -0
- data/spec/rails-3.0/app_root/config/database.yml +4 -0
- data/spec/rails-3.0/app_root/config/environment.rb +5 -0
- data/spec/rails-3.0/app_root/config/environments/test.rb +35 -0
- data/spec/rails-3.0/app_root/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rails-3.0/app_root/config/initializers/inflections.rb +10 -0
- data/spec/rails-3.0/app_root/config/initializers/mime_types.rb +5 -0
- data/spec/rails-3.0/app_root/config/initializers/secret_token.rb +7 -0
- data/spec/rails-3.0/app_root/config/initializers/session_store.rb +8 -0
- data/spec/rails-3.0/app_root/config/routes.rb +3 -0
- data/spec/rails-3.0/app_root/lib/tasks/.gitkeep +0 -0
- data/spec/rails-3.0/app_root/log/.gitkeep +0 -0
- data/spec/rails-3.0/app_root/script/rails +6 -0
- data/spec/rails-3.0/rcov.opts +2 -0
- data/spec/rails-3.0/spec_helper.rb +21 -0
- data/spec/rails-3.2/.rspec +2 -0
- data/spec/rails-3.2/Gemfile +11 -0
- data/spec/rails-3.2/Rakefile +11 -0
- data/spec/rails-3.2/app_root/.gitignore +4 -0
- data/spec/rails-3.2/app_root/config/application.rb +31 -0
- data/spec/rails-3.2/app_root/config/boot.rb +13 -0
- data/spec/rails-3.2/app_root/config/database.yml +4 -0
- data/spec/rails-3.2/app_root/config/environment.rb +5 -0
- data/spec/rails-3.2/app_root/config/environments/test.rb +35 -0
- data/spec/rails-3.2/app_root/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rails-3.2/app_root/config/initializers/inflections.rb +10 -0
- data/spec/rails-3.2/app_root/config/initializers/mime_types.rb +5 -0
- data/spec/rails-3.2/app_root/config/initializers/secret_token.rb +7 -0
- data/spec/rails-3.2/app_root/config/initializers/session_store.rb +8 -0
- data/spec/rails-3.2/app_root/config/routes.rb +3 -0
- data/spec/rails-3.2/app_root/log/.gitignore +1 -0
- data/spec/rails-3.2/rcov.opts +2 -0
- data/spec/rails-3.2/spec_helper.rb +26 -0
- data/spec/shared/app_root/app/controllers/application_controller.rb +3 -0
- data/spec/shared/app_root/app/models/user.rb +20 -0
- data/spec/shared/app_root/db/gem_test.db +0 -0
- data/spec/shared/app_root/db/migrate/001_create_users.rb +15 -0
- data/spec/shared/dusen/active_record_spec.rb +45 -0
- metadata +151 -0
data/.gitignore
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
|
4
|
+
desc 'Default: Run all specs.'
|
5
|
+
task :default => 'all:spec'
|
6
|
+
|
7
|
+
namespace :all do
|
8
|
+
|
9
|
+
desc "Run specs on all spec apps"
|
10
|
+
task :spec do
|
11
|
+
for_each_directory_of('spec/**/Rakefile') do |directory|
|
12
|
+
env = "SPEC=../../#{ENV['SPEC']} " if ENV['SPEC']
|
13
|
+
system("cd #{directory} && #{env} bundle exec rake spec")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Bundle all spec apps"
|
18
|
+
task :bundle do
|
19
|
+
for_each_directory_of('spec/**/Gemfile') do |directory|
|
20
|
+
system("cd #{directory} && bundle install")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
def for_each_directory_of(path, &block)
|
27
|
+
Dir[path].sort.each do |rakefile|
|
28
|
+
directory = File.dirname(rakefile)
|
29
|
+
puts '', "\033[44m#{directory}\033[0m", ''
|
30
|
+
block.call(directory)
|
31
|
+
end
|
32
|
+
end
|
data/dusen.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
require "dusen/version"
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = 'dusen'
|
6
|
+
s.version = Dusen::VERSION
|
7
|
+
s.authors = ["Henning Koch"]
|
8
|
+
s.email = 'henning.koch@makandra.de'
|
9
|
+
s.homepage = 'https://github.com/makandra/dusen'
|
10
|
+
s.summary = 'Maps Google-like queries (words, "phrases", qualified:fields) to ActiveRecord scope chains'
|
11
|
+
s.description = s.summary
|
12
|
+
|
13
|
+
s.files = `git ls-files`.split("\n")
|
14
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
|
18
|
+
s.add_dependency('rails')
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Dusen
|
2
|
+
module ActiveRecord
|
3
|
+
|
4
|
+
def search_syntax(&dsl)
|
5
|
+
@dusen_syntax = Dusen::Description.read_syntax(&dsl)
|
6
|
+
singleton_class.send(:define_method, :search) do |query_string|
|
7
|
+
@dusen_syntax.search(self, query_string)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def where_like(conditions)
|
12
|
+
scope = self
|
13
|
+
conditions.each do |field_or_fields, query|
|
14
|
+
fields = Array(field_or_fields).collect do |field|
|
15
|
+
Util.qualify_column_name(scope, field)
|
16
|
+
end
|
17
|
+
query_with_placeholders = fields.collect { |field| "#{field} LIKE ?" }.join(' OR ')
|
18
|
+
like_expression = Dusen::Util.like_expression(query)
|
19
|
+
bindings = [like_expression] * fields.size
|
20
|
+
conditions = [ query_with_placeholders, *bindings ]
|
21
|
+
scope = Util.append_scope_conditions(scope, conditions)
|
22
|
+
end
|
23
|
+
scope
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
ActiveRecord::Base.send(:extend, Dusen::ActiveRecord)
|
data/lib/dusen/atom.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Dusen
|
2
|
+
class Atom
|
3
|
+
|
4
|
+
attr_reader :field, :value
|
5
|
+
|
6
|
+
def initialize(*args)
|
7
|
+
if args.length == 2
|
8
|
+
@field, @value = args
|
9
|
+
else
|
10
|
+
@field = 'text'
|
11
|
+
@value = args.first
|
12
|
+
end
|
13
|
+
@field = @field.to_s
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_s
|
17
|
+
value
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Dusen
|
2
|
+
class Description
|
3
|
+
|
4
|
+
attr_reader :syntax
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@syntax = Syntax.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def search_by(field, &scoper)
|
11
|
+
@syntax.learn_field(field, &scoper)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.read_syntax(&dsl)
|
15
|
+
description = new
|
16
|
+
description.instance_eval(&dsl)
|
17
|
+
description.syntax
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
data/lib/dusen/parser.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
module Dusen
|
2
|
+
class Parser
|
3
|
+
|
4
|
+
WESTERNISH_WORD_CHARACTER = '\\w\\-\\.@_ÄÖÜäöüß' # this is wrong on so many levels
|
5
|
+
TEXT_QUERY = /(?:"([^"]+)"|([#{WESTERNISH_WORD_CHARACTER}]+))/
|
6
|
+
FIELD_QUERY = /(\w+)\:#{TEXT_QUERY}/
|
7
|
+
|
8
|
+
def self.parse(query_string)
|
9
|
+
query_string = query_string.dup # we are going to delete substrings in-place
|
10
|
+
query = Query.new
|
11
|
+
extract_field_query_atoms(query_string, query)
|
12
|
+
extract_text_query_atoms(query_string, query)
|
13
|
+
query
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.extract_text_query_atoms(query_string, query)
|
17
|
+
while query_string.sub!(TEXT_QUERY, '')
|
18
|
+
value = "#{$1}#{$2}"
|
19
|
+
query << Atom.new(value)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.extract_field_query_atoms(query_string, query)
|
24
|
+
while query_string.sub!(FIELD_QUERY, '')
|
25
|
+
field = $1
|
26
|
+
value = "#{$2}#{$3}"
|
27
|
+
query << Atom.new(field, value)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
data/lib/dusen/query.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Dusen
|
2
|
+
class Query
|
3
|
+
|
4
|
+
include Enumerable
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@atoms = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def <<(atom)
|
11
|
+
@atoms << atom
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
collect(&:to_s).join(" + ")
|
16
|
+
end
|
17
|
+
|
18
|
+
def each(&block)
|
19
|
+
@atoms.each(&block)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
data/lib/dusen/syntax.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module Dusen
|
2
|
+
class Syntax
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
@scopers = {}
|
6
|
+
end
|
7
|
+
|
8
|
+
def learn_field(field, &scoper)
|
9
|
+
field = field.to_s
|
10
|
+
@scopers[field] = scoper
|
11
|
+
end
|
12
|
+
|
13
|
+
def learn_unknown_field(&unknown_scoper)
|
14
|
+
@unknown_scoper = unknown_scoper
|
15
|
+
end
|
16
|
+
|
17
|
+
def search(root_scope, query)
|
18
|
+
scope = root_scope
|
19
|
+
query = parse(query) if query.is_a?(String)
|
20
|
+
query.each do |atom|
|
21
|
+
scoper = @scopers[atom.field] || unknown_scoper
|
22
|
+
scope = scoper.call(scope, atom.value)
|
23
|
+
end
|
24
|
+
scope
|
25
|
+
end
|
26
|
+
|
27
|
+
def parse(query)
|
28
|
+
Parser.parse(query)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
DEFAULT_UNKNOWN_SCOPER = lambda do |scope, *args|
|
34
|
+
scope.where('1=2')
|
35
|
+
end
|
36
|
+
|
37
|
+
def unknown_scoper
|
38
|
+
@unknown_scoper || DEFAULT_UNKNOWN_SCOPER
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
data/lib/dusen/util.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
module Dusen
|
2
|
+
module Util
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def like_expression(phrase)
|
6
|
+
"%#{escape_for_like_query(phrase)}%"
|
7
|
+
end
|
8
|
+
|
9
|
+
def escape_for_like_query(phrase)
|
10
|
+
phrase.gsub("%", "\\%").gsub("_", "\\_")
|
11
|
+
end
|
12
|
+
|
13
|
+
def qualify_column_name(model, column_name)
|
14
|
+
column_name = column_name.to_s
|
15
|
+
unless column_name.include?('.')
|
16
|
+
quoted_table_name = model.connection.quote_table_name(model.table_name)
|
17
|
+
quoted_column_name = model.connection.quote_column_name(column_name)
|
18
|
+
column_name = "#{quoted_table_name}.#{quoted_column_name}"
|
19
|
+
end
|
20
|
+
column_name
|
21
|
+
end
|
22
|
+
|
23
|
+
def append_scope_conditions(scope, conditions)
|
24
|
+
if scope.respond_to?(:where)
|
25
|
+
# Rails 3
|
26
|
+
scope.where(conditions)
|
27
|
+
else
|
28
|
+
# Rails 2
|
29
|
+
scope.scoped(:conditions => conditions)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
data/lib/dusen.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'spec/rake/spectask'
|
3
|
+
|
4
|
+
desc 'Default: Run all specs for a specific rails version.'
|
5
|
+
task :default => :spec
|
6
|
+
|
7
|
+
desc "Run all specs for a specific rails version"
|
8
|
+
Spec::Rake::SpecTask.new() do |t|
|
9
|
+
t.spec_opts = ['--options', "\"spec.opts\""]
|
10
|
+
t.spec_files = defined?(SPEC) ? SPEC : FileList['**/*_spec.rb', '../shared/**/*_spec.rb']
|
11
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
# Allow customization of the rails framework path
|
2
|
+
RAILS_FRAMEWORK_ROOT = (ENV['RAILS_FRAMEWORK_ROOT'] || "#{File.dirname(__FILE__)}/../../../../../../vendor/rails") unless defined?(RAILS_FRAMEWORK_ROOT)
|
3
|
+
|
4
|
+
# Don't change this file!
|
5
|
+
# Configure your app in config/environment.rb and config/environments/*.rb
|
6
|
+
|
7
|
+
RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
|
8
|
+
|
9
|
+
module Rails
|
10
|
+
class << self
|
11
|
+
def boot!
|
12
|
+
unless booted?
|
13
|
+
preinitialize
|
14
|
+
pick_boot.run
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def booted?
|
19
|
+
defined? Rails::Initializer
|
20
|
+
end
|
21
|
+
|
22
|
+
def pick_boot
|
23
|
+
(vendor_rails? ? VendorBoot : GemBoot).new
|
24
|
+
end
|
25
|
+
|
26
|
+
def vendor_rails?
|
27
|
+
File.exist?(RAILS_FRAMEWORK_ROOT)
|
28
|
+
end
|
29
|
+
|
30
|
+
def preinitialize
|
31
|
+
load(preinitializer_path) if File.exist?(preinitializer_path)
|
32
|
+
end
|
33
|
+
|
34
|
+
def preinitializer_path
|
35
|
+
"#{RAILS_ROOT}/config/preinitializer.rb"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class Boot
|
40
|
+
def run
|
41
|
+
load_initializer
|
42
|
+
Rails::Initializer.run(:set_load_path)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class VendorBoot < Boot
|
47
|
+
def load_initializer
|
48
|
+
require "#{RAILS_FRAMEWORK_ROOT}/railties/lib/initializer"
|
49
|
+
Rails::Initializer.run(:install_gem_spec_stubs)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class GemBoot < Boot
|
54
|
+
def load_initializer
|
55
|
+
self.class.load_rubygems
|
56
|
+
load_rails_gem
|
57
|
+
require 'initializer'
|
58
|
+
end
|
59
|
+
|
60
|
+
def load_rails_gem
|
61
|
+
if version = self.class.gem_version
|
62
|
+
gem 'rails', version
|
63
|
+
else
|
64
|
+
gem 'rails'
|
65
|
+
end
|
66
|
+
rescue Gem::LoadError => load_error
|
67
|
+
$stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
|
68
|
+
exit 1
|
69
|
+
end
|
70
|
+
|
71
|
+
class << self
|
72
|
+
def rubygems_version
|
73
|
+
Gem::RubyGemsVersion rescue nil
|
74
|
+
end
|
75
|
+
|
76
|
+
def gem_version
|
77
|
+
if defined? RAILS_GEM_VERSION
|
78
|
+
RAILS_GEM_VERSION
|
79
|
+
elsif ENV.include?('RAILS_GEM_VERSION')
|
80
|
+
ENV['RAILS_GEM_VERSION']
|
81
|
+
else
|
82
|
+
parse_gem_version(read_environment_rb)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def load_rubygems
|
87
|
+
require 'rubygems'
|
88
|
+
min_version = '1.1.1'
|
89
|
+
unless rubygems_version >= min_version
|
90
|
+
$stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
|
91
|
+
exit 1
|
92
|
+
end
|
93
|
+
|
94
|
+
rescue LoadError
|
95
|
+
$stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org)
|
96
|
+
exit 1
|
97
|
+
end
|
98
|
+
|
99
|
+
def parse_gem_version(text)
|
100
|
+
$1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
def read_environment_rb
|
105
|
+
environment_rb = "#{RAILS_ROOT}/config/environment.rb"
|
106
|
+
environment_rb = "#{HELPER_RAILS_ROOT}/config/environment.rb" unless File.exists?(environment_rb)
|
107
|
+
File.read(environment_rb)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
class Rails::Boot
|
114
|
+
def run
|
115
|
+
load_initializer
|
116
|
+
|
117
|
+
Rails::Initializer.class_eval do
|
118
|
+
def load_gems
|
119
|
+
@bundler_loaded ||= Bundler.require :default, Rails.env
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
Rails::Initializer.run(:set_load_path)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# All that for this:
|
128
|
+
Rails.boot!
|
@@ -0,0 +1,21 @@
|
|
1
|
+
in_memory:
|
2
|
+
adapter: sqlite3
|
3
|
+
database: ":memory:"
|
4
|
+
verbosity: quiet
|
5
|
+
sqlite:
|
6
|
+
adapter: sqlite
|
7
|
+
dbfile: plugin_test.sqlite.db
|
8
|
+
sqlite3:
|
9
|
+
adapter: sqlite3
|
10
|
+
dbfile: plugin_test.sqlite3.db
|
11
|
+
postgresql:
|
12
|
+
adapter: postgresql
|
13
|
+
username: postgres
|
14
|
+
password: postgres
|
15
|
+
database: plugin_test
|
16
|
+
mysql:
|
17
|
+
adapter: mysql
|
18
|
+
host: localhost
|
19
|
+
username: root
|
20
|
+
password:
|
21
|
+
database: plugin_test
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'boot')
|
2
|
+
|
3
|
+
Rails::Initializer.run do |config|
|
4
|
+
config.cache_classes = false
|
5
|
+
config.whiny_nils = true
|
6
|
+
config.action_controller.session = { :key => "_myapp_session", :secret => "gwirofjweroijger8924rt2zfwehfuiwehb1378rifowenfoqwphf23" }
|
7
|
+
config.plugin_locators.unshift(
|
8
|
+
Class.new(Rails::Plugin::Locator) do
|
9
|
+
def plugins
|
10
|
+
[Rails::Plugin.new(File.expand_path('.'))]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
) unless defined?(PluginTestHelper::PluginLocator)
|
14
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,20 @@
|
|
1
|
+
begin
|
2
|
+
require "rubygems"
|
3
|
+
require "bundler"
|
4
|
+
rescue LoadError
|
5
|
+
raise "Could not load the bundler gem. Install it with `gem install bundler`."
|
6
|
+
end
|
7
|
+
|
8
|
+
if Gem::Version.new(Bundler::VERSION) <= Gem::Version.new("0.9.24")
|
9
|
+
raise RuntimeError, "Your bundler version is too old for Rails 2.3." +
|
10
|
+
"Run `gem install bundler` to upgrade."
|
11
|
+
end
|
12
|
+
|
13
|
+
begin
|
14
|
+
# Set up load paths for all bundled gems
|
15
|
+
ENV["BUNDLE_GEMFILE"] = File.expand_path("../../Gemfile", __FILE__)
|
16
|
+
Bundler.setup
|
17
|
+
rescue Bundler::GemNotFound
|
18
|
+
raise RuntimeError, "Bundler couldn't find some gems." +
|
19
|
+
"Did you run `bundle install`?"
|
20
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
ActionController::Routing::Routes.draw do |map|
|
2
|
+
|
3
|
+
map.resource :dashboard, :member => { :error => :post }
|
4
|
+
|
5
|
+
map.resources :songs
|
6
|
+
|
7
|
+
map.resources :users
|
8
|
+
|
9
|
+
map.resources :risks
|
10
|
+
|
11
|
+
map.resources :cakes, :member => { :custom_action => :get }
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
*.log
|
@@ -0,0 +1,24 @@
|
|
1
|
+
$: << File.join(File.dirname(__FILE__), "/../lib" )
|
2
|
+
|
3
|
+
# Set the default environment to sqlite3's in_memory database
|
4
|
+
ENV['RAILS_ENV'] ||= 'in_memory'
|
5
|
+
|
6
|
+
# Load the Rails environment and testing framework
|
7
|
+
require "#{File.dirname(__FILE__)}/app_root/config/environment"
|
8
|
+
require 'spec/rails'
|
9
|
+
|
10
|
+
# Undo changes to RAILS_ENV
|
11
|
+
silence_warnings {RAILS_ENV = ENV['RAILS_ENV']}
|
12
|
+
|
13
|
+
# Requires supporting files with custom matchers and macros, etc in ./support/ and its subdirectories.
|
14
|
+
Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
|
15
|
+
|
16
|
+
# Run the migrations
|
17
|
+
print "\033[30m" # dark gray text
|
18
|
+
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
|
19
|
+
print "\033[0m"
|
20
|
+
|
21
|
+
Spec::Runner.configure do |config|
|
22
|
+
config.use_transactional_fixtures = true
|
23
|
+
config.use_instantiated_fixtures = false
|
24
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
desc 'Default: Run all specs for a specific rails version.'
|
5
|
+
task :default => :spec
|
6
|
+
|
7
|
+
desc "Run all specs for a specific rails version"
|
8
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
9
|
+
t.pattern = defined?(SPEC) ? SPEC : ['**/*_spec.rb', '../shared/**/*_spec.rb']
|
10
|
+
t.verbose = false
|
11
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path('../boot', __FILE__)
|
2
|
+
|
3
|
+
require 'rails/all'
|
4
|
+
|
5
|
+
# If you have a Gemfile, require the gems listed there, including any gems
|
6
|
+
# you've limited to :test, :development, or :production.
|
7
|
+
Bundler.require(:default, Rails.env) if defined?(Bundler)
|
8
|
+
|
9
|
+
module SpecApp
|
10
|
+
class Application < Rails::Application
|
11
|
+
config.encoding = "utf-8"
|
12
|
+
|
13
|
+
config.cache_classes = true
|
14
|
+
config.whiny_nils = true
|
15
|
+
|
16
|
+
config.consider_all_requests_local = true
|
17
|
+
config.action_controller.perform_caching = false
|
18
|
+
|
19
|
+
config.action_dispatch.show_exceptions = false
|
20
|
+
|
21
|
+
config.action_controller.allow_forgery_protection = false
|
22
|
+
|
23
|
+
config.action_mailer.delivery_method = :test
|
24
|
+
|
25
|
+
config.active_support.deprecation = :stderr
|
26
|
+
|
27
|
+
config.root = File.expand_path('../..', __FILE__)
|
28
|
+
|
29
|
+
# railties.plugins << Rails::Plugin.new(File.expand_path('../../../../..', __FILE__))
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
# Set up gems listed in the Gemfile.
|
4
|
+
gemfile = File.expand_path('../../Gemfile', __FILE__)
|
5
|
+
begin
|
6
|
+
ENV['BUNDLE_GEMFILE'] = gemfile
|
7
|
+
require 'bundler'
|
8
|
+
Bundler.setup
|
9
|
+
rescue Bundler::GemNotFound => e
|
10
|
+
STDERR.puts e.message
|
11
|
+
STDERR.puts "Try running `bundle install`."
|
12
|
+
exit!
|
13
|
+
end if File.exist?(gemfile)
|