katapult 0.1.0 → 0.1.1
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/.ruby-version +1 -1
- data/README.md +5 -9
- data/features/binary.feature +13 -1
- data/features/katapult.feature +6 -6
- data/features/model.feature +2 -2
- data/features/step_definitions/file_steps.rb +1 -1
- data/features/step_definitions/rails_steps.rb +1 -1
- data/features/wui.feature +2 -2
- data/lib/generators/katapult/basics/basics_generator.rb +18 -0
- data/lib/generators/katapult/basics/templates/.ruby-version +1 -0
- data/lib/generators/katapult/basics/templates/Gemfile +3 -2
- data/lib/generators/katapult/basics/templates/features/support/env-custom.rb +0 -2
- data/lib/generators/katapult/cucumber_features/templates/feature.feature +2 -2
- data/lib/generators/katapult/haml/templates/custom_action.html.haml +1 -1
- data/lib/generators/katapult/haml/templates/index.html.haml +2 -2
- data/lib/generators/katapult/haml/templates/show.html.haml +2 -2
- data/lib/generators/katapult/navigation/templates/app/models/navigation.rb +1 -1
- data/lib/generators/katapult/transform/transform_generator.rb +8 -0
- data/lib/generators/katapult/w_u_i/templates/controller.rb +1 -1
- data/lib/katapult/element.rb +13 -12
- data/lib/katapult/version.rb +1 -1
- data/spec/element_spec.rb +16 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/util_spec.rb +3 -3
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0c8a60d4ea75bbc8ab64191575c2a672d80daf6
|
4
|
+
data.tar.gz: 8e3b106a9465545b5bccef527bf11358aa0ecd37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0fa254887044ccb0d59a3d7921e8a6122797f1950a2ed4cd55ccfb5da9e25e5c62ab1fe496cdc7b6dbf5675ab7410ae005e888ac69e9e95667d3ca5c146ed8d
|
7
|
+
data.tar.gz: 5367cb38a7cd8945ad1c6bb912b0004b17051cbac11a38172c8ea0c1435369e12dbc36f2a3a86a582c6a1ace860515da88572e23a1bd535e0cc3c87657b4d723
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.1.
|
1
|
+
2.1.5
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@ application basics and generates (makandra-flavored) code from an application
|
|
8
8
|
model, significantly speeding up the initial phase of a Rails project.
|
9
9
|
|
10
10
|
`Katapult` will always support current versions of Ruby and Rails, currently
|
11
|
-
Rails 4.
|
11
|
+
Rails 4.2 and Ruby 2.1.
|
12
12
|
|
13
13
|
|
14
14
|
## Installation
|
@@ -39,7 +39,9 @@ After installation, you find a file `lib/katapult/application_model.rb` where
|
|
39
39
|
you will define the properties of your application. Inside this file, use
|
40
40
|
`katapult`'s simple DSL (domain specific language) to express yourself.
|
41
41
|
|
42
|
-
|
42
|
+
|
43
|
+
### DSL syntax example
|
44
|
+
The DSL consists of _elements_, e.g. Model or WUI (which stands for *Web User
|
43
45
|
Interface*). Each `katapult` element has the same syntax, taking a name,
|
44
46
|
options, and a block:
|
45
47
|
|
@@ -94,13 +96,7 @@ WUIs.
|
|
94
96
|
navigation :main
|
95
97
|
|
96
98
|
|
97
|
-
##
|
98
|
-
|
99
|
-
<!-- 1. Fork it ( http://github.com/<my-github-username>/katapult/fork )
|
100
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
101
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
102
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
103
|
-
5. Create new Pull Request -->
|
99
|
+
## Development
|
104
100
|
|
105
101
|
`Katapult` caches a pristine Rails application inside its `tmp/` directory to
|
106
102
|
speed up test runs. Keep this in mind, as it may lead to caching issues when
|
data/features/binary.feature
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Feature: Katapult binary `katapult`
|
2
2
|
|
3
3
|
Scenario: Start new Rails application
|
4
|
-
Given
|
4
|
+
Given the default aruba timeout is 120 seconds
|
5
5
|
|
6
6
|
When I successfully run `katapult target binary_test`
|
7
7
|
Then the output should contain "Creating new Rails application"
|
@@ -26,6 +26,12 @@ Feature: Katapult binary `katapult`
|
|
26
26
|
And the output should contain "rails generate katapult:basics"
|
27
27
|
And the output should contain "Author: katapult <katapult@makandra.com>"
|
28
28
|
|
29
|
+
And the output should contain:
|
30
|
+
"""
|
31
|
+
Next step: Model your application in lib/katapult/application_model.rb and
|
32
|
+
trigger the code generation by running `katapult fire`.
|
33
|
+
"""
|
34
|
+
|
29
35
|
|
30
36
|
Scenario: Forget to pass application name
|
31
37
|
When I run `katapult target # without app name`
|
@@ -46,3 +52,9 @@ Feature: Katapult binary `katapult`
|
|
46
52
|
Then the output should contain "Loading katapult"
|
47
53
|
And the output should contain "parse lib/katapult/application_model"
|
48
54
|
And the output should contain "render into katapult_test_app"
|
55
|
+
|
56
|
+
And the output should contain:
|
57
|
+
"""
|
58
|
+
You're done! Now boot up your development server (e.g. with `rails server`)
|
59
|
+
and try your kickstarted application in the browser.
|
60
|
+
"""
|
data/features/katapult.feature
CHANGED
@@ -33,16 +33,16 @@ Feature: Katapult in general
|
|
33
33
|
Scenario: Generate basic files and settings
|
34
34
|
Given I install katapult
|
35
35
|
When I generate katapult basics
|
36
|
-
Then the file "
|
36
|
+
Then the file ".ruby-version" should contain "2.1.5"
|
37
|
+
And the file "Gemfile" should contain exactly:
|
37
38
|
"""
|
38
39
|
source 'https://rubygems.org'
|
39
40
|
|
40
41
|
# from original Gemfile
|
41
|
-
gem 'rails', '4.1
|
42
|
+
gem 'rails', '4.2.1'
|
42
43
|
gem 'mysql2'
|
43
44
|
gem 'jquery-rails'
|
44
45
|
gem 'jbuilder', '~> 2.0'
|
45
|
-
gem 'spring', group: :development
|
46
46
|
gem 'katapult', path: '../../..'
|
47
47
|
|
48
48
|
# engines
|
@@ -79,7 +79,7 @@ Feature: Katapult in general
|
|
79
79
|
gem 'autoprefixer-rails'
|
80
80
|
gem 'coffee-rails'
|
81
81
|
gem 'uglifier'
|
82
|
-
gem 'compass-rails'
|
82
|
+
gem 'compass-rails', '>= 2.0.4' # fixes "uninitialized constant Sprockets::SassCacheStore"
|
83
83
|
gem 'compass-rgbapng'
|
84
84
|
|
85
85
|
group :development do
|
@@ -98,6 +98,7 @@ Feature: Katapult in general
|
|
98
98
|
gem 'byebug'
|
99
99
|
gem 'factory_girl_rails'
|
100
100
|
gem 'rspec-rails'
|
101
|
+
gem 'spring'
|
101
102
|
end
|
102
103
|
|
103
104
|
group :test do
|
@@ -113,7 +114,7 @@ Feature: Katapult in general
|
|
113
114
|
gem 'selenium-webdriver'
|
114
115
|
gem 'spreewald'
|
115
116
|
|
116
|
-
gem '
|
117
|
+
gem 'rspec'
|
117
118
|
gem 'shoulda-matchers', require: false
|
118
119
|
end
|
119
120
|
|
@@ -161,7 +162,6 @@ Feature: Katapult in general
|
|
161
162
|
|
162
163
|
And the file "features/support/env-custom.rb" should contain:
|
163
164
|
"""
|
164
|
-
require 'rspec_candy/all'
|
165
165
|
require 'spreewald/all_steps'
|
166
166
|
"""
|
167
167
|
And a file named "features/support/paths.rb" should exist
|
data/features/model.feature
CHANGED
@@ -28,7 +28,7 @@ Feature: Generate Models
|
|
28
28
|
def change
|
29
29
|
create_table :cars do |t|
|
30
30
|
|
31
|
-
t.timestamps
|
31
|
+
t.timestamps null: false
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -95,7 +95,7 @@ Feature: Generate Models
|
|
95
95
|
t.string :homepage
|
96
96
|
t.boolean :locked
|
97
97
|
|
98
|
-
t.timestamps
|
98
|
+
t.timestamps null: false
|
99
99
|
end
|
100
100
|
end
|
101
101
|
end
|
@@ -10,5 +10,5 @@ Then /^there should be a migration with:$/ do |migration|
|
|
10
10
|
migrations_path = File.join(current_dir, 'db', 'migrate', '*.rb')
|
11
11
|
|
12
12
|
all_migrations = Dir.glob(migrations_path).map(&File.method(:read)).join
|
13
|
-
all_migrations.
|
13
|
+
expect(all_migrations).to include(migration)
|
14
14
|
end
|
@@ -21,7 +21,7 @@ module KatapultRailsHelper
|
|
21
21
|
def ensure_bundled(path)
|
22
22
|
Dir.chdir(path) do
|
23
23
|
Bundler.with_clean_env do
|
24
|
-
system('bundle check
|
24
|
+
system('bundle check > /dev/null 2>&1') or system('bundle install')
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
data/features/wui.feature
CHANGED
@@ -9,7 +9,7 @@ Feature: Web User Interface
|
|
9
9
|
Scenario: Generate a Web User Interface
|
10
10
|
When I overwrite "lib/katapult/application_model.rb" with:
|
11
11
|
"""
|
12
|
-
model '
|
12
|
+
model 'customer' do |customer|
|
13
13
|
customer.attr :name
|
14
14
|
customer.attr :age, type: :integer
|
15
15
|
|
@@ -19,7 +19,7 @@ Feature: Web User Interface
|
|
19
19
|
customer.attr :locked, type: :flag, default: false
|
20
20
|
end
|
21
21
|
|
22
|
-
wui '
|
22
|
+
wui 'customer', model: 'customer' do |wui|
|
23
23
|
wui.crud
|
24
24
|
wui.action :get_member, method: :get, scope: :member
|
25
25
|
wui.action :post_member, method: :post, scope: :member
|
@@ -10,6 +10,10 @@ module Katapult
|
|
10
10
|
source_root File.expand_path('../templates', __FILE__)
|
11
11
|
|
12
12
|
|
13
|
+
def write_ruby_version
|
14
|
+
template '.ruby-version'
|
15
|
+
end
|
16
|
+
|
13
17
|
def write_database_ymls
|
14
18
|
template 'config/database.yml', force: true
|
15
19
|
template 'config/database.sample.yml'
|
@@ -28,6 +32,12 @@ module Katapult
|
|
28
32
|
|
29
33
|
def bundle_install
|
30
34
|
bundle 'install'
|
35
|
+
|
36
|
+
# There is a bug in the current version of Compass, so we use an older
|
37
|
+
# one in our Gemfile template. Since its dependencies "sprockets" and
|
38
|
+
# "sass-rails" are already in the Gemfile.lock (from installing Rails),
|
39
|
+
# we need to explicitly update them.
|
40
|
+
bundle 'update sprockets sass-rails'
|
31
41
|
end
|
32
42
|
|
33
43
|
def remove_turbolinks_js
|
@@ -78,6 +88,14 @@ config.autoload_paths << "#{Rails.root}/app/controllers/shared"
|
|
78
88
|
# template 'config/deploy.rb'
|
79
89
|
# end
|
80
90
|
|
91
|
+
def print_instructions
|
92
|
+
puts <<-INSTRUCTIONS.strip_heredoc
|
93
|
+
|
94
|
+
Next step: Model your application in lib/katapult/application_model.rb and
|
95
|
+
trigger the code generation by running `katapult fire`.
|
96
|
+
INSTRUCTIONS
|
97
|
+
end
|
98
|
+
|
81
99
|
private
|
82
100
|
|
83
101
|
def app_name
|
@@ -0,0 +1 @@
|
|
1
|
+
2.1.5
|
@@ -37,7 +37,7 @@ gem 'sass-rails'
|
|
37
37
|
gem 'autoprefixer-rails'
|
38
38
|
gem 'coffee-rails'
|
39
39
|
gem 'uglifier'
|
40
|
-
gem 'compass-rails'
|
40
|
+
gem 'compass-rails', '>= 2.0.4' # fixes "uninitialized constant Sprockets::SassCacheStore"
|
41
41
|
gem 'compass-rgbapng'
|
42
42
|
|
43
43
|
group :development do
|
@@ -56,6 +56,7 @@ group :development, :test do
|
|
56
56
|
gem 'byebug'
|
57
57
|
gem 'factory_girl_rails'
|
58
58
|
gem 'rspec-rails'
|
59
|
+
gem 'spring'
|
59
60
|
end
|
60
61
|
|
61
62
|
group :test do
|
@@ -71,6 +72,6 @@ group :test do
|
|
71
72
|
gem 'selenium-webdriver'
|
72
73
|
gem 'spreewald'
|
73
74
|
|
74
|
-
gem '
|
75
|
+
gem 'rspec'
|
75
76
|
gem 'shoulda-matchers', require: false
|
76
77
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
%h1
|
2
|
-
<%= model_name(:
|
2
|
+
<%= model_name(:humans).capitalize %>
|
3
3
|
|
4
4
|
.tools
|
5
5
|
= link_to 'Add <%= model_name(:human) %>', <%= wui.path(:new) %>, class: 'tools__button is_primary'
|
@@ -26,4 +26,4 @@
|
|
26
26
|
|
27
27
|
- else
|
28
28
|
%p.help-block
|
29
|
-
There are no <%= model_name(:
|
29
|
+
There are no <%= model_name(:humans) %> yet.
|
@@ -2,7 +2,7 @@
|
|
2
2
|
= <%= model_name(:ivar) %>.to_s
|
3
3
|
|
4
4
|
.tools
|
5
|
-
= link_to 'All <%= model_name(:
|
5
|
+
= link_to 'All <%= model_name(:humans) %>', <%= wui.path(:index) %>, class: 'tools__button'
|
6
6
|
= link_to 'Edit', <%= wui.path(:edit, model_name(:ivar)) %>, class: 'tools__button is_primary'
|
7
7
|
= link_to 'Destroy', <%= wui.path(:destroy, model_name(:ivar)) %>, method: :delete, class: 'tools__button', confirm: 'Really destroy?'
|
8
8
|
<% wui.custom_actions.select(&:member?).each do |action| -%>
|
@@ -15,7 +15,7 @@
|
|
15
15
|
<% wui.model.attrs.each do |attribute| -%>
|
16
16
|
<%- model_attribute = "#{model_name(:ivar)}.#{attribute.name}" -%>
|
17
17
|
%dt
|
18
|
-
= <%= model_name(:
|
18
|
+
= <%= model_name(:class) %>.human_attribute_name(:<%= attribute.name %>)
|
19
19
|
%dd
|
20
20
|
<%- case attribute.type -%>
|
21
21
|
<%- when :string -%>
|
@@ -4,7 +4,7 @@ class Navigation
|
|
4
4
|
navigation :<%= name.downcase %> do
|
5
5
|
<% navigation.wuis.each do |wui| -%>
|
6
6
|
<%- if wui.find_action(:index) -%>
|
7
|
-
section <%= navigation.section_name(wui) %>, <%= wui.model_name(:
|
7
|
+
section <%= navigation.section_name(wui) %>, <%= wui.model_name(:humans).titlecase.inspect %>, <%= wui.path(:index) %>
|
8
8
|
<%- end -%>
|
9
9
|
<% end -%>
|
10
10
|
end
|
@@ -37,6 +37,14 @@ module Katapult
|
|
37
37
|
run 'bin/rake db:create db:migrate RAILS_ENV=test'
|
38
38
|
end
|
39
39
|
|
40
|
+
def print_instructions
|
41
|
+
puts <<-INSTRUCTIONS.strip_heredoc
|
42
|
+
|
43
|
+
You're done! Now boot up your development server (e.g. with `rails server`)
|
44
|
+
and try your kickstarted application in the browser.
|
45
|
+
INSTRUCTIONS
|
46
|
+
end
|
47
|
+
|
40
48
|
private
|
41
49
|
|
42
50
|
def application_name
|
data/lib/katapult/element.rb
CHANGED
@@ -8,6 +8,7 @@ module Katapult
|
|
8
8
|
class Element
|
9
9
|
|
10
10
|
UnknownOptionError = Class.new(StandardError)
|
11
|
+
UnknownFormattingError = Class.new(StandardError)
|
11
12
|
|
12
13
|
attr_accessor :name, :options
|
13
14
|
attr_reader :application_model
|
@@ -36,18 +37,18 @@ module Katapult
|
|
36
37
|
machine_name = @name.underscore
|
37
38
|
|
38
39
|
case kind.to_s
|
39
|
-
when '
|
40
|
-
when '
|
41
|
-
when '
|
42
|
-
when '
|
43
|
-
when '
|
44
|
-
when '
|
45
|
-
when '
|
46
|
-
when 'human'
|
47
|
-
when '
|
48
|
-
when '
|
49
|
-
|
50
|
-
|
40
|
+
when '' then @name
|
41
|
+
when 'symbol' then ":#{machine_name}"
|
42
|
+
when 'symbols' then ":#{machine_name.pluralize}"
|
43
|
+
when 'variable' then machine_name
|
44
|
+
when 'variables' then machine_name.pluralize
|
45
|
+
when 'ivar' then "@#{machine_name}"
|
46
|
+
when 'ivars' then "@#{machine_name.pluralize}"
|
47
|
+
when 'human' then human_name
|
48
|
+
when 'humans' then human_name.pluralize
|
49
|
+
when 'class' then machine_name.classify
|
50
|
+
when 'classes' then machine_name.classify.pluralize
|
51
|
+
else raise UnknownFormattingError, "Unknown name formatting: #{ kind.inspect }"
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
data/lib/katapult/version.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'katapult/element'
|
3
|
+
|
4
|
+
describe Katapult::Element do
|
5
|
+
subject { described_class.new('element') }
|
6
|
+
|
7
|
+
describe '#name' do
|
8
|
+
it 'raises an error when passed an unknown formatting kind' do
|
9
|
+
expect do
|
10
|
+
subject.name(:foobar)
|
11
|
+
end.to raise_error(Katapult::Element::UnknownFormattingError,
|
12
|
+
'Unknown name formatting: :foobar')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/util_spec.rb
CHANGED
@@ -5,17 +5,17 @@ describe Katapult::Util do
|
|
5
5
|
|
6
6
|
describe '#git_commit' do
|
7
7
|
it 'adds all files before committing' do
|
8
|
-
Katapult::Util.
|
8
|
+
allow(Katapult::Util).to receive(:system).with(/git add --all; git commit/)
|
9
9
|
Katapult::Util.git_commit 'test'
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'sets "katapult" as commit author' do
|
13
|
-
Katapult::Util.
|
13
|
+
allow(Katapult::Util).to receive(:system).with(/git commit.*--author='katapult \<katapult@makandra\.com\>'/)
|
14
14
|
Katapult::Util.git_commit 'test'
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'sanitizes the commit message' do
|
18
|
-
Katapult::Util.
|
18
|
+
allow(Katapult::Util).to receive(:system).with(/git commit -m '"hack0r"'/)
|
19
19
|
Katapult::Util.git_commit "\"hack''''0r\""
|
20
20
|
end
|
21
21
|
end
|
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.1.
|
4
|
+
version: 0.1.1
|
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:
|
11
|
+
date: 2015-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -154,6 +154,7 @@ files:
|
|
154
154
|
- katapult.gemspec
|
155
155
|
- katapult.png
|
156
156
|
- lib/generators/katapult/basics/basics_generator.rb
|
157
|
+
- lib/generators/katapult/basics/templates/.ruby-version
|
157
158
|
- lib/generators/katapult/basics/templates/Gemfile
|
158
159
|
- lib/generators/katapult/basics/templates/app/assets/stylesheets/application.css.sass
|
159
160
|
- lib/generators/katapult/basics/templates/app/assets/stylesheets/application/blocks/_all.css.sass
|
@@ -204,6 +205,7 @@ files:
|
|
204
205
|
- script/console
|
205
206
|
- spec/action_spec.rb
|
206
207
|
- spec/attribute_spec.rb
|
208
|
+
- spec/element_spec.rb
|
207
209
|
- spec/model_spec.rb
|
208
210
|
- spec/spec_helper.rb
|
209
211
|
- spec/util_spec.rb
|
@@ -228,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
228
230
|
version: '0'
|
229
231
|
requirements: []
|
230
232
|
rubyforge_project:
|
231
|
-
rubygems_version: 2.4.
|
233
|
+
rubygems_version: 2.4.3
|
232
234
|
signing_key:
|
233
235
|
specification_version: 4
|
234
236
|
summary: Kickstart Rails development
|
@@ -247,6 +249,7 @@ test_files:
|
|
247
249
|
- features/wui.feature
|
248
250
|
- spec/action_spec.rb
|
249
251
|
- spec/attribute_spec.rb
|
252
|
+
- spec/element_spec.rb
|
250
253
|
- spec/model_spec.rb
|
251
254
|
- spec/spec_helper.rb
|
252
255
|
- spec/util_spec.rb
|