rom-repository 1.4.0 → 2.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -6
  3. data/{LICENSE.txt → LICENSE} +1 -1
  4. data/README.md +18 -1
  5. data/lib/rom-repository.rb +1 -2
  6. data/lib/rom/repository.rb +9 -216
  7. data/lib/rom/repository/class_interface.rb +16 -33
  8. data/lib/rom/repository/relation_reader.rb +46 -0
  9. data/lib/rom/repository/root.rb +3 -59
  10. data/lib/rom/repository/version.rb +1 -1
  11. metadata +9 -98
  12. data/.gitignore +0 -3
  13. data/.rspec +0 -3
  14. data/.travis.yml +0 -27
  15. data/.yardopts +0 -2
  16. data/Gemfile +0 -38
  17. data/Rakefile +0 -19
  18. data/lib/rom/open_struct.rb +0 -35
  19. data/lib/rom/repository/changeset.rb +0 -155
  20. data/lib/rom/repository/changeset/associated.rb +0 -100
  21. data/lib/rom/repository/changeset/create.rb +0 -16
  22. data/lib/rom/repository/changeset/delete.rb +0 -17
  23. data/lib/rom/repository/changeset/pipe.rb +0 -97
  24. data/lib/rom/repository/changeset/restricted.rb +0 -28
  25. data/lib/rom/repository/changeset/stateful.rb +0 -282
  26. data/lib/rom/repository/changeset/update.rb +0 -82
  27. data/lib/rom/repository/command_compiler.rb +0 -257
  28. data/lib/rom/repository/command_proxy.rb +0 -26
  29. data/lib/rom/repository/header_builder.rb +0 -65
  30. data/lib/rom/repository/mapper_builder.rb +0 -23
  31. data/lib/rom/repository/relation_proxy.rb +0 -337
  32. data/lib/rom/repository/relation_proxy/combine.rb +0 -320
  33. data/lib/rom/repository/relation_proxy/wrap.rb +0 -78
  34. data/lib/rom/repository/struct_builder.rb +0 -83
  35. data/lib/rom/struct.rb +0 -113
  36. data/log/.gitkeep +0 -0
  37. data/rom-repository.gemspec +0 -23
  38. data/spec/integration/changeset_spec.rb +0 -193
  39. data/spec/integration/command_macros_spec.rb +0 -191
  40. data/spec/integration/command_spec.rb +0 -228
  41. data/spec/integration/multi_adapter_spec.rb +0 -73
  42. data/spec/integration/repository/aggregate_spec.rb +0 -58
  43. data/spec/integration/repository_spec.rb +0 -406
  44. data/spec/integration/root_repository_spec.rb +0 -106
  45. data/spec/integration/typed_structs_spec.rb +0 -64
  46. data/spec/shared/database.rb +0 -79
  47. data/spec/shared/mappers.rb +0 -35
  48. data/spec/shared/models.rb +0 -41
  49. data/spec/shared/plugins.rb +0 -66
  50. data/spec/shared/relations.rb +0 -115
  51. data/spec/shared/repo.rb +0 -86
  52. data/spec/shared/seeds.rb +0 -30
  53. data/spec/shared/structs.rb +0 -140
  54. data/spec/spec_helper.rb +0 -83
  55. data/spec/support/mapper_registry.rb +0 -9
  56. data/spec/support/mutant.rb +0 -10
  57. data/spec/unit/changeset/associate_spec.rb +0 -120
  58. data/spec/unit/changeset/map_spec.rb +0 -111
  59. data/spec/unit/changeset_spec.rb +0 -186
  60. data/spec/unit/relation_proxy_spec.rb +0 -202
  61. data/spec/unit/repository/changeset_spec.rb +0 -197
  62. data/spec/unit/repository/inspect_spec.rb +0 -18
  63. data/spec/unit/repository/session_spec.rb +0 -251
  64. data/spec/unit/repository/transaction_spec.rb +0 -42
  65. data/spec/unit/session_spec.rb +0 -46
  66. data/spec/unit/struct_builder_spec.rb +0 -128
@@ -57,9 +57,9 @@ module ROM
57
57
  end
58
58
 
59
59
  # @see Repository#initialize
60
- def initialize(container, opts = EMPTY_HASH)
60
+ def initialize(container, options = EMPTY_HASH)
61
61
  super
62
- @root = relations[self.class.root]
62
+ @root = set_relation(self.class.root)
63
63
  end
64
64
 
65
65
  # Compose a relation aggregate from the root relation
@@ -97,63 +97,7 @@ module ROM
97
97
  #
98
98
  # @api public
99
99
  def aggregate(*args)
100
- if args.all? { |arg| arg.is_a?(Symbol) }
101
- root.combine(*args)
102
- else
103
- args.reduce(root) { |a, e| a.combine(e) }
104
- end
105
- end
106
-
107
- # @overload changeset(name, *args)
108
- # Delegate to Repository#changeset
109
- #
110
- # @see Repository#changeset
111
- #
112
- # @overload changeset(data)
113
- # Builds a create changeset for the root relation
114
- #
115
- # @example
116
- # user_repo.changeset(name: "Jane")
117
- #
118
- # @param data [Hash] New data
119
- #
120
- # @return [Changeset::Create]
121
- #
122
- # @overload changeset(primary_key, data)
123
- # Builds an update changeset for the root relation
124
- #
125
- # @example
126
- # user_repo.changeset(1, name: "Jane Doe")
127
- #
128
- # @param primary_key [Object] Primary key for restricting relation
129
- #
130
- # @return [Changeset::Update]
131
- #
132
- # @overload changeset(changeset_class)
133
- # Return a changeset prepared for repo's root relation
134
- #
135
- # @example
136
- # changeset = user_repo.changeset(MyChangeset)
137
- #
138
- # changeset.relation == user_repo.root
139
- # # true
140
- #
141
- # @param [Class] changeset_class Your custom changeset class
142
- #
143
- # @return [Changeset]
144
- #
145
- # @see Repository#changeset
146
- #
147
- # @api public
148
- def changeset(*args)
149
- if args.first.is_a?(Symbol) && relations.key?(args.first)
150
- super
151
- elsif args.first.is_a?(Class)
152
- klass, *rest = args
153
- super(klass[klass.relation || self.class.root], *rest)
154
- else
155
- super(root.name, *args)
156
- end
100
+ root.combine(*args)
157
101
  end
158
102
  end
159
103
  end
@@ -1,5 +1,5 @@
1
1
  module ROM
2
2
  class Repository
3
- VERSION = '1.4.0'.freeze
3
+ VERSION = '2.0.0.beta1'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,63 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rom-repository
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 2.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-04 00:00:00.000000000 Z
11
+ date: 2017-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rom
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '3.3'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '3.3'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: rom-mapper
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: '0.5'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '0.5'
41
- - !ruby/object:Gem::Dependency
42
- name: dry-core
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '0.3'
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: 0.3.1
19
+ version: 1.0.0.beta
51
20
  type: :runtime
52
21
  prerelease: false
53
22
  version_requirements: !ruby/object:Gem::Requirement
54
23
  requirements:
55
24
  - - "~>"
56
25
  - !ruby/object:Gem::Version
57
- version: '0.3'
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: 0.3.1
26
+ version: 1.0.0.beta
61
27
  - !ruby/object:Gem::Dependency
62
28
  name: dry-struct
63
29
  requirement: !ruby/object:Gem::Requirement
@@ -100,77 +66,22 @@ dependencies:
100
66
  - - "~>"
101
67
  - !ruby/object:Gem::Version
102
68
  version: '3.5'
103
- description: rom-repository adds support for auto-mapping and commands on top of rom-rb
104
- relations
69
+ description: Repository abstraction for rom-rb
105
70
  email: piotr.solnica+oss@gmail.com
106
71
  executables: []
107
72
  extensions: []
108
73
  extra_rdoc_files: []
109
74
  files:
110
- - ".gitignore"
111
- - ".rspec"
112
- - ".travis.yml"
113
- - ".yardopts"
114
75
  - CHANGELOG.md
115
- - Gemfile
116
- - LICENSE.txt
76
+ - LICENSE
117
77
  - README.md
118
- - Rakefile
119
78
  - lib/rom-repository.rb
120
- - lib/rom/open_struct.rb
121
79
  - lib/rom/repository.rb
122
- - lib/rom/repository/changeset.rb
123
- - lib/rom/repository/changeset/associated.rb
124
- - lib/rom/repository/changeset/create.rb
125
- - lib/rom/repository/changeset/delete.rb
126
- - lib/rom/repository/changeset/pipe.rb
127
- - lib/rom/repository/changeset/restricted.rb
128
- - lib/rom/repository/changeset/stateful.rb
129
- - lib/rom/repository/changeset/update.rb
130
80
  - lib/rom/repository/class_interface.rb
131
- - lib/rom/repository/command_compiler.rb
132
- - lib/rom/repository/command_proxy.rb
133
- - lib/rom/repository/header_builder.rb
134
- - lib/rom/repository/mapper_builder.rb
135
- - lib/rom/repository/relation_proxy.rb
136
- - lib/rom/repository/relation_proxy/combine.rb
137
- - lib/rom/repository/relation_proxy/wrap.rb
81
+ - lib/rom/repository/relation_reader.rb
138
82
  - lib/rom/repository/root.rb
139
83
  - lib/rom/repository/session.rb
140
- - lib/rom/repository/struct_builder.rb
141
84
  - lib/rom/repository/version.rb
142
- - lib/rom/struct.rb
143
- - log/.gitkeep
144
- - rom-repository.gemspec
145
- - spec/integration/changeset_spec.rb
146
- - spec/integration/command_macros_spec.rb
147
- - spec/integration/command_spec.rb
148
- - spec/integration/multi_adapter_spec.rb
149
- - spec/integration/repository/aggregate_spec.rb
150
- - spec/integration/repository_spec.rb
151
- - spec/integration/root_repository_spec.rb
152
- - spec/integration/typed_structs_spec.rb
153
- - spec/shared/database.rb
154
- - spec/shared/mappers.rb
155
- - spec/shared/models.rb
156
- - spec/shared/plugins.rb
157
- - spec/shared/relations.rb
158
- - spec/shared/repo.rb
159
- - spec/shared/seeds.rb
160
- - spec/shared/structs.rb
161
- - spec/spec_helper.rb
162
- - spec/support/mapper_registry.rb
163
- - spec/support/mutant.rb
164
- - spec/unit/changeset/associate_spec.rb
165
- - spec/unit/changeset/map_spec.rb
166
- - spec/unit/changeset_spec.rb
167
- - spec/unit/relation_proxy_spec.rb
168
- - spec/unit/repository/changeset_spec.rb
169
- - spec/unit/repository/inspect_spec.rb
170
- - spec/unit/repository/session_spec.rb
171
- - spec/unit/repository/transaction_spec.rb
172
- - spec/unit/session_spec.rb
173
- - spec/unit/struct_builder_spec.rb
174
85
  homepage: http://rom-rb.org
175
86
  licenses:
176
87
  - MIT
@@ -186,9 +97,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
186
97
  version: '0'
187
98
  required_rubygems_version: !ruby/object:Gem::Requirement
188
99
  requirements:
189
- - - ">="
100
+ - - ">"
190
101
  - !ruby/object:Gem::Version
191
- version: '0'
102
+ version: 1.3.1
192
103
  requirements: []
193
104
  rubyforge_project:
194
105
  rubygems_version: 2.6.12
data/.gitignore DELETED
@@ -1,3 +0,0 @@
1
- Gemfile.lock
2
- log/*.log
3
- doc
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --color
2
- --order random
3
- --require ./spec/spec_helper
data/.travis.yml DELETED
@@ -1,27 +0,0 @@
1
- language: ruby
2
- dist: trusty
3
- sudo: required
4
- cache: bundler
5
- bundler_args: --without yard guard benchmarks tools
6
- before_script:
7
- - psql -c 'create database rom_repository' -U postgres
8
- - rvm get master
9
- script: "bundle exec rake ci"
10
- after_success:
11
- - '[ -d coverage ] && bundle exec codeclimate-test-reporter'
12
- rvm:
13
- - 2.2.7
14
- - 2.3.4
15
- - 2.4.1
16
- - jruby-9.1.8.0
17
- env:
18
- global:
19
- - JRUBY_OPTS='--dev -J-Xmx1024M'
20
- - COVERAGE='true'
21
- notifications:
22
- webhooks:
23
- urls:
24
- - https://webhooks.gitter.im/e/39e1225f489f38b0bd09
25
- on_success: change
26
- on_failure: always
27
- on_start: false
data/.yardopts DELETED
@@ -1,2 +0,0 @@
1
- --query '@api.text != "private"'
2
- --embed-mixins
data/Gemfile DELETED
@@ -1,38 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
4
-
5
- gem 'inflecto'
6
-
7
- group :development do
8
- gem 'dry-equalizer', '~> 0.2'
9
- gem 'sqlite3', platforms: [:mri, :rbx]
10
- gem 'jdbc-sqlite3', platforms: :jruby
11
- end
12
-
13
- group :test do
14
- gem 'rom', git: 'https://github.com/rom-rb/rom.git', branch: 'release-3.0'
15
- gem 'rom-sql', git: 'https://github.com/rom-rb/rom-sql.git', branch: 'release-1.0'
16
- gem 'rspec'
17
- gem 'dry-struct'
18
- gem 'byebug', platforms: :mri
19
- gem 'pg', platforms: [:mri, :rbx]
20
- gem 'jdbc-postgres', platforms: :jruby
21
-
22
- platform :mri do
23
- gem 'codeclimate-test-reporter', require: false
24
- gem 'simplecov'
25
- end
26
- end
27
-
28
- group :benchmarks do
29
- gem 'hotch', platforms: :mri
30
- gem 'benchmark-ips'
31
- gem 'activerecord', '~> 5.0'
32
- end
33
-
34
- group :tools do
35
- gem 'pry'
36
- gem 'mutant'
37
- gem 'mutant-rspec'
38
- end
data/Rakefile DELETED
@@ -1,19 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
- task default: [:ci]
6
-
7
- desc "Run CI tasks"
8
- task ci: [:spec]
9
-
10
- begin
11
- require "rubocop/rake_task"
12
-
13
- Rake::Task[:default].enhance [:rubocop]
14
-
15
- RuboCop::RakeTask.new do |task|
16
- task.options << "--display-cop-names"
17
- end
18
- rescue LoadError
19
- end
@@ -1,35 +0,0 @@
1
- module ROM
2
- # ROM's open structs are used for relations with empty schemas.
3
- # Such relations may exist in cases like using raw SQL strings
4
- # where schema was not explicitly defined using `view` DSL.
5
- #
6
- # @api public
7
- class OpenStruct
8
- IVAR = -> v { :"@#{v}" }
9
-
10
- # @api private
11
- def initialize(attributes)
12
- attributes.each do |key, value|
13
- instance_variable_set(IVAR[key], value)
14
- end
15
- end
16
-
17
- # @api private
18
- def respond_to_missing?(meth, include_private = false)
19
- super || instance_variables.include?(IVAR[meth])
20
- end
21
-
22
- private
23
-
24
- # @api private
25
- def method_missing(meth, *args, &block)
26
- ivar = IVAR[meth]
27
-
28
- if instance_variables.include?(ivar)
29
- instance_variable_get(ivar)
30
- else
31
- super
32
- end
33
- end
34
- end
35
- end
@@ -1,155 +0,0 @@
1
- require 'dry/core/class_attributes'
2
- require 'dry/core/cache'
3
-
4
- require 'rom/initializer'
5
-
6
- module ROM
7
- # Abstract Changeset class
8
- #
9
- # If you inherit from this class you need to configure additional settings
10
- #
11
- # @example define a custom changeset using :upsert command
12
- # class NewTag < ROM::Changeset[:tags]
13
- # command_type :upsert
14
- # end
15
- #
16
- # @abstract
17
- class Changeset
18
- DEFAULT_COMMAND_OPTS = { mapper: false }.freeze
19
-
20
- extend Initializer
21
- extend Dry::Core::Cache
22
- extend Dry::Core::ClassAttributes
23
-
24
- # @!method self.command_type
25
- # Get or set changeset command type
26
- #
27
- # @overload command_type
28
- # Return configured command_type
29
- # @return [Symbol]
30
- #
31
- # @overload command_type(identifier)
32
- # Set relation identifier for this changeset
33
- # @param [Symbol] identifier The command type identifier
34
- # @return [Symbol]
35
- defines :command_type
36
-
37
- # @!method self.relation
38
- # Get or set changeset relation identifier
39
- #
40
- # @overload relation
41
- # Return configured relation identifier for this changeset
42
- # @return [Symbol]
43
- #
44
- # @overload relation(identifier)
45
- # Set relation identifier for this changeset
46
- # @param [Symbol] identifier The relation identifier from the ROM container
47
- # @return [Symbol]
48
- defines :relation
49
-
50
- # @!attribute [r] relation
51
- # @return [Relation] The changeset relation
52
- param :relation
53
-
54
- # @!attribute [r] command_compiler
55
- # @return [Proc] a proc that can compile a command (typically provided by a repo)
56
- option :command_compiler, optional: true
57
-
58
- # @!attribute [r] command_type
59
- # @return [Symbol] a custom command identifier
60
- option :command_type, default: -> { self.class.command_type }
61
-
62
- # Create a changeset class preconfigured for a specific relation
63
- #
64
- # @example
65
- # class NewUserChangeset < ROM::Changeset::Create[:users]
66
- # end
67
- #
68
- # user_repo.changeset(NewUserChangeset).data(name: 'Jane')
69
- #
70
- # @api public
71
- def self.[](relation_name)
72
- fetch_or_store([relation_name, self]) {
73
- Class.new(self) { relation(relation_name) }
74
- }
75
- end
76
-
77
- # Return a new changeset with updated options
78
- #
79
- # @example
80
- # class NewUser < ROM::Changeset::Create[:users]
81
- # option :token_generator
82
- # end
83
- #
84
- # changeset = user_repo.changeset(NewUser).with(token_generator: my_token_gen)
85
- #
86
- # @param [Hash] new_options The new options
87
- #
88
- # @return [Changeset]
89
- #
90
- # @api public
91
- def with(new_options)
92
- self.class.new(relation, options.merge(new_options))
93
- end
94
-
95
- # Return a new changeset with provided relation
96
- #
97
- # New options can be provided too
98
- #
99
- # @param [Relation] relation
100
- # @param [Hash] options
101
- #
102
- # @return [Changeset]
103
- #
104
- # @api public
105
- def new(relation, new_options = EMPTY_HASH)
106
- self.class.new(relation, new_options.empty? ? options : options.merge(new_options))
107
- end
108
-
109
- # Persist changeset
110
- #
111
- # @example
112
- # changeset = user_repo.changeset(name: 'Jane')
113
- # changeset.commit
114
- # # => { id: 1, name: 'Jane' }
115
- #
116
- # @return [Hash, Array]
117
- #
118
- # @api public
119
- def commit
120
- command.call
121
- end
122
-
123
- # Return string representation of the changeset
124
- #
125
- # @return [String]
126
- #
127
- # @api public
128
- def inspect
129
- %(#<#{self.class} relation=#{relation.name.inspect}>)
130
- end
131
-
132
- # Return a command for this changeset
133
- #
134
- # @return [ROM::Command]
135
- #
136
- # @api private
137
- def command
138
- command_compiler.(command_type, relation_identifier, DEFAULT_COMMAND_OPTS)
139
- end
140
-
141
- private
142
-
143
- # @api private
144
- def relation_identifier
145
- relation.name.relation
146
- end
147
- end
148
- end
149
-
150
- require 'rom/repository/changeset/stateful'
151
- require 'rom/repository/changeset/associated'
152
-
153
- require 'rom/repository/changeset/create'
154
- require 'rom/repository/changeset/update'
155
- require 'rom/repository/changeset/delete'