rom 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 18e380f111c5a327bab9a80b4dd82844f82cd485
4
- data.tar.gz: 04b327cb735b695647382f47bff9ed8d72fb456b
3
+ metadata.gz: 1cedd21af22c9eed4d993f2550a24089b9f8cacb
4
+ data.tar.gz: 5275819a3330d267f7ffd5dc8d9cc8a8ea186a9b
5
5
  SHA512:
6
- metadata.gz: 8ec1a1f1d50794053ebddbf37f88c7ea3f885f55c58e45e76edae8d9c915bfbec3b3419de85bda6298e9a4d25db9cd52b3ff6b4cdd2657f2c09dfbcf7fc9448c
7
- data.tar.gz: f31429fd032a6994c27757a98bd2811aa74c16e92ac64d64ded652082dfe92da2f0f6ecf131acfca686222a88c6f1d19b5b0142ecba1dc6a6beee202d1af755d
6
+ metadata.gz: c4d159975a7a1a8ed67c08f7f085e9f8fa57c1ac40c36ed71d20b6111d326b3ac8d18fe46d94f9e436e13fc73f099320c0eab1e50fb717c2c246459575261496
7
+ data.tar.gz: a77514fb8bbafeeaef756c069e182b77d147999aca85000bc7089ff4a9d557cd3a003704b1766645fefe0d80c49c41456f19a38eaebed6697b5f8c96da0b1632
@@ -1,3 +1,19 @@
1
+ ## v0.4.1 2014-12-15
2
+
3
+ ### Added
4
+
5
+ * Adapter can now implement `Adapter#dataset(name, header)` to return a dataset (solnic)
6
+ * For multi-step setup the DSL is available in `ROM` too (solnic)
7
+ * Global environment can be stored via `ROM.finalize` and accessible via `ROM.env` (solnic)
8
+
9
+ ### Changed
10
+
11
+ * Schema can be defined in multiple steps (solnic)
12
+ * Setting model in mapper DSL is no longer required and defaults to `Hash` (solnic)
13
+ * Adapter datasets no longer have to return headers when they are provided by schema (solnic)
14
+
15
+ [Compare v0.4.0...v0.4.1](https://github.com/rom-rb/rom/compare/v0.4.0...v0.4.1)
16
+
1
17
  ## v0.4.0 2014-12-06
2
18
 
3
19
  ### Added
data/Gemfile CHANGED
@@ -9,12 +9,18 @@ end
9
9
 
10
10
  group :test do
11
11
  gem 'virtus'
12
- gem 'mutant'
13
- gem 'mutant-rspec'
14
- gem 'rubysl-bigdecimal', platforms: :rbx
15
12
  gem 'guard'
16
13
  gem 'guard-rspec'
17
- gem 'codeclimate-test-reporter', require: false
14
+
15
+ platforms :rbx do
16
+ gem 'rubysl-bigdecimal', platforms: :rbx
17
+ gem 'codeclimate-test-reporter', require: false
18
+ end
19
+
20
+ platforms :mri do
21
+ gem 'mutant'
22
+ gem 'mutant-rspec'
23
+ end
18
24
  end
19
25
 
20
26
  group :sql do
data/README.md CHANGED
@@ -18,7 +18,7 @@ ROM is an experimental Ruby ORM that aims to bring powerful object mapping
18
18
  capabilities and give you back the full power of your database. It is based on
19
19
  a couple of core concepts which makes it different from a typical ORM:
20
20
 
21
- * Quering a database is considered as a private implementation detail
21
+ * Querying a database is considered as a private implementation detail
22
22
  * Abstract query interfaces are evil and a source of unnecessary complexity
23
23
  * Reading and mutating data are 2 distinct concerns and should be treated separately
24
24
  * It must be **simple** to use the full power of your database
data/lib/rom.rb CHANGED
@@ -55,8 +55,45 @@ module ROM
55
55
  boot.instance_exec(&block)
56
56
  boot.finalize
57
57
  else
58
- boot
58
+ @boot = boot
59
59
  end
60
60
  end
61
61
 
62
+ # @api public
63
+ def self.schema(&block)
64
+ boot.schema(&block)
65
+ end
66
+
67
+ # @api public
68
+ def self.relation(*args, &block)
69
+ boot.relation(*args, &block)
70
+ end
71
+
72
+ # @api public
73
+ def self.commands(*args, &block)
74
+ boot.commands(*args, &block)
75
+ end
76
+
77
+ # @api public
78
+ def self.mappers(*args, &block)
79
+ boot.mappers(*args, &block)
80
+ end
81
+
82
+ # @api public
83
+ def self.env
84
+ @env
85
+ end
86
+
87
+ # @api public
88
+ def self.finalize
89
+ @env = boot.finalize
90
+ @boot = nil
91
+ self
92
+ end
93
+
94
+ # @api private
95
+ def self.boot
96
+ @boot
97
+ end
98
+
62
99
  end
@@ -17,14 +17,18 @@ module ROM
17
17
  @connection = Storage.new
18
18
  end
19
19
 
20
- def [](name)
21
- connection[name]
20
+ def dataset(name, header = [])
21
+ connection.create_dataset(name, header)
22
22
  end
23
23
 
24
24
  def dataset?(name)
25
25
  connection.key?(name)
26
26
  end
27
27
 
28
+ def [](name)
29
+ connection[name]
30
+ end
31
+
28
32
  Adapter.register(self)
29
33
  end
30
34
 
@@ -5,6 +5,13 @@ module ROM
5
5
  class Dataset
6
6
  include Charlatan.new(:data)
7
7
 
8
+ attr_reader :header
9
+
10
+ def initialize(data, header)
11
+ super
12
+ @header = header
13
+ end
14
+
8
15
  def to_ary
9
16
  data.dup
10
17
  end
@@ -41,10 +48,6 @@ module ROM
41
48
  self
42
49
  end
43
50
 
44
- def header
45
- []
46
- end
47
-
48
51
  end
49
52
 
50
53
  end
@@ -11,7 +11,11 @@ module ROM
11
11
  end
12
12
 
13
13
  def [](name)
14
- data[name] ||= Dataset.new([])
14
+ data[name]
15
+ end
16
+
17
+ def create_dataset(name, header)
18
+ data[name] = Dataset.new([], header)
15
19
  end
16
20
 
17
21
  def key?(name)
@@ -39,7 +39,10 @@ module ROM
39
39
  #
40
40
  # @api public
41
41
  def schema(&block)
42
- @schema = DSL.new(self).schema(&block)
42
+ base_relations = DSL.new(self).schema(&block)
43
+ base_relations.each do |repo, relations|
44
+ (@schema[repo] ||= []).concat(relations)
45
+ end
43
46
  self
44
47
  end
45
48
 
@@ -2,12 +2,12 @@ module ROM
2
2
  class Boot
3
3
 
4
4
  class BaseRelationDSL
5
- attr_reader :env, :name, :repositories, :attributes, :datasets
5
+ attr_reader :env, :name, :header
6
6
 
7
7
  def initialize(env, name)
8
8
  @env = env
9
9
  @name = name
10
- @attributes = []
10
+ @header = []
11
11
  end
12
12
 
13
13
  def repository(name = nil)
@@ -19,22 +19,28 @@ module ROM
19
19
  end
20
20
 
21
21
  def attribute(name)
22
- attributes << name
22
+ header << name
23
23
  end
24
24
 
25
25
  def call(&block)
26
26
  instance_exec(&block)
27
27
 
28
- dataset = repository[name]
29
-
30
- header =
31
- if attributes.any?
32
- attributes
28
+ dataset =
29
+ if adapter.respond_to?(:dataset)
30
+ adapter.dataset(name, header)
33
31
  else
34
- dataset.header
32
+ adapter[name]
35
33
  end
36
34
 
37
- [name, repository[name], header]
35
+ base_header = dataset.respond_to?(:header) ? dataset.header : header
36
+
37
+ [name, dataset, base_header]
38
+ end
39
+
40
+ private
41
+
42
+ def adapter
43
+ repository.adapter
38
44
  end
39
45
 
40
46
  end
@@ -2,18 +2,18 @@ module ROM
2
2
 
3
3
  # @api private
4
4
  class Mapper
5
- attr_reader :header, :model
5
+ attr_reader :header, :model, :loader
6
6
 
7
7
  class Basic < Mapper
8
8
  attr_reader :mapping
9
9
 
10
- def initialize(header, model)
10
+ def initialize(*args)
11
11
  super
12
12
  @mapping = header.mapping
13
13
  end
14
14
 
15
15
  def load(tuple, mapping = self.mapping)
16
- model.new(Hash[call(tuple, mapping)])
16
+ loader[Hash[call(tuple, mapping)]]
17
17
  end
18
18
 
19
19
  def call(tuple, mapping = self.mapping)
@@ -44,16 +44,24 @@ module ROM
44
44
  self
45
45
  end
46
46
 
47
- klass.new(header, model)
47
+ loader =
48
+ if model
49
+ -> tuple { model.new(tuple) }
50
+ else
51
+ -> tuple { tuple }
52
+ end
53
+
54
+ klass.new(header, model, loader)
48
55
  end
49
56
 
50
- def initialize(header, model)
57
+ def initialize(header, model, loader)
51
58
  @header = header
52
59
  @model = model
60
+ @loader = loader
53
61
  end
54
62
 
55
63
  def load(tuple)
56
- model.new(tuple)
64
+ loader[tuple]
57
65
  end
58
66
 
59
67
  end
@@ -28,7 +28,13 @@ module ROM
28
28
  @name = name
29
29
  @root = root
30
30
  @prefix = options[:prefix]
31
- @attributes = root.header.map { |attr| [prefix ? :"#{prefix}_#{attr}" : attr] }
31
+
32
+ @attributes =
33
+ if options[:inherit_header]
34
+ root.header.map { |attr| [prefix ? :"#{prefix}_#{attr}" : attr] }
35
+ else
36
+ []
37
+ end
32
38
  end
33
39
 
34
40
  def model(options)
@@ -20,7 +20,7 @@ module ROM
20
20
  def each(&block)
21
21
  return to_enum unless block
22
22
 
23
- results = relation.to_a.each_with_object([]) do |tuple, wrapped|
23
+ results = relation.each_with_object([]) do |tuple, wrapped|
24
24
  result = tuple.reject { |k,_| attribute_names.include?(k) }
25
25
  result[key] = tuple.reject { |k,_| !attribute_names.include?(k) }
26
26
 
@@ -15,13 +15,13 @@ module ROM
15
15
  def initialize(path, relation, mappers = {})
16
16
  @path = path.to_s
17
17
  @relation = relation
18
- @header = relation.header
19
18
  @mappers = mappers
20
19
 
21
20
  names = @path.split('.')
22
21
 
23
22
  mapper_key = names.reverse.detect { |name| mappers.key?(name.to_sym) }
24
23
  @mapper = mappers.fetch(mapper_key.to_sym)
24
+ @header = mapper.header
25
25
  end
26
26
 
27
27
  # Yields tuples mapped to objects
@@ -2,6 +2,8 @@ module ROM
2
2
 
3
3
  # @api private
4
4
  class ReaderBuilder
5
+ DEFAULT_OPTIONS = { inherit_header: true }.freeze
6
+
5
7
  attr_reader :relations, :readers
6
8
 
7
9
  # @api private
@@ -11,17 +13,25 @@ module ROM
11
13
  end
12
14
 
13
15
  # @api private
14
- def call(name, options = {}, &block)
15
- parent = relations[options.fetch(:parent) { name }]
16
+ def call(name, input_options = {}, &block)
17
+ with_options(input_options) do |options|
18
+ parent = relations[options.fetch(:parent) { name }]
19
+
20
+ builder = MapperBuilder.new(name, parent, options)
21
+ builder.instance_exec(&block) if block
22
+ mapper = builder.call
16
23
 
17
- builder = MapperBuilder.new(name, parent, options)
18
- builder.instance_exec(&block)
19
- mapper = builder.call
24
+ mappers = options[:parent] ? readers.fetch(parent.name).mappers : {}
25
+
26
+ mappers[name] = mapper
27
+ readers[name] = Reader.new(name, parent, mappers) unless options[:parent]
28
+ end
29
+ end
20
30
 
21
- mappers = options[:parent] ? readers.fetch(parent.name).mappers : {}
31
+ private
22
32
 
23
- mappers[name] = mapper
24
- readers[name] = Reader.new(name, parent, mappers) unless options[:parent]
33
+ def with_options(options)
34
+ yield(DEFAULT_OPTIONS.merge(options))
25
35
  end
26
36
 
27
37
  end
@@ -24,6 +24,7 @@ module ROM
24
24
  include Equalizer.new(:header, :dataset)
25
25
  include RA
26
26
 
27
+ # @api private
27
28
  attr_reader :header
28
29
 
29
30
  # @api private
@@ -1,3 +1,3 @@
1
1
  module ROM
2
- VERSION = '0.4.0'.freeze
2
+ VERSION = '0.4.1'.freeze
3
3
  end
@@ -5,7 +5,7 @@ require File.expand_path('../lib/rom/version', __FILE__)
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = 'rom'
7
7
  gem.summary = 'Ruby Object Mapper'
8
- gem.description = gem.summary
8
+ gem.description = 'Persistence and mapping toolkit for Ruby'
9
9
  gem.authors = 'Piotr Solnica',
10
10
  gem.email = 'piotr.solnica@gmail.com'
11
11
  gem.homepage = 'http://rom-rb.org'
@@ -34,20 +34,43 @@ describe 'Mapper definition DSL' do
34
34
  end
35
35
 
36
36
  describe 'excluding attributes' do
37
- subject(:mapper) { rom.read(:users).mapper }
37
+ context 'using exclude' do
38
+ subject(:mapper) { rom.read(:users).mapper }
38
39
 
39
- before do
40
- setup.mappers do
41
- define(:users) do
42
- model name: 'User'
40
+ before do
41
+ setup.mappers do
42
+ define(:users) do
43
+ model name: 'User'
43
44
 
44
- exclude :name
45
+ exclude :name
46
+ end
45
47
  end
46
48
  end
49
+
50
+ it 'only maps provided attributes' do
51
+ expect(header.keys).to eql([:email])
52
+ end
47
53
  end
48
54
 
49
- it 'only maps provided attributes' do
50
- expect(header.keys).to eql([:email])
55
+ context 'by setting :inherit_header to false' do
56
+ subject(:mapper) { rom.read(:users).email_index.mapper }
57
+
58
+ before do
59
+ setup.mappers do
60
+ define(:users) do
61
+ model name: 'User'
62
+ end
63
+
64
+ define(:email_index, parent: :users, inherit_header: false) do
65
+ model name: 'UserWithoutName'
66
+ attribute :email
67
+ end
68
+ end
69
+ end
70
+
71
+ it 'only maps provided attributes' do
72
+ expect(header.keys).to eql([:email])
73
+ end
51
74
  end
52
75
  end
53
76
 
@@ -70,7 +93,7 @@ describe 'Mapper definition DSL' do
70
93
  end
71
94
 
72
95
  it 'inherits the attributes from the parent by default' do
73
- expect(header.keys).to eql(rom.mappers[:users].header - [:name])
96
+ expect(header.keys).to eql([:email])
74
97
  end
75
98
 
76
99
  it 'builds a new model' do
@@ -3,8 +3,6 @@ require 'spec_helper'
3
3
  describe 'Wrap operation' do
4
4
  include_context 'users and tasks'
5
5
 
6
- subject(:rom) { setup.finalize }
7
-
8
6
  specify 'defining a wrapped relation' do
9
7
  setup.relation(:users) do
10
8
  def with_task
@@ -58,7 +58,7 @@ describe 'Reading relations' do
58
58
  User.send(:include, Equalizer.new(:name, :email))
59
59
  UserWithTasks.send(:include, Equalizer.new(:name, :email, :tasks))
60
60
 
61
- expect(rom.read(:users).with_tasks.header).to eql([:name, :email, :tasks])
61
+ expect(rom.read(:users).with_tasks.header.keys).to eql([:name, :email, :tasks])
62
62
 
63
63
  user = rom.read(:users).sorted.first
64
64
 
@@ -104,7 +104,7 @@ describe 'Reading relations' do
104
104
  User.send(:include, Equalizer.new(:name, :email))
105
105
  UserWithTask.send(:include, Equalizer.new(:name, :email, :task))
106
106
 
107
- expect(rom.read(:users).with_task.header).to eql([:name, :email, :task])
107
+ expect(rom.read(:users).with_task.header.keys).to eql([:name, :email, :task])
108
108
 
109
109
  user = rom.read(:users).sorted.with_task.first
110
110
 
@@ -113,4 +113,22 @@ describe 'Reading relations' do
113
113
  task: { title: "be cool", priority: 2 })
114
114
  )
115
115
  end
116
+
117
+ it 'maps hashes' do
118
+ setup.relation(:users) do
119
+ def by_name(name)
120
+ restrict(name: name)
121
+ end
122
+ end
123
+
124
+ setup.mappers do
125
+ define(:users)
126
+ end
127
+
128
+ rom = setup.finalize
129
+
130
+ user = rom.read(:users).by_name("Jane").first
131
+
132
+ expect(user).to eql(name: "Jane", email: "jane@doe.org")
133
+ end
116
134
  end
@@ -5,8 +5,8 @@ describe 'Defining schema' do
5
5
  let(:rom) { setup.finalize }
6
6
  let(:schema) { rom.schema }
7
7
 
8
- describe '.schema' do
9
- it 'returns schema with relations' do
8
+ shared_context 'valid schema' do
9
+ before do
10
10
  setup.schema do
11
11
  base_relation(:users) do
12
12
  repository :memory
@@ -15,15 +15,53 @@ describe 'Defining schema' do
15
15
  attribute :name
16
16
  end
17
17
  end
18
+ end
18
19
 
20
+ it 'returns schema with relations' do
19
21
  users = schema.users
20
22
 
21
23
  expect(users.dataset.to_a).to eql(rom.memory.users.to_a)
22
24
  expect(users.header).to eql([:id, :name])
23
25
  end
26
+ end
24
27
 
28
+ describe '.schema' do
25
29
  it 'returns an empty schema if it was not defined' do
26
30
  expect(schema.users).to be_nil
27
31
  end
32
+
33
+ context 'with an adapter that supports header injection' do
34
+ it_behaves_like 'valid schema'
35
+ end
36
+
37
+ context 'can be called multiple times' do
38
+ before do
39
+ setup.schema do
40
+ base_relation(:tasks) do
41
+ repository :memory
42
+ attribute :title
43
+ end
44
+ end
45
+ end
46
+
47
+ it_behaves_like 'valid schema' do
48
+ it 'registers all base relations' do
49
+ expect(schema.tasks.dataset).to be(rom.memory.tasks)
50
+ expect(schema.tasks.header).to eql([:title])
51
+ end
52
+ end
53
+ end
54
+
55
+ context 'with an adapter that does not support header injection' do
56
+ before do
57
+ ROM::Adapter::Memory::Dataset.send(:undef_method, :header)
58
+ end
59
+
60
+ after do
61
+ ROM::Adapter::Memory::Dataset.send(:attr_reader, :header)
62
+ end
63
+
64
+ it_behaves_like 'valid schema'
65
+ end
28
66
  end
29
67
  end
@@ -65,4 +65,41 @@ describe 'Setting up ROM' do
65
65
  expect(rom.read(:users).by_name('Jane').to_a).to eql([User.new(name: 'Jane')])
66
66
  end
67
67
  end
68
+
69
+ describe 'multi-step setup' do
70
+ it 'exposes boot DSL that can be invoked multiple times' do
71
+ User = Class.new { include Virtus.value_object; values { attribute :name, String } }
72
+
73
+ ROM.setup(memory: 'memory://test')
74
+
75
+ ROM.schema do
76
+ base_relation(:users) do
77
+ repository :memory
78
+ attribute :name
79
+ end
80
+ end
81
+
82
+ ROM.relation(:users) do
83
+ def by_name(name)
84
+ restrict(name: name)
85
+ end
86
+ end
87
+
88
+ ROM.commands(:users) do
89
+ define(:create)
90
+ end
91
+
92
+ ROM.mappers do
93
+ define(:users) do
94
+ model User
95
+ end
96
+ end
97
+
98
+ rom = ROM.finalize.env
99
+
100
+ rom.command(:users).create.call(name: 'Jane')
101
+
102
+ expect(rom.read(:users).by_name('Jane').to_a).to eql([User.new(name: 'Jane')])
103
+ end
104
+ end
68
105
  end
@@ -3,11 +3,23 @@ require 'spec_helper'
3
3
  require 'ostruct'
4
4
 
5
5
  describe ROM::Mapper do
6
- subject(:mapper) { ROM::Mapper.build(ROM::Header.coerce(relation.header.zip), user_model) }
6
+ subject(:mapper) do
7
+ ROM::Mapper.build(ROM::Header.coerce(relation.header.zip), user_model)
8
+ end
9
+
10
+ let(:relation) do
11
+ ROM::Relation.new(dataset, dataset.header)
12
+ end
7
13
 
8
- let(:relation) { ROM::Relation.new(dataset, [:id, :name]) }
9
- let(:dataset) { ROM::Adapter::Memory::Dataset.new([{id: 1, name: 'Jane'}, {id: 2, name: 'Joe'}]) }
10
- let(:user_model) { Class.new(OpenStruct) { include Equalizer.new(:id, :name) } }
14
+ let(:dataset) do
15
+ ROM::Adapter::Memory::Dataset.new(
16
+ [{id: 1, name: 'Jane'}, {id: 2, name: 'Joe'}], [:id, :name]
17
+ )
18
+ end
19
+
20
+ let(:user_model) do
21
+ Class.new(OpenStruct) { include Equalizer.new(:id, :name) }
22
+ end
11
23
 
12
24
  let(:jane) { user_model.new(id: 1, name: 'Jane') }
13
25
  let(:joe) { user_model.new(id: 2, name: 'Joe') }
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ROM::Relation do
4
- subject(:relation) { ROM::Relation.new(dataset, [:id, :name]) }
4
+ subject(:relation) { ROM::Relation.new(dataset, dataset.header) }
5
5
 
6
- let(:dataset) { ROM::Adapter::Memory::Dataset.new([jane, joe]) }
6
+ let(:dataset) { ROM::Adapter::Memory::Dataset.new([jane, joe], [:id, :name]) }
7
7
 
8
8
  let(:jane) { { id: 1, name: 'Jane' } }
9
9
  let(:joe) { { id: 2, name: 'Joe' } }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-12-06 00:00:00.000000000 Z
12
+ date: 2014-12-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: addressable
@@ -147,7 +147,7 @@ dependencies:
147
147
  - - "~>"
148
148
  - !ruby/object:Gem::Version
149
149
  version: '3.1'
150
- description: Ruby Object Mapper
150
+ description: Persistence and mapping toolkit for Ruby
151
151
  email: piotr.solnica@gmail.com
152
152
  executables: []
153
153
  extensions: []
@@ -164,13 +164,6 @@ files:
164
164
  - LICENSE
165
165
  - README.md
166
166
  - Rakefile
167
- - config/devtools.yml
168
- - config/flay.yml
169
- - config/flog.yml
170
- - config/mutant.yml
171
- - config/reek.yml
172
- - config/rubocop.yml
173
- - config/yardstick.yml
174
167
  - lib/rom.rb
175
168
  - lib/rom/adapter.rb
176
169
  - lib/rom/adapter/memory.rb
@@ -1,4 +0,0 @@
1
- ---
2
- unit_test_timeout: 0.1
3
- fail_on_branch:
4
- - "master"
@@ -1,3 +0,0 @@
1
- ---
2
- threshold: 0
3
- total_score: 0
@@ -1,2 +0,0 @@
1
- ---
2
- threshold: 0
@@ -1,3 +0,0 @@
1
- ---
2
- name: your_lib
3
- namespace: YourLib
@@ -1,103 +0,0 @@
1
- ---
2
- Attribute:
3
- enabled: true
4
- exclude: []
5
- BooleanParameter:
6
- enabled: true
7
- exclude: []
8
- ClassVariable:
9
- enabled: true
10
- exclude: []
11
- ControlParameter:
12
- enabled: true
13
- exclude: []
14
- DataClump:
15
- enabled: true
16
- exclude: []
17
- max_copies: 2
18
- min_clump_size: 2
19
- DuplicateMethodCall:
20
- enabled: true
21
- exclude: []
22
- max_calls: 1
23
- allow_calls: []
24
- FeatureEnvy:
25
- enabled: true
26
- exclude: []
27
- IrresponsibleModule:
28
- enabled: true
29
- exclude: []
30
- LongParameterList:
31
- enabled: true
32
- exclude: []
33
- max_params: 2
34
- overrides:
35
- initialize:
36
- max_params: 3
37
- LongYieldList:
38
- enabled: true
39
- exclude: []
40
- max_params: 2
41
- NestedIterators:
42
- enabled: true
43
- exclude: []
44
- max_allowed_nesting: 1
45
- ignore_iterators: []
46
- NilCheck:
47
- enabled: true
48
- exclude: []
49
- RepeatedConditional:
50
- enabled: true
51
- exclude: []
52
- max_ifs: 1
53
- TooManyInstanceVariables:
54
- enabled: true
55
- exclude: []
56
- max_instance_variables: 3
57
- TooManyMethods:
58
- enabled: true
59
- exclude: []
60
- max_methods: 10
61
- TooManyStatements:
62
- enabled: true
63
- exclude:
64
- - each
65
- max_statements: 2
66
- UncommunicativeMethodName:
67
- enabled: true
68
- exclude: []
69
- reject:
70
- - !ruby/regexp /^[a-z]$/
71
- - !ruby/regexp /[0-9]$/
72
- - !ruby/regexp /[A-Z]/
73
- accept: []
74
- UncommunicativeModuleName:
75
- enabled: true
76
- exclude: []
77
- reject:
78
- - !ruby/regexp /^.$/
79
- - !ruby/regexp /[0-9]$/
80
- accept: []
81
- UncommunicativeParameterName:
82
- enabled: true
83
- exclude: []
84
- reject:
85
- - !ruby/regexp /^.$/
86
- - !ruby/regexp /[0-9]$/
87
- - !ruby/regexp /[A-Z]/
88
- accept: []
89
- UncommunicativeVariableName:
90
- enabled: true
91
- exclude: []
92
- reject:
93
- - !ruby/regexp /^.$/
94
- - !ruby/regexp /[0-9]$/
95
- - !ruby/regexp /[A-Z]/
96
- accept: []
97
- UnusedParameters:
98
- enabled: true
99
- exclude: []
100
- UtilityFunction:
101
- enabled: true
102
- exclude: []
103
- max_helper_calls: 0
@@ -1,92 +0,0 @@
1
- AllCops:
2
- Includes:
3
- - '**/*.rake'
4
- - 'Gemfile'
5
- - 'Gemfile.devtools'
6
- Excludes:
7
- - '**/vendor/**'
8
- - '**/benchmarks/**'
9
-
10
- # Avoid parameter lists longer than five parameters.
11
- ParameterLists:
12
- Max: 3
13
- CountKeywordArgs: true
14
-
15
- # Limit method length
16
- MethodLength:
17
- CountComments: false
18
- Max: 10
19
-
20
- # Avoid more than `Max` levels of nesting.
21
- BlockNesting:
22
- Max: 3
23
-
24
- # Align with the style guide.
25
- CollectionMethods:
26
- PreferredMethods:
27
- collect: 'map'
28
- inject: 'reduce'
29
- find: 'detect'
30
- find_all: 'select'
31
-
32
- # Do not force public/protected/private keyword to be indented at the same
33
- # level as the def keyword. My personal preference is to outdent these keywords
34
- # because I think when scanning code it makes it easier to identify the
35
- # sections of code and visually separate them. When the keyword is at the same
36
- # level I think it sort of blends in with the def keywords and makes it harder
37
- # to scan the code and see where the sections are.
38
- AccessModifierIndentation:
39
- Enabled: false
40
-
41
- # Limit line length
42
- LineLength:
43
- Max: 79
44
-
45
- # Disable documentation checking until a class needs to be documented once
46
- Documentation:
47
- Enabled: false
48
-
49
- # Do not always use &&/|| instead of and/or.
50
- AndOr:
51
- Enabled: false
52
-
53
- # Do not favor modifier if/unless usage when you have a single-line body
54
- IfUnlessModifier:
55
- Enabled: false
56
-
57
- # Allow case equality operator (in limited use within the specs)
58
- CaseEquality:
59
- Enabled: false
60
-
61
- # Constants do not always have to use SCREAMING_SNAKE_CASE
62
- ConstantName:
63
- Enabled: false
64
-
65
- # Not all trivial readers/writers can be defined with attr_* methods
66
- TrivialAccessors:
67
- Enabled: false
68
-
69
- # Do not prefer do/end over {} for multiline blocks
70
- Blocks:
71
- Enabled: false
72
-
73
- # Allow empty lines around body
74
- EmptyLinesAroundBody:
75
- Enabled: false
76
-
77
- # Prefer String#% over Kernel#sprintf
78
- FormatString:
79
- Enabled: false
80
-
81
- # Use square brackets for literal Array objects
82
- PercentLiteralDelimiters:
83
- PreferredDelimiters:
84
- '%': ()
85
- '%i': '[]'
86
- '%q': ()
87
- '%Q': ()
88
- '%r': '{}'
89
- '%s': ()
90
- '%w': '[]'
91
- '%W': '[]'
92
- '%x': ()
@@ -1,2 +0,0 @@
1
- ---
2
- threshold: 100