diecut 0.0.3 → 0.0.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/lib/diecut/cli.rb +5 -3
- data/lib/diecut/errors.rb +13 -0
- data/lib/diecut/mediator.rb +2 -2
- data/lib/diecut/mill.rb +7 -1
- data/lib/diecut/plugin-description.rb +22 -4
- data/lib/diecut/plugin-loader.rb +8 -1
- data/lib/diecut.rb +13 -13
- data/spec/linter_spec.rb +1 -1
- data/spec/mill_spec.rb +2 -2
- data/spec/register_plugin_spec.rb +2 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/stemming_kinds_spec.rb +78 -0
- metadata +9 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 050a46989b178da905def8fbfb34438d55420670
|
4
|
+
data.tar.gz: 0d78911f4ba8eff62a23771eac548fc972ec0459
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95b1f40f8bae335f41412543b63865870590b824606660fa3cd509202725093b13720f2cb1439b02bf4561e6014508363d53187c38302d3cb46122d7ec40e7ab
|
7
|
+
data.tar.gz: 0b7b55d6b626fc9c0e55eac32e8229909f768f8f3651d83d3acf4444d1a131da2bb9d088e63fa25a6c282d11b4bd6084086bc6dc4cc9a52fb9caf325fc434f0d
|
data/lib/diecut/cli.rb
CHANGED
@@ -15,7 +15,7 @@ module Diecut
|
|
15
15
|
end
|
16
16
|
|
17
17
|
mediator.plugins.each do |plugin|
|
18
|
-
class_option "with-#{plugin.name}", :default => plugin.
|
18
|
+
class_option "with-#{plugin.name}", :default => plugin.default_activated_for(kind)
|
19
19
|
end
|
20
20
|
|
21
21
|
setup_subclass(mediator, example_ui)
|
@@ -48,8 +48,10 @@ module Diecut
|
|
48
48
|
mill.activate_plugins {|name| options["with-#{name}"] }
|
49
49
|
|
50
50
|
ui = mill.user_interface
|
51
|
-
options.
|
52
|
-
|
51
|
+
ui_hash = Hash[ options.find_all do |name, value|
|
52
|
+
not value.nil?
|
53
|
+
end]
|
54
|
+
ui.from_hash(ui_hash)
|
53
55
|
|
54
56
|
mill.churn(ui) do |path, contents|
|
55
57
|
create_file(path, contents)
|
data/lib/diecut/errors.rb
CHANGED
@@ -13,6 +13,10 @@ module Diecut
|
|
13
13
|
"Default on #{context_path.inspect} from plugin #{name} has both a simple default value (#{value}) and a dynamic block value, which isn't allowed."
|
14
14
|
end
|
15
15
|
|
16
|
+
def unregistered_plugin_source_message(source_path)
|
17
|
+
"Couldn't find source of plugin which appears to be defined at #{source_path}"
|
18
|
+
end
|
19
|
+
|
16
20
|
def missing_context_field(plugin_name, option_name, context_path)
|
17
21
|
issue(missing_context_field_message(option_name, context_path))
|
18
22
|
end
|
@@ -25,6 +29,10 @@ module Diecut
|
|
25
29
|
issue invalid_plugin_message(name, context_path, value)
|
26
30
|
end
|
27
31
|
|
32
|
+
def unregistered_plugin_source(source_path)
|
33
|
+
issue unregistered_plugin_source_message(source_path)
|
34
|
+
end
|
35
|
+
|
28
36
|
def handle_exception(ex)
|
29
37
|
if Error === ex
|
30
38
|
issue(ex.message)
|
@@ -56,6 +64,10 @@ module Diecut
|
|
56
64
|
raise
|
57
65
|
end
|
58
66
|
|
67
|
+
def unregistered_plugin_source(source_path)
|
68
|
+
raise UnregisteredPluginSource, unregistered_plugin_source_message(source_path)
|
69
|
+
end
|
70
|
+
|
59
71
|
def missing_context_field(option_name, context_path)
|
60
72
|
raise MissingContext, missing_context_field_message(option_name, context_path)
|
61
73
|
end
|
@@ -80,4 +92,5 @@ module Diecut
|
|
80
92
|
class OverriddenDefault < Error; end
|
81
93
|
class InvalidPlugin < Error; end
|
82
94
|
class FieldClash < Error; end
|
95
|
+
class UnregisteredPluginSource < Error; end
|
83
96
|
end
|
data/lib/diecut/mediator.rb
CHANGED
data/lib/diecut/mill.rb
CHANGED
@@ -8,7 +8,15 @@ module Diecut
|
|
8
8
|
include CallerLocationsPolyfill
|
9
9
|
NO_VALUE = Object.new.freeze
|
10
10
|
|
11
|
-
KindStem
|
11
|
+
class KindStem < Struct.new(:kind, :stem, :template_dir, :default_activated)
|
12
|
+
def default_off
|
13
|
+
self.default_activated = false
|
14
|
+
end
|
15
|
+
|
16
|
+
def default_on
|
17
|
+
self.default_activated = true
|
18
|
+
end
|
19
|
+
end
|
12
20
|
|
13
21
|
def initialize(name, source_path)
|
14
22
|
@name = name
|
@@ -39,6 +47,15 @@ module Diecut
|
|
39
47
|
@kind_stems.key?(kind)
|
40
48
|
end
|
41
49
|
|
50
|
+
def default_activated_for(kind)
|
51
|
+
stem = @kind_stems[kind]
|
52
|
+
if stem.default_activated.nil?
|
53
|
+
default_active?
|
54
|
+
else
|
55
|
+
stem.default_activated
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
42
59
|
def default_active?
|
43
60
|
@default_activated
|
44
61
|
end
|
@@ -71,10 +88,12 @@ module Diecut
|
|
71
88
|
#
|
72
89
|
#
|
73
90
|
def for_kind(kind, templates = nil, stem = nil)
|
74
|
-
stem ||= [kind]
|
75
91
|
templates ||= "diecut_templates"
|
76
92
|
templates = File.expand_path(templates, File.dirname(caller_locations(1..1).first.absolute_path))
|
77
|
-
|
93
|
+
kind_stem = KindStem.new(kind, stem, templates, nil)
|
94
|
+
@kind_stems[kind] = kind_stem
|
95
|
+
yield kind_stem if block_given?
|
96
|
+
return kind_stem
|
78
97
|
end
|
79
98
|
|
80
99
|
# Force this plugin to be enabled to be used. Good for optional features.
|
@@ -118,7 +137,6 @@ module Diecut
|
|
118
137
|
end
|
119
138
|
if value != NO_VALUE and not block.nil?
|
120
139
|
issue_handler.invalid_plugin(name, context_path, value)
|
121
|
-
raise InvalidPlugin, "Default on #{name.inspect} both has a simple default value (#{value}) and a dynamic block value, which isn't allowed."
|
122
140
|
end
|
123
141
|
@context_defaults << ContextDefault.new(context_path, value, block)
|
124
142
|
end
|
data/lib/diecut/plugin-loader.rb
CHANGED
@@ -32,6 +32,11 @@ module Diecut
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
+
def issue_handler
|
36
|
+
@issue_handler ||= Diecut.issue_handler
|
37
|
+
end
|
38
|
+
attr_writer :issue_handler
|
39
|
+
|
35
40
|
# :nocov:
|
36
41
|
def latest_specs(prerelease)
|
37
42
|
Gem::Specification.latest_specs(prerelease)
|
@@ -170,7 +175,9 @@ module Diecut
|
|
170
175
|
return path
|
171
176
|
end
|
172
177
|
end
|
173
|
-
|
178
|
+
fallback_location = locations.first.absolute_path
|
179
|
+
issue_handler.unregistered_plugin_source(fallback_location)
|
180
|
+
return fallback_location
|
174
181
|
end
|
175
182
|
|
176
183
|
def add_plugin_desc(desc)
|
data/lib/diecut.rb
CHANGED
@@ -5,6 +5,18 @@ require 'diecut/errors'
|
|
5
5
|
|
6
6
|
module Diecut
|
7
7
|
class << self
|
8
|
+
# Used in a `diecut_plugin.rb` file (either in the `lib/` of a gem, or at
|
9
|
+
# the local `~/.config/diecut/diecut_plugin.rb` to register a new plugin.
|
10
|
+
#
|
11
|
+
# @param name [String, Symbol]
|
12
|
+
# Names the plugin so that it can be toggled later
|
13
|
+
#
|
14
|
+
# @yieldparam description [PluginDescription]
|
15
|
+
# The description object to configure the plugin with.
|
16
|
+
def plugin(name, &block)
|
17
|
+
plugin_loader.describe_plugin(name, &block)
|
18
|
+
end
|
19
|
+
|
8
20
|
def plugin_loader
|
9
21
|
@plugin_loader ||= PluginLoader.new
|
10
22
|
end
|
@@ -30,18 +42,6 @@ module Diecut
|
|
30
42
|
end
|
31
43
|
attr_writer :issue_handler
|
32
44
|
|
33
|
-
# Used in a `diecut_plugin.rb` file (either in the `lib/` of a gem, or at
|
34
|
-
# the local `~/.config/diecut/diecut_plugin.rb` to register a new plugin.
|
35
|
-
#
|
36
|
-
# @param name [String, Symbol]
|
37
|
-
# Names the plugin so that it can be toggled later
|
38
|
-
#
|
39
|
-
# @yieldparam description [PluginDescription]
|
40
|
-
# The description object to configure the plugin with.
|
41
|
-
def plugin(name, &block)
|
42
|
-
plugin_loader.describe_plugin(name, &block)
|
43
|
-
end
|
44
|
-
|
45
45
|
def kinds
|
46
46
|
plugins.reduce([]) do |list, plugin|
|
47
47
|
list + plugin.kinds
|
@@ -52,7 +52,7 @@ module Diecut
|
|
52
52
|
Mediator.new.tap do |med|
|
53
53
|
plugins.each do |plug|
|
54
54
|
next unless plug.has_kind?(kind)
|
55
|
-
med.add_plugin(plug)
|
55
|
+
med.add_plugin(plug, plug.default_activated_for(kind))
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|
data/spec/linter_spec.rb
CHANGED
data/spec/mill_spec.rb
CHANGED
@@ -31,8 +31,8 @@ describe Diecut::Mill do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
before :each do
|
34
|
-
mill.mediator.add_plugin(plugin)
|
35
|
-
mill.mediator.add_plugin(other_plugin)
|
34
|
+
mill.mediator.add_plugin(plugin, true)
|
35
|
+
mill.mediator.add_plugin(other_plugin, true)
|
36
36
|
end
|
37
37
|
|
38
38
|
it "should render files" do
|
data/spec/spec_helper.rb
CHANGED
@@ -2,6 +2,7 @@ require 'cadre/rspec3'
|
|
2
2
|
|
3
3
|
RSpec.configure do |config|
|
4
4
|
config.run_all_when_everything_filtered = true
|
5
|
+
config.example_status_persistence_file_path = "example_results.txt"
|
5
6
|
config.add_formatter(Cadre::RSpec3::NotifyOnCompleteFormatter)
|
6
7
|
config.add_formatter(Cadre::RSpec3::QuickfixFormatter)
|
7
8
|
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'diecut/mill'
|
2
|
+
require 'file-sandbox'
|
3
|
+
|
4
|
+
describe Diecut::Mill do
|
5
|
+
include FileSandbox
|
6
|
+
before :each do
|
7
|
+
Diecut.clear_plugins
|
8
|
+
|
9
|
+
sandbox["resource/src/common/resources/{{resource_name}}.js"].contents = "yup"
|
10
|
+
sandbox["mappers/app/mappers/{{mapper_name}}.rb"].contents = "yup"
|
11
|
+
end
|
12
|
+
|
13
|
+
before :each do
|
14
|
+
Diecut.plugin("relayer-resource") do |resource|
|
15
|
+
resource.for_kind("xing", File.join(sandbox.root, "resource")) do |xing|
|
16
|
+
xing.stem = 'frontend'
|
17
|
+
end
|
18
|
+
|
19
|
+
resource.for_kind('angular-one', File.join(sandbox.root, "resource")) do |ng|
|
20
|
+
ng.default_off
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
before :each do
|
26
|
+
Diecut.plugin("rails-mapper") do |mapper|
|
27
|
+
mapper.for_kind("xing", File.join(sandbox.root, "mappers")) do |xing|
|
28
|
+
xing.stem = 'backend'
|
29
|
+
end
|
30
|
+
|
31
|
+
mapper.for_kind('rails', File.join(sandbox.root, "mappers"))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
after :each do
|
36
|
+
Diecut.clear_plugins
|
37
|
+
end
|
38
|
+
|
39
|
+
let :path_list do
|
40
|
+
mill.load_files
|
41
|
+
mill.templates.templates.map{|n, template| template.path}
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "Mixed with stems" do
|
45
|
+
let :mill do
|
46
|
+
Diecut::Mill.new("xing")
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should have files in stemmed directories" do
|
50
|
+
expect(path_list).to include("frontend/src/common/resources/{{resource_name}}.js", "backend/app/mappers/{{mapper_name}}.rb")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "Simpler kind" do
|
55
|
+
let :mill do
|
56
|
+
Diecut::Mill.new("rails")
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should have files in stemmed directories" do
|
60
|
+
expect(path_list).to include("app/mappers/{{mapper_name}}.rb")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "Simpler, but defaults off for kind" do
|
65
|
+
let :mill do
|
66
|
+
Diecut::Mill.new("angular-one")
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should have files in stemmed directories" do
|
70
|
+
expect(path_list).to eq([])
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should get the files if enables" do
|
74
|
+
mill.activate_plugins{ true }
|
75
|
+
expect(path_list).to include("src/common/resources/{{resource_name}}.js")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: diecut
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Judson Lester
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mustache
|
@@ -80,7 +80,10 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0.8'
|
83
|
-
description:
|
83
|
+
description: |2
|
84
|
+
Diecut is a tool for supporting the process of writing code generation. It provides
|
85
|
+
linting, a general purpose command line generator, discovery of templated values, and
|
86
|
+
composed generation.
|
84
87
|
email:
|
85
88
|
- nyarly@gmail.com
|
86
89
|
executables:
|
@@ -127,6 +130,7 @@ files:
|
|
127
130
|
- spec/plugin_loader_spec.rb
|
128
131
|
- spec/register_plugin_spec.rb
|
129
132
|
- spec/spec_helper.rb
|
133
|
+
- spec/stemming_kinds_spec.rb
|
130
134
|
- spec/template-reducer_spec.rb
|
131
135
|
- spec/template_set_spec.rb
|
132
136
|
- spec/template_spec.rb
|
@@ -140,7 +144,7 @@ rdoc_options:
|
|
140
144
|
- "--main"
|
141
145
|
- doc/README
|
142
146
|
- "--title"
|
143
|
-
- diecut-0.0.
|
147
|
+
- diecut-0.0.4 Documentation
|
144
148
|
require_paths:
|
145
149
|
- lib/
|
146
150
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -158,6 +162,6 @@ rubyforge_project: diecut
|
|
158
162
|
rubygems_version: 2.4.8
|
159
163
|
signing_key:
|
160
164
|
specification_version: 4
|
161
|
-
summary:
|
165
|
+
summary: Code generation support tools
|
162
166
|
test_files:
|
163
167
|
- gem_test_suite.rb
|