eman 0.0.2 → 0.0.3
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 +4 -4
- data/.travis.yml +5 -0
- data/README.md +6 -1
- data/Rakefile +7 -0
- data/bin/eman +3 -5
- data/lib/eman.rb +4 -2
- data/lib/eman/dictionary.rb +27 -0
- data/lib/eman/dictionary/indices.yml +21 -0
- data/lib/eman/dictionary/words.yml +6 -0
- data/lib/eman/formatter.rb +48 -0
- data/lib/eman/{name_generator.rb → generator.rb} +11 -8
- data/lib/eman/recommender.rb +56 -0
- data/lib/eman/version.rb +1 -1
- data/spec/dictionary_spec.rb +13 -0
- data/spec/formatter_spec.rb +50 -0
- data/spec/generator_spec.rb +35 -0
- data/spec/recommender_spec.rb +42 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/support/dictionary/indices.yml +3 -0
- data/spec/support/dictionary/words.yml +2 -0
- data/spec/support/dictionary_macros.rb +11 -0
- metadata +23 -8
- data/lib/eman/name_formatter.rb +0 -52
- data/spec/name_formatter_spec.rb +0 -56
- data/spec/name_generator_spec.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98d11c7b517bdbe6a7f443288f62802865f25e35
|
4
|
+
data.tar.gz: 896d98abfd84544711e47d89a924fe902cc2bf42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48d48ebd57d664440421020381d9635f521e0d2e223c38066ab33c4a3369fa77465da9e3bae7762b4f6ebf0187bd90614a75367d01e13efdb2ebef0d7106c701
|
7
|
+
data.tar.gz: 1c174d36e6fd8f8cf2586c6ef989f940ac16c8951bff3a6f55edd62cfa03c7e64d08cb244833cdc8248ec284f5f7fa68baf5e93ef28fbe9946ea0d93c6a5a29d
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# Eman
|
2
2
|
|
3
|
+
[](https://travis-ci.org/sungwoncho/eman)
|
4
|
+
[](https://codeclimate.com/github/sungwoncho/eman)
|
5
|
+
|
3
6
|
Easily name your controller, model, and service. Let Eman recommend you good names.
|
4
7
|
|
5
8
|
## Why?
|
@@ -21,8 +24,10 @@ Simply run the following commands as you see fit:
|
|
21
24
|
$ emac model
|
22
25
|
$ emac service
|
23
26
|
|
27
|
+
Eman will ask you a question or two, and spit out a name, with a further recommendation.
|
28
|
+
|
24
29
|
## Contributing
|
25
30
|
|
26
31
|
### Recommendation system
|
27
32
|
|
28
|
-
Help us improve our recommendation system
|
33
|
+
Help us improve our recommendation system by adding new entries in the internal dictionary. See [this wiki](https://github.com/sungwoncho/eman/wiki/Internal-Dictionary) for more information.
|
data/Rakefile
CHANGED
data/bin/eman
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
1
|
require "thor"
|
4
2
|
require "eman"
|
5
3
|
|
@@ -8,19 +6,19 @@ module Eman
|
|
8
6
|
|
9
7
|
desc "controller", "name a controller"
|
10
8
|
def controller
|
11
|
-
generator = Eman::
|
9
|
+
generator = Eman::Generator.new('Controller')
|
12
10
|
generator.run
|
13
11
|
end
|
14
12
|
|
15
13
|
desc "service", "name a service"
|
16
14
|
def service
|
17
|
-
generator = Eman::
|
15
|
+
generator = Eman::Generator.new('Service')
|
18
16
|
generator.run
|
19
17
|
end
|
20
18
|
|
21
19
|
desc "model", "name a model"
|
22
20
|
def model
|
23
|
-
generator = Eman::
|
21
|
+
generator = Eman::Generator.new('Model')
|
24
22
|
generator.run
|
25
23
|
end
|
26
24
|
|
data/lib/eman.rb
CHANGED
@@ -3,6 +3,8 @@ $:.unshift File.expand_path('../eman', __FILE__)
|
|
3
3
|
require "version"
|
4
4
|
|
5
5
|
module Eman
|
6
|
-
autoload :
|
7
|
-
autoload :
|
6
|
+
autoload :Generator, 'generator'
|
7
|
+
autoload :Formatter, 'formatter'
|
8
|
+
autoload :Recommender, 'recommender'
|
9
|
+
autoload :Dictionary, 'dictionary'
|
8
10
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "yaml"
|
2
|
+
|
3
|
+
module Eman
|
4
|
+
class Dictionary
|
5
|
+
|
6
|
+
INDICES_FILE = File.expand_path('../dictionary/indices.yml', __FILE__)
|
7
|
+
WORDS_FILE = File.expand_path('../dictionary/words.yml', __FILE__)
|
8
|
+
|
9
|
+
def self.find_similar(word)
|
10
|
+
index = fetch_index(word)
|
11
|
+
fetch_words(index)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def self.fetch_index(key)
|
17
|
+
indices = YAML.load_file(INDICES_FILE)
|
18
|
+
indices[key]
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.fetch_words(index)
|
22
|
+
words_list = YAML.load_file(WORDS_FILE)
|
23
|
+
words_list[index] || []
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
acquisition: 5
|
2
|
+
benchmark: 2
|
3
|
+
buy: 5
|
4
|
+
buyer: 1
|
5
|
+
booking: 4
|
6
|
+
calculate: 2
|
7
|
+
chat: 3
|
8
|
+
count: 2
|
9
|
+
convesation: 3
|
10
|
+
customer: 1
|
11
|
+
client: 1
|
12
|
+
enrollment: 4
|
13
|
+
measure: 2
|
14
|
+
message: 3
|
15
|
+
notification: 3
|
16
|
+
registration: 4
|
17
|
+
post: 6
|
18
|
+
purchase: 5
|
19
|
+
shopping: 5
|
20
|
+
thread: 6
|
21
|
+
user: 1
|
@@ -0,0 +1,6 @@
|
|
1
|
+
1: ['user', 'customer', 'client', 'buyer']
|
2
|
+
2: ['measure', 'benchmark', 'calculate', 'count']
|
3
|
+
3: ['message', 'conversation', 'notification', 'chat']
|
4
|
+
4: ['registration', 'enrollment', 'booking']
|
5
|
+
5: ['purchase', 'buy', 'acquisition', 'shopping']
|
6
|
+
6: ['post', 'thread']
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "active_support/inflector"
|
2
|
+
|
3
|
+
module Eman
|
4
|
+
class Formatter
|
5
|
+
|
6
|
+
def initialize(generator)
|
7
|
+
@generator = generator
|
8
|
+
end
|
9
|
+
|
10
|
+
def camel_case!
|
11
|
+
if is_model_name?
|
12
|
+
"#{inputs_camelized}"
|
13
|
+
else
|
14
|
+
"#{inputs_camelized}#{type.capitalize}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def snake_case!
|
19
|
+
if is_model_name?
|
20
|
+
"#{inputs_snakified}"
|
21
|
+
else
|
22
|
+
"#{inputs_snakified}_#{type.downcase}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def inputs
|
29
|
+
@generator.inputs
|
30
|
+
end
|
31
|
+
|
32
|
+
def type
|
33
|
+
@generator.type
|
34
|
+
end
|
35
|
+
|
36
|
+
def inputs_camelized
|
37
|
+
inputs.collect(&:capitalize).join
|
38
|
+
end
|
39
|
+
|
40
|
+
def inputs_snakified
|
41
|
+
inputs.collect(&:downcase).join('_')
|
42
|
+
end
|
43
|
+
|
44
|
+
def is_model_name?
|
45
|
+
type == 'Model'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -1,14 +1,11 @@
|
|
1
1
|
module Eman
|
2
|
-
class
|
2
|
+
class Generator
|
3
3
|
|
4
|
-
attr_accessor :resource, :verb, :name
|
4
|
+
attr_accessor :resource, :verb, :name, :recommended_name
|
5
5
|
attr_reader :type
|
6
6
|
|
7
7
|
def initialize(type)
|
8
8
|
@type = type
|
9
|
-
@resource = ''
|
10
|
-
@verb = ''
|
11
|
-
@name = ''
|
12
9
|
end
|
13
10
|
|
14
11
|
def run
|
@@ -18,24 +15,30 @@ module Eman
|
|
18
15
|
print_name
|
19
16
|
end
|
20
17
|
|
18
|
+
def inputs
|
19
|
+
[resource, verb].compact.flat_map(&:split)
|
20
|
+
end
|
21
|
+
|
21
22
|
private
|
22
23
|
|
23
24
|
def ask_resource
|
24
25
|
puts "What is the resource that you are dealing with? (e.g. User, Session, Order, etc.)"
|
25
|
-
@resource = $stdin.gets.chomp
|
26
|
+
@resource = $stdin.gets.chomp.downcase
|
26
27
|
end
|
27
28
|
|
28
29
|
def ask_verb
|
29
30
|
puts "What is the primary action you are performing on '#{resource}'?"
|
30
|
-
@verb = $stdin.gets.chomp
|
31
|
+
@verb = $stdin.gets.chomp.downcase
|
31
32
|
end
|
32
33
|
|
33
34
|
def generate_name
|
34
|
-
@name =
|
35
|
+
@name = Eman::Formatter.new(self).camel_case!
|
36
|
+
@recommended_name = Eman::Recommender.new(self).recommend_name
|
35
37
|
end
|
36
38
|
|
37
39
|
def print_name
|
38
40
|
puts "#{type} name : '#{name}'"
|
41
|
+
puts "Further suggestion: '#{recommended_name}'" if recommended_name
|
39
42
|
end
|
40
43
|
end
|
41
44
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Eman
|
2
|
+
class Recommender
|
3
|
+
|
4
|
+
attr_reader :generator
|
5
|
+
|
6
|
+
def initialize(generator)
|
7
|
+
@generator = generator
|
8
|
+
end
|
9
|
+
|
10
|
+
def inputs
|
11
|
+
@inputs ||= @generator.inputs
|
12
|
+
end
|
13
|
+
|
14
|
+
def type
|
15
|
+
@type ||= @generator.type
|
16
|
+
end
|
17
|
+
|
18
|
+
def words_hash
|
19
|
+
@words_hash ||= Hash[ inputs.collect { |x| [x, []] } ]
|
20
|
+
end
|
21
|
+
|
22
|
+
def recommend_name
|
23
|
+
fetch_similar_words
|
24
|
+
assemble_words
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def fetch_similar_words
|
30
|
+
inputs.each do |i|
|
31
|
+
synonyms = Dictionary.find_similar(i)
|
32
|
+
|
33
|
+
synonyms.each { |s| words_hash[i] << s } if synonyms.any?
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def assemble_words
|
38
|
+
recommended_name = []
|
39
|
+
|
40
|
+
if words_hash.values.flatten.length != inputs.length
|
41
|
+
|
42
|
+
words_hash.each do |key, val|
|
43
|
+
recommended_name << val.sample
|
44
|
+
end
|
45
|
+
|
46
|
+
if recommended_name.any?
|
47
|
+
recommended = Eman::Generator.new(type)
|
48
|
+
recommended.resource = recommended_name.join(' ')
|
49
|
+
|
50
|
+
recommended
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/eman/version.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Eman::Dictionary do
|
4
|
+
|
5
|
+
describe '.find_similar' do
|
6
|
+
it 'returns an array of similar words' do
|
7
|
+
set_up_custom_dictionary
|
8
|
+
|
9
|
+
array = Eman::Dictionary.find_similar('user')
|
10
|
+
expect(array).to eq ['user', 'customer']
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Eman::Formatter do
|
4
|
+
|
5
|
+
describe '#camel_case!' do
|
6
|
+
it 'outsputs a camel cased name' do
|
7
|
+
generator = Eman::Generator.new('Service')
|
8
|
+
generator.resource = 'Cheese Cake'
|
9
|
+
generator.verb = 'Grinding'
|
10
|
+
formatter = Eman::Formatter.new(generator)
|
11
|
+
outcome = formatter.camel_case!
|
12
|
+
|
13
|
+
expect(outcome).to eq 'CheeseCakeGrindingService'
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'when type is model' do
|
17
|
+
it 'does not append the type at the end' do
|
18
|
+
generator = Eman::Generator.new('Model')
|
19
|
+
generator.resource = 'Shopping Cart'
|
20
|
+
formatter = Eman::Formatter.new(generator)
|
21
|
+
outcome = formatter.camel_case!
|
22
|
+
|
23
|
+
expect(outcome).to eq 'ShoppingCart'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#snake_case!' do
|
29
|
+
it 'outputs a snake cased name' do
|
30
|
+
generator = Eman::Generator.new('Service')
|
31
|
+
generator.resource = 'Cheese Cake'
|
32
|
+
generator.verb = 'Grinding'
|
33
|
+
formatter = Eman::Formatter.new(generator)
|
34
|
+
outcome = formatter.snake_case!
|
35
|
+
|
36
|
+
expect(outcome).to eq 'cheese_cake_grinding_service'
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'when type is model' do
|
40
|
+
it 'does not append the type at the end' do
|
41
|
+
generator = Eman::Generator.new('Model')
|
42
|
+
generator.resource = 'Shopping Cart'
|
43
|
+
formatter = Eman::Formatter.new(generator)
|
44
|
+
outcome = formatter.snake_case!
|
45
|
+
|
46
|
+
expect(outcome).to eq 'shopping_cart'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Eman::Generator do
|
4
|
+
describe '#run' do
|
5
|
+
context 'when type is service' do
|
6
|
+
it 'should ask two questions' do
|
7
|
+
generator = Eman::Generator.new('Service')
|
8
|
+
allow($stdin).to receive(:gets) { 'Measure' }
|
9
|
+
|
10
|
+
expect($stdin).to receive(:gets).twice
|
11
|
+
generator.run
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when type is not service' do
|
16
|
+
it 'should ask one question' do
|
17
|
+
generator = Eman::Generator.new('Controller')
|
18
|
+
allow($stdin).to receive(:gets) { 'User' }
|
19
|
+
|
20
|
+
expect($stdin).to receive(:gets).once
|
21
|
+
generator.run
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#inputs' do
|
27
|
+
it 'returns a flat array splited at spaces' do
|
28
|
+
generator = Eman::Generator.new('Service')
|
29
|
+
generator.resource = 'Alarm clock'
|
30
|
+
generator.verb = 'reset'
|
31
|
+
|
32
|
+
expect(generator.inputs).to eq ['Alarm', 'clock', 'reset']
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Eman::Recommender do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@generator = Eman::Generator.new('Service')
|
7
|
+
@generator.resource = 'Train Conductor'
|
8
|
+
@generator.verb = 'Whistling'
|
9
|
+
|
10
|
+
@formatter = Eman::Recommender.new(@generator)
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#inputs' do
|
14
|
+
it 'returns the generators inputs' do
|
15
|
+
expect(@formatter.inputs).to eq ['Train', 'Conductor', 'Whistling']
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#words_hash' do
|
20
|
+
it 'returns hash of words as keys and empty arrays as values' do
|
21
|
+
expect(@formatter.words_hash).to eq({ 'Train' => [], 'Conductor' => [], 'Whistling' => [] })
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#recommend_name' do
|
26
|
+
it 'recommends a name' do
|
27
|
+
set_up_custom_dictionary
|
28
|
+
|
29
|
+
generator = Eman::Generator.new('Controller')
|
30
|
+
generator.resource = 'deep'
|
31
|
+
|
32
|
+
recommender = Eman::Recommender.new(generator)
|
33
|
+
|
34
|
+
puts recommender.words_hash
|
35
|
+
|
36
|
+
recommended_name = recommender.recommend_name
|
37
|
+
|
38
|
+
puts recommender.words_hash
|
39
|
+
expect(recommended_name.resource).to eq 'house'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# Require all files under /lib
|
2
2
|
Dir[File.expand_path('../../lib/**/*.rb', __FILE__)].each { |f| require f }
|
3
3
|
|
4
|
+
# Require all support files
|
5
|
+
Dir[File.expand_path('../support/**/*.rb', __FILE__)].each { |f| require f }
|
6
|
+
|
4
7
|
# This file was generated by the `rspec --init` command. Conventionally, all
|
5
8
|
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
6
9
|
# The generated `.rspec` file contains `--require spec_helper` which will cause
|
@@ -43,6 +46,8 @@ RSpec.configure do |config|
|
|
43
46
|
mocks.verify_partial_doubles = true
|
44
47
|
end
|
45
48
|
|
49
|
+
config.include DictionaryMacros
|
50
|
+
|
46
51
|
# The settings below are suggested to provide a good initial experience
|
47
52
|
# with RSpec, but feel free to customize to your heart's content.
|
48
53
|
=begin
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module DictionaryMacros
|
2
|
+
def set_up_custom_dictionary
|
3
|
+
# Custom dictionary files defined in spec/support/dictionary
|
4
|
+
indices_file = YAML.load_file(File.expand_path('../dictionary/indices.yml', __FILE__))
|
5
|
+
words_file = YAML.load_file(File.expand_path('../dictionary/words.yml', __FILE__))
|
6
|
+
|
7
|
+
# Use a custom dictionary files for tests.
|
8
|
+
allow(YAML).to receive(:load_file).with(File.expand_path('../../../lib/eman/dictionary/indices.yml', __FILE__)).and_return(indices_file)
|
9
|
+
allow(YAML).to receive(:load_file).with(File.expand_path('../../../lib/eman/dictionary/words.yml', __FILE__)).and_return(words_file)
|
10
|
+
end
|
11
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sung Won Cho
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -90,6 +90,7 @@ extra_rdoc_files: []
|
|
90
90
|
files:
|
91
91
|
- ".gitignore"
|
92
92
|
- ".rspec"
|
93
|
+
- ".travis.yml"
|
93
94
|
- Gemfile
|
94
95
|
- LICENSE.txt
|
95
96
|
- README.md
|
@@ -97,13 +98,22 @@ files:
|
|
97
98
|
- bin/eman
|
98
99
|
- eman.gemspec
|
99
100
|
- lib/eman.rb
|
100
|
-
- lib/eman/
|
101
|
-
- lib/eman/
|
101
|
+
- lib/eman/dictionary.rb
|
102
|
+
- lib/eman/dictionary/indices.yml
|
103
|
+
- lib/eman/dictionary/words.yml
|
104
|
+
- lib/eman/formatter.rb
|
105
|
+
- lib/eman/generator.rb
|
106
|
+
- lib/eman/recommender.rb
|
102
107
|
- lib/eman/version.rb
|
108
|
+
- spec/dictionary_spec.rb
|
103
109
|
- spec/eman_spec.rb
|
104
|
-
- spec/
|
105
|
-
- spec/
|
110
|
+
- spec/formatter_spec.rb
|
111
|
+
- spec/generator_spec.rb
|
112
|
+
- spec/recommender_spec.rb
|
106
113
|
- spec/spec_helper.rb
|
114
|
+
- spec/support/dictionary/indices.yml
|
115
|
+
- spec/support/dictionary/words.yml
|
116
|
+
- spec/support/dictionary_macros.rb
|
107
117
|
homepage: https://github.com/sungwoncho/eman
|
108
118
|
licenses:
|
109
119
|
- MIT
|
@@ -129,7 +139,12 @@ signing_key:
|
|
129
139
|
specification_version: 4
|
130
140
|
summary: Easily name your controller, model, and service.
|
131
141
|
test_files:
|
142
|
+
- spec/dictionary_spec.rb
|
132
143
|
- spec/eman_spec.rb
|
133
|
-
- spec/
|
134
|
-
- spec/
|
144
|
+
- spec/formatter_spec.rb
|
145
|
+
- spec/generator_spec.rb
|
146
|
+
- spec/recommender_spec.rb
|
135
147
|
- spec/spec_helper.rb
|
148
|
+
- spec/support/dictionary/indices.yml
|
149
|
+
- spec/support/dictionary/words.yml
|
150
|
+
- spec/support/dictionary_macros.rb
|
data/lib/eman/name_formatter.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
require "active_support/inflector"
|
2
|
-
|
3
|
-
module Eman
|
4
|
-
class NameFormatter
|
5
|
-
|
6
|
-
attr_accessor :type, :resource, :verb
|
7
|
-
|
8
|
-
def initialize(resource, verb, type)
|
9
|
-
@type = type
|
10
|
-
@resource = is_controller_name? ? resource.pluralize : resource
|
11
|
-
@verb = verb
|
12
|
-
end
|
13
|
-
|
14
|
-
def camel_case!
|
15
|
-
if is_model_name?
|
16
|
-
"#{components_camelized}"
|
17
|
-
else
|
18
|
-
"#{components_camelized}#{type.capitalize}"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def snake_case!
|
23
|
-
if is_model_name?
|
24
|
-
"#{components_snakified}"
|
25
|
-
else
|
26
|
-
"#{components_snakified}_#{type.downcase}"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def components
|
33
|
-
[resource, verb].flat_map(&:split)
|
34
|
-
end
|
35
|
-
|
36
|
-
def components_camelized
|
37
|
-
components.collect(&:capitalize).join
|
38
|
-
end
|
39
|
-
|
40
|
-
def components_snakified
|
41
|
-
components.collect(&:downcase).join('_')
|
42
|
-
end
|
43
|
-
|
44
|
-
def is_controller_name?
|
45
|
-
type == 'Controller'
|
46
|
-
end
|
47
|
-
|
48
|
-
def is_model_name?
|
49
|
-
type == 'Model'
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
data/spec/name_formatter_spec.rb
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Eman::NameFormatter do
|
4
|
-
|
5
|
-
describe '#initialize' do
|
6
|
-
context 'when type is controller' do
|
7
|
-
it 'pluralizes the resource' do
|
8
|
-
formatter = Eman::NameFormatter.new('Alarm clock', 'Operating', 'Controller')
|
9
|
-
expect(formatter.resource).to eq 'Alarm clocks'
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
context 'when type is not controller' do
|
14
|
-
it 'does not pluralize the resource' do
|
15
|
-
formatter = Eman::NameFormatter.new('Alarm clock', 'Operating', 'Service')
|
16
|
-
expect(formatter.resource).to eq 'Alarm clock'
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe '#camel_case!' do
|
22
|
-
it 'outsputs a camel cased name' do
|
23
|
-
formatter = Eman::NameFormatter.new('cheese', 'grinding', 'Service')
|
24
|
-
outcome = formatter.camel_case!
|
25
|
-
|
26
|
-
expect(outcome).to eq 'CheeseGrindingService'
|
27
|
-
end
|
28
|
-
|
29
|
-
context 'when type is model' do
|
30
|
-
it 'does not append the type at the end' do
|
31
|
-
formatter = Eman::NameFormatter.new('Shopping', 'Cart', 'Model')
|
32
|
-
outcome = formatter.camel_case!
|
33
|
-
|
34
|
-
expect(outcome).to eq 'ShoppingCart'
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe '#snake_case!' do
|
40
|
-
it 'outputs a snake cased name' do
|
41
|
-
formatter = Eman::NameFormatter.new('guitar', 'smashing', 'Service')
|
42
|
-
outcome = formatter.snake_case!
|
43
|
-
|
44
|
-
expect(outcome).to eq 'guitar_smashing_service'
|
45
|
-
end
|
46
|
-
|
47
|
-
context 'when type is model' do
|
48
|
-
it 'does not append the type at the end' do
|
49
|
-
formatter = Eman::NameFormatter.new('Shopping', 'Cart', 'Model')
|
50
|
-
outcome = formatter.snake_case!
|
51
|
-
|
52
|
-
expect(outcome).to eq 'shopping_cart'
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|