replication 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.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/Gemfile +14 -0
- data/LICENSE.txt +22 -0
- data/README.md +120 -0
- data/Rakefile +13 -0
- data/db/migrate/714417722_replication_migration.rb +15 -0
- data/lib/replication/active_record/strand.rb +13 -0
- data/lib/replication/config.rb +21 -0
- data/lib/replication/engine.rb +5 -0
- data/lib/replication/modules/proofreading.rb +27 -0
- data/lib/replication/modules/semi_conservative.rb +35 -0
- data/lib/replication/process.rb +57 -0
- data/lib/replication/strand_methods.rb +16 -0
- data/lib/replication/version.rb +3 -0
- data/lib/replication.rb +27 -0
- data/replication.gemspec +24 -0
- data/test/orm/active_record.rb +10 -0
- data/test/rails_app/Rakefile +6 -0
- data/test/rails_app/app/models/.keep +0 -0
- data/test/rails_app/app/models/concerns/.keep +0 -0
- data/test/rails_app/app/models/organism.rb +3 -0
- data/test/rails_app/config/application.rb +34 -0
- data/test/rails_app/config/boot.rb +3 -0
- data/test/rails_app/config/database.yml +22 -0
- data/test/rails_app/config/environment.rb +5 -0
- data/test/rails_app/config/environments/test.rb +37 -0
- data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test/rails_app/config/initializers/cookies_serializer.rb +3 -0
- data/test/rails_app/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/rails_app/config/initializers/inflections.rb +16 -0
- data/test/rails_app/config/initializers/mime_types.rb +4 -0
- data/test/rails_app/config/initializers/session_store.rb +3 -0
- data/test/rails_app/config/initializers/wrap_parameters.rb +14 -0
- data/test/rails_app/config/routes.rb +56 -0
- data/test/rails_app/config/secrets.yml +22 -0
- data/test/rails_app/config.ru +4 -0
- data/test/rails_app/db/migrate/830335961_organism_migration.rb +15 -0
- data/test/rails_app/log/test.log +1476 -0
- data/test/replication/modules/proofreading_test.rb +22 -0
- data/test/replication/modules/semi_conservative_test.rb +24 -0
- data/test/replication/process_test.rb +51 -0
- data/test/replication_test.rb +9 -0
- data/test/test_helper.rb +11 -0
- metadata +142 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9ada82be8564e12051c19fa8afab7242f5c5198f
|
4
|
+
data.tar.gz: 2fd0e08bc5bb4791297526988517c5ce22a018ad
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8e22185640c920637bc17646668b92733cc7564f58e0115652937e94fc04efff01d53abf0885c07133ffbdaad35e84d663abad1261328b49ee7903c61dd4cfdd
|
7
|
+
data.tar.gz: a3a54381d5322affc1bf64d031daea478514e7cff9263bb90c55b48295e53cb6dc0523b5091a56a87397877e14c1e1c5b0ca196e3530f8eef0ce1490f57466e9
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Rodrigo DeAlmeida
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
# Replication
|
2
|
+
|
3
|
+
Data replication as templates for Ruby ORMs.
|
4
|
+
|
5
|
+
> ![DNA]
|
6
|
+
>
|
7
|
+
> DNA replication. The [double helix][] is unwound and each strand acts as a template for the next strand. [Bases][] are matched to synthesize the new partner strands.
|
8
|
+
|
9
|
+
[DNA]: https://upload.wikimedia.org/wikipedia/commons/thumb/7/70/DNA_replication_split.svg/200px-DNA_replication_split.svg.png
|
10
|
+
[double helix]: https://en.wikipedia.org/wiki/Double_helix "Double helix"
|
11
|
+
[Bases]: https://en.wikipedia.org/wiki/Nucleotides "Nucleotides"
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
Add this line to your application's Gemfile:
|
16
|
+
|
17
|
+
gem 'replication'
|
18
|
+
|
19
|
+
And then execute:
|
20
|
+
|
21
|
+
$ bundle
|
22
|
+
|
23
|
+
Or install it yourself as:
|
24
|
+
|
25
|
+
$ gem install replication
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
Extend ```Replication::Process``` in your models and declare it.
|
30
|
+
```ruby
|
31
|
+
class Model
|
32
|
+
extend Replication::Process
|
33
|
+
can_replicate
|
34
|
+
end
|
35
|
+
```
|
36
|
+
|
37
|
+
Customize the 'pairs' method if you want.
|
38
|
+
```ruby
|
39
|
+
class Model
|
40
|
+
extend Replication::Process
|
41
|
+
can_replicate :attributes_alias # default method is 'attributes'
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
Customize the class of the strands if you want.
|
46
|
+
```ruby
|
47
|
+
class Model
|
48
|
+
extend Replication::Process
|
49
|
+
can_replicate strand_class: WeirdStrandClass
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
You can blacklist an array of attributes. They'll not be replicated in the new strand.
|
54
|
+
```ruby
|
55
|
+
can_replicate except: [:id, :name]
|
56
|
+
```
|
57
|
+
|
58
|
+
To 'unwound' a strand, do:
|
59
|
+
```ruby
|
60
|
+
model_instance = Model.new(attrs)
|
61
|
+
model_instance.unwound(name: 'The Original Model') # returns a new strand
|
62
|
+
```
|
63
|
+
|
64
|
+
To 'unwound' and save a strand, do:
|
65
|
+
```ruby
|
66
|
+
model_instance = Model.new(attrs)
|
67
|
+
model_instance.replicate(name: 'The Original Model') # returns a new persisted strand
|
68
|
+
```
|
69
|
+
|
70
|
+
To be able to 'unwound' only when the object is valid, include Proofreading.
|
71
|
+
Right now it needs a ```valid?``` method to check.
|
72
|
+
```ruby
|
73
|
+
class Model
|
74
|
+
extend Replication::Process
|
75
|
+
can_replicate with: :proofreading
|
76
|
+
end
|
77
|
+
|
78
|
+
model_instance = Model.new(invalid_attrs)
|
79
|
+
model_instance.unwound(name: 'The Original Model') # returns nil
|
80
|
+
model_instance.replicate(name: 'The Original Model') # raises UnwoundError
|
81
|
+
```
|
82
|
+
|
83
|
+
To initialize a object that's descendant from the strand of another object, do:
|
84
|
+
```ruby
|
85
|
+
Model.new_from_strand([name or id])
|
86
|
+
# or
|
87
|
+
strand.replicate
|
88
|
+
```
|
89
|
+
|
90
|
+
### ActiveRecord
|
91
|
+
|
92
|
+
For ActiveRecord strands, ```[:id, :created_at, :updated_at]``` will be blacklisted by default.
|
93
|
+
|
94
|
+
It's highly recommended that you save your model instances before trying to replicate, since it
|
95
|
+
needs the 'id' and 'type' references for the association.
|
96
|
+
|
97
|
+
In some cases you don't want/won't need the strands to be associated, so, be free.
|
98
|
+
|
99
|
+
### Rails
|
100
|
+
|
101
|
+
Migrations are be provided by:
|
102
|
+
```
|
103
|
+
rake replication_engine:install:migrations
|
104
|
+
```
|
105
|
+
|
106
|
+
## TODO
|
107
|
+
|
108
|
+
- Add ActiveRecord inverse association: 'strands'.
|
109
|
+
- Refactoring, mainly about dependencies.
|
110
|
+
- Thorough testing.
|
111
|
+
- Scoping.
|
112
|
+
- More ORMs/ODMs.
|
113
|
+
|
114
|
+
## Contributing
|
115
|
+
|
116
|
+
1. Fork it ( https://github.com/rodrigoddalmeida/replication/fork )
|
117
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
118
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
119
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
120
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require 'rake/testtask'
|
3
|
+
|
4
|
+
task default: :test
|
5
|
+
|
6
|
+
desc 'Run unit tests.'
|
7
|
+
Rake::TestTask.new(:test) do |t|
|
8
|
+
t.libs << 'lib'
|
9
|
+
t.libs << 'test'
|
10
|
+
t.pattern = 'test/**/*_test.rb'
|
11
|
+
t.verbose = true
|
12
|
+
t.warning = false
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class ReplicationMigration < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :strands do |t|
|
4
|
+
t.string :name
|
5
|
+
t.text :pairs
|
6
|
+
t.references :origin, polymorphic: true, index: true
|
7
|
+
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.down
|
13
|
+
drop_table :strands
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "orm_adapter/adapters/active_record"
|
2
|
+
|
3
|
+
module Replication
|
4
|
+
module ActiveRecord
|
5
|
+
class Strand < ::ActiveRecord::Base
|
6
|
+
extend Replication::StrandMethods
|
7
|
+
serialize :pairs
|
8
|
+
belongs_to :origin, polymorphic: true
|
9
|
+
|
10
|
+
validates :name, uniqueness: true, presence: true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Replication
|
2
|
+
|
3
|
+
class Config
|
4
|
+
|
5
|
+
attr_accessor :model_class, :pairs_method, :strand_class, :except
|
6
|
+
|
7
|
+
def initialize(model_class)
|
8
|
+
@model_class = model_class
|
9
|
+
end
|
10
|
+
|
11
|
+
def with(modules)
|
12
|
+
modules.each do |m|
|
13
|
+
model_class.send :extend, Replication::Modules.const_get(m.to_s.classify)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def set(options)
|
18
|
+
options and options.each {|name, value| self.send "#{name}=", value}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Replication
|
2
|
+
module Modules
|
3
|
+
module Proofreading
|
4
|
+
|
5
|
+
def self.extended(model_class)
|
6
|
+
model_class.class_eval do
|
7
|
+
include Model
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module Model
|
12
|
+
|
13
|
+
def unwound(**options)
|
14
|
+
super if valid?
|
15
|
+
end
|
16
|
+
|
17
|
+
def replicate(**options)
|
18
|
+
if valid?
|
19
|
+
super
|
20
|
+
else
|
21
|
+
raise Replication::UnwoundError, 'The origin must be valid!'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Replication
|
2
|
+
module Modules
|
3
|
+
module SemiConservative
|
4
|
+
|
5
|
+
def self.extended(model_class)
|
6
|
+
model_class.class_eval do
|
7
|
+
include Model
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module Model
|
12
|
+
|
13
|
+
def unwound(**options)
|
14
|
+
strand_class.new({
|
15
|
+
name: options[:name],
|
16
|
+
pairs: strand_attributes,
|
17
|
+
origin: self
|
18
|
+
})
|
19
|
+
end
|
20
|
+
|
21
|
+
def replicate(**options)
|
22
|
+
strand_class.to_adapter.create!({
|
23
|
+
name: options[:name],
|
24
|
+
pairs: strand_attributes,
|
25
|
+
origin: self
|
26
|
+
})
|
27
|
+
end
|
28
|
+
|
29
|
+
def strand_attributes
|
30
|
+
_strand_attributes.except(*replication_config.except)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Replication
|
2
|
+
module Process
|
3
|
+
|
4
|
+
def self.extended(model_class)
|
5
|
+
model_class.class_eval do
|
6
|
+
@@replication_config = Class.new(Config).new(self)
|
7
|
+
include Model
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
# Include or extend it. We work with both.
|
12
|
+
def self.included(model_class)
|
13
|
+
model_class.extend self
|
14
|
+
end
|
15
|
+
|
16
|
+
def can_replicate(pairs_method = :attributes, **options)
|
17
|
+
default_options = Replication.defaults
|
18
|
+
modules = [:semi_conservative] # required module
|
19
|
+
modules.concat(Array(options.delete(:with)))
|
20
|
+
|
21
|
+
@@replication_config.pairs_method = pairs_method
|
22
|
+
@@replication_config.set default_options.merge(options)
|
23
|
+
@@replication_config.with modules
|
24
|
+
end
|
25
|
+
|
26
|
+
def new_from_strand(id=nil, **options)
|
27
|
+
if id
|
28
|
+
strand = replication_config.strand_class.to_adapter.get!(id)
|
29
|
+
else
|
30
|
+
strand = replication_config.strand_class.to_adapter.find_first(options)
|
31
|
+
end
|
32
|
+
|
33
|
+
new(strand.pairs) if strand
|
34
|
+
end
|
35
|
+
|
36
|
+
def replication_config
|
37
|
+
@@replication_config
|
38
|
+
end
|
39
|
+
|
40
|
+
module Model
|
41
|
+
|
42
|
+
def strand_class
|
43
|
+
replication_config.strand_class
|
44
|
+
end
|
45
|
+
|
46
|
+
def replication_config
|
47
|
+
self.class.replication_config
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def _strand_attributes
|
53
|
+
send(replication_config.pairs_method).deep_symbolize_keys
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/replication.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require "replication/version"
|
2
|
+
|
3
|
+
module Replication
|
4
|
+
|
5
|
+
autoload :Process, 'replication/process'
|
6
|
+
autoload :Config, 'replication/config'
|
7
|
+
autoload :StrandMethods, 'replication/strand_methods'
|
8
|
+
|
9
|
+
module ActiveRecord
|
10
|
+
autoload :Strand, 'replication/active_record/strand'
|
11
|
+
end
|
12
|
+
|
13
|
+
module Modules
|
14
|
+
autoload :SemiConservative, 'replication/modules/semi_conservative'
|
15
|
+
autoload :Proofreading, 'replication/modules/proofreading'
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.defaults
|
19
|
+
defaults = {}
|
20
|
+
defaults.merge({
|
21
|
+
strand_class: ::Replication::ActiveRecord::Strand,
|
22
|
+
except: [:id, :created_at, :updated_at]
|
23
|
+
}) if defined?(ActiveRecord)
|
24
|
+
end
|
25
|
+
|
26
|
+
class UnwoundError < StandardError; end;
|
27
|
+
end
|
data/replication.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'replication/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "replication"
|
8
|
+
spec.version = Replication::VERSION
|
9
|
+
spec.platform = Gem::Platform::RUBY
|
10
|
+
spec.authors = ["Rodrigo DeAlmeida"]
|
11
|
+
spec.email = ["rodrigoddalmeida@gmail.com"]
|
12
|
+
spec.summary = %q{Data replication as templates for Ruby ORMs}
|
13
|
+
spec.description = %q{Data replication as templates for Ruby ORMs}
|
14
|
+
spec.homepage = ""
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0")
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
23
|
+
spec.add_development_dependency "rake"
|
24
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
ActiveRecord::Migration.verbose = false
|
2
|
+
ActiveRecord::Base.logger = Logger.new(nil)
|
3
|
+
ActiveRecord::Base.include_root_in_json = true
|
4
|
+
|
5
|
+
ActiveRecord::Migrator.migrate([File.expand_path("../../../db/migrate/", __FILE__), File.expand_path("../../rails_app/db/migrate/", __FILE__)])
|
6
|
+
|
7
|
+
class ActiveSupport::TestCase
|
8
|
+
self.use_transactional_fixtures = true
|
9
|
+
self.use_instantiated_fixtures = false
|
10
|
+
end
|
File without changes
|
File without changes
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.expand_path('../boot', __FILE__)
|
2
|
+
|
3
|
+
# Pick the frameworks you want:
|
4
|
+
require "active_model/railtie"
|
5
|
+
# require "action_controller/railtie"
|
6
|
+
# require "action_mailer/railtie"
|
7
|
+
# require "action_view/railtie"
|
8
|
+
# require "sprockets/railtie"
|
9
|
+
require "rails/test_unit/railtie"
|
10
|
+
|
11
|
+
Bundler.require :default, REPLICATION_ORM
|
12
|
+
|
13
|
+
begin
|
14
|
+
require "#{REPLICATION_ORM}/railtie"
|
15
|
+
rescue LoadError
|
16
|
+
end
|
17
|
+
|
18
|
+
require "replication"
|
19
|
+
|
20
|
+
module RailsApp
|
21
|
+
class Application < Rails::Application
|
22
|
+
# Settings in config/environments/* take precedence over those specified here.
|
23
|
+
# Application configuration should go into files in config/initializers
|
24
|
+
# -- all .rb files in that directory are automatically loaded.
|
25
|
+
|
26
|
+
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
27
|
+
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
28
|
+
# config.time_zone = 'Central Time (US & Canada)'
|
29
|
+
|
30
|
+
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
31
|
+
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
32
|
+
# config.i18n.default_locale = :de
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# SQLite version 3.x
|
2
|
+
# gem install sqlite3
|
3
|
+
#
|
4
|
+
# Ensure the SQLite 3 gem is defined in your Gemfile
|
5
|
+
# gem 'sqlite3'
|
6
|
+
#
|
7
|
+
development:
|
8
|
+
adapter: sqlite3
|
9
|
+
database: db/development.sqlite3
|
10
|
+
pool: 5
|
11
|
+
timeout: 5000
|
12
|
+
|
13
|
+
# Warning: The database defined as "test" will be erased and
|
14
|
+
# re-generated from your development database when you run "rake".
|
15
|
+
# Do not set this db to the same as development or production.
|
16
|
+
test:
|
17
|
+
adapter: sqlite3
|
18
|
+
database: ":memory:"
|
19
|
+
|
20
|
+
production:
|
21
|
+
adapter: sqlite3
|
22
|
+
database: ":memory:"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
RailsApp::Application.configure do
|
2
|
+
# Settings specified here will take precedence over those in config/application.rb.
|
3
|
+
|
4
|
+
# The test environment is used exclusively to run your application's
|
5
|
+
# test suite. You never need to work with it otherwise. Remember that
|
6
|
+
# your test database is "scratch space" for the test suite and is wiped
|
7
|
+
# and recreated between test runs. Don't rely on the data there!
|
8
|
+
config.cache_classes = true
|
9
|
+
|
10
|
+
# Do not eager load code on boot. This avoids loading your whole application
|
11
|
+
# just for the purpose of running a single test. If you are using a tool that
|
12
|
+
# preloads Rails for running tests, you may have to set it to true.
|
13
|
+
config.eager_load = false
|
14
|
+
|
15
|
+
# Configure static asset server for tests with Cache-Control for performance.
|
16
|
+
config.serve_static_assets = true
|
17
|
+
config.static_cache_control = 'public, max-age=3600'
|
18
|
+
|
19
|
+
# Show full error reports and disable caching.
|
20
|
+
config.consider_all_requests_local = true
|
21
|
+
|
22
|
+
# Raise exceptions instead of rendering exception templates.
|
23
|
+
config.action_dispatch.show_exceptions = false
|
24
|
+
|
25
|
+
# Disable request forgery protection in test environment.
|
26
|
+
|
27
|
+
# Tell Action Mailer not to deliver emails to the real world.
|
28
|
+
# The :test delivery method accumulates sent emails in the
|
29
|
+
# ActionMailer::Base.deliveries array.
|
30
|
+
# config.action_mailer.delivery_method = :test
|
31
|
+
|
32
|
+
# Print deprecation notices to the stderr.
|
33
|
+
config.active_support.deprecation = :stderr
|
34
|
+
|
35
|
+
# Raises error for missing translations
|
36
|
+
# config.action_view.raise_on_missing_translations = true
|
37
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
|
4
|
+
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
|
5
|
+
|
6
|
+
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
|
7
|
+
# Rails.backtrace_cleaner.remove_silencers!
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Add new inflection rules using the following format. Inflections
|
4
|
+
# are locale specific, and you may define rules for as many different
|
5
|
+
# locales as you wish. All of these examples are active by default:
|
6
|
+
# ActiveSupport::Inflector.inflections(:en) do |inflect|
|
7
|
+
# inflect.plural /^(ox)$/i, '\1en'
|
8
|
+
# inflect.singular /^(ox)en/i, '\1'
|
9
|
+
# inflect.irregular 'person', 'people'
|
10
|
+
# inflect.uncountable %w( fish sheep )
|
11
|
+
# end
|
12
|
+
|
13
|
+
# These inflection rules are supported but not enabled by default:
|
14
|
+
# ActiveSupport::Inflector.inflections(:en) do |inflect|
|
15
|
+
# inflect.acronym 'RESTful'
|
16
|
+
# end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# This file contains settings for ActionController::ParamsWrapper which
|
4
|
+
# is enabled by default.
|
5
|
+
|
6
|
+
# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
|
7
|
+
ActiveSupport.on_load(:action_controller) do
|
8
|
+
wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
|
9
|
+
end
|
10
|
+
|
11
|
+
# To enable root element in JSON for ActiveRecord objects.
|
12
|
+
# ActiveSupport.on_load(:active_record) do
|
13
|
+
# self.include_root_in_json = true
|
14
|
+
# end
|