rom-rails 0.3.0.beta1 → 0.3.0.rc1

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.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rom-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0.beta1
4
+ version: 0.3.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-26 00:00:00.000000000 Z
11
+ date: 2015-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rom
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.6.0.beta1
19
+ version: 0.6.0.rc1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.6.0.beta1
26
+ version: 0.6.0.rc1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: addressable
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -61,7 +61,7 @@ dependencies:
61
61
  version: '1.0'
62
62
  - - ">="
63
63
  - !ruby/object:Gem::Version
64
- version: 1.0.4
64
+ version: 1.0.5
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
@@ -71,7 +71,7 @@ dependencies:
71
71
  version: '1.0'
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: 1.0.4
74
+ version: 1.0.5
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: railties
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -168,9 +168,9 @@ files:
168
168
  - lib/rom/rails/configuration.rb
169
169
  - lib/rom/rails/controller_extension.rb
170
170
  - lib/rom/rails/inflections.rb
171
+ - lib/rom/rails/model/attributes.rb
171
172
  - lib/rom/rails/model/form.rb
172
- - lib/rom/rails/model/form/dsl.rb
173
- - lib/rom/rails/model/params.rb
173
+ - lib/rom/rails/model/form/class_interface.rb
174
174
  - lib/rom/rails/model/validator.rb
175
175
  - lib/rom/rails/model/validator/uniqueness_validator.rb
176
176
  - lib/rom/rails/railtie.rb
@@ -229,12 +229,11 @@ files:
229
229
  - spec/dummy/public/500.html
230
230
  - spec/dummy/public/favicon.ico
231
231
  - spec/dummy/public/robots.txt
232
- - spec/dummy/spec/controllers/users_controller_spec.rb
233
232
  - spec/dummy/spec/features/users_spec.rb
234
233
  - spec/dummy/spec/integration/logger_spec.rb
234
+ - spec/dummy/spec/integration/user_attributes_spec.rb
235
235
  - spec/dummy/spec/integration/user_commands_spec.rb
236
236
  - spec/dummy/spec/integration/user_model_mapping_spec.rb
237
- - spec/dummy/spec/integration/user_params_spec.rb
238
237
  - spec/dummy/vendor/assets/javascripts/.keep
239
238
  - spec/dummy/vendor/assets/stylesheets/.keep
240
239
  - spec/lib/active_record/configuration_spec.rb
@@ -244,7 +243,6 @@ files:
244
243
  - spec/lib/generators/relation_generator_spec.rb
245
244
  - spec/spec_helper.rb
246
245
  - spec/unit/form_spec.rb
247
- - spec/unit/params_spec.rb
248
246
  - spec/unit/validator_spec.rb
249
247
  homepage: http://rom-rb.org
250
248
  licenses:
@@ -266,7 +264,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
266
264
  version: 1.3.1
267
265
  requirements: []
268
266
  rubyforge_project:
269
- rubygems_version: 2.2.2
267
+ rubygems_version: 2.4.5
270
268
  signing_key:
271
269
  specification_version: 4
272
270
  summary: Integrate Ruby Object Mapper with Rails
@@ -324,12 +322,11 @@ test_files:
324
322
  - spec/dummy/public/500.html
325
323
  - spec/dummy/public/favicon.ico
326
324
  - spec/dummy/public/robots.txt
327
- - spec/dummy/spec/controllers/users_controller_spec.rb
328
325
  - spec/dummy/spec/features/users_spec.rb
329
326
  - spec/dummy/spec/integration/logger_spec.rb
327
+ - spec/dummy/spec/integration/user_attributes_spec.rb
330
328
  - spec/dummy/spec/integration/user_commands_spec.rb
331
329
  - spec/dummy/spec/integration/user_model_mapping_spec.rb
332
- - spec/dummy/spec/integration/user_params_spec.rb
333
330
  - spec/dummy/vendor/assets/javascripts/.keep
334
331
  - spec/dummy/vendor/assets/stylesheets/.keep
335
332
  - spec/lib/active_record/configuration_spec.rb
@@ -339,6 +336,4 @@ test_files:
339
336
  - spec/lib/generators/relation_generator_spec.rb
340
337
  - spec/spec_helper.rb
341
338
  - spec/unit/form_spec.rb
342
- - spec/unit/params_spec.rb
343
339
  - spec/unit/validator_spec.rb
344
- has_rdoc:
@@ -1,173 +0,0 @@
1
- module ROM
2
- module Model
3
- class Form
4
- module DSL
5
- attr_reader :params, :validator, :self_commands, :injectible_commands,
6
- :model, :input_block, :validations_block
7
-
8
- def inherited(klass)
9
- klass.inject_commands_for(*injectible_commands) if injectible_commands
10
- klass.commands(*self_commands) if self_commands
11
- klass.input(readers: false, &input_block) if input_block
12
- klass.validations(&validations_block) if validations_block
13
- super
14
- end
15
-
16
- def commands(names)
17
- names.each { |relation, _action| attr_reader(relation) }
18
- @self_commands = names
19
- self
20
- end
21
-
22
- def key(*keys)
23
- if keys.any? && !@key
24
- @key = keys
25
- attr_reader(*keys)
26
- elsif !@key
27
- @key = [:id]
28
- attr_reader :id
29
- elsif keys.any?
30
- @key = keys
31
- end
32
- @key
33
- end
34
-
35
- def input(options = {}, &block)
36
- readers = options.fetch(:readers) { true }
37
- define_params!(block)
38
- define_attribute_readers! if readers
39
- define_model!
40
- self
41
- end
42
-
43
- def validations(&block)
44
- define_validator!(block)
45
- self
46
- end
47
-
48
- def inject_commands_for(*names)
49
- @injectible_commands = names
50
- names.each { |name| attr_reader(name) }
51
- self
52
- end
53
-
54
- def build(input = {}, options = {})
55
- new(clear_input(input), options.merge(command_registry))
56
- end
57
-
58
- def command_registry
59
- @command_registry ||= setup_command_registry
60
- end
61
-
62
- def clear_input(input)
63
- input.each_with_object({}) { |(key, value), object|
64
- next if value.is_a?(String) && value.blank?
65
-
66
- object[key] =
67
- if value.is_a?(Hash)
68
- clear_input(value)
69
- elsif value.is_a?(Array)
70
- value.map { |v| v.is_a?(Hash) ? clear_input(v) : v }
71
- else
72
- value
73
- end
74
- }.symbolize_keys
75
- end
76
-
77
- def define_params!(block)
78
- @input_block = block
79
- @params = ClassBuilder.new(name: "#{name}::Params", parent: Object).call { |klass|
80
- klass.send(:include, ROM::Model::Params)
81
- }
82
- @params.class_eval(&block)
83
- const_set(:Params, @params)
84
- end
85
-
86
- def define_attribute_readers!
87
- @params.attribute_set.each do |attribute|
88
- if public_instance_methods.include?(attribute.name)
89
- raise(
90
- ArgumentError,
91
- "#{attribute.name} attribute is in conflict with #{self}##{attribute.name}"
92
- )
93
- end
94
-
95
- class_eval <<-RUBY, __FILE__, __LINE__ + 1
96
- def #{attribute.name}
97
- params[:#{attribute.name}]
98
- end
99
- RUBY
100
- end
101
- end
102
-
103
- def define_model!
104
- @model = ClassBuilder.new(name: "#{name}::Model", parent: @params).call { |klass|
105
- klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1
106
- def persisted?
107
- to_key.any?
108
- end
109
-
110
- def to_key
111
- to_h.values_at(#{key.map(&:inspect).join(', ')}).compact
112
- end
113
- RUBY
114
- }
115
- key.each { |name| @model.attribute(name) }
116
- const_set(:Model, @model)
117
- end
118
-
119
- def define_validator!(block)
120
- @validations_block = block
121
- @validator = ClassBuilder.new(name: "#{name}::Validator", parent: Object).call { |klass|
122
- klass.send(:include, ROM::Model::Validator)
123
- }
124
- @validator.class_eval(&block)
125
- const_set(:Validator, @validator)
126
- end
127
-
128
- private
129
-
130
- def rom
131
- ROM.env
132
- end
133
-
134
- def adapter
135
- ROM.adapters.keys.first
136
- end
137
-
138
- def setup_command_registry
139
- commands = {}
140
-
141
- if self_commands
142
- self_commands.each do |rel_name, name|
143
- command = build_command(name, rel_name)
144
- commands[rel_name] = CommandRegistry.new(name => command)
145
- end
146
- end
147
-
148
- if injectible_commands
149
- injectible_commands.each do |relation|
150
- commands[relation] = rom.command(relation)
151
- end
152
- end
153
-
154
- commands
155
- end
156
-
157
- def build_command(name, rel_name)
158
- klass = Command.build_class(name, rel_name, adapter: adapter)
159
-
160
- klass.result :one
161
- klass.input @params
162
- klass.validator @validator
163
-
164
- relation = rom.relations[rel_name]
165
- repository = rom.repositories[relation.repository]
166
- repository.extend_command_class(klass, relation.dataset)
167
-
168
- klass.build(relation)
169
- end
170
- end
171
- end
172
- end
173
- end
@@ -1,72 +0,0 @@
1
- require 'virtus'
2
- require 'active_model/conversion'
3
-
4
- module ROM
5
- module Model
6
- # Mixin for validatable and coercible parameters
7
- #
8
- # @example
9
- #
10
- # class UserParams
11
- # include ROM::Model::Params
12
- #
13
- # attribute :email, String
14
- # attribute :age, Integer
15
- #
16
- # validates :email, :age, presence: true
17
- # end
18
- #
19
- # user_params = UserParams.new(email: '', age: '18')
20
- #
21
- # user_params.email # => ''
22
- # user_params.age # => 18
23
- #
24
- # user_params.valid? # => false
25
- # user_params.errors # => #<ActiveModel::Errors:0x007fd2423fadb0 ...>
26
- #
27
- # @api public
28
- module Params
29
- VirtusModel = Virtus.model(strict: true, required: false)
30
-
31
- def self.included(base)
32
- base.class_eval do
33
- include VirtusModel
34
- include ActiveModel::Conversion
35
- end
36
- base.extend(ClassMethods)
37
- end
38
-
39
- def model_name
40
- self.class.model_name
41
- end
42
-
43
- module ClassMethods
44
- DEFAULT_TIMESTAMPS = [:created_at, :updated_at].freeze
45
-
46
- def [](input)
47
- input.is_a?(self) ? input : new(input)
48
- end
49
-
50
- def set_model_name(name)
51
- class_eval <<-RUBY
52
- def self.model_name
53
- @model_name ||= ActiveModel::Name.new(self, nil, #{name.inspect})
54
- end
55
- RUBY
56
- end
57
-
58
- def timestamps(*attrs)
59
- if attrs.empty?
60
- DEFAULT_TIMESTAMPS.each do |t|
61
- attribute t, DateTime, default: proc { DateTime.now }
62
- end
63
- else
64
- attrs.each do |attr|
65
- attribute attr, DateTime, default: proc { DateTime.now }
66
- end
67
- end
68
- end
69
- end
70
- end
71
- end
72
- end
@@ -1,29 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe UsersController, type: :controller do
4
- describe 'injected relations' do
5
- it 'exposes relation without required params' do
6
- get :index
7
-
8
- expect(controller.users).to eql(rom.read(:users).index.to_a)
9
- end
10
-
11
- it 'exposes relation with required params' do
12
- get :search, name: 'Jane'
13
-
14
- expect(controller.users).to eql(rom.read(:users).by_name('Jane').to_a)
15
- end
16
-
17
- it 'halts processing when required params are missing' do
18
- get :search
19
-
20
- expect(response.status).to be(400)
21
- end
22
-
23
- it 'skips injecting relation when :only option is used' do
24
- get :ping
25
-
26
- expect(controller.users).to be(nil)
27
- end
28
- end
29
- end
@@ -1,23 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ROM::Model::Params do
4
- let(:klass) {
5
- Class.new do
6
- include ROM::Model::Params
7
-
8
- attribute :name, String
9
- end
10
- }
11
-
12
- it 'fails loudly when given an incorrect type' do
13
- expect {
14
- klass.new(name: [])
15
- }.to raise_error(Virtus::CoercionError, /name/)
16
- end
17
-
18
- it 'does not fail on nil or missing attributes' do
19
- expect {
20
- klass.new
21
- }.not_to raise_error
22
- end
23
- end