rom-rails 0.3.0.beta1 → 0.3.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
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