katapult 0.3.0 → 0.4.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/CHANGELOG.md +30 -0
- data/README.md +57 -9
- data/bin/katapult +7 -3
- data/features/application_model.feature +4 -1
- data/features/authenticate.feature +1 -18
- data/features/basics.feature +1 -0
- data/features/binary.feature +5 -7
- data/features/model.feature +42 -3
- data/features/step_definitions/rails_steps.rb +1 -1
- data/features/web_ui.feature +17 -5
- data/lib/generators/katapult/app_model/templates/lib/katapult/application_model.rb +3 -0
- data/lib/generators/katapult/basics/basics_generator.rb +3 -8
- data/lib/generators/katapult/basics/templates/README.md.tt +33 -0
- data/lib/generators/katapult/basics/templates/features/support/paths.rb +1 -1
- data/lib/generators/katapult/clearance/clearance_generator.rb +6 -2
- data/lib/generators/katapult/clearance/templates/config/initializers/clearance.rb +1 -0
- data/lib/generators/katapult/cucumber_features/cucumber_features_generator.rb +10 -0
- data/lib/generators/katapult/cucumber_features/templates/feature.feature +4 -3
- data/lib/generators/katapult/model/model_generator.rb +15 -0
- data/lib/generators/katapult/model/templates/model.rb +13 -3
- data/lib/generators/katapult/model_specs/model_specs_generator.rb +1 -1
- data/lib/generators/katapult/model_specs/templates/model_spec.rb +1 -1
- data/lib/generators/katapult/transform/transform_generator.rb +4 -7
- data/lib/generators/katapult/views/templates/_form.html.haml +16 -13
- data/lib/generators/katapult/views/templates/show.html.haml +2 -0
- data/lib/katapult/application_model.rb +68 -19
- data/lib/katapult/element.rb +13 -18
- data/lib/katapult/{action.rb → elements/action.rb} +0 -0
- data/lib/katapult/elements/association.rb +35 -0
- data/lib/katapult/{attribute.rb → elements/attribute.rb} +14 -5
- data/lib/katapult/{authentication.rb → elements/authentication.rb} +2 -5
- data/lib/katapult/elements/model.rb +76 -0
- data/lib/katapult/{navigation.rb → elements/navigation.rb} +0 -0
- data/lib/katapult/{web_ui.rb → elements/web_ui.rb} +2 -12
- data/lib/katapult/generator.rb +2 -2
- data/lib/katapult/{binary_util.rb → support/binary_util.rb} +2 -1
- data/lib/katapult/{generator_goodies.rb → support/generator_goodies.rb} +9 -2
- data/lib/katapult/version.rb +1 -1
- data/script/console +5 -2
- data/script/update +1 -1
- data/spec/action_spec.rb +1 -1
- data/spec/application_model_spec.rb +26 -0
- data/spec/association_spec.rb +12 -0
- data/spec/attribute_spec.rb +35 -1
- data/spec/model_spec.rb +5 -2
- data/spec/util_spec.rb +1 -1
- data/spec/web_ui_spec.rb +11 -33
- metadata +17 -13
- data/lib/katapult/model.rb +0 -45
- data/lib/katapult/parser.rb +0 -53
- data/spec/parser_spec.rb +0 -26
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'katapult/elements/association'
|
2
|
+
|
3
|
+
describe Katapult::Association do
|
4
|
+
|
5
|
+
subject { described_class.new('association') }
|
6
|
+
|
7
|
+
it 'stores its :belongs_to as String' do
|
8
|
+
subject = described_class.new('model', belongs_to: :other_model)
|
9
|
+
expect(subject.belongs_to).to eq 'other_model'
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
data/spec/attribute_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'katapult/attribute'
|
1
|
+
require 'katapult/elements/attribute'
|
2
2
|
|
3
3
|
describe Katapult::Attribute do
|
4
4
|
|
@@ -57,4 +57,38 @@ describe Katapult::Attribute do
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
+
describe '#asset_values_as_list?' do
|
61
|
+
it 'returns false when there are no assignable values given' do
|
62
|
+
subject = described_class.new('name')
|
63
|
+
expect(subject.assignable_values_as_list?).to be false
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'returns false when assignable values are give as a string (= custom code)' do
|
67
|
+
subject = described_class.new('name', assignable_values: 'NameProvider.all')
|
68
|
+
expect(subject.assignable_values_as_list?).to be false
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'returns true when assignable values are an Array' do
|
72
|
+
subject = described_class.new('name', assignable_values: %w[andi andy])
|
73
|
+
expect(subject.assignable_values_as_list?).to be true
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'returns true when assignable values are a Range' do
|
77
|
+
subject = described_class.new('age', assignable_values: (1..99))
|
78
|
+
expect(subject.assignable_values_as_list?).to be true
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '#has_defaults?' do
|
83
|
+
it 'returns false when it is an "assignable values" attribute' do
|
84
|
+
subject = described_class.new('kind', assignable_values: %w[customer guest])
|
85
|
+
expect(subject.has_defaults?).to be false
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'returns false when it is a flag attribute' do
|
89
|
+
subject = described_class.new('active', type: :flag, default: true)
|
90
|
+
expect(subject.has_defaults?).to be false
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
60
94
|
end
|
data/spec/model_spec.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
require 'katapult/model'
|
2
|
-
require 'katapult/attribute'
|
1
|
+
require 'katapult/elements/model'
|
3
2
|
|
4
3
|
describe Katapult::Model do
|
5
4
|
|
@@ -13,6 +12,10 @@ describe Katapult::Model do
|
|
13
12
|
|
14
13
|
expect(subject.label_attr.name).to eql('second_attr')
|
15
14
|
end
|
15
|
+
|
16
|
+
it 'raises an error when someone needs/wants/expect a label attribute but there is none' do
|
17
|
+
expect{ subject.label_attr }.to raise_error Katapult::Model::MissingLabelAttributeError
|
18
|
+
end
|
16
19
|
end
|
17
20
|
|
18
21
|
end
|
data/spec/util_spec.rb
CHANGED
data/spec/web_ui_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require 'katapult/web_ui'
|
2
|
-
require 'katapult/model'
|
1
|
+
require 'katapult/elements/web_ui'
|
2
|
+
require 'katapult/elements/model'
|
3
3
|
require 'katapult/application_model'
|
4
4
|
|
5
5
|
describe Katapult::WebUI do
|
@@ -37,43 +37,21 @@ describe Katapult::WebUI do
|
|
37
37
|
|
38
38
|
describe '#model' do
|
39
39
|
it 'returns the model object' do
|
40
|
-
|
41
|
-
model = Katapult::Model.new('User')
|
40
|
+
application_model.model 'User'
|
42
41
|
|
43
|
-
|
44
|
-
|
42
|
+
subject = described_class.new('Customer',
|
43
|
+
model: 'User',
|
44
|
+
application_model: application_model,
|
45
|
+
)
|
45
46
|
|
46
|
-
expect(subject.model).to
|
47
|
+
expect(subject.model).to be application_model.models.first
|
47
48
|
end
|
48
49
|
|
49
50
|
it 'detects the model from its own name, if not stated explicitly' do
|
50
|
-
|
51
|
-
|
51
|
+
application_model.model 'Customer'
|
52
|
+
subject = described_class.new('Customer', application_model: application_model)
|
52
53
|
|
53
|
-
|
54
|
-
application_model.add_model(model)
|
55
|
-
|
56
|
-
expect(subject.model).to eql(model)
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'raises an error if it cannot find the model' do
|
60
|
-
subject = described_class.new('MissingModel')
|
61
|
-
application_model.add_web_ui(subject)
|
62
|
-
|
63
|
-
expect{ subject.model }.to raise_error(Katapult::WebUI::UnknownModelError)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
describe '#render' do
|
68
|
-
it 'raises an error when its model does not have a label attribute' do
|
69
|
-
subject = described_class.new('user')
|
70
|
-
model = Katapult::Model.new('user')
|
71
|
-
|
72
|
-
application_model.add_web_ui(subject)
|
73
|
-
application_model.add_model(model)
|
74
|
-
|
75
|
-
expect{ subject.render }.to raise_error Katapult::WebUI::MissingLabelAttrError,
|
76
|
-
'Cannot render a WebUI without a model with a label attribute'
|
54
|
+
expect(subject.model).to be application_model.models.first
|
77
55
|
end
|
78
56
|
end
|
79
57
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: katapult
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dominik Schöler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-01-
|
11
|
+
date: 2018-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- ".gitignore"
|
53
53
|
- ".rspec"
|
54
54
|
- ".ruby-version"
|
55
|
+
- CHANGELOG.md
|
55
56
|
- Gemfile
|
56
57
|
- Guardfile
|
57
58
|
- LICENSE.txt
|
@@ -86,6 +87,7 @@ files:
|
|
86
87
|
- lib/generators/katapult/basics/templates/Capfile
|
87
88
|
- lib/generators/katapult/basics/templates/Gemfile
|
88
89
|
- lib/generators/katapult/basics/templates/Guardfile
|
90
|
+
- lib/generators/katapult/basics/templates/README.md.tt
|
89
91
|
- lib/generators/katapult/basics/templates/app/controllers/errors_controller.rb
|
90
92
|
- lib/generators/katapult/basics/templates/app/helpers/unpoly_helper.rb
|
91
93
|
- lib/generators/katapult/basics/templates/app/views/layouts/_flashes.html.haml
|
@@ -189,27 +191,28 @@ files:
|
|
189
191
|
- lib/generators/katapult/web_ui/templates/controller.rb
|
190
192
|
- lib/generators/katapult/web_ui/web_ui_generator.rb
|
191
193
|
- lib/katapult.rb
|
192
|
-
- lib/katapult/action.rb
|
193
194
|
- lib/katapult/application_model.rb
|
194
|
-
- lib/katapult/attribute.rb
|
195
|
-
- lib/katapult/authentication.rb
|
196
|
-
- lib/katapult/binary_util.rb
|
197
195
|
- lib/katapult/element.rb
|
196
|
+
- lib/katapult/elements/action.rb
|
197
|
+
- lib/katapult/elements/association.rb
|
198
|
+
- lib/katapult/elements/attribute.rb
|
199
|
+
- lib/katapult/elements/authentication.rb
|
200
|
+
- lib/katapult/elements/model.rb
|
201
|
+
- lib/katapult/elements/navigation.rb
|
202
|
+
- lib/katapult/elements/web_ui.rb
|
198
203
|
- lib/katapult/generator.rb
|
199
|
-
- lib/katapult/
|
200
|
-
- lib/katapult/
|
201
|
-
- lib/katapult/navigation.rb
|
202
|
-
- lib/katapult/parser.rb
|
204
|
+
- lib/katapult/support/binary_util.rb
|
205
|
+
- lib/katapult/support/generator_goodies.rb
|
203
206
|
- lib/katapult/version.rb
|
204
|
-
- lib/katapult/web_ui.rb
|
205
207
|
- script/console
|
206
208
|
- script/kta
|
207
209
|
- script/update
|
208
210
|
- spec/action_spec.rb
|
211
|
+
- spec/application_model_spec.rb
|
212
|
+
- spec/association_spec.rb
|
209
213
|
- spec/attribute_spec.rb
|
210
214
|
- spec/element_spec.rb
|
211
215
|
- spec/model_spec.rb
|
212
|
-
- spec/parser_spec.rb
|
213
216
|
- spec/spec_helper.rb
|
214
217
|
- spec/util_spec.rb
|
215
218
|
- spec/web_ui_spec.rb
|
@@ -255,10 +258,11 @@ test_files:
|
|
255
258
|
- features/support/env.rb
|
256
259
|
- features/web_ui.feature
|
257
260
|
- spec/action_spec.rb
|
261
|
+
- spec/application_model_spec.rb
|
262
|
+
- spec/association_spec.rb
|
258
263
|
- spec/attribute_spec.rb
|
259
264
|
- spec/element_spec.rb
|
260
265
|
- spec/model_spec.rb
|
261
|
-
- spec/parser_spec.rb
|
262
266
|
- spec/spec_helper.rb
|
263
267
|
- spec/util_spec.rb
|
264
268
|
- spec/web_ui_spec.rb
|
data/lib/katapult/model.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
# Models a Rails model.
|
2
|
-
|
3
|
-
require 'katapult/element'
|
4
|
-
require 'katapult/attribute'
|
5
|
-
require 'generators/katapult/model/model_generator'
|
6
|
-
|
7
|
-
module Katapult
|
8
|
-
class Model < Element
|
9
|
-
|
10
|
-
UnknownAttributeError = Class.new(StandardError)
|
11
|
-
|
12
|
-
attr_accessor :attrs
|
13
|
-
|
14
|
-
def initialize(*args)
|
15
|
-
self.attrs = []
|
16
|
-
|
17
|
-
super
|
18
|
-
end
|
19
|
-
|
20
|
-
def attr(attr_name, options = {})
|
21
|
-
attrs << Attribute.new(attr_name, options)
|
22
|
-
end
|
23
|
-
|
24
|
-
def label_attr
|
25
|
-
renderable_attrs.first
|
26
|
-
end
|
27
|
-
|
28
|
-
def db_fields
|
29
|
-
attrs.reject(&:skip_db)
|
30
|
-
end
|
31
|
-
|
32
|
-
def renderable_attrs
|
33
|
-
attrs.reject { |a| %w[plain_json json password].include? a.type.to_s }
|
34
|
-
end
|
35
|
-
|
36
|
-
def editable_attrs
|
37
|
-
attrs.reject { |a| %w[plain_json json].include? a.type.to_s }
|
38
|
-
end
|
39
|
-
|
40
|
-
def render
|
41
|
-
Generators::ModelGenerator.new(self).invoke_all
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
45
|
-
end
|
data/lib/katapult/parser.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
# This class reads an application model file and turns it into an
|
2
|
-
# ApplicationModel instance.
|
3
|
-
|
4
|
-
require_relative 'application_model'
|
5
|
-
require 'katapult/model'
|
6
|
-
require 'katapult/web_ui'
|
7
|
-
require 'katapult/navigation'
|
8
|
-
require 'katapult/authentication'
|
9
|
-
|
10
|
-
module Katapult
|
11
|
-
class Parser
|
12
|
-
|
13
|
-
def initialize
|
14
|
-
self.application_model = Katapult::ApplicationModel.new
|
15
|
-
end
|
16
|
-
|
17
|
-
def parse(application_model_string, path_to_model = '')
|
18
|
-
instance_eval application_model_string, path_to_model
|
19
|
-
|
20
|
-
application_model
|
21
|
-
end
|
22
|
-
|
23
|
-
def model(name, &block)
|
24
|
-
application_model.add_model Model.new(name, &block)
|
25
|
-
end
|
26
|
-
|
27
|
-
def web_ui(name, options = {}, &block)
|
28
|
-
application_model.add_web_ui WebUI.new(name, options, &block)
|
29
|
-
end
|
30
|
-
|
31
|
-
# A shortcut to create a #model together with a default #web_ui with CRUD
|
32
|
-
# actions
|
33
|
-
def crud(name, &block)
|
34
|
-
application_model.add_model Model.new(name, &block)
|
35
|
-
application_model.add_web_ui WebUI.new(name, &:crud)
|
36
|
-
end
|
37
|
-
|
38
|
-
def navigation(name = :main)
|
39
|
-
application_model.set_navigation Navigation.new(name)
|
40
|
-
end
|
41
|
-
|
42
|
-
def authenticate(name, system_email:)
|
43
|
-
application_model.set_authentication Authentication.new(name,
|
44
|
-
system_email: system_email
|
45
|
-
)
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
attr_accessor :application_model
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
data/spec/parser_spec.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'katapult/parser'
|
2
|
-
|
3
|
-
describe Katapult::Parser do
|
4
|
-
|
5
|
-
describe '#crud' do
|
6
|
-
it 'creates a model plus a web UI with crud actions' do
|
7
|
-
model = <<-MODEL
|
8
|
-
crud 'user' do |user|
|
9
|
-
user.attr :age
|
10
|
-
end
|
11
|
-
MODEL
|
12
|
-
|
13
|
-
parsed_model = subject.parse(model)
|
14
|
-
expect(parsed_model.models.count).to be 1
|
15
|
-
user = parsed_model.models.first
|
16
|
-
expect(user.name).to eq 'user'
|
17
|
-
expect(user.attrs.count).to be 1
|
18
|
-
expect(user.attrs.first.name).to eq 'age'
|
19
|
-
|
20
|
-
expect(parsed_model.web_uis.count).to be 1
|
21
|
-
web_ui = parsed_model.web_uis.first
|
22
|
-
expect(web_ui.actions.map(&:name)).to match Katapult::WebUI::RAILS_ACTIONS
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|