codeziner 0.0.1 → 0.0.2

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/codeziner +170 -4
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e2db0e6b7abbf848d5421213547646c0ef7deedc
4
- data.tar.gz: af8d1ac4e137253d399f3f4859a2c8b54bffbdc1
3
+ metadata.gz: cac48a7ea5fec003e18429e7ad76466ed2e5ea1e
4
+ data.tar.gz: 327a85c414867d31f666fc346b5a8186608ec50c
5
5
  SHA512:
6
- metadata.gz: fec81cc8586c6b120938fd31145c0c161e35750e4e2de384dfc4515c425a3b4f324778813df8fdf91eda56d7c8815a69b1831d52279928a8201b7c5db7522547
7
- data.tar.gz: 34f162b4f6bfbfdd0971a4906631de57b336bca612c083a47c18c33b6a6fb8301523dea563ddc51f3428f77303c663854bb36ffca636a6445a5f1d89cc5a5621
6
+ metadata.gz: c2177e9788cb3f42e05f578c8a7ff74923927eb7bd2ac35e5ae68bd7b5e3d0456589d28a2fed1a1bca81c04755cf7faaa5c3e22d20ba16ed1e26b66ab2ac0f9a
7
+ data.tar.gz: 25afbccfd67210cf1374dce3d9e154bcbb6339cd9bc711bb0832ae5a9a136e63a0cf02d80c73a08d3f01f0233fb69a69bf6a3ca84de2342469ea3e70fcc55efb
data/bin/codeziner CHANGED
@@ -1,24 +1,190 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'codeziner'
4
+ require 'fileutils'
4
5
 
5
6
  class String
6
7
  def red; "\e[31m#{self}\e[0m" end
7
8
  def green; "\e[32m#{self}\e[0m" end
8
9
  def blue; "\e[34m#{self}\e[0m" end
9
10
  def bold; "\e[1m#{self}\e[22m" end
11
+
12
+ def classify
13
+ split("/").map { |x| x.split('_').collect!{ |w| w.capitalize }.join }.join("::")
14
+ end
15
+
16
+ def underscore
17
+ gsub(/::/, '/').
18
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
19
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
20
+ tr("-", "_").
21
+ downcase
22
+ end
10
23
  end
11
24
 
12
25
  class Generator
13
26
 
14
- def self.klass(name)
15
- puts "Generating klass #{name}".green.bold
27
+ def self.generate(entity_type, name)
28
+ self.const_get(entity_type.to_s.classify).new(name).create
29
+ Spec.new(name).create
30
+ end
31
+
32
+ class Entity
33
+ def initialize(name, embed: [])
34
+ @name = name
35
+ @embed = embed
36
+ end
37
+
38
+ attr_reader :name, :embed
39
+
40
+ def create
41
+ create_dir
42
+ create_code
43
+ log_message
44
+ end
45
+
46
+
47
+ def code_content
48
+ if dir_name_or_nil
49
+ code_content_with_wraper
50
+ else
51
+ code_content_without_wraper
52
+ end
53
+ end
54
+
55
+ private
56
+
57
+ def base_name
58
+ @base_name ||= File.basename(name)
59
+ end
60
+
61
+ def dir_name
62
+ @dir_name ||= File.dirname(name).gsub(/^\.$/,"")
63
+ end
64
+
65
+ def dir_name_or_nil
66
+ if dir_name.empty? then nil else dir_name end
67
+ end
68
+
69
+ def log_message
70
+ puts("Codeziner " + "create".green.bold + " #{content_type} #{keyword} #{full_entity_name.blue.bold} in #{code_file.bold}")
71
+ end
72
+
73
+ def content_type
74
+ "code"
75
+ end
76
+
77
+ def create_dir
78
+ FileUtils.mkdir_p(full_dir_path)
79
+ end
80
+
81
+ def create_code
82
+ File.write(code_file, code_content)
83
+ end
84
+
85
+ def code_file
86
+ "#{full_dir_path}/#{base_name}#{file_suffix}"
87
+ end
88
+
89
+ def file_suffix
90
+ ".rb"
91
+ end
92
+
93
+
94
+ def full_entity_name
95
+ name.classify
96
+ end
97
+
98
+ def full_dir_path
99
+ [
100
+ "lib",
101
+ dir_name_or_nil
102
+ ].compact.join("/")
103
+ end
104
+
105
+ def code_content_with_wraper
106
+ i = dir_name.split("/").count
107
+ Module.new(dir_name, embed: code_content_without_wraper_array).code_content
108
+ end
109
+
110
+ def code_content_without_wraper_array
111
+ [
112
+ "#{tabs}#{keyword} #{entity_name}#{header_suffix}",
113
+ embed,
114
+ "#{tabs}end"
115
+ ]
116
+ end
117
+
118
+ def header_suffix
119
+ ""
120
+ end
121
+
122
+ def tabs
123
+ " "*tabs_count
124
+ end
125
+
126
+ def tabs_count
127
+ dir_name.split("/").count
128
+ end
129
+
130
+ def code_content_without_wraper
131
+ code_content_without_wraper_array.join("\n")
132
+ end
133
+
134
+ def keyword
135
+ self.class.name.split('::').last.underscore
136
+ end
137
+
138
+ def entity_name
139
+ base_name.classify
140
+ end
141
+ end
142
+
143
+ class Spec < Entity
144
+
145
+ private
146
+
147
+ def content_type
148
+ "spec"
149
+ end
150
+
151
+ def header_suffix
152
+ " do"
153
+ end
154
+
155
+ def keyword
156
+ :describe
157
+ end
158
+
159
+ def full_dir_path
160
+ "spec/#{super}"
161
+ end
162
+
163
+ def file_suffix
164
+ "_spec#{super}"
165
+ end
166
+
167
+ def code_content_with_wraper
168
+ [
169
+ "require 'spec_helper'",
170
+ "require '#{dir_name}/#{base_name}'",
171
+ super,
172
+ ].join("\n")
173
+ end
174
+
175
+
176
+ end
177
+
178
+ class Module < Entity
179
+ end
180
+
181
+ class Class < Entity
16
182
  end
17
183
 
18
184
  end
19
185
 
20
186
  if ARGV[0] == 'generate'
21
- Generator.send *ARGV.slice(1..-1)
187
+ Generator.send(*ARGV)
22
188
  else
23
- puts 'Unknown Command'.red.bold
189
+ puts "Codeziner - unknown command: #{ARGV[0].to_s.bold}".red
24
190
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codeziner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yaron Weil