kitno 0.1.4 → 0.2.0

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: 9d9e5c80a235a015ab9fd4acf29e558ae0df2dd3
4
- data.tar.gz: 78af6b928b8b3f63e880f0b80f5a8aaf30781bd2
3
+ metadata.gz: 0182ca456b67db9aef0b2d288f91a9831812f92c
4
+ data.tar.gz: a31cd4382e83eb54af37203dce277aa865a9f652
5
5
  SHA512:
6
- metadata.gz: b08b22e68d5ba1dac9f0329dab9663c731464afc59b1364a9902077c1a82acb563a4719053c36e6dd004d824a1e521dca4b8a9f650f4880adfc21301e3a63855
7
- data.tar.gz: 824c6e8fa04ae791a52ad55bc42fb733daa92b2956a0167a0e52252d7e334b1968d386f8f5aa44b3102e98af1a93e29f6563f6a0e3c3d9829b1e2ce329d64737
6
+ metadata.gz: 947235f8f92df0cd5a39cd557ab433a4af874c7a0a9932e5a5ebc71b232d162ef6030cba53e9096fe4f7a74690cc589cdc3168058a9229951056d491036d24b0
7
+ data.tar.gz: 7d233c1f21cd1e6620ee4c550b887db69807861e3f9106863d7e3dee15714fdc9b6e53338ef42e0e74315525b65b779e94333d0295c035559cff390967d36169
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
1
  *.gem
2
+ test/fixtures/output/
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.3.1
@@ -1,17 +1,36 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kitno (0.1.3)
5
- awesome_print (>= 1.7.0)
4
+ kitno (0.1.4)
5
+ awesome_print (~> 1.7.0, >= 1.7.0)
6
6
  thor (~> 0.19.1)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
+ ansi (1.5.0)
11
12
  awesome_print (1.7.0)
13
+ builder (3.2.2)
14
+ byebug (9.0.5)
15
+ coderay (1.1.1)
12
16
  gem-release (0.7.4)
17
+ method_source (0.8.2)
13
18
  minitest (5.9.0)
19
+ minitest-reporters (1.1.9)
20
+ ansi
21
+ builder
22
+ minitest (>= 5.0)
23
+ ruby-progressbar
24
+ pry (0.10.3)
25
+ coderay (~> 1.1.0)
26
+ method_source (~> 0.8.1)
27
+ slop (~> 3.4)
28
+ pry-byebug (3.4.0)
29
+ byebug (~> 9.0)
30
+ pry (~> 0.10)
14
31
  rake (10.5.0)
32
+ ruby-progressbar (1.8.1)
33
+ slop (3.6.0)
15
34
  thor (0.19.1)
16
35
 
17
36
  PLATFORMS
@@ -19,9 +38,13 @@ PLATFORMS
19
38
 
20
39
  DEPENDENCIES
21
40
  bundler (~> 1.12)
41
+ byebug (~> 9.0, >= 0.0.5)
22
42
  gem-release (~> 0.7.4)
23
43
  kitno!
24
44
  minitest (~> 5.0)
45
+ minitest-reporters (~> 1.1, >= 1.1.9)
46
+ pry (~> 0.10.3)
47
+ pry-byebug (~> 3.4, >= 3.4.0)
25
48
  rake (~> 10.0)
26
49
 
27
50
  BUNDLED WITH
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
21
  spec.bindir = 'bin'
22
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
22
+ spec.executables = ['kitno']
23
23
  spec.require_paths = ['lib']
24
24
 
25
25
  spec.add_dependency 'thor', '~> 0.19.1'
@@ -28,5 +28,9 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'bundler', '~> 1.12'
29
29
  spec.add_development_dependency 'rake', '~> 10.0'
30
30
  spec.add_development_dependency 'minitest', '~> 5.0'
31
+ spec.add_development_dependency 'minitest-reporters', '~> 1.1', '>= 1.1.9'
32
+ spec.add_development_dependency 'pry', '~> 0.10.3'
33
+ spec.add_development_dependency 'byebug', '~> 9.0', '>= 0.0.5'
34
+ spec.add_development_dependency 'pry-byebug', '~> 3.4', '>= 3.4.0'
31
35
  spec.add_development_dependency 'gem-release', '~> 0.7.4'
32
36
  end
@@ -3,19 +3,27 @@ require 'kitno/cli'
3
3
 
4
4
  require 'find'
5
5
  require 'fileutils'
6
- require 'awesome_print'
7
6
 
8
7
  module Kitno
9
8
  class KillingInTheNamespaceOf
10
9
  CLASS_EXPRESSION = /^class\s(?:@)?([A-Z][\w\.]*)/
11
- REQUIRE_TEMPLATE = "%{short_name} = require '%{path}'"
10
+ REQUIRE_TEMPLATE = "%{short_name} = require('%{path}')"
12
11
 
13
12
  def initialize(options = {})
14
- @namespace, @directory = options.values_at(:namespace, :directory)
13
+ @namespace, @directory, @output, globals, externals = options.values_at(
14
+ :namespace,
15
+ :directory,
16
+ :output,
17
+ :globals,
18
+ :externals
19
+ )
15
20
 
16
21
  @class_map = {}
17
22
  @files = []
18
23
 
24
+ @globals = parse_mappings(globals) if globals && globals.length > 0
25
+ @externals = parse_mappings(externals) if externals && externals.length > 0
26
+
19
27
  @dependency_expression = /^(?!(\s\*|#)).*(?:new|extends)\s(#{Regexp.escape(@namespace)}[\w\.]*)/
20
28
  end
21
29
 
@@ -23,18 +31,23 @@ module Kitno
23
31
  enumerate_files
24
32
 
25
33
  @class_map.each_value do |descriptor|
26
- path = descriptor[:path]
34
+ path, output_path = descriptor[:path]
27
35
 
28
36
  require_dependencies!(path, descriptor[:dependencies])
29
37
 
30
- FileUtils.mv "#{path}.module", path
38
+ if @output
39
+ output_path = Pathname.new(path).sub(@directory, @output)
40
+ FileUtils.mkdir_p output_path.dirname.to_s
41
+ end
42
+
43
+ FileUtils.mv "#{path}.module", output_path.to_s
31
44
  end
32
45
  end
33
46
 
34
47
  def enumerate
35
48
  enumerate_files
36
49
 
37
- ap @class_map
50
+ @class_map
38
51
  end
39
52
 
40
53
  private
@@ -64,6 +77,14 @@ module Kitno
64
77
  end
65
78
  end
66
79
 
80
+ def parse_mappings(mappings)
81
+ mappings.split(',').reduce({}) do |map, mapping|
82
+ constructor, dependency = mapping.split(':')
83
+ map[constructor] = dependency
84
+ map
85
+ end
86
+ end
87
+
67
88
  def parse_class_name(contents)
68
89
  match = CLASS_EXPRESSION.match(contents)
69
90
 
@@ -71,7 +92,25 @@ module Kitno
71
92
  end
72
93
 
73
94
  def parse_dependencies(contents)
74
- contents.scan(@dependency_expression).flatten.compact
95
+ dependencies = []
96
+
97
+ if @globals && !@globals.empty?
98
+ @globals.each do |global, dependency|
99
+ dependencies << dependency if contents.scan(get_dependency_expression(global)).length > 0
100
+ end
101
+ end
102
+
103
+ if @externals && !@externals.empty?
104
+ @externals.each do |external, dependency|
105
+ dependencies << dependency if contents.scan(get_dependency_expression(external)).length > 0
106
+ end
107
+ end
108
+
109
+ (dependencies += contents.scan(@dependency_expression).flatten).compact
110
+ end
111
+
112
+ def get_dependency_expression(search)
113
+ /[\s\(](#{Regexp.escape(search)}[\.\(])|^_[\.\(]/
75
114
  end
76
115
 
77
116
  def get_descriptor(class_name)
@@ -96,15 +135,24 @@ module Kitno
96
135
  return relative_path, short_name
97
136
  end
98
137
 
138
+ def is_external_or_global(dependency)
139
+ @globals.values.include?(dependency) || @externals.values.include?(dependency)
140
+ end
141
+
99
142
  def require_dependencies!(filename, dependencies)
100
143
  File.open("#{filename}.module", 'w') do |file|
101
144
  dependencies.each do |dependency|
102
- relative_path, short_name = get_module_mappings(filename, get_descriptor(dependency))
145
+ if is_external_or_global(dependency)
146
+ path = dependency
147
+ short_name = @globals.invert[dependency] || @externals.invert[dependency]
148
+ else
149
+ path, short_name = get_module_mappings(filename, get_descriptor(dependency))
150
+ end
103
151
 
104
- file.puts REQUIRE_TEMPLATE % { short_name: short_name, path: relative_path }
152
+ file.puts REQUIRE_TEMPLATE % { short_name: short_name, path: path }
105
153
  end
106
154
 
107
- file.puts "\n\n"
155
+ file.puts "\n"
108
156
 
109
157
  short_class_name = @class_map[filename][:class_name].split('.').last
110
158
 
@@ -112,9 +160,11 @@ module Kitno
112
160
  line.gsub!(CLASS_EXPRESSION, "class #{short_class_name}")
113
161
 
114
162
  dependencies.each do |dependency|
163
+ next if is_external_or_global(dependency)
164
+
115
165
  descriptor = get_descriptor(dependency)
116
166
  class_name = descriptor[:class_name]
117
- relative_path, short_name = get_module_mappings(filename, descriptor)
167
+ _, short_name = get_module_mappings(filename, descriptor)
118
168
 
119
169
  line.gsub!(class_name, short_name)
120
170
  end
@@ -1,15 +1,32 @@
1
1
  require 'thor'
2
+ require 'awesome_print'
2
3
 
3
4
  module Kitno
4
5
  class CLI < Thor
5
- desc 'enumerate', 'Enumrate files that will be transformed'
6
- long_desc <<-ENUMERATE
7
- ENUMERATE
6
+ desc 'transform', 'Transform directory of modules from namespace convention to CommonJS modules'
7
+ long_desc <<-TRANSFORM
8
+ TRANSFORM
8
9
 
10
+ option :dry, aliases: '-d', type: :boolean, default: false
9
11
  option :namespace, aliases: '-n', type: :string, required: true, desc: 'Base namespace to migrate from'
10
12
  option :directory, aliases: '-d', type: :string, default: '.', desc: 'Directory to target for transformation'
11
- def enumerate
12
- KillingInTheNamespaceOf.new(options).enumerate
13
+ option :output, aliases: '-o', type: :string, default: './output', desc: 'Directory to output transformed modules'
14
+ option :globals, aliases: '-g', type: :string, desc: <<-GLOBALS
15
+ A comma separated list of global methods in the form of `global:dependency`.
16
+ Example: '_:underscore,$:jquery'
17
+ GLOBALS
18
+ option :externals, aliases: '-e', type: :string, desc: <<-EXTERNALS
19
+ A comma separated list of external dependencies in the form of `constructor:dependency`.
20
+ Example: 'Module.Dependency:module#Dependency,Module.Foo.Dependency:module/foo#Dependency'
21
+ EXTERNALS
22
+ def transform
23
+ kitno = KillingInTheNamespaceOf.new(options)
24
+
25
+ if options[:dry]
26
+ ap kitno.enumerate
27
+ else
28
+ kitno.run
29
+ end
13
30
  end
14
31
  end
15
32
  end
@@ -1,3 +1,3 @@
1
1
  module Kitno
2
- VERSION = '0.1.4'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitno
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Rolfs
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-06-17 00:00:00.000000000 Z
13
+ date: 2016-06-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: thor
@@ -88,6 +88,80 @@ dependencies:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
90
  version: '5.0'
91
+ - !ruby/object:Gem::Dependency
92
+ name: minitest-reporters
93
+ requirement: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '1.1'
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: 1.1.9
101
+ type: :development
102
+ prerelease: false
103
+ version_requirements: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '1.1'
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 1.1.9
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.10.3
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.10.3
125
+ - !ruby/object:Gem::Dependency
126
+ name: byebug
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '9.0'
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: 0.0.5
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - "~>"
140
+ - !ruby/object:Gem::Version
141
+ version: '9.0'
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: 0.0.5
145
+ - !ruby/object:Gem::Dependency
146
+ name: pry-byebug
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '3.4'
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: 3.4.0
155
+ type: :development
156
+ prerelease: false
157
+ version_requirements: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: '3.4'
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: 3.4.0
91
165
  - !ruby/object:Gem::Dependency
92
166
  name: gem-release
93
167
  requirement: !ruby/object:Gem::Requirement
@@ -108,14 +182,13 @@ email:
108
182
  - alan@mavenlink.com
109
183
  - celkamada@gmail.com
110
184
  executables:
111
- - console
112
185
  - kitno
113
- - setup
114
186
  extensions: []
115
187
  extra_rdoc_files: []
116
188
  files:
117
189
  - ".gitignore"
118
190
  - ".ruby-version"
191
+ - ".travis.yml"
119
192
  - Gemfile
120
193
  - Gemfile.lock
121
194
  - LICENSE.txt