crafti 0.0.18 → 0.0.19

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 55ab38f0d6c653554b842a9ae431e51f9332c071
4
- data.tar.gz: 8fa43234b6fdb59b2f1e0117ace82caaff4d20a6
3
+ metadata.gz: 8766c9dd2a82d0af8cd5dddab5993b5e25146c33
4
+ data.tar.gz: 93303fa34da492afd27bcd70f221167744d57da4
5
5
  SHA512:
6
- metadata.gz: 3766b4ddc43ec2315458c12c4cc282738a81d4848267d3fbf23132adfa15ec2029814c9035b863b98097d1dd05a244715c2987cf250f22dc0420018a17e465f9
7
- data.tar.gz: af5793c9bc56eb7aae10baa25093be6a4aebb22109ede6a5a0a2c25f6168cb7dc3ccb2e291dcf75d2c5d9a7f07afd7191fac65132fe61dd0cb67f96c76c2358f
6
+ metadata.gz: f4bd2a65671feafccc65c8504ef172367a4c2dc4e53e8663b4bf3d49afbad3f5e6caeb8deaa9dbf7cb4b6de4d668e4be0e1ee8770b791128ef206c40a45a0129
7
+ data.tar.gz: 3f61cef9c39cfe9b86b0586314a0400e78638c295229021f73b45542b73b355bd8811f30b04480958c3a11a76dc6d8e5c878da487c5b159353c00c179fe5cdec
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.0
data/README.md CHANGED
@@ -1 +1,85 @@
1
- # Craft
1
+ # Craft - Project Generation Tool
2
+
3
+ [![Build Status](https://travis-ci.org/revans/crafti.png?branch=master)](https://travis-ci.org/revans/crafti)
4
+
5
+ ## About its Birth
6
+
7
+ I like modular applications. I'm tired of Rails bulk, so I prefer building libraries, using Rack, or using Sinatra in place of the kitchen sink that is Rails.
8
+
9
+ I build a lot of libraries. I write a lot of tiny/small applications that mostly do one thing. Each time I do, I tend to favor a certain type of folder structure, file setup, etc. Creating this by hand, each time, is extremely frusterating and goes against my own principles.
10
+
11
+ So, I decided to turn to a project generator. I could use some open source one, already built, but honestly, they're all bloated, kitchen-sink, crap - at least the ones I saw that were written in Ruby.
12
+
13
+ I could just use bash and I almost did. Then, as I was reading the docs for FileUtils for something else I was doing, I realized that FileUtils is a module and that lit a spark.
14
+
15
+ So, Crafti (don't ask me about the name...) was born.
16
+
17
+ I really wanted something that was bash like, but with Ruby block syntax. Something that you could read and get a basic understanding of what is being created. So, the current structure was what I came up with initially and then coded for. I like it, I don't care if you like it, but I'm happy if you want to use it.
18
+
19
+ ## Examples
20
+
21
+ ### Sinatra Style Structure
22
+
23
+ ````ruby
24
+ root "appname" do
25
+ mkdirs "log", "test"
26
+ touch "Readme.mkd", "config.ru", "test/test_helper.rb"
27
+ end
28
+ ````
29
+
30
+ ### Use your own templates with ERB
31
+
32
+ Assume you have the following files in a directory:
33
+
34
+ * app_template.rb
35
+ * templates/config.ru.erb
36
+ * templates/test/test_helper.rb.erb
37
+ * templates/Procfile
38
+ * templates/Guardfile
39
+ * templates/Gemfile.erb
40
+ * templates/gitignore
41
+
42
+ ````ruby
43
+ # inside the app_template.rb file
44
+
45
+ require 'pathname'
46
+ path = ::Pathname.new(path/to/template/file).expand_path
47
+
48
+ root "appname" do
49
+ mkdirs "test" # takes multiple arguments
50
+ mkdir "log" # takes a single argument
51
+ mkdir "assets/javascripts"
52
+ mkdir "assets/stylesheets"
53
+
54
+ touch "Readme.mkd" # can take multiple arguments
55
+ touch "assets/stylesheets/application.css.scss"
56
+
57
+ # 1st argument is the name and path of where the file will be created
58
+ # 2nd argument is the name/path to the template file
59
+ copy "Procfile", path.join("Procfile")
60
+ cp "Guardfile", path.join("Guardfile") # you can use either cp or copy
61
+ cp ".gitignore", path.join("gitignore")
62
+
63
+ template "Gemfile", # 1st argument is the name and path of where the file will be created
64
+ path.join("Gemfile.erb"), # 2nd argument is the actual template
65
+ { ruby_version: '2.1.0' } # 3rd argument is a hash of variables for the ERB template
66
+
67
+ template "config.ru",
68
+ path.join("config.ru.erb"),
69
+ { app_classname: 'FannyPackApplication' }
70
+
71
+ template "test/test_helper.rb",
72
+ path.join("test/test_helper.rb"),
73
+ { app_classname: 'FannyPackApplication',
74
+ environment: 'ENV["RACK_ENV"]' }
75
+
76
+ run "bundle install --binstubs" # runs a terminal command
77
+ end
78
+
79
+ ````
80
+
81
+ ## Features coming....
82
+
83
+ * command to read templates from the internet (e.g. github)
84
+ * generate a starter template
85
+ * allow the main template file be an erb file where command options can be passed into (e.g. the name passed to the root method)
@@ -1,7 +1,7 @@
1
1
  module Crafti
2
2
  MAJOR = 0
3
3
  MINOR = 0
4
- PATCH = 18
4
+ PATCH = 19
5
5
 
6
6
  def self.version
7
7
  [
data/lib/crafti.rb CHANGED
@@ -65,14 +65,6 @@ module Crafti
65
65
  ::FileUtils.chmod_R(mode, file)
66
66
  end
67
67
 
68
- def run(command)
69
- system("cd #{app_path} && #{command}")
70
- end
71
-
72
- def sudo(command)
73
- run "sudo #{command}"
74
- end
75
-
76
68
  def template(dest, erb_template, values)
77
69
  temp = ::Pathname.new(erb_template)
78
70
 
@@ -99,7 +91,7 @@ module Crafti
99
91
 
100
92
  def evaluate
101
93
  klass = Class.new do
102
- Kernel.extend(Crafti::KernelExtension)
94
+ ::Kernel.extend(Crafti::KernelExtension)
103
95
  def self.execute(string)
104
96
  eval string
105
97
  end
@@ -109,8 +101,43 @@ module Crafti
109
101
  end
110
102
  end
111
103
 
104
+ module RunCommands
105
+ def run(command)
106
+ system("cd #{app_path} && #{command}")
107
+ end
108
+
109
+ def sudo(command)
110
+ run "sudo #{command}"
111
+ end
112
+
113
+ def bower(*packages)
114
+ packages.each do |package|
115
+ run "bower install #{package}"
116
+ end
117
+ end
118
+ end
119
+
120
+ module Git
121
+ include RunCommands
122
+
123
+ def git(command)
124
+ run "git #{command}"
125
+ end
126
+
127
+ class Init
128
+ end
129
+
130
+ class Add
131
+ end
132
+
133
+ class Commit
134
+ end
135
+ end
136
+
112
137
  class Root
113
138
  include FileUtilsExtension
139
+ include RunCommands
140
+ include Git
114
141
 
115
142
  def self.root(appname, &block)
116
143
  app = new(appname)
@@ -5,4 +5,6 @@ root "appname" do
5
5
  touch "Rakefile"
6
6
  touch "Guardfile"
7
7
  touch "test/test_helper.rb"
8
+
9
+ git "init ."
8
10
  end
data/test/dsl_test.rb CHANGED
@@ -10,8 +10,14 @@ class DSLTest < Minitest::Test
10
10
  file = Crafti::FileReader.new(template_file)
11
11
  file.evaluate
12
12
 
13
+ assert File.exists?("appname/.git")
14
+
13
15
  assert File.exists?("appname")
14
- FileUtils.rm_rf("appname")
15
- refute File.exists?("appname")
16
+ cleanup("appname")
17
+ end
18
+
19
+ def cleanup(application_name)
20
+ FileUtils.rm_rf(application_name)
21
+ refute File.exists?(application_name)
16
22
  end
17
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crafti
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.18
4
+ version: 0.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-11 00:00:00.000000000 Z
11
+ date: 2014-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -61,6 +61,7 @@ extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
63
  - ".gitignore"
64
+ - ".travis.yml"
64
65
  - Gemfile
65
66
  - LICENSE.txt
66
67
  - README.md
@@ -71,7 +72,6 @@ files:
71
72
  - lib/crafti/cli.rb
72
73
  - lib/crafti/project.rb
73
74
  - lib/crafti/version.rb
74
- - spike.rb
75
75
  - test/assets/app_template.rb
76
76
  - test/assets/test_helper.rb.erb
77
77
  - test/crafti_test.rb
data/spike.rb DELETED
@@ -1,110 +0,0 @@
1
- require 'fileutils'
2
- require 'pathname'
3
-
4
- module Generate
5
- # generate files from templates
6
- # generate directories
7
- # copy files
8
- # generate files via touch
9
- #
10
- # TODO:
11
- #
12
- # Turn FileUtils into a DSL
13
-
14
- # Generate.project!(options.project_name, options.template_path)
15
- def self.project!(project_name, template_path)
16
- Project.new(project_name, template_path).generate
17
- end
18
-
19
- class Project
20
- attr_reader :name, :path
21
-
22
- def initialize(name, path)
23
- @name, @path = name, ::Pathname.new(path).expand_path
24
- end
25
-
26
- def generate
27
- eval do
28
- include Template
29
- path.read
30
- end
31
- end
32
- end
33
-
34
- module Template
35
- extend FileUtils
36
-
37
- def self.root(name, &block)
38
- mkdir_p name
39
- module_eval &block
40
- end
41
- end
42
-
43
- end
44
-
45
- # bin/generate file:
46
- require 'rubygems'
47
- require 'generate'
48
- require 'optparse'
49
- require 'ostruct'
50
-
51
- class ProjectParser
52
- def self.parse(args)
53
- options = OpenStruct.new
54
- options.project_name = args.reverse.pop
55
- options.root_path = Dir.pwd
56
-
57
- opt_parser = OptionParser.new do |opts|
58
- opts.banner = "Usage: generate project_name app_template.rb"
59
-
60
- opts.seperator ""
61
- opts.on("-m", "--template", "The Template File used to create your project") do |template|
62
- options.template_path = template
63
- end
64
-
65
- opts.on("-v", "--version", "Generate Version") do |v|
66
- puts "Version Number 0.0.1"
67
- exit
68
- end
69
-
70
- opts.on_tail("-h", "--help", "Get some Help") do
71
- puts opts
72
- exit
73
- end
74
- end
75
-
76
- opt_parser.parse!(args)
77
- options
78
- end
79
- end
80
-
81
-
82
- options = ProjectParser.parse(ARGV)
83
- puts options
84
- puts ARGV
85
-
86
-
87
- Generate.project!(options.project_name, options.template_path)
88
-
89
-
90
-
91
- # Run this by doing:
92
- #
93
- # generate project -m app_template.rb
94
-
95
-
96
- # This is the app_template.rb file
97
- #
98
- root(appname) do
99
- mkdir "config"
100
- mkdir "log"
101
- mkdir "test"
102
-
103
- touch "Readme.mkd"
104
- template "config.ru", file_or_string
105
- template "config/application.rb", file_or_string
106
- cp "test/test_helper.rb", file_or_string
107
- template "bin/script", file_or_string
108
- chmod "bin/script", 700
109
- ln "db/database.yml", "db/database.yml.example"
110
- end