clowne 0.1.0.pre1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +7 -0
- data/.gitattributes +1 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +17 -0
- data/.travis.yml +15 -2
- data/CHANGELOG.md +9 -2
- data/Gemfile +1 -0
- data/README.md +25 -381
- data/clowne.gemspec +1 -0
- data/docs/.rubocop.yml +12 -0
- data/docs/active_record.md +36 -0
- data/docs/alternatives.md +26 -0
- data/docs/architecture.md +141 -0
- data/docs/basic_example.md +66 -0
- data/docs/configuration.md +29 -0
- data/docs/customization.md +64 -0
- data/docs/exclude_association.md +63 -0
- data/docs/execution_order.md +14 -0
- data/docs/finalize.md +35 -0
- data/docs/implicit_cloner.md +36 -0
- data/docs/include_association.md +119 -0
- data/docs/init_as.md +36 -0
- data/docs/inline_configuration.md +38 -0
- data/docs/installation.md +16 -0
- data/docs/nullify.md +37 -0
- data/docs/sequel.md +56 -0
- data/docs/supported_adapters.md +13 -0
- data/docs/traits.md +28 -0
- data/docs/web/.gitignore +11 -0
- data/docs/web/core/Footer.js +92 -0
- data/docs/web/i18n/en.json +134 -0
- data/docs/web/package.json +14 -0
- data/docs/web/pages/en/help.js +50 -0
- data/docs/web/pages/en/index.js +231 -0
- data/docs/web/pages/en/users.js +47 -0
- data/docs/web/sidebars.json +30 -0
- data/docs/web/siteConfig.js +44 -0
- data/docs/web/static/css/custom.css +229 -0
- data/docs/web/static/fonts/FiraCode-Medium.woff +0 -0
- data/docs/web/static/fonts/FiraCode-Regular.woff +0 -0
- data/docs/web/static/fonts/StemText.woff +0 -0
- data/docs/web/static/fonts/StemTextBold.woff +0 -0
- data/docs/web/static/img/favicon/favicon.ico +0 -0
- data/docs/web/yarn.lock +1741 -0
- data/gemfiles/activerecord42.gemfile +1 -0
- data/gemfiles/jruby.gemfile +2 -0
- data/gemfiles/railsmaster.gemfile +1 -0
- data/lib/clowne.rb +3 -1
- data/lib/clowne/adapters/active_record.rb +3 -12
- data/lib/clowne/adapters/active_record/association.rb +1 -1
- data/lib/clowne/adapters/active_record/associations/base.rb +8 -48
- data/lib/clowne/adapters/active_record/associations/has_one.rb +8 -1
- data/lib/clowne/adapters/active_record/associations/noop.rb +4 -1
- data/lib/clowne/adapters/active_record/dsl.rb +33 -0
- data/lib/clowne/adapters/base.rb +13 -6
- data/lib/clowne/adapters/base/association.rb +69 -0
- data/lib/clowne/adapters/base/finalize.rb +1 -1
- data/lib/clowne/adapters/base/init_as.rb +21 -0
- data/lib/clowne/adapters/registry.rb +5 -11
- data/lib/clowne/adapters/sequel.rb +25 -0
- data/lib/clowne/adapters/sequel/association.rb +47 -0
- data/lib/clowne/adapters/sequel/associations.rb +26 -0
- data/lib/clowne/adapters/sequel/associations/base.rb +23 -0
- data/lib/clowne/adapters/sequel/associations/many_to_many.rb +19 -0
- data/lib/clowne/adapters/sequel/associations/noop.rb +16 -0
- data/lib/clowne/adapters/sequel/associations/one_to_many.rb +23 -0
- data/lib/clowne/adapters/sequel/associations/one_to_one.rb +23 -0
- data/lib/clowne/adapters/sequel/copier.rb +23 -0
- data/lib/clowne/adapters/sequel/record_wrapper.rb +59 -0
- data/lib/clowne/cloner.rb +6 -4
- data/lib/clowne/declarations.rb +1 -0
- data/lib/clowne/declarations/exclude_association.rb +0 -5
- data/lib/clowne/declarations/include_association.rb +0 -2
- data/lib/clowne/declarations/init_as.rb +20 -0
- data/lib/clowne/declarations/trait.rb +2 -0
- data/lib/clowne/ext/orm_ext.rb +21 -0
- data/lib/clowne/ext/string_constantize.rb +2 -2
- data/lib/clowne/planner.rb +11 -4
- data/lib/clowne/version.rb +1 -1
- metadata +70 -4
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Clowne
|
4
|
+
module Adapters # :nodoc: all
|
5
|
+
class Sequel
|
6
|
+
class Association
|
7
|
+
class << self
|
8
|
+
def call(source, record, declaration, params:, **_options)
|
9
|
+
with_clonable(source, record, declaration) do
|
10
|
+
reflection = source.class.association_reflections[declaration.name.to_sym]
|
11
|
+
|
12
|
+
cloner_class = Associations.cloner_for(reflection)
|
13
|
+
|
14
|
+
cloner_class.new(reflection, source, declaration, params).call(record)
|
15
|
+
|
16
|
+
record
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def with_clonable(source, record, declaration)
|
23
|
+
if clonable_assoc?(source, declaration)
|
24
|
+
yield(record)
|
25
|
+
else
|
26
|
+
warn <<-WARN
|
27
|
+
Relation #{declaration.name} of #{source.class.name} does not configure for Sequel::Plugins::NestedAttributes
|
28
|
+
WARN
|
29
|
+
end
|
30
|
+
|
31
|
+
record
|
32
|
+
end
|
33
|
+
|
34
|
+
def clonable_assoc?(source, declaration)
|
35
|
+
source.class.plugins.include?(::Sequel::Plugins::NestedAttributes) &&
|
36
|
+
source.respond_to?(:"#{declaration.name.to_s}_attributes=")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
Clowne::Adapters::Sequel.register_resolver(
|
45
|
+
:association,
|
46
|
+
Clowne::Adapters::Sequel::Association
|
47
|
+
)
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'clowne/adapters/sequel/associations/base'
|
4
|
+
require 'clowne/adapters/sequel/associations/noop'
|
5
|
+
require 'clowne/adapters/sequel/associations/one_to_one'
|
6
|
+
require 'clowne/adapters/sequel/associations/one_to_many'
|
7
|
+
require 'clowne/adapters/sequel/associations/many_to_many'
|
8
|
+
|
9
|
+
module Clowne
|
10
|
+
module Adapters # :nodoc: all
|
11
|
+
class Sequel
|
12
|
+
module Associations
|
13
|
+
SEQUEL_2_CLONER = {
|
14
|
+
one_to_one: OneToOne,
|
15
|
+
one_to_many: OneToMany,
|
16
|
+
many_to_many: ManyToMany
|
17
|
+
}.freeze
|
18
|
+
|
19
|
+
# Returns an association cloner class for reflection
|
20
|
+
def self.cloner_for(reflection)
|
21
|
+
SEQUEL_2_CLONER.fetch(reflection[:type], Noop)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'clowne/adapters/base/association'
|
4
|
+
|
5
|
+
module Clowne
|
6
|
+
module Adapters # :nodoc: all
|
7
|
+
class Sequel
|
8
|
+
module Associations
|
9
|
+
class Base < Base::Association
|
10
|
+
private
|
11
|
+
|
12
|
+
def clone_record(record)
|
13
|
+
Clowne::Adapters::Sequel::Copier.call(record)
|
14
|
+
end
|
15
|
+
|
16
|
+
def init_scope
|
17
|
+
@_init_scope ||= source.__send__([association_name, 'dataset'].join('_'))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Clowne
|
4
|
+
module Adapters # :nodoc: all
|
5
|
+
class Sequel
|
6
|
+
module Associations
|
7
|
+
class ManyToMany < Base
|
8
|
+
def call(record)
|
9
|
+
clones = with_scope.map { |child| clone_one(child) }
|
10
|
+
|
11
|
+
record.remember_assoc(:"#{association_name}_attributes", clones)
|
12
|
+
|
13
|
+
record
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Clowne
|
4
|
+
module Adapters # :nodoc: all
|
5
|
+
class Sequel
|
6
|
+
module Associations
|
7
|
+
class Noop < Base
|
8
|
+
def call(record)
|
9
|
+
warn("[Clowne] Reflection #{reflection.class.name} is not supported")
|
10
|
+
record
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Clowne
|
4
|
+
module Adapters # :nodoc: all
|
5
|
+
class Sequel
|
6
|
+
module Associations
|
7
|
+
class OneToMany < Base
|
8
|
+
def call(record)
|
9
|
+
clones =
|
10
|
+
with_scope.map do |child|
|
11
|
+
clone_one(child).tap do |child_clone|
|
12
|
+
child_clone[:"#{reflection[:key]}"] = nil
|
13
|
+
end
|
14
|
+
end
|
15
|
+
record.remember_assoc(:"#{association_name}_attributes", clones)
|
16
|
+
|
17
|
+
record
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Clowne
|
4
|
+
module Adapters # :nodoc: all
|
5
|
+
class Sequel
|
6
|
+
module Associations
|
7
|
+
class OneToOne < Base
|
8
|
+
def call(record)
|
9
|
+
child = association
|
10
|
+
return record unless child
|
11
|
+
warn '[Clowne] Has one association does not support scopes' unless scope.nil?
|
12
|
+
|
13
|
+
child_clone = clone_one(child)
|
14
|
+
child_clone[:"#{reflection[:key]}"] = nil
|
15
|
+
record.remember_assoc(:"#{association_name}_attributes", child_clone)
|
16
|
+
|
17
|
+
record
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Clowne
|
4
|
+
module Adapters # :nodoc: all
|
5
|
+
class Sequel
|
6
|
+
class Copier
|
7
|
+
class << self
|
8
|
+
def call(source)
|
9
|
+
nullify_attrs = [:create_timestamp_field, :update_timestamp_field].map do |timestamp|
|
10
|
+
source.class.instance_variable_get("@#{timestamp}")
|
11
|
+
end + [:id]
|
12
|
+
|
13
|
+
dup_hash = source.dup.to_hash.tap do |hash|
|
14
|
+
nullify_attrs.each { |field| hash.delete(field) }
|
15
|
+
end
|
16
|
+
|
17
|
+
source.class.new(dup_hash)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Clowne
|
4
|
+
module Adapters # :nodoc: all
|
5
|
+
class Sequel
|
6
|
+
class RecordWrapper
|
7
|
+
attr_reader :record, :association_store
|
8
|
+
|
9
|
+
def initialize(record)
|
10
|
+
@record = record
|
11
|
+
@association_store = {}
|
12
|
+
end
|
13
|
+
|
14
|
+
def remember_assoc(association, value)
|
15
|
+
@association_store[association] = value
|
16
|
+
end
|
17
|
+
|
18
|
+
def save
|
19
|
+
to_model.save
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_model
|
23
|
+
association_store.each_with_object(record) do |(name, value), acc|
|
24
|
+
acc.send("#{name}=", association_to_model(value))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_hash
|
29
|
+
init_hash = record.to_hash
|
30
|
+
association_store.each_with_object(init_hash) do |(name, value), acc|
|
31
|
+
acc[name] = association_to_model(value)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def respond_to_missing?(method_name, include_private = false)
|
36
|
+
record.respond_to?(method_name) || super
|
37
|
+
end
|
38
|
+
|
39
|
+
def method_missing(method_name, *args, &block)
|
40
|
+
if record.respond_to?(method_name)
|
41
|
+
record.public_send(method_name, *args, &block)
|
42
|
+
else
|
43
|
+
super
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def association_to_model(assoc)
|
50
|
+
if assoc.is_a?(Array)
|
51
|
+
assoc.map(&:to_hash)
|
52
|
+
else
|
53
|
+
assoc.to_hash
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/clowne/cloner.rb
CHANGED
@@ -38,8 +38,8 @@ module Clowne # :nodoc: all
|
|
38
38
|
@traits[name].extend_with(block)
|
39
39
|
end
|
40
40
|
|
41
|
-
# rubocop: disable Metrics/AbcSize
|
42
|
-
# rubocop: disable Metrics/
|
41
|
+
# rubocop: disable Metrics/AbcSize, Metrics/MethodLength
|
42
|
+
# rubocop: disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
43
43
|
def call(object, **options)
|
44
44
|
raise(UnprocessableSourceError, 'Nil is not cloneable object') if object.nil?
|
45
45
|
|
@@ -56,11 +56,13 @@ module Clowne # :nodoc: all
|
|
56
56
|
plan_with_traits(traits)
|
57
57
|
end
|
58
58
|
|
59
|
+
plan = Clowne::Planner.enhance(plan, Proc.new) if block_given?
|
60
|
+
|
59
61
|
adapter.clone(object, plan, params: options)
|
60
62
|
end
|
61
63
|
|
62
|
-
# rubocop: enable Metrics/AbcSize
|
63
|
-
# rubocop: enable Metrics/
|
64
|
+
# rubocop: enable Metrics/AbcSize, Metrics/MethodLength
|
65
|
+
# rubocop: enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
64
66
|
|
65
67
|
def default_plan
|
66
68
|
return @default_plan if instance_variable_defined?(:@default_plan)
|
data/lib/clowne/declarations.rb
CHANGED
@@ -11,11 +11,6 @@ module Clowne
|
|
11
11
|
|
12
12
|
def compile(plan)
|
13
13
|
plan.remove_from(:association, name)
|
14
|
-
|
15
|
-
# update all_associations plan
|
16
|
-
all_associations = plan.get(:all_associations)
|
17
|
-
return if all_associations.nil?
|
18
|
-
all_associations.except! name
|
19
14
|
end
|
20
15
|
end
|
21
16
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Clowne
|
4
|
+
module Declarations
|
5
|
+
class InitAs # :nodoc: all
|
6
|
+
attr_reader :block
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
raise ArgumentError, 'Block is required for init_as' unless block_given?
|
10
|
+
@block = Proc.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def compile(plan)
|
14
|
+
plan.set(:init_as, self)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
Clowne::Declarations.add :init_as, Clowne::Declarations::InitAs
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'clowne/ext/string_constantize'
|
4
|
+
|
5
|
+
module Clowne
|
6
|
+
module Ext
|
7
|
+
# Adds #cloner_class method to ORM base model
|
8
|
+
module ORMExt
|
9
|
+
using Clowne::Ext::StringConstantize
|
10
|
+
|
11
|
+
def cloner_class
|
12
|
+
return @_clowne_cloner if instance_variable_defined?(:@_clowne_cloner)
|
13
|
+
|
14
|
+
cloner = "#{name}Cloner".constantize
|
15
|
+
return @_clowne_cloner = cloner if cloner && cloner <= Clowne::Cloner
|
16
|
+
|
17
|
+
@_clowne_cloner = superclass.cloner_class if superclass.respond_to?(:cloner_class)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -8,13 +8,13 @@ module Clowne
|
|
8
8
|
def constantize
|
9
9
|
names = split('::')
|
10
10
|
|
11
|
-
|
11
|
+
return nil if names.empty?
|
12
12
|
|
13
13
|
# Remove the first blank element in case of '::ClassName' notation.
|
14
14
|
names.shift if names.size > 1 && names.first.empty?
|
15
15
|
|
16
16
|
names.inject(Object) do |constant, name|
|
17
|
-
constant.const_get(name)
|
17
|
+
constant.const_get(name) if constant.const_defined?(name)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
data/lib/clowne/planner.rb
CHANGED
@@ -5,10 +5,7 @@ require 'clowne/plan'
|
|
5
5
|
module Clowne
|
6
6
|
class Planner # :nodoc: all
|
7
7
|
class << self
|
8
|
-
#
|
9
|
-
# +cloner+:: Cloner object
|
10
|
-
# +init_plan+:: Init plan
|
11
|
-
# +traits+:: List of traits if any
|
8
|
+
# Compile plan for cloner with traits
|
12
9
|
def compile(cloner, traits: nil)
|
13
10
|
declarations = cloner.declarations.dup
|
14
11
|
|
@@ -19,6 +16,16 @@ module Clowne
|
|
19
16
|
end
|
20
17
|
end
|
21
18
|
|
19
|
+
# Extend previously compiled plan with an arbitrary block
|
20
|
+
# NOTE: It doesn't modify the plan itself but return a copy
|
21
|
+
def enhance(plan, block)
|
22
|
+
trait = Clowne::Declarations::Trait.new.tap { |t| t.extend_with(block) }
|
23
|
+
|
24
|
+
trait.compiled.each_with_object(plan.dup) do |declaration, new_plan|
|
25
|
+
declaration.compile(new_plan)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
22
29
|
private
|
23
30
|
|
24
31
|
def compile_traits(cloner, traits)
|
data/lib/clowne/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clowne
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Dementyev
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-01
|
12
|
+
date: 2018-02-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -81,6 +81,20 @@ dependencies:
|
|
81
81
|
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0.51'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rubocop-md
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0.2'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0.2'
|
84
98
|
description: A flexible gem for cloning your models.
|
85
99
|
email:
|
86
100
|
- palkan@evilmartians.com
|
@@ -89,6 +103,8 @@ executables: []
|
|
89
103
|
extensions: []
|
90
104
|
extra_rdoc_files: []
|
91
105
|
files:
|
106
|
+
- ".codeclimate.yml"
|
107
|
+
- ".gitattributes"
|
92
108
|
- ".gitignore"
|
93
109
|
- ".rspec"
|
94
110
|
- ".rubocop.yml"
|
@@ -102,6 +118,41 @@ files:
|
|
102
118
|
- bin/console
|
103
119
|
- bin/setup
|
104
120
|
- clowne.gemspec
|
121
|
+
- docs/.rubocop.yml
|
122
|
+
- docs/active_record.md
|
123
|
+
- docs/alternatives.md
|
124
|
+
- docs/architecture.md
|
125
|
+
- docs/basic_example.md
|
126
|
+
- docs/configuration.md
|
127
|
+
- docs/customization.md
|
128
|
+
- docs/exclude_association.md
|
129
|
+
- docs/execution_order.md
|
130
|
+
- docs/finalize.md
|
131
|
+
- docs/implicit_cloner.md
|
132
|
+
- docs/include_association.md
|
133
|
+
- docs/init_as.md
|
134
|
+
- docs/inline_configuration.md
|
135
|
+
- docs/installation.md
|
136
|
+
- docs/nullify.md
|
137
|
+
- docs/sequel.md
|
138
|
+
- docs/supported_adapters.md
|
139
|
+
- docs/traits.md
|
140
|
+
- docs/web/.gitignore
|
141
|
+
- docs/web/core/Footer.js
|
142
|
+
- docs/web/i18n/en.json
|
143
|
+
- docs/web/package.json
|
144
|
+
- docs/web/pages/en/help.js
|
145
|
+
- docs/web/pages/en/index.js
|
146
|
+
- docs/web/pages/en/users.js
|
147
|
+
- docs/web/sidebars.json
|
148
|
+
- docs/web/siteConfig.js
|
149
|
+
- docs/web/static/css/custom.css
|
150
|
+
- docs/web/static/fonts/FiraCode-Medium.woff
|
151
|
+
- docs/web/static/fonts/FiraCode-Regular.woff
|
152
|
+
- docs/web/static/fonts/StemText.woff
|
153
|
+
- docs/web/static/fonts/StemTextBold.woff
|
154
|
+
- docs/web/static/img/favicon/favicon.ico
|
155
|
+
- docs/web/yarn.lock
|
105
156
|
- gemfiles/activerecord42.gemfile
|
106
157
|
- gemfiles/jruby.gemfile
|
107
158
|
- gemfiles/railsmaster.gemfile
|
@@ -114,18 +165,33 @@ files:
|
|
114
165
|
- lib/clowne/adapters/active_record/associations/has_many.rb
|
115
166
|
- lib/clowne/adapters/active_record/associations/has_one.rb
|
116
167
|
- lib/clowne/adapters/active_record/associations/noop.rb
|
168
|
+
- lib/clowne/adapters/active_record/dsl.rb
|
117
169
|
- lib/clowne/adapters/base.rb
|
170
|
+
- lib/clowne/adapters/base/association.rb
|
118
171
|
- lib/clowne/adapters/base/finalize.rb
|
172
|
+
- lib/clowne/adapters/base/init_as.rb
|
119
173
|
- lib/clowne/adapters/base/nullify.rb
|
120
174
|
- lib/clowne/adapters/registry.rb
|
175
|
+
- lib/clowne/adapters/sequel.rb
|
176
|
+
- lib/clowne/adapters/sequel/association.rb
|
177
|
+
- lib/clowne/adapters/sequel/associations.rb
|
178
|
+
- lib/clowne/adapters/sequel/associations/base.rb
|
179
|
+
- lib/clowne/adapters/sequel/associations/many_to_many.rb
|
180
|
+
- lib/clowne/adapters/sequel/associations/noop.rb
|
181
|
+
- lib/clowne/adapters/sequel/associations/one_to_many.rb
|
182
|
+
- lib/clowne/adapters/sequel/associations/one_to_one.rb
|
183
|
+
- lib/clowne/adapters/sequel/copier.rb
|
184
|
+
- lib/clowne/adapters/sequel/record_wrapper.rb
|
121
185
|
- lib/clowne/cloner.rb
|
122
186
|
- lib/clowne/declarations.rb
|
123
187
|
- lib/clowne/declarations/exclude_association.rb
|
124
188
|
- lib/clowne/declarations/finalize.rb
|
125
189
|
- lib/clowne/declarations/include_association.rb
|
190
|
+
- lib/clowne/declarations/init_as.rb
|
126
191
|
- lib/clowne/declarations/nullify.rb
|
127
192
|
- lib/clowne/declarations/trait.rb
|
128
193
|
- lib/clowne/dsl.rb
|
194
|
+
- lib/clowne/ext/orm_ext.rb
|
129
195
|
- lib/clowne/ext/string_constantize.rb
|
130
196
|
- lib/clowne/plan.rb
|
131
197
|
- lib/clowne/planner.rb
|
@@ -145,9 +211,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
145
211
|
version: '0'
|
146
212
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
213
|
requirements:
|
148
|
-
- - "
|
214
|
+
- - ">="
|
149
215
|
- !ruby/object:Gem::Version
|
150
|
-
version:
|
216
|
+
version: '0'
|
151
217
|
requirements: []
|
152
218
|
rubyforge_project:
|
153
219
|
rubygems_version: 2.6.13
|