rom-rails 0.3.2 → 0.3.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2ad7fe254e8fd3118cbdac07bf9bc51d0b686e32
4
- data.tar.gz: 73527dafdfb2542cbc1dc30559dc56d66cfb5c08
3
+ metadata.gz: d53fad0999e88095261c12196674bf05ef9754eb
4
+ data.tar.gz: 134a8100ee7b0b4967315b3ce342a1526b9280e8
5
5
  SHA512:
6
- metadata.gz: d5968c5f300b0e336727b13919b9a7204f2fb40dc541bf6818c7eb05eb913ee3c82b78375d07ea16aec8fdbe2834a914dc034966ff28d7f45716c2fe44c52cb8
7
- data.tar.gz: fe6ab28f3f240bdba00fe1282ee9aa34a42f5f51230b1329b17fdb39ae3352ece725cbf89a97e39ff29754b61e0fdf67e5038f302d40dd8c22e872755327f0b3
6
+ metadata.gz: ff2d1b07af8d3e2ad0263ea1f7fa1d433dc1f3da4c801710f51daa778dc9b903224747bdd55a9ca9bb232103a4561ef332161a6db12bd367a9ffe6e130fd127b
7
+ data.tar.gz: ebf50d904cd43b7be7addd0c9167921e4ae9924250b8e69aea2bbd8f9f705020f80865fc5336b8a1ee67480b8b6833d241250cb3c732afc4ed2138d2bf67c571
data/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ ## v0.3.3 2015-05-22
2
+
3
+ ### Added
4
+
5
+ * `db:setup` task which works OOTB with rom-sql tasks (solnic)
6
+
7
+ ### Changed
8
+
9
+ * `MissingRepositoryConfigError` is raised when repositories are not configured (solnic)
10
+
11
+ ### Fixed
12
+
13
+ * The railitie no longer set `nil` as default repository when ActiveRecord is not present (solnic)
14
+
15
+ [Compare v0.3.2...v0.3.3](https://github.com/rom-rb/rom-rails/compare/v0.3.2...v0.3.3)
16
+
1
17
  ## v0.3.2 2015-05-17
2
18
 
3
19
  ### Fixed
data/Gemfile CHANGED
@@ -4,11 +4,12 @@ gemspec
4
4
 
5
5
  RAILS_VERSION = '4.2.1'
6
6
 
7
- %w(railties activemodel actionview actionpack).each do |name|
7
+ %w(railties activemodel actionview actionpack activerecord).each do |name|
8
8
  gem name, RAILS_VERSION
9
9
  end
10
10
 
11
11
  gem 'sqlite3', platforms: [:mri, :rbx]
12
+ gem 'byebug', platforms: :mri
12
13
 
13
14
  platforms :jruby do
14
15
  gem 'jdbc-sqlite3'
@@ -18,7 +19,6 @@ group :test do
18
19
  gem 'rack-test'
19
20
  gem 'rom', github: 'rom-rb/rom', branch: 'master'
20
21
  gem 'rom-sql', github: 'rom-rb/rom-sql', branch: 'master'
21
- gem 'byebug', platforms: :mri
22
22
  gem 'rspec-rails', '~> 3.1'
23
23
  gem 'codeclimate-test-reporter', require: nil
24
24
  gem 'database_cleaner'
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'bundler/setup'
2
2
  require 'rubocop/rake_task'
3
3
 
4
- task default: %w(app:db:schema:load app:spec rubocop)
4
+ task default: %w(app:spec rubocop)
5
5
 
6
6
  APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
7
7
  load 'rails/tasks/engine.rake'
@@ -10,6 +10,47 @@ Spring.after_fork { ROM::Rails::Railtie.disconnect } if defined?(Spring)
10
10
  module ROM
11
11
  module Rails
12
12
  class Railtie < ::Rails::Railtie
13
+ COMPONENT_DIRS = %w(relations mappers commands).freeze
14
+
15
+ MissingRepositoryConfigError = Class.new(StandardError)
16
+
17
+ # @api public
18
+ def self.setup_repositories
19
+ raise(
20
+ MissingRepositoryConfigError,
21
+ "seems like you didn't configure any repositories"
22
+ ) unless config.rom.repositories.any?
23
+
24
+ ROM.setup(config.rom.repositories)
25
+ self
26
+ end
27
+
28
+ # @api public
29
+ def self.finalize
30
+ ROM.finalize
31
+ self
32
+ end
33
+
34
+ # If there's no default repository configured, try to infer it from
35
+ # other sources, e.g. ActiveRecord.
36
+ #
37
+ # @api private
38
+ def self.infer_default_repository
39
+ return unless active_record?
40
+ spec = ROM::Rails::ActiveRecord::Configuration.call
41
+ [:sql, spec[:uri], spec[:options]]
42
+ end
43
+
44
+ # @api private
45
+ def self.active_record?
46
+ defined?(::ActiveRecord)
47
+ end
48
+
49
+ # @api private
50
+ def before_initialize
51
+ config.rom = Configuration.new
52
+ end
53
+
13
54
  initializer 'rom.configure_action_controller' do
14
55
  ActiveSupport.on_load(:action_controller) do
15
56
  ActionController::Base.send(:include, ControllerExtension)
@@ -17,17 +58,21 @@ module ROM
17
58
  end
18
59
 
19
60
  initializer 'rom.adjust_eager_load_paths' do |app|
20
- paths = %w(commands mappers relations).map do |directory|
61
+ paths = COMPONENT_DIRS.map do |directory|
21
62
  ::Rails.root.join('app', directory).to_s
22
63
  end
23
64
 
24
65
  app.config.eager_load_paths -= paths
25
66
  end
26
67
 
68
+ rake_tasks do
69
+ load "rom/rails/tasks/db.rake" unless self.class.active_record?
70
+ end
71
+
27
72
  # Make `ROM::Rails::Configuration` instance available to the user via
28
73
  # `Rails.application.config` before other initializers run.
29
74
  config.before_initialize do |_app|
30
- config.rom = Configuration.new
75
+ before_initialize
31
76
  end
32
77
 
33
78
  # Reload ROM-related application code on each request.
@@ -40,7 +85,7 @@ module ROM
40
85
  #
41
86
  # @example
42
87
  # ROM::Rails::Railtie.configure do |config|
43
- # config.repositories[:yaml] = {uri: 'yaml:///data'}
88
+ # config.repositories[:default] = [:yaml, 'yaml:///data']
44
89
  # end
45
90
  #
46
91
  # @api public
@@ -52,45 +97,45 @@ module ROM
52
97
  end
53
98
  end
54
99
 
100
+ # TODO: Add `ROM.env.disconnect` to core.
101
+ #
102
+ # @api private
55
103
  def disconnect
56
- # TODO: Add `ROM.env.disconnect` to core.
57
104
  ROM.env.repositories.each_value(&:disconnect)
58
105
  end
59
106
 
107
+ # @api private
60
108
  def setup
61
109
  if ROM.env
62
110
  ROM.setup(ROM.env.repositories)
63
111
  else
64
112
  repositories = config.rom.repositories
65
113
 
66
- # If there's no default repository configured, try to infer it from
67
- # other sources, e.g. ActiveRecord.
68
- repositories[:default] ||= infer_default_repository
114
+ if self.class.active_record?
115
+ repositories[:default] ||= self.class.infer_default_repository
116
+ end
69
117
 
70
- ROM.setup(repositories.symbolize_keys)
118
+ self.class.setup_repositories
71
119
  end
72
120
  load_all
73
- ROM.finalize
74
- end
75
-
76
- def infer_default_repository
77
- return unless defined?(::ActiveRecord)
78
- spec = ActiveRecord::Configuration.call
79
- [:sql, spec[:uri], spec[:options]]
121
+ self.class.finalize
80
122
  end
81
123
 
124
+ # @api private
82
125
  def load_all
83
- %w(relations mappers commands).each do |type|
126
+ COMPONENT_DIRS.each do |type|
84
127
  load_files(type)
85
128
  end
86
129
  end
87
130
 
131
+ # @api private
88
132
  def load_files(type)
89
133
  Dir[root.join("app/#{type}/**/*.rb").to_s].each do |path|
90
134
  require_dependency(path)
91
135
  end
92
136
  end
93
137
 
138
+ # @api private
94
139
  def root
95
140
  ::Rails.root
96
141
  end
@@ -0,0 +1,11 @@
1
+ namespace :db do
2
+ desc 'Set up ROM repositories'
3
+ task :setup do
4
+ railtie = ROM::Rails::Railtie
5
+ railtie.before_initialize
6
+
7
+ require "#{Rails.root}/config/initializers/rom"
8
+
9
+ railtie.setup_repositories.finalize
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  module ROM
2
2
  module Rails
3
- VERSION = '0.3.2'.freeze
3
+ VERSION = '0.3.3'.freeze
4
4
  end
5
5
  end
data/spec/dummy/Rakefile CHANGED
@@ -6,11 +6,3 @@ require File.expand_path('../config/application', __FILE__)
6
6
  Dummy::Application.load_tasks
7
7
 
8
8
  require 'rom/sql/rake_task'
9
-
10
- namespace :db do
11
- task :setup do
12
- scheme = RUBY_ENGINE == 'jruby' ? 'jdbc:sqlite' : 'sqlite'
13
- ROM.setup(:sql, "#{scheme}://#{Rails.root}/db/#{Rails.env}.sqlite3")
14
- ROM.finalize
15
- end
16
- end
@@ -6,6 +6,6 @@ class UpdateUserForm < UserForm
6
6
  end
7
7
 
8
8
  def commit!
9
- users.try { users.update.by_id(id).set(attributes) }
9
+ users.try { users.update.by_id(id).call(attributes) }
10
10
  end
11
11
  end
@@ -1,6 +1,6 @@
1
1
  require File.expand_path('../boot', __FILE__)
2
2
 
3
- require "action_controller/railtie"
3
+ require 'action_controller/railtie'
4
4
 
5
5
  Bundler.setup(:default, Rails.env)
6
6
 
@@ -1,7 +1,3 @@
1
- development:
2
- adapter: sqlite3
3
- database: "db/development.sqlite3"
4
-
5
1
  test:
6
2
  adapter: sqlite3
7
- database: "db/test.sqlite3"
3
+ database: "db/test-ar.sqlite3"
@@ -1,10 +1,5 @@
1
1
  ROM::Rails::Railtie.configure do |config|
2
- db_config = ROM::Rails::ActiveRecord::Configuration.build(
3
- Rails.application.config.database_configuration[Rails.env].symbolize_keys
4
- .merge(root: Rails.root)
5
- )
6
-
7
- config.repositories[:default] = [:sql, db_config[:uri], db_config[:options]]
8
-
2
+ scheme = RUBY_ENGINE == 'jruby' ? 'jdbc:sqlite' : 'sqlite'
3
+ config.repositories[:default] = [:sql, "#{scheme}://#{Rails.root}/db/#{Rails.env}.sqlite3"]
9
4
  config.repositories[:test] = [:test_adapter, foo: :bar]
10
5
  end
@@ -0,0 +1,6 @@
1
+ describe 'Connects to repositories using database.yml' do
2
+ it 'works' do
3
+ pending 'I have no idea how to load AR in isolation'
4
+ raise 'database.yml must go'
5
+ end
6
+ end
@@ -213,6 +213,7 @@ describe 'Form' do
213
213
  it "recovers from database errors" do
214
214
  form = Class.new(ROM::Model::Form) do
215
215
  commands users: :create
216
+
216
217
  input do
217
218
  set_model_name 'User'
218
219
 
@@ -220,24 +221,16 @@ describe 'Form' do
220
221
  end
221
222
 
222
223
  def commit!(*args)
223
-
224
224
  users.try {
225
225
  raise ROM::SQL::ConstraintError.new(RuntimeError.new("duplicate key"))
226
226
  }
227
-
228
227
  end
229
228
  end
230
229
 
231
- result = form.build(email: 'test@example.com').save
232
-
233
- expect(result).not_to be_success
234
-
235
- expect(result.errors[:email]).to eq []
236
- expect(result.errors[:base]).to eq ["a database error prevented saving this form"]
230
+ expect {
231
+ form.build(email: 'test@example.com').save
232
+ }.to raise_error(ROM::SQL::ConstraintError)
237
233
  end
238
-
239
-
240
-
241
234
  end
242
235
 
243
236
  describe "#attributes" do
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.2
4
+ version: 0.3.3
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-05-17 00:00:00.000000000 Z
11
+ date: 2015-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rom
@@ -182,6 +182,7 @@ files:
182
182
  - lib/rom/rails/model/validator.rb
183
183
  - lib/rom/rails/model/validator/uniqueness_validator.rb
184
184
  - lib/rom/rails/railtie.rb
185
+ - lib/rom/rails/tasks/db.rake
185
186
  - lib/rom/rails/version.rb
186
187
  - rom-rails.gemspec
187
188
  - spec/dummy/.rspec
@@ -241,6 +242,7 @@ files:
241
242
  - spec/dummy/public/favicon.ico
242
243
  - spec/dummy/public/robots.txt
243
244
  - spec/dummy/spec/features/users_spec.rb
245
+ - spec/dummy/spec/integration/activerecord_setup.rb
244
246
  - spec/dummy/spec/integration/form_with_injected_commands_spec.rb
245
247
  - spec/dummy/spec/integration/initializer_spec.rb
246
248
  - spec/dummy/spec/integration/logger_spec.rb
@@ -340,6 +342,7 @@ test_files:
340
342
  - spec/dummy/public/favicon.ico
341
343
  - spec/dummy/public/robots.txt
342
344
  - spec/dummy/spec/features/users_spec.rb
345
+ - spec/dummy/spec/integration/activerecord_setup.rb
343
346
  - spec/dummy/spec/integration/form_with_injected_commands_spec.rb
344
347
  - spec/dummy/spec/integration/initializer_spec.rb
345
348
  - spec/dummy/spec/integration/logger_spec.rb