truth_serum 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: 12a65d8466c9536bedf6d6b94a68024359362756
4
- data.tar.gz: 33e057b187a1a7cbf3c2887daf10953045c2e578
3
+ metadata.gz: 77ea2202c19fa2afd7f1eb080169b7314b4ca51d
4
+ data.tar.gz: b77ae18ef4a9443a04a1d7be69757ef7569961fb
5
5
  SHA512:
6
- metadata.gz: d24ccb4cdc7496a19cbb680569256b542aa5329c41ed781874b15c009d729b58bdca94962077eaa5e0906ce6a3f1b21101d0b06002f0b5811e599216a709c94a
7
- data.tar.gz: 8123b85b4688e75f99ccefd99df925ac0cc4a43d1035a9d958ce58ad2dd41124636399ec3c1063a250a827a851113574e868401132a8b347eb25824ec41f12ea
6
+ metadata.gz: 5864b0061805904097a13d29087d2367a7ea3b1694b3faf97a59ccbe0e2bab11194d7bf6bc2379e99112924010bef99581dedb2743de656161a00670d245cb1b
7
+ data.tar.gz: 7c1cadf93db90ae52a1d22c828b831a0b956cfedaa151c6e2405f35e204ac0fe571b0baf5e2cb7e1c34ee67f5a44cbe590a7d1b0630770a3c4a77ce295394a63
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.3.1
@@ -8,5 +8,49 @@ module TruthSerum
8
8
  @filters = filters
9
9
  @negative_filters = negative_filters
10
10
  end
11
+
12
+ def reconstruct_query
13
+ result = []
14
+ result += reconstruct_terms(terms) if terms
15
+ result += negate(reconstruct_terms(negative_terms)) if negative_terms
16
+ result += reconstruct_filters(filters) if filters
17
+ result += negate(reconstruct_filters(negative_filters)) if negative_filters
18
+
19
+ result.compact.join(' ').strip
20
+ end
21
+
22
+ private
23
+
24
+ def reconstruct_terms(terms)
25
+ quotables, others = terms.partition { |t| should_quote(t) }
26
+ quotables = quotables.map { |t| quote_term(t) }
27
+
28
+ [quotables, others].flatten
29
+ end
30
+
31
+ def reconstruct_filters(filters)
32
+ filters.map do |key, value|
33
+ key = quote_term(key) if should_quote(key)
34
+ value = quote_term(value) if should_quote(value)
35
+
36
+ "#{key}:#{value}"
37
+ end
38
+ end
39
+
40
+ def negate(terms)
41
+ terms.map { |t| "-#{t}" }
42
+ end
43
+
44
+ def should_quote(term)
45
+ term =~ /[ \"\r\n]/
46
+ end
47
+
48
+ def quote_term(term)
49
+ term = term.gsub(/\r/, '\r')
50
+ .gsub(/\n/, '\n')
51
+ .gsub(/\\/, '\\\\')
52
+
53
+ "\"#{term}\""
54
+ end
11
55
  end
12
56
  end
@@ -1,3 +1,3 @@
1
1
  module TruthSerum
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/truth_serum.rb CHANGED
@@ -5,7 +5,24 @@ require "truth_serum/lexer"
5
5
  require "truth_serum/parser"
6
6
 
7
7
  module TruthSerum
8
- def self.parse(line)
8
+ module_function
9
+
10
+ def parse(line)
9
11
  Result.new(**Parser.new(Lexer.new(line).lex).parse)
10
12
  end
13
+
14
+ def unparse(hash)
15
+ result = if hash.is_a?(Result)
16
+ hash
17
+ else
18
+ Result.new(
19
+ terms: hash[:terms],
20
+ negative_terms: hash[:negative_terms],
21
+ filters: hash[:filters],
22
+ negative_filters: hash[:negative_filters]
23
+ )
24
+ end
25
+
26
+ result.reconstruct_query
27
+ end
11
28
  end
data/truth_serum.gemspec CHANGED
@@ -19,9 +19,9 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler", '~> 1.12'
22
- spec.add_development_dependency "rake", '~> 11.1'
23
- spec.add_development_dependency "minitest", '~> 5.8'
24
- spec.add_development_dependency "guard", '~> 2.13'
22
+ spec.add_development_dependency "rake", '~> 11.2'
23
+ spec.add_development_dependency "minitest", '~> 5.9'
24
+ spec.add_development_dependency "guard", '~> 2.14'
25
25
  spec.add_development_dependency "guard-minitest", '~> 2.4'
26
26
  spec.add_development_dependency "pry", '~> 0.10'
27
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: truth_serum
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
  - Chakrit Wichian
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-26 00:00:00.000000000 Z
11
+ date: 2016-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,42 +30,42 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '11.1'
33
+ version: '11.2'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '11.1'
40
+ version: '11.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5.8'
47
+ version: '5.9'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5.8'
54
+ version: '5.9'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: guard
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.13'
61
+ version: '2.14'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2.13'
68
+ version: '2.14'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: guard-minitest
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -102,6 +102,7 @@ extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
104
  - ".gitignore"
105
+ - ".ruby-version"
105
106
  - ".travis.yml"
106
107
  - Gemfile
107
108
  - Guardfile