scaffoldish 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2ba3a6526acca78f0a10c197d50b9020cfb0f6e3
4
- data.tar.gz: 3af7bec1a1e7b427a062583d2fe3ba689ed4a706
3
+ metadata.gz: b89f6f556df00309eef7c0722c8e819a907a0654
4
+ data.tar.gz: 3d4e1e96248cf1f4ff5da83d38f21311e3476f54
5
5
  SHA512:
6
- metadata.gz: 943dedc6201fdcce14afff7a827f95b6a2ed31bc862d56b36ae9ddceeda500f74b555da5556d46f036de1d1d3422083c7192a794376e87a483c303c8ed193bbb
7
- data.tar.gz: 7ca344511d64848f5d91fd1580e390251d21c51c51b42c0cbca40e408b6dc0cb62fd02f29eaa313be1ec4f3e8d6ef04676cd47b9dec1fa28c0268d7b9d362745
6
+ metadata.gz: 9561b156509657eb847bf32734086e2c1bde5c79143edcf165978041633215ef7a13bf1f8a18d67944c5584e1ea3368c77abc8461ddc4da3d0dcd814b2343837
7
+ data.tar.gz: 6b241c6aefdf2dc6c210f4ca3683cfd7322e012d2000792d8cd0754aa75ce43927bb69df559de2c2fead730280778d9549a3c08a5ee7f38206b692c015f19175
data/README.md CHANGED
@@ -1,7 +1,90 @@
1
- # Scaffolder-ish
1
+ # Scaffoldish
2
2
 
3
- *Universal scaffolder super powa for everyone!*
3
+ *Universal scaffolding super powa for everyone!*
4
4
 
5
- **Under high development... Be careful!**
5
+ [![Gem Version](https://badge.fury.io/rb/scaffoldish.svg)](http://badge.fury.io/rb/scaffoldish)
6
+
7
+
8
+ [![Build Status](https://travis-ci.org/debona/Scaffoldish.svg)](https://travis-ci.org/debona/Scaffoldish)
9
+ [![Coverage Status](https://coveralls.io/repos/debona/Scaffoldish/badge.png)](https://coveralls.io/r/debona/Scaffoldish)
10
+ [![Code Quality](https://codeclimate.com/github/debona/Scaffoldish.png)](https://codeclimate.com/github/debona/Scaffoldish)
6
11
 
7
12
  Brings Rails-ish scaffolding super powa for every developpers, no matter they don't code with blessed RoR.
13
+
14
+ Current development status: Scaffoldish is still a **prototype**
15
+
16
+ That means your opinion is welcome and contributions will be appreciated.
17
+
18
+ ## Install it
19
+
20
+ To install it, run `gem install scaffoldish` in your terminal to get the latest _stable_ version.
21
+
22
+ ## Prepare your projects
23
+
24
+ Create a `./Scaffoldable` configuration file at your project root like that:
25
+
26
+ ```ruby
27
+ require 'ostruct'
28
+
29
+ project_root = File.dirname(__FILE__) # Ensure your project root is where your Scaffoldable live
30
+ templates_root = File.join(project_root, 'templates') # Specify the dir in which you drop your templates
31
+
32
+ scaffold :Model do |name, attribute| # Create a scaffold that you will call to generate files
33
+
34
+ # Prepare your data before to generate files
35
+ data = OpenStruct.new()
36
+ data.name = name = name.capitalize
37
+ data.attribute = attribute = attribute.downcase
38
+
39
+ # This will generate a file Model.java by executing the template Model.java.erb with data
40
+ generate('Model.java.erb', "#{name}.java", data)
41
+
42
+ # This will print console output asking to edit Controller.java by executing the template Controller.java.erb with data
43
+ chunk('Controller.java.erb', 'Controller.java', data)
44
+ end
45
+ ```
46
+
47
+ Create the two templates in `./templates/`:
48
+
49
+ `Model.java.erb`:
50
+ ```java
51
+ public class <%= name %> {
52
+ int <%= attribute %> = 0;
53
+ }
54
+ ```
55
+
56
+ `Controller.java.erb`:
57
+ ```java
58
+ Add the following attribute:
59
+ <%= name %> <%= name.downcase %> = new <%= name %>();
60
+ ```
61
+
62
+ ## Let's scaffold!
63
+
64
+ Open a terminal in your project and run: `cd your/project`
65
+
66
+ Then generate a new "Model" by running:
67
+
68
+ ```shell
69
+ $ scaffoldish Model herp derp
70
+ ```
71
+
72
+ It print that in your console, indicating what you should add to your `Controller.java`.
73
+
74
+ Run Model:
75
+ Edit Controller.java:
76
+ Add the following attribute:
77
+ Herp herp = new Herp();
78
+
79
+ It also generate the model `Herp`
80
+
81
+ `Herp.java`:
82
+ ```java
83
+ public class Herp {
84
+ int derp = 0;
85
+ }
86
+ ```
87
+
88
+ ## Licensing
89
+
90
+ See LICENSE.md
data/bin/scaffoldish CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  require 'scaffoldish'
4
4
 
5
- # TODO include the logger method?
5
+ logger = Logger.new(STDERR)
6
+ logger.level = Logger::WARN
6
7
 
7
- Scaffoldish::Application.instance.run(*ARGV)
8
+ Kernel.send(:define_method, :logger) do
9
+ logger
10
+ end
11
+
12
+ begin
13
+ Scaffoldish::Application.instance.run(*ARGV)
14
+ rescue Exception => e
15
+ logger.error 'Scaffoldish crashed'
16
+ logger.error e
17
+ end
@@ -1,5 +1,9 @@
1
1
  require 'singleton'
2
2
  require 'logger'
3
+ require 'optparse'
4
+
5
+ require 'scaffoldish/scaffold'
6
+ require 'scaffoldish/dsl/conf'
3
7
 
4
8
  module Scaffoldish
5
9
 
@@ -7,17 +11,57 @@ module Scaffoldish
7
11
 
8
12
  include Singleton
9
13
 
10
- attr_reader :logger
14
+ attr_reader :workspace
15
+ attr_reader :scaffolds, :project_root, :templates_root
11
16
 
12
17
  def initialize
13
- @logger = Logger.new(STDERR) # TODO: make a module with that
14
- @logger.level = Logger::WARN
18
+ @workspace = Object.new
19
+ @workspace.extend(DSL::Conf)
20
+
21
+ @scaffolds = {}
22
+ @project_root = Dir.pwd
23
+ @templates_root = File.join(@project_root, 'templates')
15
24
  end
16
25
 
17
- def run(command_file, *parameters)
18
- puts "Hello world, I'm scaffoldish!"
19
- rescue Exception => e
20
- logger.error e
26
+ def load_config
27
+ config_filename = 'Scaffoldable'
28
+ config_path = Dir.pwd
29
+
30
+ while config_path != '/' && !File.exist?(File.join(config_path, config_filename))
31
+ config_path = File.expand_path("..", config_path)
32
+ end
33
+
34
+ config = File.read(File.join(config_path, config_filename))
35
+ @project_root = config_path
36
+
37
+ workspace.scaffolds = @scaffolds
38
+ workspace.project_root = @project_root
39
+ workspace.templates_root = @templates_root
40
+
41
+ workspace.instance_eval(config)
42
+
43
+ @scaffolds = workspace.scaffolds
44
+ @project_root = workspace.project_root
45
+ @templates_root = workspace.templates_root
46
+ end
47
+
48
+ def run(*args)
49
+
50
+ load_config
51
+
52
+ scaffold_name = args.shift
53
+
54
+ # Parameters checking
55
+ raise OptionParser::MissingArgument.new("$1 => scaffold_name") if scaffold_name.nil?
56
+ unless scaffolds.has_key?(scaffold_name.to_sym)
57
+ raise OptionParser::InvalidArgument.new("$1 => scaffold_name should be one of the followings: #{scaffolds.keys}")
58
+ end
59
+
60
+ scaffold = scaffolds[scaffold_name.to_sym]
61
+
62
+ puts "Run #{scaffold_name}:"
63
+
64
+ scaffold.run(*args)
21
65
  end
22
66
 
23
67
  end
@@ -0,0 +1,20 @@
1
+
2
+ require 'scaffoldish/scaffold'
3
+
4
+ module Scaffoldish
5
+
6
+ module DSL
7
+
8
+ module Conf
9
+
10
+ attr_accessor :scaffolds, :project_root, :templates_root
11
+
12
+ def scaffold(name, &block)
13
+ @scaffolds ||= {}
14
+ @scaffolds[name.to_sym] = Scaffold.new(name.to_sym, &block)
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,50 @@
1
+
2
+ require 'fileutils'
3
+ require 'erb'
4
+
5
+ require 'scaffoldish/application'
6
+
7
+ module Scaffoldish
8
+
9
+ module DSL
10
+
11
+ module Template
12
+
13
+ def generate(template_path, output_path, data)
14
+ template = File.read(File.join(Application.instance.templates_root, template_path))
15
+ renderer = ERB.new(template)
16
+
17
+ result = renderer.result(data.instance_eval { binding })
18
+
19
+ absolute_output_path = File.join(Application.instance.project_root, output_path)
20
+
21
+ if File.exist?(absolute_output_path)
22
+ puts("Can't generate #{absolute_output_path}, it already exists. Skip it")
23
+ return
24
+ end
25
+
26
+ dir = File.dirname(absolute_output_path)
27
+ FileUtils.mkpath(dir)
28
+
29
+ File.open(absolute_output_path, 'w') do |file|
30
+ file.write(result)
31
+ end
32
+ end
33
+
34
+ def chunk(template_path, output_path, data)
35
+ template = File.read(File.join(Application.instance.templates_root, template_path))
36
+ renderer = ERB.new(template)
37
+
38
+ result = renderer.result(data.instance_eval { binding })
39
+
40
+ puts "Edit #{output_path}:"
41
+ puts result
42
+ puts ""
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
@@ -0,0 +1,23 @@
1
+
2
+ require 'scaffoldish/dsl/template'
3
+
4
+ module Scaffoldish
5
+
6
+ class Scaffold
7
+
8
+ include DSL::Template
9
+
10
+ attr_reader :name, :block
11
+
12
+ def initialize(name, &block)
13
+ @name = name
14
+ @block = block || Proc.new {}
15
+ end
16
+
17
+ def run(*args)
18
+ instance_exec(*args, &block)
19
+ end
20
+
21
+ end
22
+
23
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scaffoldish
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas DE BONA
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-21 00:00:00.000000000 Z
11
+ date: 2014-12-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Brings Rails-ish scaffolding super powa for every developpers, no matter
14
14
  they don't code with blessed RoR.
@@ -23,7 +23,10 @@ files:
23
23
  - bin/scaffoldish
24
24
  - lib/scaffoldish.rb
25
25
  - lib/scaffoldish/application.rb
26
- homepage: http://rubygems.org/gems/scaffold-ish
26
+ - lib/scaffoldish/dsl/conf.rb
27
+ - lib/scaffoldish/dsl/template.rb
28
+ - lib/scaffoldish/scaffold.rb
29
+ homepage: http://github.com/debona/Scaffoldish
27
30
  licenses:
28
31
  - MIT
29
32
  metadata: {}
@@ -46,5 +49,5 @@ rubyforge_project:
46
49
  rubygems_version: 2.2.2
47
50
  signing_key:
48
51
  specification_version: 4
49
- summary: Universal scaffolder super powa for everyone!
52
+ summary: Universal scaffolding super powa for everyone!
50
53
  test_files: []