haml-i18n-extractor 0.0.10 → 0.0.12

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MTRlOTVmMDNhOWVmMmRmN2JkMDhhOTMzOTAyZGViNmEyNDIyMTJkZQ==
4
+ ODdmOTAwNjUxNWQ5YTEzYWU1MWY5ZGJmYzUxZjAwNDQwNTQxMjFkYg==
5
5
  data.tar.gz: !binary |-
6
- ODY1NDJjZTRmMjQ0Y2ZmMWZlZTE3MGZjYjdhNTc3OTE2ZDlkMDNiMw==
6
+ MzdjODNhMWY1NDc3ZTM3Y2FkOTMyMDMxZjhiMjFkNzJhZmMzZTFiMA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MDViNDlhMjk2ZjE1N2JkZjM1ODVhNTNhMWQ4YTU2MjFhNThiNTkwYmI3Y2Ey
10
- OTQ1ODM0OTQxMGQzY2Y5ZTlhNGE4ZDk0ZjhmZWEzOTVjODkxZjIwMGIyMzk3
11
- MzMxZmYzNWEwZjNiMTdmY2JhODRjZmJlZThlMzYzNTNlNWJiMjA=
9
+ NTJjMDA1NjA3NGJhNDk1N2RlYjBkZmQ4OGZmNmY4NTVlMDMyNjNlYWJkNzVi
10
+ ZGEyMTFjNzgwNzdmMmZmYTg2NWY2NmI4NGU4MmIxMWZkODkwZjUwZDU4NmUw
11
+ YjNjMDNhZTNlZjBlZTIyMzkyMTBiM2JjNTc5MDgzMWFhNjQ2YTQ=
12
12
  data.tar.gz: !binary |-
13
- MzY0MjVmOWQ1NTMzZTYzNzkyMGIyNjFhNTRjMWZjMGZkM2ViZmJkNDA3Yzky
14
- MGMxOWQyZjZlZGRkNjJhYjFlMmU2NTRkNTI5N2RjYzFjZWU0MDkxOWY1ZjMz
15
- YTFmZTQ1OTg2ZDA0MDJhMzVkOTY2ZGRkMjdjMTgyZjVmNmM5MWY=
13
+ ZTVjODAwMDM1ZTg2ZTEyNDI0Mjc2MmRiYmE5NTgxY2Q5YzEyODU0MmZlOGY1
14
+ MmUxMTNiYjk4NzcyNjcwNzEyNzJmMGMwNTQyOTViMzFkOWFmYjdkM2Q3OGQx
15
+ OTc5M2IxOTA0MmRiNmNhZWMzZTM5NzA4OTY3YWFlYzM4ZDJlM2I=
data/TODO CHANGED
@@ -12,10 +12,23 @@
12
12
 
13
13
  ## workflow todo's
14
14
 
15
- cleanup workflow - keep around
16
- just handle a rails project dir move any prompting in workflow into prompter.
17
- if the user says 'no' on a line, make sure to not replace it
18
- no extra yaml keys...
19
- make sure yaml keys are in one file and fall into config/locales properly.
15
+ make sure yaml keys are in one file
16
+
17
+ either way when yaml is written, it should just write itself to config/locales/en.yml
18
+ wether its one-off, or project mode. and that's something yaml_tool should do.
19
+ merge itself in.
20
+
20
21
  give user more context on line changes (like grep -C 4)
21
- also right now there is a bug where it asks for 'y' twice?
22
+ agreegate yaml:
23
+
24
+ <ruby>
25
+
26
+ require 'yaml'
27
+ require 'pp'
28
+ ActiveSupport::HashWithIndifferentAccess = HashWithIndifferentAccess # hack when it writes out the yaml, it should not be with_indifferent_access
29
+ all_yaml = Dir.glob('*yml').collect{|x| File.read(x) }
30
+ locale_hash = Hash.new
31
+ all_yaml.map{|y| YAML.load(y) }.map{|x| locale_hash.deep_merge!(x)}
32
+ pp locale_hash; "file.write it"
33
+
34
+ </ruby>
@@ -3,6 +3,10 @@
3
3
  # @date now equals {month=>{day=>{hours=>{min=>{sec=>1}}}}}
4
4
  class Hash
5
5
  def self.recursive_init
6
- new { |hash, key| hash[key] = recursive_init }
6
+ new do |hash, key|
7
+ unless key.nil?
8
+ hash[key] = recursive_init
9
+ end
10
+ end
7
11
  end
8
- end
12
+ end
@@ -16,6 +16,8 @@ module Haml
16
16
  attr_reader :haml_reader, :haml_writer
17
17
  attr_reader :locale_hash, :yaml_tool, :type
18
18
 
19
+ DEFAULT_LINE_LOCALE_HASH = { :modified_line => nil,:keyname => nil,:replaced_text => nil, :path => nil }
20
+
19
21
  def initialize(haml_path, opts = {})
20
22
  @type = opts[:type]
21
23
  @prompt_per_line = opts[:prompt_per_line]
@@ -64,18 +66,19 @@ module Haml
64
66
  orig_line.chomp!
65
67
  orig_line, whitespace = handle_line_whitespace(orig_line)
66
68
  line_type, line_match = handle_line_finding(orig_line)
67
- should_be_replaced, text_to_replace, locale_hash = handle_line_replacing(orig_line, line_match, line_type, line_no)
69
+ should_be_replaced, text_to_replace, line_locale_hash = handle_line_replacing(orig_line, line_match, line_type, line_no)
68
70
  if should_be_replaced
69
71
  if prompt_per_line?
70
- user_approves = Haml::I18n::Extractor::Prompter.new(orig_line,text_to_replace).ask_user
72
+ user_approves = Haml::I18n::Extractor::Prompter.new.ask_user(orig_line,text_to_replace)
71
73
  else
72
74
  user_approves = true
73
75
  end
74
76
  end
75
- append_to_locale_hash(line_no, locale_hash)
76
77
  if user_approves
78
+ append_to_locale_hash(line_no, line_locale_hash)
77
79
  add_to_body("#{whitespace}#{text_to_replace}")
78
80
  else
81
+ append_to_locale_hash(line_no, DEFAULT_LINE_LOCALE_HASH)
79
82
  add_to_body("#{whitespace}#{orig_line}")
80
83
  end
81
84
  return should_be_replaced
@@ -93,7 +96,7 @@ module Haml
93
96
  hash = replacer.replace_hash.dup.merge!({:path => @haml_reader.path })
94
97
  [ true, hash[:modified_line], hash ]
95
98
  else
96
- hash = { :modified_line => nil,:keyname => nil,:replaced_text => nil, :path => nil }
99
+ hash = DEFAULT_LINE_LOCALE_HASH
97
100
  [ false, orig_line, hash ]
98
101
  end
99
102
  end
@@ -7,13 +7,13 @@ module Haml
7
7
 
8
8
  def initialize(orig_path, options = {})
9
9
  @type = options[:type] || :dump # safe default.
10
-
10
+
11
11
  if overwrite?
12
12
  @path = orig_path
13
13
  elsif dump?
14
14
  @path = orig_path.gsub(/.haml$/, ".i18n-extractor.haml")
15
15
  end
16
-
16
+
17
17
  end
18
18
 
19
19
  def write_file
@@ -33,4 +33,4 @@ module Haml
33
33
  end
34
34
  end
35
35
  end
36
- end
36
+ end
@@ -8,19 +8,14 @@ module Haml
8
8
 
9
9
  include Helpers::Highline
10
10
 
11
- def initialize(orig_line, replaced_line)
12
- @orig_line = orig_line
13
- @replaced_line = replaced_line
14
- end
15
-
16
- def ask_user
11
+ def ask_user(orig_line, replaced_line)
17
12
  say(highlight("Replace this line:"))
18
13
  say("\n")
19
- say(@orig_line.inspect)
14
+ say(orig_line.inspect)
20
15
  say("\n")
21
16
  say(highlight("With this line?"))
22
17
  say("\n")
23
- say(@replaced_line.inspect)
18
+ say(replaced_line.inspect)
24
19
  say("\n")
25
20
  answer = ask(highlight('y/n?')) do |q|
26
21
  q.echo = false
@@ -30,6 +25,48 @@ module Haml
30
25
  answer == 'y'
31
26
  end
32
27
 
28
+ def output_stats(file_count, file_names)
29
+ say(highlight("Wowza! Found #{file_count} haml files!\n\n", :red))
30
+ say("#{file_names}\n\n")
31
+ end
32
+
33
+ def process(haml_path, type)
34
+ say(highlight("#{type}-d file") + " #{haml_path}\n\n")
35
+ end
36
+
37
+ def end_message
38
+ say(highlight("\n\n\nNow run a git diff or such and see what changed!"))
39
+ end
40
+
41
+ def not_processing(haml_path)
42
+ say(highlight("Not processing") + " file #{haml_path}.")
43
+ end
44
+
45
+ def syntax_error(haml_path)
46
+ say("Haml Syntax error fo #{haml_path}. Please inspect further.")
47
+ end
48
+
49
+ CHOICES = {O: :overwrite, D: :dump, N: :next}
50
+
51
+ def process_file?(file, file_index)
52
+ o = %{[#{highlight(:O)}]verwrite}
53
+ d = %{[#{highlight(:D)}]ump}
54
+ n = %{[#{highlight(:N)}]ext}
55
+ say("#{o} OR #{d} OR #{n}\n")
56
+ say("Choose the right option for")
57
+ say("#{highlight(file_index)} #{highlight(file)}")
58
+ choices = CHOICES.keys.map(&:to_s)
59
+ prompt = "Your choice #{highlight(choices)}?"
60
+ answer = ask(prompt) do |q|
61
+ q.echo = false
62
+ q.character = true
63
+ q.validate = /\A[#{choices}r]\Z/
64
+ end
65
+ return :overwrite if answer == 'O'
66
+ return :overwrite if answer == 'R' # cheat 'replace'
67
+ return :dump if answer == 'D'
68
+ end
69
+
33
70
  end
34
71
  end
35
72
  end
@@ -1,7 +1,7 @@
1
1
  module Haml
2
2
  module I18n
3
3
  class Extractor
4
- VERSION = "0.0.10"
4
+ VERSION = "0.0.12"
5
5
  end
6
6
  end
7
7
  end
@@ -1,15 +1,11 @@
1
- require 'highline'
2
- require 'highline/import'
3
-
4
1
  module Haml
5
2
  module I18n
6
3
  class Extractor
7
4
  class Workflow
8
5
 
9
- include Helpers::Highline
10
-
11
6
  def initialize(project_path)
12
7
  @project_path = project_path
8
+ @prompter = Haml::I18n::Extractor::Prompter.new
13
9
  unless File.directory?(@project_path)
14
10
  raise Extractor::NotADirectory, "#{@project_path} needs to be a directory!"
15
11
  end
@@ -21,33 +17,15 @@ module Haml
21
17
  end
22
18
  end
23
19
 
24
-
25
- # FIXME, use prompter to do any prompting in this class TODO
26
- #
27
20
  def output_stats
28
- say(highlight("Wowza! Found #{files.size} haml files!\n\n", :red))
29
- say("#{files.join("\n")}\n\n")
21
+ file_count = files.size
22
+ file_names = files.join("\n")
23
+ @prompter.output_stats(file_count, file_names)
30
24
  end
31
25
 
32
- CHOICES = {O: :overwrite, D: :dump, N: :next}
33
-
34
26
  def process_file?(file)
35
- o = %{[#{highlight(:O)}]verwrite}
36
- d = %{[#{highlight(:D)}]ump}
37
- n = %{[#{highlight(:N)}]ext}
38
- say("#{o} OR #{d} OR #{n}\n")
39
- say("Choose the right option for")
40
- say("#{index_for(file)} #{highlight(file)}")
41
- choices = CHOICES.keys.map(&:to_s)
42
- prompt = "Your choice #{highlight(choices)}?"
43
- answer = ask(prompt) do |q|
44
- q.echo = false
45
- q.character = true
46
- q.validate = /\A[#{choices}r]\Z/
47
- end
48
- return :overwrite if answer == 'O'
49
- return :overwrite if answer == 'R' # cheat 'replace'
50
- return :dump if answer == 'D'
27
+ file_index = index_for(file)
28
+ @prompter.process_file?(file, file_index)
51
29
  end
52
30
 
53
31
  def run
@@ -57,7 +35,7 @@ module Haml
57
35
  if type
58
36
  process(haml_path, type)
59
37
  else
60
- say(highlight("Not processing") + " file #{haml_path}.")
38
+ @prompter.not_processing(haml_path)
61
39
  end
62
40
  end
63
41
  end_message
@@ -66,22 +44,22 @@ module Haml
66
44
  private
67
45
 
68
46
  def end_message
69
- say(highlight("\n\n\nNow run a git diff or such and see what changed!"))
47
+ @prompter.end_message
70
48
  end
71
49
 
72
50
  def index_for(file)
73
- highlight((files.index(file) + 1).to_s)
51
+ (files.index(file) + 1).to_s
74
52
  end
75
53
 
76
54
  def process(haml_path, type)
77
- say(highlight("#{type}-d file") + " #{haml_path}\n\n")
55
+ @prompter.process(haml_path, type)
78
56
  options = {:type => type} # overwrite or dump haml
79
57
  options.merge!({:prompt_per_line => true}) # per-line prompts
80
58
  begin
81
59
  @ex1 = Haml::I18n::Extractor.new(haml_path, options)
82
60
  @ex1.run
83
61
  rescue Haml::I18n::Extractor::InvalidSyntax
84
- say("Haml Syntax error fo #{haml_path}. Please inspect further.")
62
+ @prompter.syntax_error(haml_path)
85
63
  end
86
64
  end
87
65
  end
@@ -7,27 +7,26 @@ module Haml
7
7
  module I18n
8
8
  class Extractor
9
9
  class YamlTool
10
-
10
+
11
11
  attr_accessor :locales_dir, :locale_hash
12
12
 
13
13
  def initialize(locales_dir = nil)
14
14
  if locales_dir
15
15
  @locales_dir = locales_dir
16
16
  else
17
- # locales_dir = rails_mode? ? (Rails.root.to_s + "/config/locales") : "."
18
- @locales_dir = File.expand_path(".")
17
+ @locales_dir = File.expand_path("./config/locales/")
19
18
  end
20
19
  end
21
20
 
22
21
  # {:en => {:view_name => {:key_name => :string_name } } }
23
22
  def yaml_hash
24
- h = HashWithIndifferentAccess.recursive_init
23
+ yml = HashWithIndifferentAccess.recursive_init
25
24
  @locale_hash.map do |line_no, info|
26
25
  unless info[:keyname].nil?
27
- h[i18n_scope][standardized_viewname(info[:path])][standarized_keyname(info[:keyname])] = info[:replaced_text]
26
+ yml[i18n_scope][standardized_viewname(info[:path])][standarized_keyname(info[:keyname])] = info[:replaced_text]
28
27
  end
29
28
  end
30
- h
29
+ yml = hashify(yml)
31
30
  end
32
31
 
33
32
  def locale_file
@@ -36,19 +35,35 @@ module Haml
36
35
  if pth
37
36
  full_path = Pathname.new(pth)
38
37
  base_name = full_path.basename.to_s
38
+ if ! File.exist?(@locales_dir)
39
+ FileUtils.mkdir_p(@locales_dir)
40
+ end
39
41
  File.expand_path(File.join( @locales_dir, standardized_viewname(full_path) + ".#{base_name}.yml"))
40
42
  end
41
- end.to_s
43
+ end || "haml-i18-extractor.yml"
42
44
  end
43
-
45
+
44
46
  def write_file
45
47
  f = File.open(locale_file, "w+")
46
48
  f.puts yaml_hash.to_yaml
47
49
  f.flush
48
50
  end
49
-
51
+
50
52
  private
51
53
 
54
+ # {:foo => {:bar => {:baz => :mam}, :barrr => {:bazzz => :mammm} }}
55
+ def hashify(my_hash)
56
+ if my_hash.is_a?(HashWithIndifferentAccess)
57
+ result = {}
58
+ my_hash.each do |k, v|
59
+ result[k.to_s] = hashify(v)
60
+ end
61
+ result
62
+ else
63
+ my_hash
64
+ end
65
+ end
66
+
52
67
  def i18n_scope
53
68
  :en
54
69
  end
@@ -64,11 +79,7 @@ module Haml
64
79
  Pathname.new(pth).dirname.to_s.split("/").last
65
80
  end
66
81
 
67
- # def rails_mode?
68
- # defined?(Rails)
69
- # end
70
-
71
- end
82
+ end
72
83
  end
73
84
  end
74
- end
85
+ end
@@ -25,7 +25,7 @@ module Haml
25
25
  assert_equal h.prompt_per_line?, false
26
26
  end
27
27
 
28
- test "with a prompt_per_line option takes user input into consideration" do
28
+ test "with a prompt_per_line option takes user input into consideration for haml" do
29
29
  h = Haml::I18n::Extractor.new(file_path("ex1.haml"), :prompt_per_line => true)
30
30
  user_input = "D" # dump
31
31
  File.readlines(file_path("ex1.haml")).size.times do
@@ -38,6 +38,19 @@ module Haml
38
38
  assert_equal File.read(h.haml_writer.path), File.read(file_path("ex1.haml"))
39
39
  end
40
40
 
41
+ test "with a prompt_per_line option takes user input into consideration for yaml" do
42
+ h = Haml::I18n::Extractor.new(file_path("ex1.haml"), :prompt_per_line => true)
43
+ user_input = "D" # dump
44
+ File.readlines(file_path("ex1.haml")).size.times do
45
+ user_input << "n" # do not replace lines
46
+ end
47
+ with_highline(user_input) do
48
+ h.run
49
+ end
50
+ # no changes were made cause user was all like 'uhhh, no thxk'
51
+ assert_equal YAML.load(File.read(h.yaml_tool.locale_file)), {}
52
+ end
53
+
41
54
  test "can not initialize if the haml is not valid syntax" do
42
55
  begin
43
56
  Haml::I18n::Extractor.new(file_path("bad.haml"))
@@ -60,6 +73,7 @@ module Haml
60
73
  end
61
74
 
62
75
  test "it writes the locale info to an out file when run" do
76
+ Dir.glob("*yml").map {|p| FileUtils.rm(p) } # HAX, TODO: handle with yaml files correctly (config/en.yml)
63
77
  assert_equal File.exists?(@ex1.yaml_tool.locale_file), false
64
78
  @ex1.run
65
79
  assert_equal File.exists?(@ex1.yaml_tool.locale_file), true
@@ -5,13 +5,13 @@ module Haml
5
5
 
6
6
  def test_asks_to_process_line_yes
7
7
  with_highline("y") do
8
- assert_equal Haml::I18n::Extractor::Prompter.new("orig", "replace").ask_user, true
8
+ assert_equal Haml::I18n::Extractor::Prompter.new.ask_user("orig", "replace"), true
9
9
  end
10
10
  end
11
11
 
12
12
  def test_asks_to_process_line_no
13
13
  with_highline("n") do
14
- assert_equal Haml::I18n::Extractor::Prompter.new("orig", "replace").ask_user, false
14
+ assert_equal Haml::I18n::Extractor::Prompter.new.ask_user("orig", "replace"), false
15
15
  end
16
16
  end
17
17
 
data/test/test_helper.rb CHANGED
@@ -89,25 +89,6 @@ ensure
89
89
  $terminal = old_terminal
90
90
  end
91
91
 
92
-
93
-
94
- def without_rails_mode
95
- Object.send(:remove_const, :Rails) if defined?(Rails)
96
- yield
97
- end
98
-
99
- def with_rails_mode
100
- create_klass=<<EOR
101
- module Rails
102
- def self.root
103
- "/data/current/name"
104
- end
105
- end
106
- EOR
107
- eval create_klass
108
- yield
109
- end
110
-
111
92
  module TestHelper
112
93
 
113
94
  TMPDIR = File.join(File.dirname(__FILE__) + "/tmp/")
@@ -12,6 +12,18 @@ module Haml
12
12
  TestHelper.teardown_project_directory!
13
13
  end
14
14
 
15
+ def full_project_user_interaction
16
+ automate_user_interaction = ""
17
+ 6.times do # should be number of files we're testing on
18
+ automate_user_interaction << "O" # overwrite file
19
+ 50.times do # should be number of lines in file,
20
+ # this should do right now.
21
+ automate_user_interaction << "y" # replace line
22
+ end
23
+ end
24
+ automate_user_interaction
25
+ end
26
+
15
27
  def test_it_should_work_on_a_directory_mkay
16
28
  filename = "#{TestHelper::PROJECT_DIR}app/views/bar/thang.haml"
17
29
  bad_worfklow = Haml::I18n::Extractor::Workflow.new(filename)
@@ -19,7 +31,7 @@ module Haml
19
31
  rescue Haml::I18n::Extractor::NotADirectory
20
32
  assert true, "workflow works on a directory bubba."
21
33
  end
22
-
34
+
23
35
  def test_it_finds_all_haml_files
24
36
  assert_equal @workflow.files.size, 4
25
37
  end
@@ -49,16 +61,14 @@ module Haml
49
61
  end
50
62
  end
51
63
 
52
- def test_run_works
53
- automate_user_interaction = ""
54
- 6.times do # should be number of files we're testing on
55
- automate_user_interaction << "O" # overwrite file
56
- 50.times do # should be number of lines in file,
57
- # this should do right now.
58
- automate_user_interaction << "y" # replace line
59
- end
64
+ def test_yaml_file_in_config
65
+ with_highline(full_project_user_interaction) do
66
+ @workflow.run
60
67
  end
61
- with_highline(automate_user_interaction ) do
68
+ end
69
+
70
+ def test_run_works
71
+ with_highline(full_project_user_interaction) do
62
72
  @workflow.run
63
73
  end
64
74
  end
@@ -28,25 +28,16 @@ module Haml
28
28
  }
29
29
  end
30
30
 
31
- # test "locale dir defaults for rails if you do not pass anything" do
32
- # with_rails_mode do
33
- # yaml_tool = Haml::I18n::Extractor::YamlTool.new
34
- # assert_equal yaml_tool.locales_dir, "/data/current/name/config/locales"
35
- # end
36
- # end
37
-
38
- test "locale dir defaults to cwd if no rails" do
39
- without_rails_mode do
40
- yaml_tool = Haml::I18n::Extractor::YamlTool.new
41
- assert_equal yaml_tool.locales_dir, File.expand_path(".")
42
- end
31
+ test "locale dir defaults to config/locales/" do
32
+ yaml_tool = Haml::I18n::Extractor::YamlTool.new
33
+ assert_equal yaml_tool.locales_dir, File.expand_path("./config/locales")
43
34
  end
44
-
35
+
45
36
  test "you can set the locale_dir" do
46
37
  yaml_tool = Haml::I18n::Extractor::YamlTool.new(@temp_locale_dir)
47
38
  assert_equal yaml_tool.locales_dir, @temp_locale_dir
48
39
  end
49
-
40
+
50
41
  test "it relies on the locale_hash having a certain format" do
51
42
  setup_locale_hash
52
43
  @ex1.yaml_tool.locale_hash.each do |line_no, info_for_line|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haml-i18n-extractor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shai Rosenfeld
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-06 00:00:00.000000000 Z
11
+ date: 2013-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tilt