clowne 0.0.1 → 0.1.0.beta1

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +6 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +49 -0
  5. data/.rufo +3 -0
  6. data/.travis.yml +37 -3
  7. data/CHANGELOG.md +11 -0
  8. data/Gemfile +12 -3
  9. data/LICENSE.txt +1 -1
  10. data/README.md +532 -14
  11. data/Rakefile +6 -8
  12. data/clowne.gemspec +16 -15
  13. data/gemfiles/activerecord42.gemfile +6 -0
  14. data/gemfiles/jruby.gemfile +6 -0
  15. data/gemfiles/railsmaster.gemfile +7 -0
  16. data/lib/clowne.rb +36 -2
  17. data/lib/clowne/adapters/active_record.rb +27 -0
  18. data/lib/clowne/adapters/active_record/association.rb +34 -0
  19. data/lib/clowne/adapters/active_record/associations.rb +30 -0
  20. data/lib/clowne/adapters/active_record/associations/base.rb +63 -0
  21. data/lib/clowne/adapters/active_record/associations/has_and_belongs_to_many.rb +20 -0
  22. data/lib/clowne/adapters/active_record/associations/has_many.rb +21 -0
  23. data/lib/clowne/adapters/active_record/associations/has_one.rb +30 -0
  24. data/lib/clowne/adapters/active_record/associations/noop.rb +19 -0
  25. data/lib/clowne/adapters/active_record/dsl.rb +33 -0
  26. data/lib/clowne/adapters/base.rb +69 -0
  27. data/lib/clowne/adapters/base/finalize.rb +19 -0
  28. data/lib/clowne/adapters/base/nullify.rb +19 -0
  29. data/lib/clowne/adapters/registry.rb +61 -0
  30. data/lib/clowne/cloner.rb +93 -0
  31. data/lib/clowne/declarations.rb +30 -0
  32. data/lib/clowne/declarations/exclude_association.rb +24 -0
  33. data/lib/clowne/declarations/finalize.rb +20 -0
  34. data/lib/clowne/declarations/include_association.rb +45 -0
  35. data/lib/clowne/declarations/nullify.rb +20 -0
  36. data/lib/clowne/declarations/trait.rb +44 -0
  37. data/lib/clowne/dsl.rb +14 -0
  38. data/lib/clowne/ext/string_constantize.rb +23 -0
  39. data/lib/clowne/plan.rb +81 -0
  40. data/lib/clowne/planner.rb +40 -0
  41. data/lib/clowne/version.rb +3 -1
  42. metadata +73 -12
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'clowne/plan'
4
+
5
+ module Clowne
6
+ class Planner # :nodoc: all
7
+ class << self
8
+ # Compile plan for cloner with traits
9
+ def compile(cloner, traits: nil)
10
+ declarations = cloner.declarations.dup
11
+
12
+ declarations += compile_traits(cloner, traits) unless traits.nil?
13
+
14
+ declarations.each_with_object(Plan.new(cloner.adapter.registry)) do |declaration, plan|
15
+ declaration.compile(plan)
16
+ end
17
+ end
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
+
29
+ private
30
+
31
+ def compile_traits(cloner, traits)
32
+ traits.map do |id|
33
+ trait = cloner.traits[id]
34
+ raise ConfigurationError, "Trait not found: #{id}" if trait.nil?
35
+ trait.compiled
36
+ end.flatten
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Clowne
2
- VERSION = "0.0.1"
4
+ VERSION = '0.1.0.beta1'
3
5
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clowne
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Dementyev
8
+ - Sverchkov Nikolay
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2017-10-24 00:00:00.000000000 Z
12
+ date: 2018-01-08 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler
@@ -16,14 +17,14 @@ dependencies:
16
17
  requirements:
17
18
  - - "~>"
18
19
  - !ruby/object:Gem::Version
19
- version: '1.15'
20
+ version: '1.14'
20
21
  type: :development
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
25
  - - "~>"
25
26
  - !ruby/object:Gem::Version
26
- version: '1.15'
27
+ version: '1.14'
27
28
  - !ruby/object:Gem::Dependency
28
29
  name: rake
29
30
  requirement: !ruby/object:Gem::Requirement
@@ -39,28 +40,61 @@ dependencies:
39
40
  - !ruby/object:Gem::Version
40
41
  version: '10.0'
41
42
  - !ruby/object:Gem::Dependency
42
- name: minitest
43
+ name: rspec
43
44
  requirement: !ruby/object:Gem::Requirement
44
45
  requirements:
45
46
  - - "~>"
46
47
  - !ruby/object:Gem::Version
47
- version: '5.0'
48
+ version: '3.0'
48
49
  type: :development
49
50
  prerelease: false
50
51
  version_requirements: !ruby/object:Gem::Requirement
51
52
  requirements:
52
53
  - - "~>"
53
54
  - !ruby/object:Gem::Version
54
- version: '5.0'
55
- description: Declarative models cloning
55
+ version: '3.0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: factory_bot
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '4.8'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '4.8'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rubocop
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '0.51'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '0.51'
84
+ description: A flexible gem for cloning your models.
56
85
  email:
57
- - dementiev.vm@gmail.com
86
+ - palkan@evilmartians.com
87
+ - ssnikolay@gmail.com
58
88
  executables: []
59
89
  extensions: []
60
90
  extra_rdoc_files: []
61
91
  files:
62
92
  - ".gitignore"
93
+ - ".rspec"
94
+ - ".rubocop.yml"
95
+ - ".rufo"
63
96
  - ".travis.yml"
97
+ - CHANGELOG.md
64
98
  - Gemfile
65
99
  - LICENSE.txt
66
100
  - README.md
@@ -68,7 +102,34 @@ files:
68
102
  - bin/console
69
103
  - bin/setup
70
104
  - clowne.gemspec
105
+ - gemfiles/activerecord42.gemfile
106
+ - gemfiles/jruby.gemfile
107
+ - gemfiles/railsmaster.gemfile
71
108
  - lib/clowne.rb
109
+ - lib/clowne/adapters/active_record.rb
110
+ - lib/clowne/adapters/active_record/association.rb
111
+ - lib/clowne/adapters/active_record/associations.rb
112
+ - lib/clowne/adapters/active_record/associations/base.rb
113
+ - lib/clowne/adapters/active_record/associations/has_and_belongs_to_many.rb
114
+ - lib/clowne/adapters/active_record/associations/has_many.rb
115
+ - lib/clowne/adapters/active_record/associations/has_one.rb
116
+ - lib/clowne/adapters/active_record/associations/noop.rb
117
+ - lib/clowne/adapters/active_record/dsl.rb
118
+ - lib/clowne/adapters/base.rb
119
+ - lib/clowne/adapters/base/finalize.rb
120
+ - lib/clowne/adapters/base/nullify.rb
121
+ - lib/clowne/adapters/registry.rb
122
+ - lib/clowne/cloner.rb
123
+ - lib/clowne/declarations.rb
124
+ - lib/clowne/declarations/exclude_association.rb
125
+ - lib/clowne/declarations/finalize.rb
126
+ - lib/clowne/declarations/include_association.rb
127
+ - lib/clowne/declarations/nullify.rb
128
+ - lib/clowne/declarations/trait.rb
129
+ - lib/clowne/dsl.rb
130
+ - lib/clowne/ext/string_constantize.rb
131
+ - lib/clowne/plan.rb
132
+ - lib/clowne/planner.rb
72
133
  - lib/clowne/version.rb
73
134
  homepage: https://github.com/palkan/clowne
74
135
  licenses:
@@ -85,13 +146,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
85
146
  version: '0'
86
147
  required_rubygems_version: !ruby/object:Gem::Requirement
87
148
  requirements:
88
- - - ">="
149
+ - - ">"
89
150
  - !ruby/object:Gem::Version
90
- version: '0'
151
+ version: 1.3.1
91
152
  requirements: []
92
153
  rubyforge_project:
93
154
  rubygems_version: 2.6.13
94
155
  signing_key:
95
156
  specification_version: 4
96
- summary: Declarative models cloning
157
+ summary: A flexible gem for cloning your models.
97
158
  test_files: []