clowne 1.1.0 → 1.2.0
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 +4 -4
- data/.rubocop.yml +11 -51
- data/.travis.yml +11 -23
- data/Gemfile +9 -9
- data/README.md +8 -7
- data/Rakefile +3 -3
- data/clowne.gemspec +14 -8
- data/docs/.nojekyll +0 -0
- data/docs/.rubocop.yml +8 -2
- data/docs/CNAME +1 -0
- data/docs/README.md +131 -0
- data/docs/_sidebar.md +25 -0
- data/docs/active_record.md +2 -5
- data/docs/after_clone.md +3 -6
- data/docs/after_persist.md +7 -10
- data/docs/architecture.md +2 -5
- data/docs/assets/docsify.min.js +1 -0
- data/docs/assets/prism-ruby.min.js +1 -0
- data/docs/assets/styles.css +348 -0
- data/docs/assets/vue.css +1 -0
- data/docs/clone_mapper.md +2 -5
- data/docs/customization.md +1 -4
- data/docs/exclude_association.md +1 -4
- data/docs/finalize.md +4 -8
- data/docs/from_v02_to_v1.md +2 -10
- data/docs/getting_started.md +171 -0
- data/docs/implicit_cloner.md +1 -4
- data/docs/include_association.md +3 -6
- data/docs/index.html +29 -0
- data/docs/init_as.md +4 -8
- data/docs/inline_configuration.md +1 -4
- data/docs/nullify.md +1 -5
- data/docs/operation.md +3 -6
- data/docs/parameters.md +5 -8
- data/docs/sequel.md +1 -4
- data/docs/supported_adapters.md +3 -6
- data/docs/testing.md +18 -21
- data/docs/traits.md +1 -4
- data/gemfiles/activerecord42.gemfile +5 -5
- data/gemfiles/jruby.gemfile +6 -6
- data/gemfiles/railsmaster.gemfile +6 -6
- data/lib/clowne.rb +11 -11
- data/lib/clowne/adapters/active_record.rb +3 -3
- data/lib/clowne/adapters/active_record/associations.rb +7 -7
- data/lib/clowne/adapters/active_record/associations/base.rb +1 -1
- data/lib/clowne/adapters/active_record/associations/belongs_to.rb +1 -1
- data/lib/clowne/adapters/active_record/associations/has_one.rb +1 -1
- data/lib/clowne/adapters/active_record/resolvers/association.rb +1 -1
- data/lib/clowne/adapters/base.rb +6 -6
- data/lib/clowne/adapters/sequel.rb +7 -7
- data/lib/clowne/adapters/sequel/associations.rb +6 -6
- data/lib/clowne/adapters/sequel/associations/base.rb +2 -2
- data/lib/clowne/adapters/sequel/associations/many_to_many.rb +4 -4
- data/lib/clowne/adapters/sequel/associations/one_to_many.rb +1 -1
- data/lib/clowne/adapters/sequel/associations/one_to_one.rb +1 -1
- data/lib/clowne/adapters/sequel/operation.rb +3 -2
- data/lib/clowne/adapters/sequel/resolvers/after_persist.rb +1 -1
- data/lib/clowne/adapters/sequel/resolvers/association.rb +1 -1
- data/lib/clowne/adapters/sequel/specifications/after_persist_does_not_support.rb +1 -1
- data/lib/clowne/cloner.rb +8 -8
- data/lib/clowne/declarations.rb +15 -15
- data/lib/clowne/declarations/after_clone.rb +1 -1
- data/lib/clowne/declarations/after_persist.rb +1 -1
- data/lib/clowne/declarations/finalize.rb +1 -1
- data/lib/clowne/declarations/include_association.rb +1 -1
- data/lib/clowne/declarations/init_as.rb +1 -1
- data/lib/clowne/declarations/nullify.rb +1 -1
- data/lib/clowne/ext/orm_ext.rb +1 -1
- data/lib/clowne/ext/record_key.rb +1 -1
- data/lib/clowne/ext/string_constantize.rb +1 -1
- data/lib/clowne/ext/yield_self_then.rb +1 -1
- data/lib/clowne/planner.rb +1 -1
- data/lib/clowne/rspec.rb +3 -3
- data/lib/clowne/rspec/clone_association.rb +3 -3
- data/lib/clowne/rspec/clone_associations.rb +2 -2
- data/lib/clowne/rspec/helpers.rb +1 -1
- data/lib/clowne/utils/clone_mapper.rb +1 -1
- data/lib/clowne/utils/operation.rb +3 -3
- data/lib/clowne/utils/params.rb +1 -1
- data/lib/clowne/version.rb +1 -1
- metadata +50 -35
- data/docs/alternatives.md +0 -26
- data/docs/basic_example.md +0 -83
- data/docs/installation.md +0 -46
- data/docs/overview.md +0 -25
- data/docs/web/.gitignore +0 -11
- data/docs/web/README.md +0 -6
- data/docs/web/core/Footer.js +0 -88
- data/docs/web/i18n/en.json +0 -141
- data/docs/web/package.json +0 -14
- data/docs/web/pages/en/help.js +0 -50
- data/docs/web/pages/en/index.js +0 -231
- data/docs/web/pages/en/users.js +0 -47
- data/docs/web/sidebars.json +0 -38
- data/docs/web/siteConfig.js +0 -46
- data/docs/web/static/css/custom.css +0 -235
- data/docs/web/static/fonts/FiraCode-Medium.woff +0 -0
- data/docs/web/static/fonts/FiraCode-Regular.woff +0 -0
- data/docs/web/static/img/favicon/favicon.ico +0 -0
- data/docs/web/yarn.lock +0 -1741
@@ -36,7 +36,7 @@ module Clowne
|
|
36
36
|
|
37
37
|
def clonable_assoc?(source, declaration)
|
38
38
|
source.class.plugins.include?(::Sequel::Plugins::NestedAttributes) &&
|
39
|
-
source.respond_to?(:"#{declaration.name
|
39
|
+
source.respond_to?(:"#{declaration.name}_attributes=")
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
data/lib/clowne/cloner.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
3
|
+
require "clowne/planner"
|
4
|
+
require "clowne/dsl"
|
5
|
+
require "clowne/utils/options"
|
6
|
+
require "clowne/utils/params"
|
7
|
+
require "clowne/utils/operation"
|
8
8
|
|
9
9
|
module Clowne # :nodoc: all
|
10
10
|
class UnprocessableSourceError < StandardError; end
|
@@ -45,12 +45,12 @@ module Clowne # :nodoc: all
|
|
45
45
|
|
46
46
|
# rubocop: disable Metrics/AbcSize, Metrics/MethodLength
|
47
47
|
def call(object, **options)
|
48
|
-
raise(UnprocessableSourceError,
|
48
|
+
raise(UnprocessableSourceError, "Nil is not cloneable object") if object.nil?
|
49
49
|
|
50
50
|
options = Clowne::Utils::Options.new(options)
|
51
51
|
current_adapter = current_adapter(options.adapter)
|
52
52
|
|
53
|
-
raise(ConfigurationError,
|
53
|
+
raise(ConfigurationError, "Adapter is not defined") if current_adapter.nil?
|
54
54
|
|
55
55
|
plan =
|
56
56
|
if options.traits.empty?
|
@@ -79,7 +79,7 @@ module Clowne # :nodoc: all
|
|
79
79
|
|
80
80
|
def plan_with_traits(ids, current_adapter: adapter)
|
81
81
|
# Cache plans for combinations of traits
|
82
|
-
traits_id = ids.map(&:to_s).join(
|
82
|
+
traits_id = ids.map(&:to_s).join(":")
|
83
83
|
return traits_plans[traits_id] if traits_plans.key?(traits_id)
|
84
84
|
|
85
85
|
traits_plans[traits_id] = Clowne::Planner.compile(
|
data/lib/clowne/declarations.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "clowne/dsl"
|
4
|
+
require "clowne/utils/plan"
|
5
5
|
|
6
6
|
module Clowne
|
7
7
|
module Declarations # :nodoc:
|
8
8
|
module_function
|
9
9
|
|
10
|
-
def add(id, declaration = nil)
|
11
|
-
declaration =
|
10
|
+
def add(id, declaration = nil, &block)
|
11
|
+
declaration = block if block_given?
|
12
12
|
|
13
13
|
if declaration.is_a?(Class)
|
14
|
-
DSL.send(:define_method, id) do |*args, &
|
15
|
-
declarations.push declaration.new(*args, &
|
14
|
+
DSL.send(:define_method, id) do |*args, &inner_block|
|
15
|
+
declarations.push declaration.new(*args, &inner_block)
|
16
16
|
end
|
17
17
|
elsif declaration.is_a?(Proc)
|
18
18
|
DSL.send(:define_method, id, &declaration)
|
@@ -23,12 +23,12 @@ module Clowne
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
require
|
27
|
-
require
|
28
|
-
require
|
29
|
-
require
|
30
|
-
require
|
31
|
-
require
|
32
|
-
require
|
33
|
-
require
|
34
|
-
require
|
26
|
+
require "clowne/declarations/base"
|
27
|
+
require "clowne/declarations/init_as"
|
28
|
+
require "clowne/declarations/exclude_association"
|
29
|
+
require "clowne/declarations/finalize"
|
30
|
+
require "clowne/declarations/include_association"
|
31
|
+
require "clowne/declarations/nullify"
|
32
|
+
require "clowne/declarations/trait"
|
33
|
+
require "clowne/declarations/after_persist"
|
34
|
+
require "clowne/declarations/after_clone"
|
@@ -6,7 +6,7 @@ module Clowne
|
|
6
6
|
attr_reader :attributes
|
7
7
|
|
8
8
|
def initialize(*attributes)
|
9
|
-
raise ArgumentError,
|
9
|
+
raise ArgumentError, "At least one attribute required" if attributes.empty?
|
10
10
|
|
11
11
|
@attributes = attributes
|
12
12
|
end
|
data/lib/clowne/ext/orm_ext.rb
CHANGED
data/lib/clowne/planner.rb
CHANGED
data/lib/clowne/rspec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require "clowne/rspec/helpers"
|
4
|
+
require "clowne/rspec/clone_associations"
|
5
|
+
require "clowne/rspec/clone_association"
|
@@ -23,7 +23,7 @@ module Clowne
|
|
23
23
|
# rubocop: disable Metrics/AbcSize
|
24
24
|
def match(expected, _actual)
|
25
25
|
@actual = plan.declarations
|
26
|
-
|
26
|
+
.find { |key, decl| key == :association && decl.name == expected }
|
27
27
|
|
28
28
|
return false if @actual.nil?
|
29
29
|
|
@@ -60,10 +60,10 @@ module Clowne
|
|
60
60
|
expected_params[param] = options.fetch(param, UNDEFINED)
|
61
61
|
end
|
62
62
|
|
63
|
-
raise ArgumentError,
|
63
|
+
raise ArgumentError, "Lambda scope is not supported" if
|
64
64
|
expected_params[:scope].is_a?(Proc)
|
65
65
|
|
66
|
-
raise ArgumentError,
|
66
|
+
raise ArgumentError, "Lambda params is not supported" if
|
67
67
|
expected_params[:params].is_a?(Proc)
|
68
68
|
end
|
69
69
|
|
data/lib/clowne/rspec/helpers.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "clowne/utils/clone_mapper"
|
4
4
|
|
5
5
|
module Clowne
|
6
6
|
module Utils
|
@@ -74,12 +74,12 @@ module Clowne
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def save
|
77
|
-
warn
|
77
|
+
warn "[DEPRECATION] `save` is deprecated. Please use `persist` instead."
|
78
78
|
@clone.save
|
79
79
|
end
|
80
80
|
|
81
81
|
def save!
|
82
|
-
warn
|
82
|
+
warn "[DEPRECATION] `save!` is deprecated. Please use `persist!` instead."
|
83
83
|
@clone.save!
|
84
84
|
end
|
85
85
|
|
data/lib/clowne/utils/params.rb
CHANGED
data/lib/clowne/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clowne
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Dementyev
|
8
8
|
- Sverchkov Nikolay
|
9
9
|
autorequire:
|
10
|
-
bindir:
|
10
|
+
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-07-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -31,14 +31,20 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '12.3'
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 12.3.3
|
35
38
|
type: :development
|
36
39
|
prerelease: false
|
37
40
|
version_requirements: !ruby/object:Gem::Requirement
|
38
41
|
requirements:
|
39
42
|
- - "~>"
|
40
43
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
44
|
+
version: '12.3'
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 12.3.3
|
42
48
|
- !ruby/object:Gem::Dependency
|
43
49
|
name: rspec
|
44
50
|
requirement: !ruby/object:Gem::Requirement
|
@@ -73,42 +79,56 @@ dependencies:
|
|
73
79
|
requirements:
|
74
80
|
- - "~>"
|
75
81
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
82
|
+
version: 0.75.0
|
77
83
|
type: :development
|
78
84
|
prerelease: false
|
79
85
|
version_requirements: !ruby/object:Gem::Requirement
|
80
86
|
requirements:
|
81
87
|
- - "~>"
|
82
88
|
- !ruby/object:Gem::Version
|
83
|
-
version:
|
89
|
+
version: 0.75.0
|
84
90
|
- !ruby/object:Gem::Dependency
|
85
91
|
name: rubocop-md
|
86
92
|
requirement: !ruby/object:Gem::Requirement
|
87
93
|
requirements:
|
88
94
|
- - "~>"
|
89
95
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
96
|
+
version: 0.3.0
|
91
97
|
type: :development
|
92
98
|
prerelease: false
|
93
99
|
version_requirements: !ruby/object:Gem::Requirement
|
94
100
|
requirements:
|
95
101
|
- - "~>"
|
96
102
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
103
|
+
version: 0.3.0
|
98
104
|
- !ruby/object:Gem::Dependency
|
99
105
|
name: rubocop-rspec
|
100
106
|
requirement: !ruby/object:Gem::Requirement
|
101
107
|
requirements:
|
102
108
|
- - "~>"
|
103
109
|
- !ruby/object:Gem::Version
|
104
|
-
version:
|
110
|
+
version: 1.36.0
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 1.36.0
|
118
|
+
- !ruby/object:Gem::Dependency
|
119
|
+
name: standard
|
120
|
+
requirement: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.1.5
|
105
125
|
type: :development
|
106
126
|
prerelease: false
|
107
127
|
version_requirements: !ruby/object:Gem::Requirement
|
108
128
|
requirements:
|
109
129
|
- - "~>"
|
110
130
|
- !ruby/object:Gem::Version
|
111
|
-
version:
|
131
|
+
version: 0.1.5
|
112
132
|
description: A flexible gem for cloning your models.
|
113
133
|
email:
|
114
134
|
- palkan@evilmartians.com
|
@@ -132,46 +152,37 @@ files:
|
|
132
152
|
- bin/console
|
133
153
|
- bin/setup
|
134
154
|
- clowne.gemspec
|
155
|
+
- docs/.nojekyll
|
135
156
|
- docs/.rubocop.yml
|
157
|
+
- docs/CNAME
|
158
|
+
- docs/README.md
|
159
|
+
- docs/_sidebar.md
|
136
160
|
- docs/active_record.md
|
137
161
|
- docs/after_clone.md
|
138
162
|
- docs/after_persist.md
|
139
|
-
- docs/alternatives.md
|
140
163
|
- docs/architecture.md
|
141
|
-
- docs/
|
164
|
+
- docs/assets/docsify.min.js
|
165
|
+
- docs/assets/prism-ruby.min.js
|
166
|
+
- docs/assets/styles.css
|
167
|
+
- docs/assets/vue.css
|
142
168
|
- docs/clone_mapper.md
|
143
169
|
- docs/customization.md
|
144
170
|
- docs/exclude_association.md
|
145
171
|
- docs/finalize.md
|
146
172
|
- docs/from_v02_to_v1.md
|
173
|
+
- docs/getting_started.md
|
147
174
|
- docs/implicit_cloner.md
|
148
175
|
- docs/include_association.md
|
176
|
+
- docs/index.html
|
149
177
|
- docs/init_as.md
|
150
178
|
- docs/inline_configuration.md
|
151
|
-
- docs/installation.md
|
152
179
|
- docs/nullify.md
|
153
180
|
- docs/operation.md
|
154
|
-
- docs/overview.md
|
155
181
|
- docs/parameters.md
|
156
182
|
- docs/sequel.md
|
157
183
|
- docs/supported_adapters.md
|
158
184
|
- docs/testing.md
|
159
185
|
- docs/traits.md
|
160
|
-
- docs/web/.gitignore
|
161
|
-
- docs/web/README.md
|
162
|
-
- docs/web/core/Footer.js
|
163
|
-
- docs/web/i18n/en.json
|
164
|
-
- docs/web/package.json
|
165
|
-
- docs/web/pages/en/help.js
|
166
|
-
- docs/web/pages/en/index.js
|
167
|
-
- docs/web/pages/en/users.js
|
168
|
-
- docs/web/sidebars.json
|
169
|
-
- docs/web/siteConfig.js
|
170
|
-
- docs/web/static/css/custom.css
|
171
|
-
- docs/web/static/fonts/FiraCode-Medium.woff
|
172
|
-
- docs/web/static/fonts/FiraCode-Regular.woff
|
173
|
-
- docs/web/static/img/favicon/favicon.ico
|
174
|
-
- docs/web/yarn.lock
|
175
186
|
- gemfiles/activerecord42.gemfile
|
176
187
|
- gemfiles/jruby.gemfile
|
177
188
|
- gemfiles/railsmaster.gemfile
|
@@ -235,10 +246,15 @@ files:
|
|
235
246
|
- lib/clowne/utils/params.rb
|
236
247
|
- lib/clowne/utils/plan.rb
|
237
248
|
- lib/clowne/version.rb
|
238
|
-
homepage: https://github.com/
|
249
|
+
homepage: https://github.com/clowne-rb/clowne
|
239
250
|
licenses:
|
240
251
|
- MIT
|
241
|
-
metadata:
|
252
|
+
metadata:
|
253
|
+
bug_tracker_uri: http://github.com/clowne-rb/clowne/issues
|
254
|
+
changelog_uri: https://github.com/clowne-rb/clowne/blob/master/CHANGELOG.md
|
255
|
+
documentation_uri: https://clowne.evilmartians.io/
|
256
|
+
homepage_uri: https://clowne.evilmartians.io/
|
257
|
+
source_code_uri: http://github.com/clowne-rb/clowne
|
242
258
|
post_install_message:
|
243
259
|
rdoc_options: []
|
244
260
|
require_paths:
|
@@ -254,9 +270,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
254
270
|
- !ruby/object:Gem::Version
|
255
271
|
version: '0'
|
256
272
|
requirements: []
|
257
|
-
|
258
|
-
rubygems_version: 2.7.6
|
273
|
+
rubygems_version: 3.0.3
|
259
274
|
signing_key:
|
260
275
|
specification_version: 4
|
261
|
-
summary: A flexible gem for cloning your models
|
276
|
+
summary: A flexible gem for cloning your models
|
262
277
|
test_files: []
|