abyme 0.2.3 → 0.2.4
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/.DS_Store +0 -0
- data/.github/workflows/build.yml +60 -0
- data/.gitignore +1 -0
- data/.simplecov +0 -0
- data/Gemfile.lock +118 -4
- data/README.md +13 -6
- data/Rakefile +31 -8
- data/abyme.gemspec +11 -1
- data/javascript/abyme_controller.js +79 -10
- data/lib/abyme/abyme_builder.rb +16 -0
- data/lib/abyme/version.rb +3 -1
- data/lib/abyme/view_helpers.rb +158 -5
- metadata +103 -7
- data/.travis.yml +0 -7
- data/lib/generators/.DS_Store +0 -0
- data/lib/generators/abyme/install_generator.rb +0 -25
- data/lib/generators/abyme/templates/abyme_controller.js +0 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 585adff10e80cf9646d03a7d2251188d6d8be083a3f9f9b3e7fe019187904c39
|
|
4
|
+
data.tar.gz: 1e17608e8bde56231bf57016d4d5f880f29915e7cf7c98cd51f46e21ff06609b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: efc39dc12b33a25c5b5b61f5079b2b0f7605b7b6ae557cebad526c9efa88475ce4f3e3841fce0e3a04bc87d823e9b52c15a6a2655203cd324ff6985ef229bec8
|
|
7
|
+
data.tar.gz: fe4dd5956a8afe5ac9d48df970a5c71a0fbabd880f36b19e8de997dc0a622bee5f23c1064e7f1db8b876439909b48bccdbe66bc514bd51573945f950a66699a4
|
data/.DS_Store
CHANGED
|
Binary file
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
|
2
|
+
# They are provided by a third-party and are governed by
|
|
3
|
+
# separate terms of service, privacy policy, and support
|
|
4
|
+
# documentation.
|
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
|
7
|
+
|
|
8
|
+
name: build
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
push:
|
|
12
|
+
branches: [ master ]
|
|
13
|
+
pull_request:
|
|
14
|
+
branches: [ master ]
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
test:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v2
|
|
22
|
+
- name: Set up Ruby
|
|
23
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
|
24
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
|
25
|
+
# uses: ruby/setup-ruby@v1
|
|
26
|
+
uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
|
|
27
|
+
with:
|
|
28
|
+
ruby-version: 2.6
|
|
29
|
+
- name: Install sqlite headers
|
|
30
|
+
run: |
|
|
31
|
+
sudo apt-get update
|
|
32
|
+
sudo apt-get install libsqlite3-dev
|
|
33
|
+
|
|
34
|
+
- name: Install dependencies
|
|
35
|
+
run: bundle install
|
|
36
|
+
|
|
37
|
+
- name: Prepare Database
|
|
38
|
+
run: bundle exec rails db:create db:migrate
|
|
39
|
+
env:
|
|
40
|
+
DB_CONNECTION: sqlite
|
|
41
|
+
DB_DATABASE: db/test.sqlite3
|
|
42
|
+
RAILS_ENV: test
|
|
43
|
+
|
|
44
|
+
- name: Run tests
|
|
45
|
+
run: bundle exec rake
|
|
46
|
+
env:
|
|
47
|
+
DB_CONNECTION: sqlite
|
|
48
|
+
DB_DATABASE: db/test.sqlite3
|
|
49
|
+
RAILS_ENV: test
|
|
50
|
+
|
|
51
|
+
- name: Coveralls
|
|
52
|
+
uses: coverallsapp/github-action@master
|
|
53
|
+
with:
|
|
54
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
55
|
+
|
|
56
|
+
- name: Create Coverage Artifact
|
|
57
|
+
uses: actions/upload-artifact@v2
|
|
58
|
+
with:
|
|
59
|
+
name: code-coverage
|
|
60
|
+
path: coverage/
|
data/.gitignore
CHANGED
data/.simplecov
ADDED
|
File without changes
|
data/Gemfile.lock
CHANGED
|
@@ -1,11 +1,28 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
abyme (0.2.
|
|
4
|
+
abyme (0.2.4)
|
|
5
5
|
|
|
6
6
|
GEM
|
|
7
7
|
remote: https://rubygems.org/
|
|
8
8
|
specs:
|
|
9
|
+
actioncable (6.0.3.4)
|
|
10
|
+
actionpack (= 6.0.3.4)
|
|
11
|
+
nio4r (~> 2.0)
|
|
12
|
+
websocket-driver (>= 0.6.1)
|
|
13
|
+
actionmailbox (6.0.3.4)
|
|
14
|
+
actionpack (= 6.0.3.4)
|
|
15
|
+
activejob (= 6.0.3.4)
|
|
16
|
+
activerecord (= 6.0.3.4)
|
|
17
|
+
activestorage (= 6.0.3.4)
|
|
18
|
+
activesupport (= 6.0.3.4)
|
|
19
|
+
mail (>= 2.7.1)
|
|
20
|
+
actionmailer (6.0.3.4)
|
|
21
|
+
actionpack (= 6.0.3.4)
|
|
22
|
+
actionview (= 6.0.3.4)
|
|
23
|
+
activejob (= 6.0.3.4)
|
|
24
|
+
mail (~> 2.5, >= 2.5.4)
|
|
25
|
+
rails-dom-testing (~> 2.0)
|
|
9
26
|
actionpack (6.0.3.4)
|
|
10
27
|
actionview (= 6.0.3.4)
|
|
11
28
|
activesupport (= 6.0.3.4)
|
|
@@ -13,41 +30,105 @@ GEM
|
|
|
13
30
|
rack-test (>= 0.6.3)
|
|
14
31
|
rails-dom-testing (~> 2.0)
|
|
15
32
|
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
|
33
|
+
actiontext (6.0.3.4)
|
|
34
|
+
actionpack (= 6.0.3.4)
|
|
35
|
+
activerecord (= 6.0.3.4)
|
|
36
|
+
activestorage (= 6.0.3.4)
|
|
37
|
+
activesupport (= 6.0.3.4)
|
|
38
|
+
nokogiri (>= 1.8.5)
|
|
16
39
|
actionview (6.0.3.4)
|
|
17
40
|
activesupport (= 6.0.3.4)
|
|
18
41
|
builder (~> 3.1)
|
|
19
42
|
erubi (~> 1.4)
|
|
20
43
|
rails-dom-testing (~> 2.0)
|
|
21
44
|
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
|
45
|
+
activejob (6.0.3.4)
|
|
46
|
+
activesupport (= 6.0.3.4)
|
|
47
|
+
globalid (>= 0.3.6)
|
|
48
|
+
activemodel (6.0.3.4)
|
|
49
|
+
activesupport (= 6.0.3.4)
|
|
50
|
+
activerecord (6.0.3.4)
|
|
51
|
+
activemodel (= 6.0.3.4)
|
|
52
|
+
activesupport (= 6.0.3.4)
|
|
53
|
+
activestorage (6.0.3.4)
|
|
54
|
+
actionpack (= 6.0.3.4)
|
|
55
|
+
activejob (= 6.0.3.4)
|
|
56
|
+
activerecord (= 6.0.3.4)
|
|
57
|
+
marcel (~> 0.3.1)
|
|
22
58
|
activesupport (6.0.3.4)
|
|
23
59
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
24
60
|
i18n (>= 0.7, < 2)
|
|
25
61
|
minitest (~> 5.1)
|
|
26
62
|
tzinfo (~> 1.1)
|
|
27
63
|
zeitwerk (~> 2.2, >= 2.2.2)
|
|
64
|
+
addressable (2.7.0)
|
|
65
|
+
public_suffix (>= 2.0.2, < 5.0)
|
|
28
66
|
builder (3.2.4)
|
|
67
|
+
capybara (3.33.0)
|
|
68
|
+
addressable
|
|
69
|
+
mini_mime (>= 0.1.3)
|
|
70
|
+
nokogiri (~> 1.8)
|
|
71
|
+
rack (>= 1.6.0)
|
|
72
|
+
rack-test (>= 0.6.3)
|
|
73
|
+
regexp_parser (~> 1.5)
|
|
74
|
+
xpath (~> 3.2)
|
|
75
|
+
childprocess (3.0.0)
|
|
29
76
|
concurrent-ruby (1.1.7)
|
|
30
77
|
crass (1.0.6)
|
|
78
|
+
database_cleaner (1.8.5)
|
|
79
|
+
database_cleaner-active_record (1.8.0)
|
|
80
|
+
activerecord
|
|
81
|
+
database_cleaner (~> 1.8.0)
|
|
31
82
|
diff-lcs (1.4.4)
|
|
83
|
+
docile (1.3.2)
|
|
32
84
|
erubi (1.9.0)
|
|
85
|
+
globalid (0.4.2)
|
|
86
|
+
activesupport (>= 4.2.0)
|
|
33
87
|
i18n (1.8.5)
|
|
34
88
|
concurrent-ruby (~> 1.0)
|
|
35
89
|
loofah (2.7.0)
|
|
36
90
|
crass (~> 1.0.2)
|
|
37
91
|
nokogiri (>= 1.5.9)
|
|
92
|
+
mail (2.7.1)
|
|
93
|
+
mini_mime (>= 0.1.1)
|
|
94
|
+
marcel (0.3.3)
|
|
95
|
+
mimemagic (~> 0.3.2)
|
|
38
96
|
method_source (1.0.0)
|
|
97
|
+
mimemagic (0.3.5)
|
|
98
|
+
mini_mime (1.0.2)
|
|
39
99
|
mini_portile2 (2.4.0)
|
|
40
100
|
minitest (5.14.2)
|
|
101
|
+
nio4r (2.5.4)
|
|
41
102
|
nokogiri (1.10.10)
|
|
42
103
|
mini_portile2 (~> 2.4.0)
|
|
104
|
+
public_suffix (4.0.6)
|
|
105
|
+
puma (4.3.6)
|
|
106
|
+
nio4r (~> 2.0)
|
|
43
107
|
rack (2.2.3)
|
|
44
108
|
rack-test (1.1.0)
|
|
45
109
|
rack (>= 1.0, < 3)
|
|
110
|
+
rails (6.0.3.4)
|
|
111
|
+
actioncable (= 6.0.3.4)
|
|
112
|
+
actionmailbox (= 6.0.3.4)
|
|
113
|
+
actionmailer (= 6.0.3.4)
|
|
114
|
+
actionpack (= 6.0.3.4)
|
|
115
|
+
actiontext (= 6.0.3.4)
|
|
116
|
+
actionview (= 6.0.3.4)
|
|
117
|
+
activejob (= 6.0.3.4)
|
|
118
|
+
activemodel (= 6.0.3.4)
|
|
119
|
+
activerecord (= 6.0.3.4)
|
|
120
|
+
activestorage (= 6.0.3.4)
|
|
121
|
+
activesupport (= 6.0.3.4)
|
|
122
|
+
bundler (>= 1.3.0)
|
|
123
|
+
railties (= 6.0.3.4)
|
|
124
|
+
sprockets-rails (>= 2.0.0)
|
|
125
|
+
rails-controller-testing (1.0.5)
|
|
126
|
+
actionpack (>= 5.0.1.rc1)
|
|
127
|
+
actionview (>= 5.0.1.rc1)
|
|
128
|
+
activesupport (>= 5.0.1.rc1)
|
|
46
129
|
rails-dom-testing (2.0.3)
|
|
47
130
|
activesupport (>= 4.2.0)
|
|
48
131
|
nokogiri (>= 1.6)
|
|
49
|
-
rails-dummy (0.1.0)
|
|
50
|
-
railties
|
|
51
132
|
rails-html-sanitizer (1.3.0)
|
|
52
133
|
loofah (~> 2.3)
|
|
53
134
|
railties (6.0.3.4)
|
|
@@ -57,6 +138,7 @@ GEM
|
|
|
57
138
|
rake (>= 0.8.7)
|
|
58
139
|
thor (>= 0.20.3, < 2.0)
|
|
59
140
|
rake (13.0.1)
|
|
141
|
+
regexp_parser (1.8.2)
|
|
60
142
|
rspec-core (3.9.3)
|
|
61
143
|
rspec-support (~> 3.9.3)
|
|
62
144
|
rspec-expectations (3.9.2)
|
|
@@ -74,11 +156,36 @@ GEM
|
|
|
74
156
|
rspec-mocks (~> 3.9)
|
|
75
157
|
rspec-support (~> 3.9)
|
|
76
158
|
rspec-support (3.9.3)
|
|
159
|
+
rubyzip (2.3.0)
|
|
160
|
+
selenium-webdriver (3.142.7)
|
|
161
|
+
childprocess (>= 0.5, < 4.0)
|
|
162
|
+
rubyzip (>= 1.2.2)
|
|
163
|
+
simplecov (0.19.0)
|
|
164
|
+
docile (~> 1.1)
|
|
165
|
+
simplecov-html (~> 0.11)
|
|
166
|
+
simplecov-html (0.12.2)
|
|
167
|
+
simplecov-lcov (0.8.0)
|
|
168
|
+
sprockets (4.0.2)
|
|
169
|
+
concurrent-ruby (~> 1.0)
|
|
170
|
+
rack (> 1, < 3)
|
|
171
|
+
sprockets-rails (3.2.2)
|
|
172
|
+
actionpack (>= 4.0)
|
|
173
|
+
activesupport (>= 4.0)
|
|
174
|
+
sprockets (>= 3.0.0)
|
|
77
175
|
sqlite3 (1.4.2)
|
|
78
176
|
thor (1.0.1)
|
|
79
177
|
thread_safe (0.3.6)
|
|
80
178
|
tzinfo (1.2.7)
|
|
81
179
|
thread_safe (~> 0.1)
|
|
180
|
+
webdrivers (4.4.1)
|
|
181
|
+
nokogiri (~> 1.6)
|
|
182
|
+
rubyzip (>= 1.3.0)
|
|
183
|
+
selenium-webdriver (>= 3.0, < 4.0)
|
|
184
|
+
websocket-driver (0.7.3)
|
|
185
|
+
websocket-extensions (>= 0.1.0)
|
|
186
|
+
websocket-extensions (0.1.5)
|
|
187
|
+
xpath (3.2.0)
|
|
188
|
+
nokogiri (~> 1.8)
|
|
82
189
|
zeitwerk (2.4.0)
|
|
83
190
|
|
|
84
191
|
PLATFORMS
|
|
@@ -87,10 +194,17 @@ PLATFORMS
|
|
|
87
194
|
DEPENDENCIES
|
|
88
195
|
abyme!
|
|
89
196
|
bundler (~> 2.0)
|
|
90
|
-
|
|
197
|
+
capybara
|
|
198
|
+
database_cleaner-active_record
|
|
199
|
+
puma
|
|
200
|
+
rails
|
|
201
|
+
rails-controller-testing
|
|
91
202
|
rake (~> 13.0)
|
|
92
203
|
rspec-rails
|
|
204
|
+
simplecov
|
|
205
|
+
simplecov-lcov
|
|
93
206
|
sqlite3
|
|
207
|
+
webdrivers
|
|
94
208
|
|
|
95
209
|
BUNDLED WITH
|
|
96
210
|
2.1.4
|
data/README.md
CHANGED
|
@@ -2,15 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
abyme is a modern take on handling dynamic nested forms in Rails 6+ using StimulusJS.
|
|
4
4
|
|
|
5
|
+
[](https://badge.fury.io/rb/abyme)
|
|
6
|
+

|
|
7
|
+
[](https://codeclimate.com/github/bear-in-mind/abyme/maintainability)
|
|
8
|
+
[](https://coveralls.io/github/bear-in-mind/abyme?branch=master)
|
|
9
|
+
|
|
5
10
|
## Disclaimer
|
|
6
|
-
This project is still a work in progress and subject to change. We
|
|
11
|
+
This project is still a work in progress and subject to change. We would advise not to use it in production code just yet.
|
|
7
12
|
|
|
8
13
|
Any enhancement proposition or bug report welcome !
|
|
9
14
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
## Demo app
|
|
16
|
+
|
|
17
|
+

|
|
18
|
+
|
|
19
|
+
Check out our demo app here : https://abyme-demo.herokuapp.com/
|
|
20
|
+
|
|
21
|
+
Source code is right here : https://github.com/bear-in-mind/abyme_demo
|
|
14
22
|
|
|
15
23
|
## Installation
|
|
16
24
|
|
|
@@ -271,7 +279,6 @@ As you may have seen above, you can also pass a block to the method to give it w
|
|
|
271
279
|
<% end %>
|
|
272
280
|
```
|
|
273
281
|
|
|
274
|
-
|
|
275
282
|
#### #abymize(:association, form_object)
|
|
276
283
|
This is the container for all your nested fields. It takes two parameters (the symbolized association and the `form_builder`), and some optional ones. Please note an id is automatically added to this element, which value is : `abyme--association`.
|
|
277
284
|
* `partial:` : allows you to indicate a custom partial path for both `records` and `new_records`
|
data/Rakefile
CHANGED
|
@@ -1,15 +1,31 @@
|
|
|
1
|
-
require "bundler/gem_tasks"
|
|
1
|
+
# require "bundler/gem_tasks"
|
|
2
2
|
require "rspec/core/rake_task"
|
|
3
|
-
require 'rails/dummy/tasks'
|
|
3
|
+
# require 'rails/dummy/tasks'
|
|
4
4
|
|
|
5
5
|
RSpec::Core::RakeTask.new(:spec)
|
|
6
6
|
task :default => :spec
|
|
7
7
|
|
|
8
|
-
APP_RAKEFILE = File.expand_path("spec/dummy/Rakefile", __dir__)
|
|
9
|
-
load 'rails/tasks/engine.rake'
|
|
10
|
-
load 'rails/tasks/statistics.rake'
|
|
8
|
+
# APP_RAKEFILE = File.expand_path("spec/dummy/Rakefile", __dir__)
|
|
9
|
+
# load 'rails/tasks/engine.rake'
|
|
10
|
+
# load 'rails/tasks/statistics.rake'
|
|
11
11
|
|
|
12
|
-
Bundler::GemHelper.install_tasks
|
|
12
|
+
# Bundler::GemHelper.install_tasks
|
|
13
|
+
|
|
14
|
+
# begin
|
|
15
|
+
# require 'bundler/setup'
|
|
16
|
+
# rescue LoadError
|
|
17
|
+
# puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
|
18
|
+
# end
|
|
19
|
+
|
|
20
|
+
# require 'rdoc/task'
|
|
21
|
+
|
|
22
|
+
# RDoc::Task.new(:rdoc) do |rdoc|
|
|
23
|
+
# rdoc.rdoc_dir = 'rdoc'
|
|
24
|
+
# rdoc.title = 'Abyme'
|
|
25
|
+
# rdoc.options << '--line-numbers'
|
|
26
|
+
# rdoc.rdoc_files.include('README.md')
|
|
27
|
+
# rdoc.rdoc_files.include('lib/**/*.rb')
|
|
28
|
+
# end
|
|
13
29
|
|
|
14
30
|
begin
|
|
15
31
|
require 'bundler/setup'
|
|
@@ -21,8 +37,15 @@ require 'rdoc/task'
|
|
|
21
37
|
|
|
22
38
|
RDoc::Task.new(:rdoc) do |rdoc|
|
|
23
39
|
rdoc.rdoc_dir = 'rdoc'
|
|
24
|
-
rdoc.title = '
|
|
40
|
+
rdoc.title = 'SampleEngineWithRspecAndCucumber'
|
|
25
41
|
rdoc.options << '--line-numbers'
|
|
26
|
-
rdoc.rdoc_files.include('README.
|
|
42
|
+
rdoc.rdoc_files.include('README.rdoc')
|
|
27
43
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
28
44
|
end
|
|
45
|
+
|
|
46
|
+
APP_RAKEFILE = File.expand_path("spec/dummy/Rakefile", __dir__)
|
|
47
|
+
|
|
48
|
+
load 'rails/tasks/engine.rake'
|
|
49
|
+
load 'rails/tasks/statistics.rake'
|
|
50
|
+
|
|
51
|
+
Bundler::GemHelper.install_tasks
|
data/abyme.gemspec
CHANGED
|
@@ -28,7 +28,17 @@ Gem::Specification.new do |spec|
|
|
|
28
28
|
|
|
29
29
|
spec.add_development_dependency "bundler", "~> 2.0"
|
|
30
30
|
spec.add_development_dependency "rake", "~> 13.0"
|
|
31
|
+
# Tests
|
|
31
32
|
spec.add_development_dependency "rspec-rails"
|
|
32
|
-
spec.add_development_dependency
|
|
33
|
+
spec.add_development_dependency 'rails-controller-testing'
|
|
34
|
+
spec.add_development_dependency 'database_cleaner-active_record'
|
|
35
|
+
spec.add_development_dependency 'capybara'
|
|
36
|
+
spec.add_development_dependency 'webdrivers'
|
|
37
|
+
|
|
38
|
+
# Dummy app
|
|
33
39
|
spec.add_development_dependency "sqlite3"
|
|
40
|
+
spec.add_development_dependency 'rails'
|
|
41
|
+
spec.add_development_dependency 'puma'
|
|
42
|
+
spec.add_development_dependency 'simplecov'
|
|
43
|
+
spec.add_development_dependency 'simplecov-lcov'
|
|
34
44
|
end
|
|
@@ -4,24 +4,53 @@ export default class extends Controller {
|
|
|
4
4
|
static targets = ['template', 'associations', 'fields', 'newFields'];
|
|
5
5
|
|
|
6
6
|
connect() {
|
|
7
|
+
console.log("Abyme Connected")
|
|
8
|
+
|
|
7
9
|
if (this.count) {
|
|
8
|
-
|
|
10
|
+
// If data-count is present,
|
|
11
|
+
// add n default fields on page load
|
|
12
|
+
|
|
13
|
+
this.add_default_associations();
|
|
9
14
|
}
|
|
10
15
|
}
|
|
11
16
|
|
|
17
|
+
// return the value of the data-count attribute
|
|
18
|
+
|
|
12
19
|
get count() {
|
|
13
20
|
return this.element.dataset.minCount || 0;
|
|
14
21
|
}
|
|
15
22
|
|
|
23
|
+
// return the value of the data-position attribute
|
|
24
|
+
// if there is no position specified set end as default
|
|
25
|
+
|
|
16
26
|
get position() {
|
|
17
27
|
return this.associationsTarget.dataset.abymePosition === 'end' ? 'beforeend' : 'afterbegin';
|
|
18
28
|
}
|
|
19
29
|
|
|
30
|
+
// ADD_ASSOCIATION
|
|
31
|
+
|
|
32
|
+
// this function is call whenever a click occurs
|
|
33
|
+
// on the element with the click->abyme#add_association
|
|
34
|
+
// <button> element by default
|
|
35
|
+
|
|
36
|
+
// if a data-count is present the add_association
|
|
37
|
+
// will be call without an event so we have to check
|
|
38
|
+
// this case
|
|
39
|
+
|
|
40
|
+
// check for limit reached
|
|
41
|
+
// dispatch an event if the limit is reached
|
|
42
|
+
|
|
43
|
+
// - call the function build_html that take care
|
|
44
|
+
// for building the correct html to be inserted in the DOM
|
|
45
|
+
// - dispatch an event before insert
|
|
46
|
+
// - insert html into the dom
|
|
47
|
+
// - dispatch an event after insert
|
|
48
|
+
|
|
20
49
|
add_association(event) {
|
|
21
50
|
if (event) {
|
|
22
51
|
event.preventDefault();
|
|
23
52
|
}
|
|
24
|
-
|
|
53
|
+
|
|
25
54
|
if (this.element.dataset.limit && this.limit_check()) {
|
|
26
55
|
this.create_event('limit-reached')
|
|
27
56
|
return false
|
|
@@ -33,8 +62,21 @@ export default class extends Controller {
|
|
|
33
62
|
this.create_event('after-add');
|
|
34
63
|
}
|
|
35
64
|
|
|
65
|
+
// REMOVE_ASSOCIATION
|
|
66
|
+
|
|
67
|
+
// this function is call whenever a click occurs
|
|
68
|
+
// on the element with the click->abyme#remove_association
|
|
69
|
+
// <button> element by default
|
|
70
|
+
|
|
71
|
+
// - call the function mark_for_destroy that takes care
|
|
72
|
+
// of marking the element for destruction and hiding it
|
|
73
|
+
// - dispatch an event before mark & hide
|
|
74
|
+
// - mark for descrution + hide the element
|
|
75
|
+
// - dispatch an event after mark and hide
|
|
76
|
+
|
|
36
77
|
remove_association(event) {
|
|
37
78
|
event.preventDefault();
|
|
79
|
+
|
|
38
80
|
this.create_event('before-remove');
|
|
39
81
|
this.mark_for_destroy(event);
|
|
40
82
|
this.create_event('after-remove');
|
|
@@ -42,6 +84,12 @@ export default class extends Controller {
|
|
|
42
84
|
|
|
43
85
|
// LIFECYCLE EVENTS RELATED
|
|
44
86
|
|
|
87
|
+
// CREATE_EVENT
|
|
88
|
+
|
|
89
|
+
// take a stage (String) => before-add, after-add...
|
|
90
|
+
// create a new custom event
|
|
91
|
+
// and dispatch at at the controller level
|
|
92
|
+
|
|
45
93
|
create_event(stage, html = null) {
|
|
46
94
|
const event = new CustomEvent(`abyme:${stage}`, { detail: {controller: this, content: html} });
|
|
47
95
|
this.element.dispatchEvent(event);
|
|
@@ -69,9 +117,14 @@ export default class extends Controller {
|
|
|
69
117
|
abymeAfterRemove(event) {
|
|
70
118
|
}
|
|
71
119
|
|
|
72
|
-
//
|
|
120
|
+
// BUILD HTML
|
|
121
|
+
|
|
122
|
+
// takes the html template and substitutes the sub-string
|
|
123
|
+
// NEW_RECORD for a generated timestamp
|
|
124
|
+
// then if there is a sub template in the html (multiple nested level)
|
|
125
|
+
// set all the sub timestamps back as NEW_RECORD
|
|
126
|
+
// finally returns the html
|
|
73
127
|
|
|
74
|
-
// build html
|
|
75
128
|
build_html() {
|
|
76
129
|
let html = this.templateTarget.innerHTML.replace(
|
|
77
130
|
/NEW_RECORD/g,
|
|
@@ -88,8 +141,15 @@ export default class extends Controller {
|
|
|
88
141
|
|
|
89
142
|
return html;
|
|
90
143
|
}
|
|
91
|
-
|
|
92
|
-
//
|
|
144
|
+
|
|
145
|
+
// MARK_FOR_DESTROY
|
|
146
|
+
|
|
147
|
+
// mark association for destruction
|
|
148
|
+
// get the closest abyme--fields from the remove_association button
|
|
149
|
+
// set the _destroy input value as 1
|
|
150
|
+
// hide the element
|
|
151
|
+
// add the class of abyme--marked-for-destroy to the element
|
|
152
|
+
|
|
93
153
|
mark_for_destroy(event) {
|
|
94
154
|
let item = event.target.closest('.abyme--fields');
|
|
95
155
|
item.querySelector("input[name*='_destroy']").value = 1;
|
|
@@ -97,20 +157,29 @@ export default class extends Controller {
|
|
|
97
157
|
item.classList.add('abyme--marked-for-destroy')
|
|
98
158
|
}
|
|
99
159
|
|
|
100
|
-
|
|
160
|
+
|
|
161
|
+
// LIMIT_CHECK
|
|
162
|
+
|
|
163
|
+
// Check if associations limit is reached
|
|
164
|
+
// based on newFieldsTargets only
|
|
165
|
+
// persisted fields are ignored
|
|
166
|
+
|
|
101
167
|
limit_check() {
|
|
102
168
|
return (this.newFieldsTargets
|
|
103
169
|
.filter(item => !item.classList.contains('abyme--marked-for-destroy'))).length
|
|
104
170
|
>= parseInt(this.element.dataset.limit)
|
|
105
171
|
}
|
|
106
172
|
|
|
107
|
-
//
|
|
108
|
-
|
|
173
|
+
// ADD_DEFAULT_ASSOCIATION
|
|
174
|
+
|
|
175
|
+
// Add n default blank associations at page load
|
|
176
|
+
// call sleep function to ensure uniqueness of timestamp
|
|
177
|
+
|
|
178
|
+
async add_default_associations() {
|
|
109
179
|
let i = 0
|
|
110
180
|
while (i < this.count) {
|
|
111
181
|
this.add_association()
|
|
112
182
|
i++
|
|
113
|
-
// Sleep function to ensure uniqueness of timestamp
|
|
114
183
|
await this.sleep(1);
|
|
115
184
|
}
|
|
116
185
|
}
|
data/lib/abyme/abyme_builder.rb
CHANGED
|
@@ -2,6 +2,12 @@ module Abyme
|
|
|
2
2
|
class AbymeBuilder < ActionView::Base
|
|
3
3
|
include ActionView
|
|
4
4
|
|
|
5
|
+
# If a block is given to the #abymize helper
|
|
6
|
+
# it will instanciate a new AbymeBuilder
|
|
7
|
+
# and pass to it the association name (Symbol)
|
|
8
|
+
# the form object, lookup_context optionaly a partial path
|
|
9
|
+
# then yield itself to the block
|
|
10
|
+
|
|
5
11
|
def initialize(association:, form:, lookup_context:, partial:, &block)
|
|
6
12
|
@association = association
|
|
7
13
|
@form = form
|
|
@@ -9,12 +15,22 @@ module Abyme
|
|
|
9
15
|
@partial = partial
|
|
10
16
|
yield(self) if block_given?
|
|
11
17
|
end
|
|
18
|
+
|
|
19
|
+
# RECORDS
|
|
20
|
+
|
|
21
|
+
# calls the #persisted_records_for helper method
|
|
22
|
+
# passing association, form and options to it
|
|
12
23
|
|
|
13
24
|
def records(options = {})
|
|
14
25
|
persisted_records_for(@association, @form, options) do |fields_for_association|
|
|
15
26
|
render_association_partial(fields_for_association, options)
|
|
16
27
|
end
|
|
17
28
|
end
|
|
29
|
+
|
|
30
|
+
# NEW_RECORDS
|
|
31
|
+
|
|
32
|
+
# calls the #new_records_for helper method
|
|
33
|
+
# passing association, form and options to it
|
|
18
34
|
|
|
19
35
|
def new_records(options = {}, &block)
|
|
20
36
|
new_records_for(@association, @form, options) do |fields_for_association|
|
data/lib/abyme/version.rb
CHANGED
data/lib/abyme/view_helpers.rb
CHANGED
|
@@ -3,6 +3,41 @@ require_relative "abyme_builder"
|
|
|
3
3
|
module Abyme
|
|
4
4
|
module ViewHelpers
|
|
5
5
|
|
|
6
|
+
# ABYMIZE
|
|
7
|
+
|
|
8
|
+
# this helper will generate the top level wrapper markup
|
|
9
|
+
# with the bare minimum html attributes (data-controller="abyme")
|
|
10
|
+
# it takes the Symbolized name of the association (plural) and the form object
|
|
11
|
+
# then you can pass a hash of options (see exemple below)
|
|
12
|
+
# if no block given it will generate a default markup for
|
|
13
|
+
# #persisted_records_for, #new_records_for & #add_association methods
|
|
14
|
+
# if a block is given it will instanciate a new AbymeBuilder and pass to it
|
|
15
|
+
# the name of the association, the form object and the lookup_context
|
|
16
|
+
|
|
17
|
+
# == Options
|
|
18
|
+
|
|
19
|
+
# - limit (Integer)
|
|
20
|
+
# you can set a limit for the new association fields to display
|
|
21
|
+
|
|
22
|
+
# - min_count (Integer)
|
|
23
|
+
# set the default number of blank fields to display
|
|
24
|
+
|
|
25
|
+
# - partial (String)
|
|
26
|
+
# to customize the partial path by default #abymize will expect
|
|
27
|
+
# a partial to bbe present in views/abyme
|
|
28
|
+
|
|
29
|
+
# - Exemple
|
|
30
|
+
|
|
31
|
+
# <%= abymize(:tasks, f, limit: 3) do |abyme| %>
|
|
32
|
+
# ...
|
|
33
|
+
# <% end %>
|
|
34
|
+
|
|
35
|
+
# will output this html
|
|
36
|
+
|
|
37
|
+
# <div data-controller="abyme" data-limit="3" id="abyme--tasks">
|
|
38
|
+
# ...
|
|
39
|
+
# </div>
|
|
40
|
+
|
|
6
41
|
def abymize(association, form, options = {}, &block)
|
|
7
42
|
content_tag(:div, data: { controller: 'abyme', limit: options[:limit], min_count: options[:min_count] }, id: "abyme--#{association}") do
|
|
8
43
|
if block_given?
|
|
@@ -19,6 +54,47 @@ module Abyme
|
|
|
19
54
|
end
|
|
20
55
|
end
|
|
21
56
|
|
|
57
|
+
# NEW_RECORDS_FOR
|
|
58
|
+
|
|
59
|
+
# this helper is call by the AbymeBuilder #new_records instance method
|
|
60
|
+
# it generates the html markup for new associations fields
|
|
61
|
+
# it takes the association (Symbol) and the form object
|
|
62
|
+
# then a hash of options.
|
|
63
|
+
|
|
64
|
+
# - Exemple
|
|
65
|
+
# <%= abymize(:tasks, f) do |abyme| %>
|
|
66
|
+
# <%= abyme.new_records %>
|
|
67
|
+
# ...
|
|
68
|
+
# <% end %>
|
|
69
|
+
|
|
70
|
+
# will output this html
|
|
71
|
+
|
|
72
|
+
# <div data-target="abyme.associations" data-association="tasks" data-abyme-position="end">
|
|
73
|
+
# <template class="abyme--task_template" data-target="abyme.template">
|
|
74
|
+
# <div data-target="abyme.fields abyme.newFields" class="abyme--fields task-fields">
|
|
75
|
+
# ... partial html goes here
|
|
76
|
+
# </div>
|
|
77
|
+
# </template>
|
|
78
|
+
# ... new rendered fields goes here
|
|
79
|
+
# </div>
|
|
80
|
+
|
|
81
|
+
# == Options
|
|
82
|
+
# - position (:start, :end)
|
|
83
|
+
# allows you to specify whether new fields added dynamically
|
|
84
|
+
# should go at the top or at the bottom
|
|
85
|
+
# :end is the default value
|
|
86
|
+
|
|
87
|
+
# - partial (String)
|
|
88
|
+
# to customize the partial path by default #abymize will expect
|
|
89
|
+
# a partial to bbe present in views/abyme
|
|
90
|
+
|
|
91
|
+
# - fields_html (Hash)
|
|
92
|
+
# allows you to pass any html attributes to each fields wrapper
|
|
93
|
+
|
|
94
|
+
# - wrapper_html (Hash)
|
|
95
|
+
# allows you to pass any html attributes to the the html element
|
|
96
|
+
# wrapping all the fields
|
|
97
|
+
|
|
22
98
|
def new_records_for(association, form, options = {}, &block)
|
|
23
99
|
options[:wrapper_html] ||= {}
|
|
24
100
|
|
|
@@ -43,6 +119,47 @@ module Abyme
|
|
|
43
119
|
end
|
|
44
120
|
end
|
|
45
121
|
end
|
|
122
|
+
|
|
123
|
+
# PERSISTED_RECORDS_FOR
|
|
124
|
+
|
|
125
|
+
# this helper is call by the AbymeBuilder #records instance method
|
|
126
|
+
# it generates the html markup for persisted associations fields
|
|
127
|
+
# it takes the association (Symbol) and the form object
|
|
128
|
+
# then a hash of options.
|
|
129
|
+
|
|
130
|
+
# - Exemple
|
|
131
|
+
# <%= abymize(:tasks, f) do |abyme| %>
|
|
132
|
+
# <%= abyme.records %>
|
|
133
|
+
# ...
|
|
134
|
+
# <% end %>
|
|
135
|
+
|
|
136
|
+
# will output this html
|
|
137
|
+
|
|
138
|
+
# <div>
|
|
139
|
+
# <div data-target="abyme.fields" class="abyme--fields task-fields">
|
|
140
|
+
# ... partial html goes here
|
|
141
|
+
# </div>
|
|
142
|
+
# </div>
|
|
143
|
+
|
|
144
|
+
# == Options
|
|
145
|
+
# - collection (Active Record Collection)
|
|
146
|
+
# allows you to pass an AR collection
|
|
147
|
+
# by default every associated records will be present
|
|
148
|
+
|
|
149
|
+
# - order (Hash)
|
|
150
|
+
# allows you to order the collection
|
|
151
|
+
# ex: order: { created_at: :desc }
|
|
152
|
+
|
|
153
|
+
# - partial (String)
|
|
154
|
+
# to customize the partial path by default #abymize will expect
|
|
155
|
+
# a partial to bbe present in views/abyme
|
|
156
|
+
|
|
157
|
+
# - fields_html (Hash)
|
|
158
|
+
# allows you to pass any html attributes to each fields wrapper
|
|
159
|
+
|
|
160
|
+
# - wrapper_html (Hash)
|
|
161
|
+
# allows you to pass any html attributes to the the html element
|
|
162
|
+
# wrapping all the fields
|
|
46
163
|
|
|
47
164
|
def persisted_records_for(association, form, options = {})
|
|
48
165
|
records = options[:collection] || form.object.send(association)
|
|
@@ -51,7 +168,9 @@ module Abyme
|
|
|
51
168
|
|
|
52
169
|
if options[:order].present?
|
|
53
170
|
records = records.order(options[:order])
|
|
54
|
-
#
|
|
171
|
+
# by calling the order method on the AR collection
|
|
172
|
+
# we get rid of the records with errors
|
|
173
|
+
# so we have to get them back with the 2 lines below
|
|
55
174
|
invalids = form.object.send(association).reject(&:persisted?)
|
|
56
175
|
records = records.to_a.concat(invalids) if invalids.any?
|
|
57
176
|
end
|
|
@@ -64,23 +183,46 @@ module Abyme
|
|
|
64
183
|
end
|
|
65
184
|
end
|
|
66
185
|
end
|
|
186
|
+
|
|
187
|
+
# ADD & REMOVE ASSOCIATION
|
|
188
|
+
|
|
189
|
+
# these helpers will call the #create_button method
|
|
190
|
+
# to generate the buttons for add and remove associations
|
|
191
|
+
# with the right action and a default content text for each button
|
|
67
192
|
|
|
68
193
|
def add_association(options = {}, &block)
|
|
69
194
|
action = 'click->abyme#add_association'
|
|
195
|
+
options[:content] ||= 'Add Association'
|
|
70
196
|
create_button(action, options, &block)
|
|
71
197
|
end
|
|
72
198
|
|
|
73
199
|
def remove_association(options = {}, &block)
|
|
74
200
|
action = 'click->abyme#remove_association'
|
|
201
|
+
options[:content] ||= 'Remove Association'
|
|
75
202
|
create_button(action, options, &block)
|
|
76
203
|
end
|
|
77
204
|
|
|
78
205
|
private
|
|
206
|
+
|
|
207
|
+
# CREATE_BUTTON
|
|
208
|
+
|
|
209
|
+
# this helper is call by either add_association or remove_association
|
|
210
|
+
# by default it will generate a button tag.
|
|
211
|
+
|
|
212
|
+
# == Options
|
|
213
|
+
# - content (String)
|
|
214
|
+
# allows you to set the button text
|
|
215
|
+
|
|
216
|
+
# - tag (Symbol)
|
|
217
|
+
# allows you to set the html tag of your choosing
|
|
218
|
+
# default if :button
|
|
219
|
+
|
|
220
|
+
# - html (Hash)
|
|
221
|
+
# to pass any html attributes you want.
|
|
79
222
|
|
|
80
223
|
def create_button(action, options, &block)
|
|
81
224
|
options[:html] ||= {}
|
|
82
225
|
options[:tag] ||= :button
|
|
83
|
-
options[:content] ||= 'Add Association'
|
|
84
226
|
|
|
85
227
|
if block_given?
|
|
86
228
|
content_tag(options[:tag], { data: { action: action } }.merge(options[:html])) do
|
|
@@ -91,6 +233,11 @@ module Abyme
|
|
|
91
233
|
end
|
|
92
234
|
end
|
|
93
235
|
|
|
236
|
+
# BASIC_FIELDS_MARKUP
|
|
237
|
+
|
|
238
|
+
# generates the default html classes for fields
|
|
239
|
+
# add optional classes if present
|
|
240
|
+
|
|
94
241
|
def basic_fields_markup(html, association = nil)
|
|
95
242
|
if html && html[:class]
|
|
96
243
|
html[:class] = "abyme--fields #{association.to_s.singularize}-fields #{html[:class]}"
|
|
@@ -101,17 +248,23 @@ module Abyme
|
|
|
101
248
|
html
|
|
102
249
|
end
|
|
103
250
|
|
|
251
|
+
# BUILD_ATTRIBUTES
|
|
252
|
+
|
|
253
|
+
# add optionals html attributes without overwritting
|
|
254
|
+
# the default or already present ones
|
|
255
|
+
|
|
104
256
|
def build_attributes(default, attr)
|
|
105
|
-
#
|
|
257
|
+
# Add new data attributes values to the default ones (only values)
|
|
106
258
|
if attr[:data]
|
|
107
259
|
default[:data].each do |key, value|
|
|
108
260
|
default[:data][key] = "#{value} #{attr[:data][key]}".strip
|
|
109
261
|
end
|
|
110
|
-
|
|
262
|
+
# Add new data attributes (keys & values)
|
|
111
263
|
default[:data] = default[:data].merge(attr[:data].reject { |key, _| default[:data][key] })
|
|
112
264
|
end
|
|
113
|
-
#
|
|
265
|
+
# Merge data attributes to the hash ok html attributes
|
|
114
266
|
default.merge(attr.reject { |key, _| key == :data })
|
|
115
267
|
end
|
|
268
|
+
|
|
116
269
|
end
|
|
117
270
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: abyme
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Romain Sanson
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2020-10-
|
|
12
|
+
date: 2020-10-18 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: bundler
|
|
@@ -54,7 +54,49 @@ dependencies:
|
|
|
54
54
|
- !ruby/object:Gem::Version
|
|
55
55
|
version: '0'
|
|
56
56
|
- !ruby/object:Gem::Dependency
|
|
57
|
-
name: rails-
|
|
57
|
+
name: rails-controller-testing
|
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
|
59
|
+
requirements:
|
|
60
|
+
- - ">="
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: '0'
|
|
63
|
+
type: :development
|
|
64
|
+
prerelease: false
|
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
66
|
+
requirements:
|
|
67
|
+
- - ">="
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: '0'
|
|
70
|
+
- !ruby/object:Gem::Dependency
|
|
71
|
+
name: database_cleaner-active_record
|
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
|
73
|
+
requirements:
|
|
74
|
+
- - ">="
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '0'
|
|
77
|
+
type: :development
|
|
78
|
+
prerelease: false
|
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
80
|
+
requirements:
|
|
81
|
+
- - ">="
|
|
82
|
+
- !ruby/object:Gem::Version
|
|
83
|
+
version: '0'
|
|
84
|
+
- !ruby/object:Gem::Dependency
|
|
85
|
+
name: capybara
|
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
|
87
|
+
requirements:
|
|
88
|
+
- - ">="
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
version: '0'
|
|
91
|
+
type: :development
|
|
92
|
+
prerelease: false
|
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
94
|
+
requirements:
|
|
95
|
+
- - ">="
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: '0'
|
|
98
|
+
- !ruby/object:Gem::Dependency
|
|
99
|
+
name: webdrivers
|
|
58
100
|
requirement: !ruby/object:Gem::Requirement
|
|
59
101
|
requirements:
|
|
60
102
|
- - ">="
|
|
@@ -81,6 +123,62 @@ dependencies:
|
|
|
81
123
|
- - ">="
|
|
82
124
|
- !ruby/object:Gem::Version
|
|
83
125
|
version: '0'
|
|
126
|
+
- !ruby/object:Gem::Dependency
|
|
127
|
+
name: rails
|
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
|
129
|
+
requirements:
|
|
130
|
+
- - ">="
|
|
131
|
+
- !ruby/object:Gem::Version
|
|
132
|
+
version: '0'
|
|
133
|
+
type: :development
|
|
134
|
+
prerelease: false
|
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
136
|
+
requirements:
|
|
137
|
+
- - ">="
|
|
138
|
+
- !ruby/object:Gem::Version
|
|
139
|
+
version: '0'
|
|
140
|
+
- !ruby/object:Gem::Dependency
|
|
141
|
+
name: puma
|
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
|
143
|
+
requirements:
|
|
144
|
+
- - ">="
|
|
145
|
+
- !ruby/object:Gem::Version
|
|
146
|
+
version: '0'
|
|
147
|
+
type: :development
|
|
148
|
+
prerelease: false
|
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
150
|
+
requirements:
|
|
151
|
+
- - ">="
|
|
152
|
+
- !ruby/object:Gem::Version
|
|
153
|
+
version: '0'
|
|
154
|
+
- !ruby/object:Gem::Dependency
|
|
155
|
+
name: simplecov
|
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
|
157
|
+
requirements:
|
|
158
|
+
- - ">="
|
|
159
|
+
- !ruby/object:Gem::Version
|
|
160
|
+
version: '0'
|
|
161
|
+
type: :development
|
|
162
|
+
prerelease: false
|
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
164
|
+
requirements:
|
|
165
|
+
- - ">="
|
|
166
|
+
- !ruby/object:Gem::Version
|
|
167
|
+
version: '0'
|
|
168
|
+
- !ruby/object:Gem::Dependency
|
|
169
|
+
name: simplecov-lcov
|
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
|
171
|
+
requirements:
|
|
172
|
+
- - ">="
|
|
173
|
+
- !ruby/object:Gem::Version
|
|
174
|
+
version: '0'
|
|
175
|
+
type: :development
|
|
176
|
+
prerelease: false
|
|
177
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
178
|
+
requirements:
|
|
179
|
+
- - ">="
|
|
180
|
+
- !ruby/object:Gem::Version
|
|
181
|
+
version: '0'
|
|
84
182
|
description:
|
|
85
183
|
email:
|
|
86
184
|
- louis.sommer@hey.com
|
|
@@ -89,9 +187,10 @@ extensions: []
|
|
|
89
187
|
extra_rdoc_files: []
|
|
90
188
|
files:
|
|
91
189
|
- ".DS_Store"
|
|
190
|
+
- ".github/workflows/build.yml"
|
|
92
191
|
- ".gitignore"
|
|
93
192
|
- ".rspec"
|
|
94
|
-
- ".
|
|
193
|
+
- ".simplecov"
|
|
95
194
|
- Gemfile
|
|
96
195
|
- Gemfile.lock
|
|
97
196
|
- LICENSE.txt
|
|
@@ -110,9 +209,6 @@ files:
|
|
|
110
209
|
- lib/abyme/model.rb
|
|
111
210
|
- lib/abyme/version.rb
|
|
112
211
|
- lib/abyme/view_helpers.rb
|
|
113
|
-
- lib/generators/.DS_Store
|
|
114
|
-
- lib/generators/abyme/install_generator.rb
|
|
115
|
-
- lib/generators/abyme/templates/abyme_controller.js
|
|
116
212
|
- node_modules/.yarn-integrity
|
|
117
213
|
- package.json
|
|
118
214
|
- yarn-error.log
|
data/.travis.yml
DELETED
data/lib/generators/.DS_Store
DELETED
|
Binary file
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# require 'rails/generators'
|
|
2
|
-
# require 'json'
|
|
3
|
-
|
|
4
|
-
# module Abyme
|
|
5
|
-
# module Generators
|
|
6
|
-
# class InstallGenerator < Rails::Generators::Base
|
|
7
|
-
# source_root File.expand_path("templates", __dir__)
|
|
8
|
-
|
|
9
|
-
# def setup
|
|
10
|
-
# # Creating stimulus abyme_controller.js file
|
|
11
|
-
# # ==========================================
|
|
12
|
-
# template "abyme_controller.js", "app/javascript/controllers/abyme_controller.js"
|
|
13
|
-
# add_stimulus
|
|
14
|
-
# end
|
|
15
|
-
|
|
16
|
-
# def add_stimulus
|
|
17
|
-
# # Checking if stimulus is present in package.json => yarn add if it's not
|
|
18
|
-
# # =======================================================================
|
|
19
|
-
# package = JSON.parse(File.open('package.json').read)
|
|
20
|
-
# exec('yarn add stimulus') if !package['dependencies'].keys.include?('stimulus')
|
|
21
|
-
# end
|
|
22
|
-
|
|
23
|
-
# end
|
|
24
|
-
# end
|
|
25
|
-
# end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Controller } from 'stimulus';
|
|
2
|
-
|
|
3
|
-
export default class extends Controller {
|
|
4
|
-
connect() {
|
|
5
|
-
console.log('Abyme Controller Connected');
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
add_association(event) {
|
|
9
|
-
event.preventDefault();
|
|
10
|
-
console.log('Add Association');
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
remove_association(event) {
|
|
14
|
-
event.preventDefault();
|
|
15
|
-
console.log('Remove Association');
|
|
16
|
-
}
|
|
17
|
-
}
|