querly 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []