kitno 0.1.4 → 0.2.0

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: 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