export_strings 0.1.1.dev → 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
  SHA256:
3
- metadata.gz: e21380cd54e9dc9ae6e6997e81fa6cd42d906d85a04cdf3fb36acee14c528c5d
4
- data.tar.gz: 30cc394113e1930dfa50e041613185fff8299c498a733f7d2e27a5cc3551825d
3
+ metadata.gz: 01ab06d2a7a05856a986c9fd06628dfa632ff7459c2c3c64e71080eb9cdb3d4d
4
+ data.tar.gz: 247cb0c82d133169ed5af2d410b2a4dfcd1bf2a564a2957284159b8facaa2dc8
5
5
  SHA512:
6
- metadata.gz: 0463f6e011828bc681e5949b8c49ed068d49874666b929600d7b45b813bc2caa92ad68ea7836fd22b06a7cc2e466aa502625dd4e1e32c037e5009b33c4826714
7
- data.tar.gz: 83b2bb92b4d376ee065f9b56f78fe50af3383a373e45042a9d1dc14dded25dcb8d666079158cc6dc53041d5558e98c3ee2e91a9b5c07f96d50b756d1abe08a37
6
+ metadata.gz: 931b2c46ccf51b73a41da64f4883a9e945babd11998a7db02137f0a6a04d4d0af02d19d40c2edeacf3979cf88d055a4f7092ac7ed6b2c2587f75e307c36c3d01
7
+ data.tar.gz: 61dc2265e7c793f7c571bea68a28b9765e7755b6f82edaf1f3ad1bcb5269d3ec74edacd52727496a8e7d6a62585091720eae81023cd795dcb0fd1e4d60ce68b5
@@ -1,4 +1,8 @@
1
1
  # export_strings chagelogs
2
2
  ## 0.1.1.dev
3
3
  - Implement 60%
4
- - Export strings from easy .rb file
4
+ - Export strings from easy .rb file
5
+
6
+ ## 0.2.0.dev
7
+ - Implement 90%
8
+ - Export strings from nomal .rb file
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- export_strings (0.1.1.dev)
4
+ export_strings (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -21,12 +21,11 @@ Or install it yourself as:
21
21
  ```rb
22
22
  require 'export_strings'
23
23
 
24
- ExportString.execute rb_file_path
24
+ ExportStrings.execute rb_file_path
25
25
 
26
26
  => [String, String, String, String]
27
27
  ```
28
28
 
29
-
30
29
  ## Example
31
30
 
32
31
  ```rb
@@ -43,6 +42,14 @@ class Example
43
42
  def str2
44
43
  "I like gohan. Do you like gohan.Oh Yeah."
45
44
  end
45
+
46
+ def str3
47
+ "#{hello} Mikel"
48
+ end
49
+
50
+ def hello
51
+ 'hello world'
52
+ end
46
53
  end
47
54
 
48
55
  # =======your irb console=======
@@ -51,25 +58,29 @@ require 'export_strings'
51
58
  pp ExportStrings.execute 'example.rb'
52
59
 
53
60
  [" SELECT *\n" + " FROM users\n" + " WHERE id > 100\n",
54
- "I like gohan. Do you like gohan.Oh Yeah."]
61
+ "I like gohan. Do you like gohan.Oh Yeah.",
62
+ "\#{hello} Mikel",
63
+ "hello world"]
55
64
 
56
- => [" SELECT *\n FROM users\n WHERE id > 100\n", "I like gohan. Do you like gohan.Oh Yeah."]
65
+ => ["SELECT *\n FROM users\n WHERE id > 100\n", "I like gohan. Do you like gohan.Oh Yeah.", "\#{hello} Mikel", "hello world"]
57
66
 
58
- ```
67
+ pp ExportStrings.execute 'example.rb', with_embexpr: false
59
68
 
60
- ## Development
61
-
62
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
69
+ [" SELECT *\n" + " FROM users\n" + " WHERE id > 100\n",
70
+ "I like gohan. Do you like gohan.Oh Yeah.",
71
+ " Mikel",
72
+ "hello world"]
63
73
 
64
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
74
+ => ["SELECT *\n FROM users\n WHERE id > 100\n", "I like gohan. Do you like gohan.Oh Yeah.", " Mikel", "hello world"]
75
+ ```
65
76
 
66
77
  ## Schedule
67
78
 
68
79
  ### I want to develop this to make gem of format or parce.
69
80
 
70
81
  - Implement to export from singleton_method
71
- - Implement to export from string interpolation
72
- - Implement to export from `hoge ? 'page' : 'peke'`
82
+ - ~~Implement to export from string interpolation~~ fix
83
+ - ~~Implement to export from `hoge ? 'page' : 'peke'`~~ fix
73
84
 
74
85
  ## Contributing
75
86
 
@@ -78,7 +89,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/tashir
78
89
  ## License
79
90
 
80
91
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
81
-
82
- ## Code of Conduct
83
-
84
- Everyone interacting in the ExportStrings project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/export_strings/blob/master/CODE_OF_CONDUCT.md).
@@ -1,4 +1,5 @@
1
1
  class Example
2
+ @pokemon = 'pokemon'
2
3
 
3
4
  def str
4
5
  <<-SQL
@@ -35,7 +36,10 @@ a asdfasdfasdfasdfsh
35
36
  GROUP BY gender
36
37
  HAVING 100 > Max(#{hogeo})
37
38
  AND HAVING 1000 < Max(#{test})
38
- #{!!test ? 'page' : 'hoge'}
39
+ AND HAVING 1000 < Max(#{String.new})
40
+ AND HAVING 1000 < Max(#{test; test})
41
+ AND HAVING 1000 < Max(#{@pokemon})
42
+ #{!!test ? 'hogeo' : 'hoge'}
39
43
  "
40
44
  end
41
45
 
@@ -53,5 +57,39 @@ a asdfasdfasdfasdfsh
53
57
  def single_auot
54
58
  'single_quot_str'
55
59
  end
60
+ end
61
+
62
+ class Example2
63
+ def hogeo2
64
+ 'test'
65
+ "test"
66
+ 'test' + "test"
67
+ 'test' << 'test'
68
+ end
56
69
 
70
+ def test2
71
+ 'hi'
72
+ end
57
73
  end
74
+
75
+ class Example
76
+ def str1
77
+ <<-SQL
78
+ SELECT *
79
+ FROM users
80
+ WHERE id > 100
81
+ SQL
82
+ end
83
+
84
+ def str2
85
+ "I like gohan. Do you like gohan.Oh Yeah."
86
+ end
87
+
88
+ def str3
89
+ "#{hello} Mikel"
90
+ end
91
+
92
+ def hello
93
+ 'hello world'
94
+ end
95
+ end
@@ -0,0 +1,64 @@
1
+ require 'ripper'
2
+
3
+ module ExportStrings
4
+ class ByLex
5
+ class << self
6
+ def execute(rb_text)
7
+ @string_flag = false
8
+ @embexpr_flag = false
9
+ @str = ''
10
+ results = []
11
+ Ripper.lex(rb_text).each do |ary_code|
12
+ code_type = ary_code[1]
13
+ code_content = ary_code[2]
14
+ if embexpr_flag(code_type)
15
+ @str << code_content
16
+ next
17
+ end
18
+
19
+ if string_flag(code_type)
20
+ next if code_type == :on_tstring_beg || code_type == :on_heredoc_beg
21
+
22
+ @str << code_content
23
+ elsif !string_flag(code_type) && !@str.empty?
24
+ results.push @str
25
+ @str = ''
26
+ end
27
+ end
28
+ results
29
+ end
30
+
31
+ private
32
+
33
+ # string_flag = trueのときは
34
+ # on_tstring_beg ~ on_tstring_end || on_heredoc_beg ~ on_heredoc_endまでを
35
+ # 文字列として扱う
36
+ def string_flag(code_type)
37
+ @string_flag = case code_type
38
+ when :on_tstring_beg
39
+ true
40
+ when :on_heredoc_beg
41
+ true
42
+ when :on_tstring_end
43
+ false
44
+ when :on_heredoc_end
45
+ false
46
+ else
47
+ @string_flag
48
+ end
49
+ end
50
+
51
+ # 文字列展開対応
52
+ def embexpr_flag(code_type)
53
+ @embexpr_flag = case code_type
54
+ when :on_embexpr_beg
55
+ true
56
+ when :on_embexpr_end
57
+ false
58
+ else
59
+ @embexpr_flag
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,45 @@
1
+ require 'ripper'
2
+
3
+ module ExportStrings
4
+ # 文字列展開は含めない
5
+ class BySexp
6
+ class << self
7
+ def execute(rb_text)
8
+ str_content_nodes = recursively_push_for_str_content_nodes Ripper.sexp(rb_text), []
9
+ content_nodes2str_ary str_content_nodes
10
+ end
11
+
12
+ private
13
+
14
+ # 再帰的にstring_literal nodeを集めてくる
15
+ def recursively_push_for_str_content_nodes(tree, nodes)
16
+ tree.each do |node|
17
+ if node.class == Array && node[0] == :string_content
18
+ nodes << node
19
+ elsif node.class == Array
20
+ recursively_push_for_str_content_nodes(node, nodes)
21
+ end
22
+ end
23
+ nodes
24
+ end
25
+
26
+ # nodesをstringsに変換して返す
27
+ def content_nodes2str_ary(nodes)
28
+ nodes.map { |node| str_content_node2str node, '' }
29
+ end
30
+
31
+ # 各nodeをstringに変換する
32
+ def str_content_node2str(string_content_node, str)
33
+ string_content_node.each do |leaf|
34
+ if leaf.class == Array && leaf[0] == :@tstring_content
35
+ # 通常のstringが格納される時
36
+ str << leaf[1]
37
+ elsif leaf.class == Array
38
+ str_content_node2str(leaf, str)
39
+ end
40
+ end
41
+ str
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,42 +1,16 @@
1
- require 'ripper'
1
+ require 'export_strings/by_lex'
2
+ require 'export_strings/by_sexp'
2
3
 
3
4
  module ExportStrings
4
5
  class Core
5
6
  class << self
6
- def execute(rb_text)
7
- @str_nodes = []
8
- recursively_push_str_nodes Ripper.sexp(rb_text)
9
- to_strings @str_nodes
7
+ def execute(rb_text, with_embexpr: true)
8
+ with_embexpr ? ByLex.execute(rb_text) : BySexp.execute(rb_text)
10
9
  end
11
10
 
12
- private
13
-
14
- def recursively_push_str_nodes(tree)
15
- tree.each do |node|
16
- if node.class == Array && node[0] == :string_content
17
- @str_nodes << node
18
- elsif node.class == Array
19
- recursively_push_str_nodes(node)
20
- end
21
- end
22
- end
23
-
24
- def to_strings(nodes)
25
- nodes.map do |node|
26
- @string = ''
27
- str_content_node2str node
28
- end
29
- end
30
-
31
- def str_content_node2str(string_content_node)
32
- string_content_node.each do |leaf|
33
- if leaf.class == Array && leaf[0] == :@tstring_content
34
- @string << leaf[1]
35
- elsif leaf.class == Array
36
- str_content_node2str(leaf)
37
- end
38
- end
39
- @string
11
+ # 文字列展開は除外したい時
12
+ def execute_with_out_embexpr(rb_text)
13
+ execute rb_text, with_embexpr: false
40
14
  end
41
15
  end
42
16
  end
@@ -1,3 +1,3 @@
1
1
  module ExportStrings
2
- VERSION = "0.1.1.dev"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: export_strings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1.dev
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tashiro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-28 00:00:00.000000000 Z
11
+ date: 2019-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -74,6 +74,8 @@ files:
74
74
  - example/example.rb
75
75
  - export_strings.gemspec
76
76
  - lib/export_strings.rb
77
+ - lib/export_strings/by_lex.rb
78
+ - lib/export_strings/by_sexp.rb
77
79
  - lib/export_strings/core.rb
78
80
  - lib/export_strings/version.rb
79
81
  homepage: https://github.com/tashirosota/ruby-export_strings
@@ -94,9 +96,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
94
96
  version: '0'
95
97
  required_rubygems_version: !ruby/object:Gem::Requirement
96
98
  requirements:
97
- - - ">"
99
+ - - ">="
98
100
  - !ruby/object:Gem::Version
99
- version: 1.3.1
101
+ version: '0'
100
102
  requirements: []
101
103
  rubygems_version: 3.0.3
102
104
  signing_key: