querly 0.1.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.
data/sample.yaml ADDED
@@ -0,0 +1,127 @@
1
+ rules:
2
+ - id: sample.delete_all
3
+ pattern:
4
+ - delete_all
5
+ - update_all
6
+ message: |
7
+ Validations and callbacks will be skipped
8
+
9
+ It's faster than calling destroy or update each record, but may be dangerous.
10
+ justification:
11
+ - You have too much record to update/destroy one by one
12
+ - When you are sure skipping callbacks/validations is okay
13
+ before:
14
+ - records.delete_all
15
+ - "records.update_all(people_id: nil)"
16
+ after:
17
+ - records.each(&:destroy)
18
+ - |
19
+ records.each do |record|
20
+ record.update(people_id: nil)
21
+ end
22
+ - id: sample.save_not_conditional
23
+ pattern:
24
+ - "save(!validate: false, ...) [!conditional]"
25
+ - "update(...) [!conditional]"
26
+ - "update_attributes(...) [!conditional]"
27
+ message: |
28
+ save or update returns false when it fails.
29
+
30
+ Check the return value and try error recovery.
31
+ justification:
32
+ - When there is no way to recover from error.
33
+ before:
34
+ - record.save()
35
+ - "record.update(foo: bar)"
36
+ - "record.update(attrs)"
37
+ after:
38
+ - if record.save() then do_something end
39
+ - "record.save(validate: false)"
40
+ - "record.update(foo: 1) or fail"
41
+ - id: sample.skip_validation
42
+ pattern:
43
+ - "save(validate: false)"
44
+ - "save!(validate: false)"
45
+ message: These calls will skip validation
46
+ justification:
47
+ - When you want to skip validation
48
+ - When you have done validation code in other than ActiveRecord's validation mechanism
49
+ - id: sample.net_http
50
+ pattern: Net::HTTP
51
+ message: Use HTTPClient to make Web api calls
52
+ before:
53
+ - Net::HTTP.get(url)
54
+ after:
55
+ - HTTPClient.new.get_content(url)
56
+ - id: sample.root_url_without_locale
57
+ pattern: "root_url(!locale: _)"
58
+ message: Put locale parameter in the link to top page
59
+ before: root_url()
60
+ after: "root_url(locale: I18n.locale)"
61
+ - id: sample.transaction
62
+ pattern: transaction
63
+ message: Use with_account_lock helper, generally
64
+ justification:
65
+ - It does not need lock over account
66
+ - It does not access accounts table
67
+ before:
68
+ - transaction do something end
69
+ after:
70
+ - with_account_lock(account) do something end
71
+ - id: sample.oj
72
+ pattern:
73
+ - JSON.load
74
+ - JSON.dump
75
+ message: Use Oj for JSON load and dump
76
+ - id: sample.metaprogramming_abuse
77
+ pattern:
78
+ - classify
79
+ - constantize
80
+ - eval
81
+ - instance_values
82
+ - safe_constantize
83
+ message: Consider three times before using meta-programming
84
+ - id: sample.activesupport.try
85
+ pattern: "try(:symbol:, ...)"
86
+ message: try returns nil if the method is not defined, try! instead?
87
+ - id: sample.try_with_block_pass
88
+ pattern: "try(&:symbol:)"
89
+ message: It's same as just passing symbol, and slower
90
+ - id: sample.transaction_renew
91
+ pattern: "transaction(requires_new: true)"
92
+ message: Our RDBMS does not support nested transaction
93
+ - id: sample.capybara.assertion
94
+ pattern:
95
+ - assert_equal
96
+ - assert
97
+ message: |
98
+ Using minitest assertions with Capybara may make test unstable
99
+
100
+ Use Capybara assertions like assert_selector
101
+ justification:
102
+ - There is no access to Capybara in that test
103
+ - You have using retrying in test
104
+ tags:
105
+ - test
106
+ - capybara
107
+ - id: sample.capybara.negations
108
+ pattern:
109
+ - refute
110
+ - assert_nil
111
+ message: |
112
+ Negating capybara assertions would make test unstable
113
+
114
+ Maybe you can use Capybara helpers like has_no_css?
115
+ justification:
116
+ - There is no access to Capybara in the test
117
+ - You have implemented retrying in test
118
+ tags:
119
+ - test
120
+ - capybara
121
+ preprocessor:
122
+ .slim: slimrb --compile
123
+ tagging:
124
+ - path: test
125
+ tags:
126
+ - path: features/step_definitions
127
+ tags: test capybara
metadata ADDED
@@ -0,0 +1,172 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: querly
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Soutaro Matsumoto
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-10-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: racc
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.4.14
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.4.14
69
+ - !ruby/object:Gem::Dependency
70
+ name: thor
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.19'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.19'
83
+ - !ruby/object:Gem::Dependency
84
+ name: parser
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 2.3.1
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 2.3.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: rainbow
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.1'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.1'
111
+ description: Querly is a query language and tool to find out method calls from Ruby
112
+ programs. You write simple query, and Querly finds out wrong pieces in your program.
113
+ email:
114
+ - matsumoto@soutaro.com
115
+ executables:
116
+ - querly
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - ".gitignore"
121
+ - ".travis.yml"
122
+ - Gemfile
123
+ - README.md
124
+ - Rakefile
125
+ - bin/console
126
+ - bin/setup
127
+ - exe/querly
128
+ - lib/querly.rb
129
+ - lib/querly/analyzer.rb
130
+ - lib/querly/cli.rb
131
+ - lib/querly/cli/console.rb
132
+ - lib/querly/cli/formatter.rb
133
+ - lib/querly/cli/test.rb
134
+ - lib/querly/config.rb
135
+ - lib/querly/node_pair.rb
136
+ - lib/querly/pattern/argument.rb
137
+ - lib/querly/pattern/expr.rb
138
+ - lib/querly/pattern/kind.rb
139
+ - lib/querly/pattern/parser.rb
140
+ - lib/querly/pattern/parser.y
141
+ - lib/querly/preprocessor.rb
142
+ - lib/querly/rule.rb
143
+ - lib/querly/script.rb
144
+ - lib/querly/script_enumerator.rb
145
+ - lib/querly/tagging.rb
146
+ - lib/querly/version.rb
147
+ - querly.gemspec
148
+ - sample.yaml
149
+ homepage: https://github.com/soutaro/querly
150
+ licenses: []
151
+ metadata: {}
152
+ post_install_message:
153
+ rdoc_options: []
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ requirements: []
167
+ rubyforge_project:
168
+ rubygems_version: 2.5.1
169
+ signing_key:
170
+ specification_version: 4
171
+ summary: Query Method Calls from Ruby Programs
172
+ test_files: []