cocooned 1.4.1 → 2.0.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.
data/Rakefile DELETED
@@ -1,113 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ## Test suites
4
-
5
- # Ruby
6
- require 'rspec/core/rake_task'
7
- RSpec::Core::RakeTask.new
8
- task default: :spec
9
-
10
- # JavaScript
11
- require 'jasmine'
12
- load 'jasmine/tasks/jasmine.rake'
13
-
14
- ## Linters
15
-
16
- # Ruby
17
- require 'rubocop/rake_task'
18
- RuboCop::RakeTask.new do |task|
19
- task.options = ['--config', 'config/linters/ruby.yml']
20
- end
21
-
22
- # JavaScript
23
- # rubocop:disable Rails/RakeEnvironment
24
- # eslint related tasks does not need to load Rails environment
25
- eslint_args = ['--no-eslintrc', '--config config/linters/js.json']
26
- eslint_path = ['app/assets/**/*.js', 'spec/javascripts/**/*.js', 'spec/dummy/app/assets/**/*.js']
27
-
28
- namespace :eslint do
29
- desc 'Auto-correct eslint offenses'
30
- task :auto_correct do
31
- system("yarnpkg run eslint #{(eslint_args + ['--fix']).join(' ')} #{eslint_path.join(' ')}")
32
- end
33
- end
34
-
35
- desc 'Run eslint'
36
- task :eslint do
37
- system("yarnpkg run eslint #{eslint_args.join(' ')} #{eslint_path.join(' ')}")
38
- end
39
- # rubocop:enable Rails/RakeEnvironment
40
-
41
- # Both
42
- namespace :linters do
43
- desc 'Auto-correct Rubocop and eslint offenses'
44
- task auto_correct: ['rubocop:auto_correct', 'eslint:auto_correct']
45
- end
46
-
47
- desc 'Run Rubocop and eslint'
48
- task linters: %i[rubocop eslint]
49
-
50
- ## Packaging
51
-
52
- # Ruby
53
- require 'bundler/gem_tasks'
54
-
55
- # JavaScript
56
- require 'json'
57
-
58
- spec = Bundler.load_gemspec('./cocooned.gemspec')
59
- npm_scope = 'notus.sh'
60
-
61
- npm_src_dir = './npm'
62
- npm_dest_dir = './dist'
63
- CLOBBER.include 'dist'
64
-
65
- assets_dir = './app/assets/'
66
-
67
- npm_files = {
68
- File.join(npm_dest_dir, 'cocooned.js') => File.join(assets_dir, 'javascripts', 'cocooned.js'),
69
- File.join(npm_dest_dir, 'cocooned.css') => File.join(assets_dir, 'stylesheets', 'cocooned.css'),
70
- File.join(npm_dest_dir, 'README.md') => File.join(npm_src_dir, 'README.md'),
71
- File.join(npm_dest_dir, 'LICENSE') => './LICENSE'
72
- }
73
-
74
- namespace :npm do
75
- # rubocop:disable Rails/RakeEnvironment
76
- # npm related tasks does not need to load Rails environment
77
- npm_files.each do |dest, src|
78
- file dest => src do
79
- cp src, dest
80
- end
81
- end
82
-
83
- task :'package-json' do
84
- contributors = []
85
- spec.authors.each_with_index do |name, i|
86
- next if spec.email[i].nil?
87
-
88
- contributors << {
89
- name: name.dup.force_encoding('UTF-8'),
90
- email: spec.email[i].dup.force_encoding('UTF-8')
91
- }
92
- end
93
-
94
- template = ERB.new(File.read(File.join(npm_src_dir, 'package.json.erb')))
95
- content = template.result_with_hash(scope: npm_scope, spec: spec, contributors: contributors)
96
- File.write(File.join(npm_dest_dir, 'package.json'),
97
- JSON.pretty_generate(JSON.parse(content)))
98
- end
99
-
100
- desc "Build #{npm_scope}-#{spec.name}-#{spec.version}.tgz into the pkg directory"
101
- task build: (%i[package-json] + npm_files.keys) do
102
- system("cd #{npm_dest_dir} && npm pack && mv ./#{npm_scope}-#{spec.name}-#{spec.version}.tgz ../pkg/")
103
- end
104
-
105
- desc "Build and push #{npm_scope}-#{spec.name}-#{spec.version}.tgz to https://npmjs.org"
106
- task release: %i[build] do
107
- system("npm publish ./pkg/#{npm_scope}-#{spec.name}-#{spec.version}.tgz --access public")
108
- end
109
- # rubocop:enable Rails/RakeEnvironment
110
- end
111
-
112
- desc 'Build packages and push them to their respective repository'
113
- task releases: [:release, 'npm:release']
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cocooned
4
- class AssociationBuilder
5
- attr_accessor :association, :form, :options
6
-
7
- def initialize(form, association, options = {})
8
- self.form = form
9
- self.association = association
10
- self.options = options.reverse_merge(force_non_association_create: false, wrap_object: false)
11
- end
12
-
13
- def build_object
14
- model = reflection ? build_with_reflection : build_without_reflection
15
- model = @options[:wrap_object].call(model) if @options[:wrap_object].respond_to?(:call)
16
- model
17
- end
18
-
19
- def singular_name
20
- association.to_s.singularize
21
- end
22
-
23
- def plural_name
24
- association.to_s.pluralize
25
- end
26
-
27
- private
28
-
29
- def reflection
30
- @reflection ||= begin
31
- klass = form.object.class
32
- klass.respond_to?(:reflect_on_association) ? klass.reflect_on_association(association) : nil
33
- end
34
- end
35
-
36
- def build_with_reflection
37
- return build_with_conditions if should_use_conditions?
38
-
39
- # Assume ActiveRecord or compatible
40
- # We use a clone of the current form object to not link
41
- # object together (even if unsaved)
42
- dummy = form.object.dup
43
- model = if reflection.collection?
44
- dummy.send(association).build
45
- else
46
- dummy.send("build_#{association}")
47
- end
48
- model = model.dup if model.frozen?
49
- model
50
- end
51
-
52
- def build_without_reflection
53
- methods = %W[build_#{plural_name} build_#{singular_name}].select { |m| form.object.respond_to?(m) }
54
- raise "Association #{association} doesn't exist on #{form.object.class}" unless methods.any?
55
-
56
- form.object.send(methods.first)
57
- end
58
-
59
- def should_use_conditions?
60
- reflection.class.name.starts_with?('Mongoid::') || @options[:force_non_association_create]
61
- end
62
-
63
- def build_with_conditions
64
- conditions = reflection.respond_to?(:conditions) ? reflection.conditions.flatten : []
65
- reflection.klass.new(*conditions)
66
- end
67
- end
68
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'cocooned/helpers/deprecate'
4
-
5
- module Cocooned
6
- module Helpers
7
- # Provide aliases to old Cocoon method for backward compatibility.
8
- # Cocoon methods are deprecated and will be removed in next major release.
9
- #
10
- # TODO: Remove in 3.0
11
- module CocoonCompatibility
12
- extend Cocooned::Helpers::Deprecate
13
-
14
- # @deprecated: Please use {#cocooned_add_item_link} instead
15
- def link_to_add_association(*args, &block)
16
- cocooned_add_item_link(*args, &block)
17
- end
18
- deprecate_release :link_to_add_association, :cocooned_add_item_link
19
-
20
- # @deprecated: Please use {#cocooned_remove_item_link} instead
21
- def link_to_remove_association(*args, &block)
22
- cocooned_remove_item_link(*args, &block)
23
- end
24
- deprecate_release :link_to_remove_association, :cocooned_remove_item_link
25
- end
26
- end
27
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rubygems/deprecate'
4
-
5
- module Cocooned
6
- module Helpers
7
- # Extend the standard Gem::Deprecation module to add a deprecation
8
- # method that specify the gem release where methods will disappear
9
- # instead of a date.
10
- module Deprecate
11
- extend Gem::Deprecate
12
-
13
- module_function
14
-
15
- def deprecate_release_message(target_and_name, replacement, release = '3.0', location = nil)
16
- [
17
- "NOTE: #{target_and_name} is deprecated",
18
- replacement == :none ? ' with no replacement' : "; use #{replacement} instead",
19
- format('. It will dissapear in %<release>s.', release: release),
20
- location.nil? ? '' : "\n#{target_and_name} called from #{location}"
21
- ].join.strip
22
- end
23
-
24
- def deprecate_release(name, replacement, release = '3.0')
25
- class_eval do
26
- old = "_deprecated_#{name}"
27
- alias_method old, name
28
- define_method name do |*args, &block|
29
- klass = is_a? Module
30
- target = klass ? "#{self}." : "#{self.class}#"
31
-
32
- unless Gem::Deprecate.skip
33
- warn(deprecate_release_message(
34
- "#{target}#{name}",
35
- replacement,
36
- release,
37
- Gem.location_of_caller.join(':')
38
- ))
39
- end
40
-
41
- send old, *args, &block
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end