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