qwirk 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.
Files changed (154) hide show
  1. data/History.md +7 -0
  2. data/LICENSE.txt +201 -0
  3. data/README.md +180 -0
  4. data/Rakefile +34 -0
  5. data/examples/README +1 -0
  6. data/examples/activemq.xml +84 -0
  7. data/examples/advanced_requestor/README.md +15 -0
  8. data/examples/advanced_requestor/base_request_worker.rb +18 -0
  9. data/examples/advanced_requestor/char_count_worker.rb +16 -0
  10. data/examples/advanced_requestor/config.ru +24 -0
  11. data/examples/advanced_requestor/exception_raiser_worker.rb +17 -0
  12. data/examples/advanced_requestor/length_worker.rb +14 -0
  13. data/examples/advanced_requestor/print_worker.rb +14 -0
  14. data/examples/advanced_requestor/publisher.rb +49 -0
  15. data/examples/advanced_requestor/qwirk.yml +16 -0
  16. data/examples/advanced_requestor/reverse_worker.rb +14 -0
  17. data/examples/advanced_requestor/triple_worker.rb +14 -0
  18. data/examples/batch/my_batch_worker.rb +30 -0
  19. data/examples/batch/my_line_worker.rb +8 -0
  20. data/examples/qwirk.yml +20 -0
  21. data/examples/requestor/README.md +13 -0
  22. data/examples/requestor/config.ru +13 -0
  23. data/examples/requestor/qwirk_persist.yml +5 -0
  24. data/examples/requestor/requestor.rb +68 -0
  25. data/examples/requestor/reverse_echo_worker.rb +15 -0
  26. data/examples/setup.rb +13 -0
  27. data/examples/shared/README.md +24 -0
  28. data/examples/shared/config.ru +13 -0
  29. data/examples/shared/publisher.rb +49 -0
  30. data/examples/shared/qwirk_persist.yml +5 -0
  31. data/examples/shared/shared_worker.rb +16 -0
  32. data/examples/simple/README +53 -0
  33. data/examples/simple/bar_worker.rb +10 -0
  34. data/examples/simple/baz_worker.rb +10 -0
  35. data/examples/simple/config.ru +14 -0
  36. data/examples/simple/publisher.rb +49 -0
  37. data/examples/simple/qwirk_persist.yml +4 -0
  38. data/examples/simple/tmp/kahadb/db-1.log +0 -0
  39. data/examples/simple/tmp/kahadb/db.data +0 -0
  40. data/examples/simple/tmp/kahadb/db.redo +0 -0
  41. data/examples/task/README +47 -0
  42. data/examples/task/config.ru +14 -0
  43. data/examples/task/foo_worker.rb +10 -0
  44. data/examples/task/messages.out +1000 -0
  45. data/examples/task/publisher.rb +25 -0
  46. data/examples/task/qwirk_persist.yml +5 -0
  47. data/examples/task/task.rb +36 -0
  48. data/lib/qwirk.rb +63 -0
  49. data/lib/qwirk/adapter.rb +45 -0
  50. data/lib/qwirk/base_worker.rb +96 -0
  51. data/lib/qwirk/batch.rb +4 -0
  52. data/lib/qwirk/batch/acquire_file_strategy.rb +47 -0
  53. data/lib/qwirk/batch/active_record.rb +3 -0
  54. data/lib/qwirk/batch/active_record/batch_job.rb +111 -0
  55. data/lib/qwirk/batch/active_record/failed_record.rb +5 -0
  56. data/lib/qwirk/batch/active_record/outstanding_record.rb +6 -0
  57. data/lib/qwirk/batch/file_status_strategy.rb +86 -0
  58. data/lib/qwirk/batch/file_worker.rb +228 -0
  59. data/lib/qwirk/batch/job_status.rb +29 -0
  60. data/lib/qwirk/batch/parse_file_strategy.rb +48 -0
  61. data/lib/qwirk/engine.rb +9 -0
  62. data/lib/qwirk/loggable.rb +23 -0
  63. data/lib/qwirk/manager.rb +140 -0
  64. data/lib/qwirk/marshal_strategy.rb +74 -0
  65. data/lib/qwirk/marshal_strategy/bson.rb +37 -0
  66. data/lib/qwirk/marshal_strategy/json.rb +37 -0
  67. data/lib/qwirk/marshal_strategy/none.rb +26 -0
  68. data/lib/qwirk/marshal_strategy/ruby.rb +26 -0
  69. data/lib/qwirk/marshal_strategy/string.rb +25 -0
  70. data/lib/qwirk/marshal_strategy/yaml.rb +25 -0
  71. data/lib/qwirk/publish_handle.rb +170 -0
  72. data/lib/qwirk/publisher.rb +67 -0
  73. data/lib/qwirk/queue_adapter.rb +3 -0
  74. data/lib/qwirk/queue_adapter/active_mq.rb +13 -0
  75. data/lib/qwirk/queue_adapter/active_mq/publisher.rb +12 -0
  76. data/lib/qwirk/queue_adapter/active_mq/worker_config.rb +16 -0
  77. data/lib/qwirk/queue_adapter/in_mem.rb +7 -0
  78. data/lib/qwirk/queue_adapter/in_mem/factory.rb +45 -0
  79. data/lib/qwirk/queue_adapter/in_mem/publisher.rb +98 -0
  80. data/lib/qwirk/queue_adapter/in_mem/queue.rb +88 -0
  81. data/lib/qwirk/queue_adapter/in_mem/reply_queue.rb +56 -0
  82. data/lib/qwirk/queue_adapter/in_mem/topic.rb +48 -0
  83. data/lib/qwirk/queue_adapter/in_mem/worker.rb +63 -0
  84. data/lib/qwirk/queue_adapter/in_mem/worker_config.rb +59 -0
  85. data/lib/qwirk/queue_adapter/jms.rb +50 -0
  86. data/lib/qwirk/queue_adapter/jms/connection.rb +42 -0
  87. data/lib/qwirk/queue_adapter/jms/consumer.rb +37 -0
  88. data/lib/qwirk/queue_adapter/jms/publisher.rb +126 -0
  89. data/lib/qwirk/queue_adapter/jms/worker.rb +89 -0
  90. data/lib/qwirk/queue_adapter/jms/worker_config.rb +38 -0
  91. data/lib/qwirk/remote_exception.rb +42 -0
  92. data/lib/qwirk/request_worker.rb +62 -0
  93. data/lib/qwirk/task.rb +177 -0
  94. data/lib/qwirk/task.rb.sav +194 -0
  95. data/lib/qwirk/version.rb +3 -0
  96. data/lib/qwirk/worker.rb +222 -0
  97. data/lib/qwirk/worker_config.rb +187 -0
  98. data/lib/rails/generators/qwirk/qwirk_generator.rb +82 -0
  99. data/lib/rails/generators/qwirk/templates/initializer.rb +6 -0
  100. data/lib/rails/generators/qwirk/templates/migration.rb +9 -0
  101. data/lib/rails/generators/qwirk/templates/schema.rb +28 -0
  102. data/lib/rails/railties/tasks.rake +8 -0
  103. data/lib/tasks/qwirk_tasks.rake +4 -0
  104. data/test/base_test.rb +248 -0
  105. data/test/database.yml +14 -0
  106. data/test/dummy/Rakefile +7 -0
  107. data/test/dummy/app/controllers/application_controller.rb +3 -0
  108. data/test/dummy/app/helpers/application_helper.rb +2 -0
  109. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  110. data/test/dummy/config.ru +4 -0
  111. data/test/dummy/config/application.rb +45 -0
  112. data/test/dummy/config/boot.rb +10 -0
  113. data/test/dummy/config/database.yml +22 -0
  114. data/test/dummy/config/environment.rb +5 -0
  115. data/test/dummy/config/environments/development.rb +26 -0
  116. data/test/dummy/config/environments/production.rb +49 -0
  117. data/test/dummy/config/environments/test.rb +35 -0
  118. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  119. data/test/dummy/config/initializers/inflections.rb +10 -0
  120. data/test/dummy/config/initializers/mime_types.rb +5 -0
  121. data/test/dummy/config/initializers/secret_token.rb +7 -0
  122. data/test/dummy/config/initializers/session_store.rb +8 -0
  123. data/test/dummy/config/locales/en.yml +5 -0
  124. data/test/dummy/config/routes.rb +58 -0
  125. data/test/dummy/log/development.log +0 -0
  126. data/test/dummy/log/production.log +0 -0
  127. data/test/dummy/log/server.log +0 -0
  128. data/test/dummy/log/test.log +0 -0
  129. data/test/dummy/public/404.html +26 -0
  130. data/test/dummy/public/422.html +26 -0
  131. data/test/dummy/public/500.html +26 -0
  132. data/test/dummy/public/favicon.ico +0 -0
  133. data/test/dummy/public/javascripts/application.js +2 -0
  134. data/test/dummy/public/javascripts/controls.js +965 -0
  135. data/test/dummy/public/javascripts/dragdrop.js +974 -0
  136. data/test/dummy/public/javascripts/effects.js +1123 -0
  137. data/test/dummy/public/javascripts/prototype.js +6001 -0
  138. data/test/dummy/public/javascripts/rails.js +191 -0
  139. data/test/dummy/script/rails +6 -0
  140. data/test/integration/navigation_test.rb +7 -0
  141. data/test/jms.yml +9 -0
  142. data/test/jms_fail_test.rb +149 -0
  143. data/test/jms_requestor_block_test.rb +278 -0
  144. data/test/jms_requestor_test.rb +238 -0
  145. data/test/jms_test.rb +287 -0
  146. data/test/marshal_strategy_test.rb +62 -0
  147. data/test/support/integration_case.rb +5 -0
  148. data/test/test_helper.rb +7 -0
  149. data/test/test_helper.rbold +22 -0
  150. data/test/test_helper_active_record.rb +61 -0
  151. data/test/unit/qwirk/batch/acquire_file_strategy_test.rb +101 -0
  152. data/test/unit/qwirk/batch/active_record/batch_job_test.rb +35 -0
  153. data/test/unit/qwirk/batch/parse_file_strategy_test.rb +49 -0
  154. metadata +366 -0
@@ -0,0 +1,6 @@
1
+ module Cheese
2
+ class Engine < Rails::Engine
3
+ config.mount_at = '/qwirk'
4
+ config.widget_factory_name = 'Qwirk'
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ class CreateCheeseTables < ActiveRecord::Migration
2
+ def self.up
3
+ SCHEMA_AUTO_INSERTED_HERE
4
+ end
5
+
6
+ def self.down
7
+ drop_table :cheese_widgets
8
+ end
9
+ end
@@ -0,0 +1,28 @@
1
+ ActiveRecord::Schema.define(:version => 0) do
2
+
3
+ create_table :mt_batch_jobs, :force => true do |t|
4
+ t.string :file, :null => false
5
+ t.string :worker_name, :null => false
6
+ t.integer :total_count
7
+ t.integer :finished_count, :null => false, :default => 0
8
+ t.column :status, 'char(8)', :null => false, :default => Qwirk::Batch::JobStatus::INITED
9
+ t.datetime :created_at, :null => false
10
+ t.datetime :updated_at, :null => false
11
+ end
12
+ add_index :mt_batch_jobs, [:file, :worker_name]
13
+
14
+ create_table :mt_outstanding_records, :force => true do |t|
15
+ t.integer :batch_job_id, :null => false
16
+ t.integer :file_position, :null => false
17
+ end
18
+ add_index :mt_outstanding_records, [:batch_job_id]
19
+
20
+ create_table :mt_failed_records, :force => true do |t|
21
+ t.integer :batch_job_id, :null => false
22
+ t.integer :file_position, :null => false
23
+ t.string :message, :null => false
24
+ end
25
+ add_index :mt_failed_records, [:batch_job_id]
26
+
27
+
28
+ end
@@ -0,0 +1,8 @@
1
+ namespace :qwirk do
2
+
3
+ desc "example gem rake task"
4
+ task :report => :environment do
5
+ puts "you just ran the example gem rake task"
6
+ end
7
+
8
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :qwirk do
3
+ # # Task goes here
4
+ # end
data/test/base_test.rb ADDED
@@ -0,0 +1,248 @@
1
+ require 'qwirk'
2
+ require 'shoulda'
3
+ require 'test/unit'
4
+ require 'fileutils'
5
+
6
+ class DummyWorker
7
+ include Qwirk::BaseWorker
8
+ attr_reader :opts, :setup_called, :count
9
+
10
+ @@mutex = Mutex.new
11
+
12
+ def self.reset
13
+ @@total_count = 0
14
+ @@workers = []
15
+ end
16
+
17
+ self.reset
18
+
19
+ def self.total_count
20
+ @@total_count
21
+ end
22
+
23
+ def self.workers
24
+ @@workers
25
+ end
26
+
27
+ def initialize(opts={})
28
+ @opts = opts
29
+ @count = 0
30
+ @@mutex.synchronize do
31
+ @@workers << self
32
+ end
33
+ end
34
+
35
+ # One time initialization prior to first thread
36
+ def setup
37
+ @setup_called = true
38
+ end
39
+
40
+ def start
41
+ @stopped = false
42
+ while !@stopped do
43
+ sleep 1
44
+ @count += 1
45
+ @@mutex.synchronize do
46
+ @@total_count += 1
47
+ end
48
+ end
49
+ end
50
+
51
+ def stop
52
+ @stopped = true
53
+ end
54
+
55
+ def status
56
+ "index=#{index}"
57
+ end
58
+ end
59
+
60
+ class Dummy2Worker < DummyWorker
61
+
62
+ end
63
+
64
+ class BaseTest < Test::Unit::TestCase
65
+ context 'a worker with no name specified' do
66
+ setup do
67
+ @worker = DummyWorker.new
68
+ @worker.index = 2
69
+ @worker.thread = 'dummy thread'
70
+ @supervisor = DummyWorker.create_supervisor('dummy_manager', {:foo => 1})
71
+ end
72
+
73
+ should "have default name and proper supervisor and attributes" do
74
+ assert_equal('Dummy', @worker.class.default_name)
75
+ assert_equal('Dummy', @supervisor.name)
76
+ assert_equal(2, @worker.index)
77
+ assert_equal('dummy thread', @worker.thread)
78
+ assert_equal(Qwirk::Base::Supervisor, @supervisor.class)
79
+ assert_equal('dummy_manager', @supervisor.manager)
80
+ end
81
+ end
82
+
83
+ context 'a worker with name specified' do
84
+ setup do
85
+ @worker = DummyWorker.new(:name => 'Foo')
86
+ @supervisor = DummyWorker.create_supervisor('dummy_manager', {:name => 'Foo'})
87
+ end
88
+
89
+ should "have name specified and proper supervisor and attributes" do
90
+ assert_equal('Foo', @supervisor.name)
91
+ end
92
+ end
93
+
94
+ context 'a default worker' do
95
+ setup do
96
+ DummyWorker.reset
97
+ @start_time = Time.now
98
+ @manager = Qwirk::Manager.new
99
+ @manager.add(DummyWorker, 2, {:foo => 42})
100
+ sleep 5
101
+ @manager.stop
102
+ @manager.join
103
+ @end_time = Time.now
104
+ end
105
+
106
+ should "be performing work" do
107
+ w = DummyWorker.workers
108
+ w = w.reverse if w[0].index == 1
109
+ assert_equal 2, w.size
110
+ (0..1).each do |i|
111
+ worker = w[i]
112
+ assert worker.count >= 3
113
+ assert worker.count <= 8
114
+ assert worker.index == i
115
+ assert worker.status == "index=#{worker.index}"
116
+ end
117
+ assert DummyWorker.total_count >= 8
118
+ assert DummyWorker.total_count <= 14
119
+ assert (@end_time-@start_time) < 14.0
120
+ assert w[0].setup_called
121
+ assert !w[1].setup_called
122
+ end
123
+ end
124
+
125
+ context 'a disallowed worker' do
126
+ setup do
127
+ DummyWorker.reset
128
+ @manager = Qwirk::Manager.new(:domain => 'DisallowedWorker')
129
+ @manager.allowed_workers = []
130
+ end
131
+
132
+ should "not be allowed" do
133
+ e = assert_raises RuntimeError do
134
+ @manager.add(DummyWorker, 2, {:foo => 42})
135
+ end
136
+ assert_match %r%is not an allowed worker%, e.message
137
+
138
+ e = assert_raises RuntimeError do
139
+ @manager.add('FdajfsdklasdfWorker', 2, {:foo => 42})
140
+ end
141
+ assert_match %r%Invalid class%, e.message
142
+ end
143
+ end
144
+
145
+ context 'multiple workers' do
146
+ setup do
147
+ DummyWorker.reset
148
+ @manager = Qwirk::Manager.new(:domain => 'AllowedWorker')
149
+ @manager.allowed_workers = [DummyWorker, Dummy2Worker]
150
+ @manager.add(DummyWorker, 2, {:foo => 42})
151
+ @manager.add(DummyWorker, 1, {:name => 'OtherDummy'})
152
+ @manager.add(Dummy2Worker, 2, {:name => 'SecondDummy'})
153
+ sleep 5
154
+ @manager.stop
155
+ @manager.join
156
+ @end_time = Time.now
157
+ end
158
+
159
+ should "work" do
160
+ w = DummyWorker.workers
161
+ s = @manager.supervisors
162
+ assert_equal 5, w.size
163
+ assert_equal 3, s.size
164
+ (0..4).each do |i|
165
+ worker = w[i]
166
+ assert worker.count >= 3
167
+ assert worker.count <= 8
168
+ end
169
+ assert DummyWorker.total_count >= 20
170
+ assert DummyWorker.total_count <= 35
171
+ super_names = s.map {|sup| sup.name}.sort
172
+ assert_equal ['Dummy', 'OtherDummy', 'SecondDummy'], super_names
173
+ end
174
+ end
175
+
176
+ context 'manager with persist_file set' do
177
+ setup do
178
+ DummyWorker.reset
179
+ persist_file = "/tmp/qwirk_persist_#{$$}.state"
180
+ @manager = Qwirk::Manager.new(:domain => 'PersistManager', :persist_file => persist_file)
181
+ @manager.allowed_workers = [DummyWorker, Dummy2Worker]
182
+ @manager.add(DummyWorker, 2, {:foo => 42})
183
+ @manager.add(DummyWorker, 1, {:name => 'OtherDummy'})
184
+ @manager.add(Dummy2Worker, 2, {:name => 'SecondDummy'})
185
+ @manager.stop
186
+ @manager.join
187
+ DummyWorker.reset
188
+ @manager2 = Qwirk::Manager.new(:domain => 'PersistManager2', :persist_file => persist_file)
189
+ sleep 5
190
+ @manager2.stop
191
+ @manager2.join
192
+ FileUtils.rm persist_file
193
+ end
194
+
195
+ should "recreate workers and supervisors correctly" do
196
+ w = DummyWorker.workers
197
+ s = @manager.supervisors
198
+ assert_equal 5, w.size
199
+ assert_equal 3, s.size
200
+ (0..4).each do |i|
201
+ worker = w[i]
202
+ assert worker.count >= 3
203
+ assert worker.count <= 8
204
+ end
205
+ assert DummyWorker.total_count >= 20
206
+ assert DummyWorker.total_count <= 35
207
+ super_names = s.map {|sup| sup.name}.sort
208
+ assert_equal ['Dummy', 'OtherDummy', 'SecondDummy'], super_names
209
+ end
210
+ end
211
+
212
+ context 'manager' do
213
+ setup do
214
+ DummyWorker.reset
215
+ persist_file = "/tmp/qwirk_persist_#{$$}.state"
216
+ @domain = 'JMXManagerDomain'
217
+ @manager = Qwirk::Manager.new(:domain => @domain)
218
+ @manager.allowed_workers = [DummyWorker, Dummy2Worker]
219
+
220
+ @server = JMX.simple_server
221
+ @client = JMX.connect
222
+ @manager_mbean = @client[Qwirk.manager_mbean_object_name(@domain)]
223
+ end
224
+
225
+ teardown do
226
+ @manager.stop
227
+ @manager.join
228
+ @server.stop
229
+ end
230
+
231
+ should "allow JMX to start and query workers" do
232
+ @manager_mbean.start_worker('DummyWorker', 2, '{"foo":42}')
233
+ @manager_mbean.start_worker('DummyWorker', 1, '{"name":"OtherDummy"}')
234
+ @manager_mbean.start_worker('Dummy2Worker', 2, '{"name":"SecondDummy"}')
235
+ #puts "allowed workers=#{@manager_mbean.allowed_workers[0].class.name}"
236
+ assert_equal ['DummyWorker', 'Dummy2Worker'], @manager_mbean.allowed_workers.to_a
237
+
238
+ dummy_bean = @client[Qwirk.supervisor_mbean_object_name(@domain, 'Dummy')]
239
+ other_dummy_bean = @client[Qwirk.supervisor_mbean_object_name(@domain, 'OtherDummy')]
240
+ second_dummy_bean = @client[Qwirk.supervisor_mbean_object_name(@domain, 'SecondDummy')]
241
+ assert 2, dummy_bean.count
242
+ assert 1, other_dummy_bean.count
243
+ assert 2, second_dummy_bean.count
244
+ other_dummy_bean.count = 3
245
+ assert 3, other_dummy_bean.count
246
+ end
247
+ end
248
+ end
data/test/database.yml ADDED
@@ -0,0 +1,14 @@
1
+ mysql:
2
+ adapter: mysql
3
+ database: qwirk_test
4
+ username: root
5
+ password:
6
+ host: 127.0.0.1
7
+ pool: 5
8
+ timeout: 5000
9
+
10
+ sqlite3:
11
+ adapter: sqlite3
12
+ database: db/test.sqlite3
13
+ pool: 5
14
+ timeout: 5000
@@ -0,0 +1,7 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('../config/application', __FILE__)
5
+ require 'rake'
6
+
7
+ Dummy::Application.load_tasks
@@ -0,0 +1,3 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Dummy</title>
5
+ <%= stylesheet_link_tag :all %>
6
+ <%= javascript_include_tag :defaults %>
7
+ <%= csrf_meta_tag %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,4 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require ::File.expand_path('../config/environment', __FILE__)
4
+ run Dummy::Application
@@ -0,0 +1,45 @@
1
+ require File.expand_path('../boot', __FILE__)
2
+
3
+ require "active_model/railtie"
4
+ require "active_record/railtie"
5
+ require "action_controller/railtie"
6
+ require "action_view/railtie"
7
+ require "action_mailer/railtie"
8
+
9
+ Bundler.require
10
+ require "qwirk"
11
+
12
+ module Dummy
13
+ class Application < Rails::Application
14
+ # Settings in config/environments/* take precedence over those specified here.
15
+ # Application configuration should go into files in config/initializers
16
+ # -- all .rb files in that directory are automatically loaded.
17
+
18
+ # Custom directories with classes and modules you want to be autoloadable.
19
+ # config.autoload_paths += %W(#{config.root}/extras)
20
+
21
+ # Only load the plugins named here, in the order given (default is alphabetical).
22
+ # :all can be used as a placeholder for all plugins not explicitly named.
23
+ # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
24
+
25
+ # Activate observers that should always be running.
26
+ # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
27
+
28
+ # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
29
+ # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
30
+ # config.time_zone = 'Central Time (US & Canada)'
31
+
32
+ # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
33
+ # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
34
+ # config.i18n.default_locale = :de
35
+
36
+ # JavaScript files you want as :defaults (application.js is always included).
37
+ # config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
38
+
39
+ # Configure the default encoding used in templates for Ruby 1.9.
40
+ config.encoding = "utf-8"
41
+
42
+ # Configure sensitive parameters which will be filtered from the log file.
43
+ config.filter_parameters += [:password]
44
+ end
45
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ gemfile = File.expand_path('../../../../Gemfile', __FILE__)
3
+
4
+ if File.exist?(gemfile)
5
+ ENV['BUNDLE_GEMFILE'] = gemfile
6
+ require 'bundler'
7
+ Bundler.setup
8
+ end
9
+
10
+ $:.unshift File.expand_path('../../../../lib', __FILE__)
@@ -0,0 +1,22 @@
1
+ # SQLite version 3.x
2
+ # gem install sqlite3
3
+ development:
4
+ adapter: sqlite3
5
+ database: db/development.sqlite3
6
+ pool: 5
7
+ timeout: 5000
8
+
9
+ # Warning: The database defined as "test" will be erased and
10
+ # re-generated from your development database when you run "rake".
11
+ # Do not set this db to the same as development or production.
12
+ test:
13
+ adapter: sqlite3
14
+ database: db/test.sqlite3
15
+ pool: 5
16
+ timeout: 5000
17
+
18
+ production:
19
+ adapter: sqlite3
20
+ database: db/production.sqlite3
21
+ pool: 5
22
+ timeout: 5000