riveter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (174) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +2 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +17 -0
  7. data/Gemfile +4 -0
  8. data/Gemfile.lock +147 -0
  9. data/LICENSE.txt +23 -0
  10. data/README.md +77 -0
  11. data/Rakefile +7 -0
  12. data/app/helpers/riveter/command_form_helper.rb +15 -0
  13. data/app/helpers/riveter/enquiry_form_helper.rb +16 -0
  14. data/app/helpers/riveter/query_filter_form_helper.rb +16 -0
  15. data/config/locales/forms.en.yml +25 -0
  16. data/config/locales/validators.en.yml +26 -0
  17. data/init.rb +25 -0
  18. data/lib/generators/erb/TODO +1 -0
  19. data/lib/generators/haml/command_controller/USAGE +0 -0
  20. data/lib/generators/haml/command_controller/command_controller_generator.rb +56 -0
  21. data/lib/generators/haml/command_controller/templates/new.html.haml +26 -0
  22. data/lib/generators/haml/enquiry_controller/USAGE +0 -0
  23. data/lib/generators/haml/enquiry_controller/enquiry_controller_generator.rb +56 -0
  24. data/lib/generators/haml/enquiry_controller/templates/index.html.haml +57 -0
  25. data/lib/generators/riveter/command/USAGE +0 -0
  26. data/lib/generators/riveter/command/command_generator.rb +55 -0
  27. data/lib/generators/riveter/command/templates/command.rb +40 -0
  28. data/lib/generators/riveter/command/templates/commands.en.yml +57 -0
  29. data/lib/generators/riveter/command/templates/module.rb +4 -0
  30. data/lib/generators/riveter/command_controller/USAGE +0 -0
  31. data/lib/generators/riveter/command_controller/command_controller_generator.rb +40 -0
  32. data/lib/generators/riveter/command_controller/templates/command_controller.rb +18 -0
  33. data/lib/generators/riveter/command_controller/templates/module.rb +4 -0
  34. data/lib/generators/riveter/enquiry/USAGE +0 -0
  35. data/lib/generators/riveter/enquiry/enquiry_generator.rb +29 -0
  36. data/lib/generators/riveter/enquiry/templates/enquiry.rb +11 -0
  37. data/lib/generators/riveter/enquiry/templates/module.rb +4 -0
  38. data/lib/generators/riveter/enquiry_controller/USAGE +0 -0
  39. data/lib/generators/riveter/enquiry_controller/enquiry_controller_generator.rb +34 -0
  40. data/lib/generators/riveter/enquiry_controller/templates/enquiry_controller.rb +9 -0
  41. data/lib/generators/riveter/enquiry_controller/templates/module.rb +4 -0
  42. data/lib/generators/riveter/enum/USAGE +41 -0
  43. data/lib/generators/riveter/enum/enum_generator.rb +51 -0
  44. data/lib/generators/riveter/enum/templates/enum.rb +17 -0
  45. data/lib/generators/riveter/enum/templates/enums.en.yml +35 -0
  46. data/lib/generators/riveter/enum/templates/module.rb +4 -0
  47. data/lib/generators/riveter/install/USAGE +0 -0
  48. data/lib/generators/riveter/install/install_generator.rb +14 -0
  49. data/lib/generators/riveter/presenter/USAGE +0 -0
  50. data/lib/generators/riveter/presenter/presenter_generator.rb +20 -0
  51. data/lib/generators/riveter/presenter/templates/module.rb +4 -0
  52. data/lib/generators/riveter/presenter/templates/presenter.rb +7 -0
  53. data/lib/generators/riveter/query/USAGE +22 -0
  54. data/lib/generators/riveter/query/query_generator.rb +20 -0
  55. data/lib/generators/riveter/query/templates/module.rb +4 -0
  56. data/lib/generators/riveter/query/templates/query.rb +31 -0
  57. data/lib/generators/riveter/query_filter/USAGE +0 -0
  58. data/lib/generators/riveter/query_filter/query_filter_generator.rb +52 -0
  59. data/lib/generators/riveter/query_filter/templates/module.rb +4 -0
  60. data/lib/generators/riveter/query_filter/templates/query_filter.rb +40 -0
  61. data/lib/generators/riveter/query_filter/templates/query_filters.en.yml +49 -0
  62. data/lib/generators/riveter/service/USAGE +0 -0
  63. data/lib/generators/riveter/service/service_generator.rb +20 -0
  64. data/lib/generators/riveter/service/templates/module.rb +4 -0
  65. data/lib/generators/riveter/service/templates/service.rb +12 -0
  66. data/lib/generators/riveter/worker/USAGE +0 -0
  67. data/lib/generators/riveter/worker/templates/module.rb +4 -0
  68. data/lib/generators/riveter/worker/templates/worker.rb +7 -0
  69. data/lib/generators/riveter/worker/worker_generator.rb +20 -0
  70. data/lib/generators/rspec/command/USAGE +0 -0
  71. data/lib/generators/rspec/command/command_generator.rb +11 -0
  72. data/lib/generators/rspec/command/templates/command_spec.rb +8 -0
  73. data/lib/generators/rspec/command_controller/USAGE +0 -0
  74. data/lib/generators/rspec/command_controller/command_controller_generator.rb +21 -0
  75. data/lib/generators/rspec/command_controller/templates/command_controller_spec.rb +70 -0
  76. data/lib/generators/rspec/enquiry/USAGE +0 -0
  77. data/lib/generators/rspec/enquiry/enquiry_generator.rb +11 -0
  78. data/lib/generators/rspec/enquiry/templates/enquiry_spec.rb +69 -0
  79. data/lib/generators/rspec/enquiry_controller/USAGE +0 -0
  80. data/lib/generators/rspec/enquiry_controller/enquiry_controller_generator.rb +16 -0
  81. data/lib/generators/rspec/enquiry_controller/templates/enquiry_controller_spec.rb +32 -0
  82. data/lib/generators/rspec/enum/USAGE +0 -0
  83. data/lib/generators/rspec/enum/enum_generator.rb +11 -0
  84. data/lib/generators/rspec/enum/templates/enum_spec.rb +8 -0
  85. data/lib/generators/rspec/presenter/USAGE +0 -0
  86. data/lib/generators/rspec/presenter/presenter_generator.rb +11 -0
  87. data/lib/generators/rspec/presenter/templates/presenter_spec.rb +8 -0
  88. data/lib/generators/rspec/query/USAGE +0 -0
  89. data/lib/generators/rspec/query/query_generator.rb +11 -0
  90. data/lib/generators/rspec/query/templates/query_spec.rb +41 -0
  91. data/lib/generators/rspec/query_filter/USAGE +0 -0
  92. data/lib/generators/rspec/query_filter/query_filter_generator.rb +11 -0
  93. data/lib/generators/rspec/query_filter/templates/query_filter_spec.rb +8 -0
  94. data/lib/generators/rspec/service/USAGE +0 -0
  95. data/lib/generators/rspec/service/service_generator.rb +11 -0
  96. data/lib/generators/rspec/service/templates/service_spec.rb +8 -0
  97. data/lib/generators/rspec/worker/USAGE +0 -0
  98. data/lib/generators/rspec/worker/templates/worker_spec.rb +8 -0
  99. data/lib/generators/rspec/worker/worker_generator.rb +11 -0
  100. data/lib/generators/test_unit/TODO +1 -0
  101. data/lib/riveter/associated_type_registry.rb +63 -0
  102. data/lib/riveter/attribute_default_values.rb +67 -0
  103. data/lib/riveter/attributes.rb +443 -0
  104. data/lib/riveter/booleaness_validator.rb +20 -0
  105. data/lib/riveter/command.rb +59 -0
  106. data/lib/riveter/command_controller.rb +93 -0
  107. data/lib/riveter/command_routes.rb +73 -0
  108. data/lib/riveter/core_extensions.rb +246 -0
  109. data/lib/riveter/email_validator.rb +20 -0
  110. data/lib/riveter/enquiry.rb +137 -0
  111. data/lib/riveter/enquiry_controller.rb +80 -0
  112. data/lib/riveter/enquiry_routes.rb +69 -0
  113. data/lib/riveter/enumerated.rb +107 -0
  114. data/lib/riveter/errors.rb +11 -0
  115. data/lib/riveter/form_builder_extensions.rb +21 -0
  116. data/lib/riveter/hash_with_dependency.rb +12 -0
  117. data/lib/riveter/presenter.rb +73 -0
  118. data/lib/riveter/query.rb +45 -0
  119. data/lib/riveter/query_filter.rb +22 -0
  120. data/lib/riveter/rails/engine.rb +6 -0
  121. data/lib/riveter/rails/railtie.rb +50 -0
  122. data/lib/riveter/service.rb +45 -0
  123. data/lib/riveter/spec_helper.rb +55 -0
  124. data/lib/riveter/tasks/.keep +0 -0
  125. data/lib/riveter/version.rb +3 -0
  126. data/lib/riveter/worker.rb +20 -0
  127. data/lib/riveter.rb +47 -0
  128. data/riveter.gemspec +40 -0
  129. data/spec/examples/attribute_examples.rb +57 -0
  130. data/spec/generators/haml/command_controller/command_controller_generator_spec.rb +34 -0
  131. data/spec/generators/haml/enquiry_controller/enquiry_controller_generator_spec.rb +34 -0
  132. data/spec/generators/riveter/command/command_generator_spec.rb +58 -0
  133. data/spec/generators/riveter/command_controller/command_controller_generator_spec.rb +0 -0
  134. data/spec/generators/riveter/enquiry/enquiry_generator_spec.rb +0 -0
  135. data/spec/generators/riveter/query_filter/query_filter_generator_spec.rb +58 -0
  136. data/spec/riveter/associated_type_registry_spec.rb +158 -0
  137. data/spec/riveter/attribute_default_value_spec.rb +69 -0
  138. data/spec/riveter/attributes_spec.rb +228 -0
  139. data/spec/riveter/command_controller_spec.rb +116 -0
  140. data/spec/riveter/command_routes_spec.rb +116 -0
  141. data/spec/riveter/command_spec.rb +66 -0
  142. data/spec/riveter/core_extensions_spec.rb +209 -0
  143. data/spec/riveter/enquiry_controller_spec.rb +128 -0
  144. data/spec/riveter/enquiry_routes_spec.rb +101 -0
  145. data/spec/riveter/enquiry_spec.rb +299 -0
  146. data/spec/riveter/enumerated_spec.rb +47 -0
  147. data/spec/riveter/form_builder_extensions_spec.rb +28 -0
  148. data/spec/riveter/presenter_spec.rb +131 -0
  149. data/spec/riveter/query_filter_spec.rb +19 -0
  150. data/spec/riveter/query_spec.rb +72 -0
  151. data/spec/riveter/service_spec.rb +49 -0
  152. data/spec/riveter/spec_helper_spec.rb +21 -0
  153. data/spec/riveter/worker_spec.rb +11 -0
  154. data/spec/spec_helper.rb +54 -0
  155. data/spec/support/test_associated_class.rb +2 -0
  156. data/spec/support/test_class_with_attributes.rb +17 -0
  157. data/spec/support/test_command.rb +4 -0
  158. data/spec/support/test_command_controller.rb +12 -0
  159. data/spec/support/test_command_routes.rb +3 -0
  160. data/spec/support/test_enquiry.rb +7 -0
  161. data/spec/support/test_enquiry_controller.rb +12 -0
  162. data/spec/support/test_enquiry_routes.rb +3 -0
  163. data/spec/support/test_enum.rb +8 -0
  164. data/spec/support/test_form_builder.rb +3 -0
  165. data/spec/support/test_model.rb +2 -0
  166. data/spec/support/test_model_with_attribute_default_values.rb +29 -0
  167. data/spec/support/test_presenter.rb +2 -0
  168. data/spec/support/test_query.rb +5 -0
  169. data/spec/support/test_query_filter.rb +4 -0
  170. data/spec/support/test_service.rb +7 -0
  171. data/spec/support/validate_booleaness_of_matcher.rb +17 -0
  172. data/spec/support/validate_timeliness_of_matcher.rb +17 -0
  173. data/spec/support/validator_detector.rb +48 -0
  174. metadata +487 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9b51c150059867905f381fcd4a303bcae0464683
4
+ data.tar.gz: e2aa27934831b4e6066b63e6c7edc7577beed1cb
5
+ SHA512:
6
+ metadata.gz: 72454455538bb878d56831daf6ec8281e749e0f2118852f4107d2191d2bc656412e8f38e031722a9a9b1be7f8d6df14d77d8250e749c3571104dacfd23908269
7
+ data.tar.gz: 952dc079df4c947453484ab371d8fe1920368d111e23d7c66c0912a3383d05ea8ebae7375b1ef36902cfc01c6c2ce0ec6ed71285947c5ce0d9d797a49c73ee73
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ _yardoc
7
+ coverage
8
+ doc/
9
+ lib/bundler/man
10
+ pkg
11
+ rdoc
12
+ spec/reports
13
+ test/tmp
14
+ test/version_tmp
15
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ riveter
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.1.0
data/.travis.yml ADDED
@@ -0,0 +1,17 @@
1
+ language: ruby
2
+ cache: bundler
3
+
4
+ rvm:
5
+ - 2.0.0
6
+ - 2.1.0
7
+ - 2.1.1
8
+ - 2.1.2
9
+
10
+ script: 'bundle exec rake spec'
11
+
12
+ notifications:
13
+ email:
14
+ recipients:
15
+ - virtualstaticvoid@gmail.com
16
+ on_failure: change
17
+ on_success: never
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in riveter.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,147 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ riveter (0.0.1)
5
+ actionpack
6
+ activemodel
7
+ activerecord
8
+ activesupport
9
+ railties (~> 4.0.0)
10
+ validates_timeliness
11
+
12
+ GEM
13
+ remote: https://rubygems.org/
14
+ specs:
15
+ actionmailer (4.0.5)
16
+ actionpack (= 4.0.5)
17
+ mail (~> 2.5.4)
18
+ actionpack (4.0.5)
19
+ activesupport (= 4.0.5)
20
+ builder (~> 3.1.0)
21
+ erubis (~> 2.7.0)
22
+ rack (~> 1.5.2)
23
+ rack-test (~> 0.6.2)
24
+ activemodel (4.0.5)
25
+ activesupport (= 4.0.5)
26
+ builder (~> 3.1.0)
27
+ activerecord (4.0.5)
28
+ activemodel (= 4.0.5)
29
+ activerecord-deprecated_finders (~> 1.0.2)
30
+ activesupport (= 4.0.5)
31
+ arel (~> 4.0.0)
32
+ activerecord-deprecated_finders (1.0.3)
33
+ activesupport (4.0.5)
34
+ i18n (~> 0.6, >= 0.6.9)
35
+ minitest (~> 4.2)
36
+ multi_json (~> 1.3)
37
+ thread_safe (~> 0.1)
38
+ tzinfo (~> 0.3.37)
39
+ ammeter (1.0.0)
40
+ activesupport (>= 3.0)
41
+ railties (>= 3.0)
42
+ rspec-rails (>= 2.2)
43
+ arel (4.0.2)
44
+ builder (3.1.4)
45
+ byebug (2.7.0)
46
+ columnize (~> 0.3)
47
+ debugger-linecache (~> 1.2)
48
+ coderay (1.1.0)
49
+ columnize (0.8.9)
50
+ debugger-linecache (1.2.0)
51
+ diff-lcs (1.2.5)
52
+ erubis (2.7.0)
53
+ haml (4.0.5)
54
+ tilt
55
+ haml-rails (0.5.3)
56
+ actionpack (>= 4.0.1)
57
+ activesupport (>= 4.0.1)
58
+ haml (>= 3.1, < 5.0)
59
+ railties (>= 4.0.1)
60
+ hike (1.2.3)
61
+ i18n (0.6.9)
62
+ mail (2.5.4)
63
+ mime-types (~> 1.16)
64
+ treetop (~> 1.4.8)
65
+ method_source (0.8.2)
66
+ mime-types (1.25.1)
67
+ minitest (4.7.5)
68
+ multi_json (1.10.0)
69
+ polyglot (0.3.4)
70
+ pry (0.9.12.6)
71
+ coderay (~> 1.0)
72
+ method_source (~> 0.8)
73
+ slop (~> 3.4)
74
+ pry-byebug (1.3.2)
75
+ byebug (~> 2.7)
76
+ pry (~> 0.9.12)
77
+ rack (1.5.2)
78
+ rack-test (0.6.2)
79
+ rack (>= 1.0)
80
+ rails (4.0.5)
81
+ actionmailer (= 4.0.5)
82
+ actionpack (= 4.0.5)
83
+ activerecord (= 4.0.5)
84
+ activesupport (= 4.0.5)
85
+ bundler (>= 1.3.0, < 2.0)
86
+ railties (= 4.0.5)
87
+ sprockets-rails (~> 2.0.0)
88
+ railties (4.0.5)
89
+ actionpack (= 4.0.5)
90
+ activesupport (= 4.0.5)
91
+ rake (>= 0.8.7)
92
+ thor (>= 0.18.1, < 2.0)
93
+ rake (10.3.1)
94
+ rspec-core (2.14.8)
95
+ rspec-expectations (2.14.5)
96
+ diff-lcs (>= 1.1.3, < 2.0)
97
+ rspec-mocks (2.14.6)
98
+ rspec-rails (2.14.2)
99
+ actionpack (>= 3.0)
100
+ activemodel (>= 3.0)
101
+ activesupport (>= 3.0)
102
+ railties (>= 3.0)
103
+ rspec-core (~> 2.14.0)
104
+ rspec-expectations (~> 2.14.0)
105
+ rspec-mocks (~> 2.14.0)
106
+ shoulda-matchers (2.6.1)
107
+ activesupport (>= 3.0.0)
108
+ simplecov (0.7.1)
109
+ multi_json (~> 1.0)
110
+ simplecov-html (~> 0.7.1)
111
+ simplecov-html (0.7.1)
112
+ slop (3.5.0)
113
+ sprockets (2.11.0)
114
+ hike (~> 1.2)
115
+ multi_json (~> 1.0)
116
+ rack (~> 1.0)
117
+ tilt (~> 1.1, != 1.3.0)
118
+ sprockets-rails (2.0.1)
119
+ actionpack (>= 3.0)
120
+ activesupport (>= 3.0)
121
+ sprockets (~> 2.8)
122
+ thor (0.19.1)
123
+ thread_safe (0.3.3)
124
+ tilt (1.4.1)
125
+ timeliness (0.3.7)
126
+ treetop (1.4.15)
127
+ polyglot
128
+ polyglot (>= 0.3.1)
129
+ tzinfo (0.3.39)
130
+ validates_timeliness (3.0.14)
131
+ timeliness (~> 0.3.6)
132
+
133
+ PLATFORMS
134
+ ruby
135
+
136
+ DEPENDENCIES
137
+ ammeter
138
+ bundler (~> 1.5)
139
+ haml-rails
140
+ pry
141
+ pry-byebug
142
+ rails (~> 4.0.5)
143
+ rake
144
+ riveter!
145
+ rspec-rails
146
+ shoulda-matchers (~> 2.6.1)
147
+ simplecov (~> 0.7.1)
data/LICENSE.txt ADDED
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2014 Chris Stefano
2
+ virtualstaticvoid@gmail.com
3
+
4
+ MIT License
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ "Software"), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,77 @@
1
+ # Riveter [![Build Status](https://secure.travis-ci.org/virtualstaticvoid/riveter.png?branch=master)](http://travis-ci.org/virtualstaticvoid/riveter) [![Code Climate](https://codeclimate.com/github/virtualstaticvoid/riveter.png)](https://codeclimate.com/github/virtualstaticvoid/riveter)
2
+
3
+ Provides several useful patterns, packaged in a gem, for use in Rails.
4
+ Includes generators to help you improve consistency in your applications.
5
+
6
+ * Enumerated
7
+ * Query
8
+ * QueryFilter
9
+ * Enquiry
10
+ * EnquiryController
11
+ * Command
12
+ * CommandController
13
+ * Service
14
+ * Presenter
15
+ * Worker
16
+
17
+ ## Installation
18
+
19
+ Add this line to your application's Gemfile:
20
+
21
+ gem 'riveter'
22
+
23
+ And then execute:
24
+
25
+ $ bundle install
26
+
27
+ Or install it yourself as:
28
+
29
+ $ gem install riveter
30
+
31
+ ## Usage
32
+
33
+ Riverter provides generators for creating boilerplate code necessary for each pattern.
34
+
35
+ To get the list of available generators, execute:
36
+
37
+ $ rails generate
38
+
39
+ The generator names are prefixed with `riveter`.
40
+
41
+ E.g.
42
+
43
+ To generate an enquiry controller, query filter, query, views and associated specs, execute:
44
+
45
+ $ rails generate riveter:enquiry SomeEnquiryName filter1:string filter2:integer:required
46
+
47
+ This will create a query with `filter1` string attribute and `filter2` integer attribute, a query, a controller and views:
48
+
49
+ invoke enquiry_controller
50
+ create app/controllers/my_enquiry_name_enquiry_controller.rb
51
+ route enquiry :my_enquiry_name
52
+ invoke haml
53
+ create app/views/my_enquiry_name_enquiry/index.html.haml
54
+ invoke rspec
55
+ create spec/controllers/my_enquiry_name_enquiry_controller_spec.rb
56
+ invoke query
57
+ create app/queries/my_enquiry_name_query.rb
58
+ invoke rspec
59
+ create spec/queries/my_enquiry_name_query_spec.rb
60
+ invoke query_filter
61
+ create app/query_filters/my_enquiry_name_query_filter.rb
62
+ invoke rspec
63
+ create spec/query_filters/my_enquiry_name_query_filter_spec.rb
64
+ create app/enquiries/my_enquiry_name_enquiry.rb
65
+ invoke rspec
66
+ create spec/enquiries/my_enquiry_name_enquiry_spec.rb
67
+
68
+ ## Contributing
69
+
70
+ 1. Fork it ( http://github.com/virtualstaticvoid/riveter/fork )
71
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
72
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
73
+ 4. Push to the branch (`git push origin my-new-feature`)
74
+ 5. Create new Pull Request
75
+
76
+ ## License
77
+ Released under the MIT License. See the [LICENSE](LICENSE.txt) file for further details.
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new('spec')
5
+
6
+ # If you want to make this the default task
7
+ task :default => :spec
@@ -0,0 +1,15 @@
1
+ module Riveter
2
+ module CommandFormHelper
3
+ def command_form_for(command, options={}, &block)
4
+ command_class_name = command.class.name.underscore
5
+ options = {
6
+ :as => command_class_name.gsub(/_command$/, ''),
7
+ :url => command_class_name.gsub(/_command$/, '')
8
+ }.merge(options)
9
+
10
+ respond_to?(:simple_form_for) ?
11
+ simple_form_for(command, options, &block) :
12
+ form_for(command, options, &block)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ module Riveter
2
+ module EnquiryFormHelper
3
+ def enquiry_form_for(enquiry, options={}, &block)
4
+ enquiry_class_name = enquiry.class.name.underscore
5
+ options = {
6
+ :as => enquiry_class_name.gsub(/_enquiry$/, ''),
7
+ :url => enquiry_class_name.gsub(/_enquiry$/, ''),
8
+ :method => :get
9
+ }.merge(options)
10
+
11
+ respond_to?(:simple_form_for) ?
12
+ simple_form_for(enquiry.query_filter, options, &block) :
13
+ form_for(enquiry.query_filter, options, &block)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Riveter
2
+ module QueryFilterFormHelper
3
+ def query_filter_form_for(query_filter, options={}, &block)
4
+ query_filter_class_name = query_filter.class.name.underscore
5
+ options = {
6
+ :as => query_filter_class_name.gsub(/_query_filter$/, ''),
7
+ :url => query_filter_class_name,
8
+ :method => :get
9
+ }.merge(options)
10
+
11
+ respond_to?(:simple_form_for) ?
12
+ simple_form_for(query_filter, options, &block) :
13
+ form_for(query_filter, options, &block)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,25 @@
1
+ # Files in the config/locales directory are used for internationalization
2
+ # and are automatically loaded by Rails. If you want to use locales other
3
+ # than English, add the necessary files in this directory.
4
+ #
5
+ # To use the locales, use `I18n.t`:
6
+ #
7
+ # I18n.t 'hello'
8
+ #
9
+ # In views, this is aliased to just `t`:
10
+ #
11
+ # <%= t('hello') %>
12
+ #
13
+ # To use a different locale, set it with `I18n.locale`:
14
+ #
15
+ # I18n.locale = :es
16
+ #
17
+ # This would use the information in config/locales/es.yml.
18
+ #
19
+ # To learn more, please read the Rails Internationalization guide
20
+ # available at http://guides.rubyonrails.org/i18n.html.
21
+
22
+ en:
23
+ forms:
24
+ search: Search
25
+ reset: Reset
@@ -0,0 +1,26 @@
1
+ # Files in the config/locales directory are used for internationalization
2
+ # and are automatically loaded by Rails. If you want to use locales other
3
+ # than English, add the necessary files in this directory.
4
+ #
5
+ # To use the locales, use `I18n.t`:
6
+ #
7
+ # I18n.t 'hello'
8
+ #
9
+ # In views, this is aliased to just `t`:
10
+ #
11
+ # <%= t('hello') %>
12
+ #
13
+ # To use a different locale, set it with `I18n.locale`:
14
+ #
15
+ # I18n.locale = :es
16
+ #
17
+ # This would use the information in config/locales/es.yml.
18
+ #
19
+ # To learn more, please read the Rails Internationalization guide
20
+ # available at http://guides.rubyonrails.org/i18n.html.
21
+
22
+ en:
23
+ errors:
24
+ messages:
25
+ booleaness: is not valid
26
+ email: is not valid
data/init.rb ADDED
@@ -0,0 +1,25 @@
1
+ # Copyright (c) 2014 Chris Stefano
2
+ # virtualstaticvoid@gmail.com
3
+ #
4
+ # MIT License
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining
7
+ # a copy of this software and associated documentation files (the
8
+ # "Software"), to deal in the Software without restriction, including
9
+ # without limitation the rights to use, copy, modify, merge, publish,
10
+ # distribute, sublicense, and/or sell copies of the Software, and to
11
+ # permit persons to whom the Software is furnished to do so, subject to
12
+ # the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be
15
+ # included in all copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
+
25
+ require 'riveter'
@@ -0,0 +1 @@
1
+ Create generators and templates for ERB implementation
File without changes
@@ -0,0 +1,56 @@
1
+ module Haml
2
+ module Generators
3
+ class CommandControllerGenerator < ::Rails::Generators::NamedBase
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ check_class_collision :suffix => 'Command'
7
+
8
+ argument :new_action,
9
+ :type => :string,
10
+ :default => 'new',
11
+ :banner => 'new_action'
12
+
13
+ argument :command_attributes,
14
+ :type => :array,
15
+ :default => [],
16
+ :banner => "[name[:type[:required]] name[:type[:required]]]"
17
+
18
+ def initialize(args, *options)
19
+ super
20
+ parse_command_attributes!
21
+ end
22
+
23
+ def create_template_file
24
+ template 'new.html.haml', File.join('app/views', class_path, "#{file_name}_command", "#{new_action}.html.haml")
25
+ end
26
+
27
+ protected
28
+
29
+ def parse_command_attributes!
30
+ self.command_attributes = (command_attributes || []).map do |attribute|
31
+ # expected in the form "name", "name:type" or "name:type:required"
32
+ parts = attribute.split(':')
33
+ name = parts.first.underscore
34
+ type = ((parts.length > 1) ? parts[1] : 'string')
35
+
36
+ additional_options = case type.to_sym
37
+ when :integer, :decimal, :boolean, :date, :time, :datetime
38
+ ", :as => :#{type}"
39
+ when :enum
40
+ ", :collection => #{name.titleize}.collection"
41
+ when :model
42
+ ", :collection => #{name.titleize}.all"
43
+ else
44
+ ''
45
+ end
46
+
47
+ OpenStruct.new(
48
+ :name => name,
49
+ :type => type,
50
+ :inject_options => additional_options
51
+ )
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,26 @@
1
+ %h1 <%= class_name %>Command
2
+ %p Find me in '<%= args.first %>'.
3
+
4
+ = command_form_for(@command, :html => {:class => 'form-vertical'}) do |f|
5
+ <% if defined?(SimpleForm) -%>
6
+ = f.error_notification
7
+ <% else -%>
8
+ - if @command.errors.any?
9
+ #error_explanation
10
+ %h2= "#{pluralize(@command.errors.count, "error")} prohibited performing this action:"
11
+ %ul
12
+ - @command.errors.full_messages.each do |msg|
13
+ %li= msg
14
+ <%end -%>
15
+
16
+ .form-inputs
17
+ <% if command_attributes.any? -%>
18
+ <% command_attributes.each do |attribute| -%>
19
+ = f.input :<%= attribute.name %><%= attribute.inject_options %>
20
+ <% end -%>
21
+ <% else -%>
22
+ -# TODO: provide inputs for each attribute
23
+ <% end -%>
24
+
25
+ .form-actions
26
+ = f.submit
File without changes
@@ -0,0 +1,56 @@
1
+ module Haml
2
+ module Generators
3
+ class EnquiryControllerGenerator < ::Rails::Generators::NamedBase
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ check_class_collision :suffix => 'Enquiry'
7
+
8
+ argument :action_name,
9
+ :type => :string,
10
+ :default => 'index',
11
+ :banner => 'action_name'
12
+
13
+ argument :filter_attributes,
14
+ :type => :array,
15
+ :default => [],
16
+ :banner => "[attribute[:type[:required]] attribute[:type[:required]]]"
17
+
18
+ def initialize(args, *options)
19
+ super
20
+ parse_filter_attributes!
21
+ end
22
+
23
+ def create_template_file
24
+ template 'index.html.haml', File.join('app/views', class_path, "#{file_name}_enquiry", "#{action_name}.html.haml")
25
+ end
26
+
27
+ protected
28
+
29
+ def parse_filter_attributes!
30
+ self.filter_attributes = (filter_attributes || []).map do |attribute|
31
+ # expected in the form "name", "name:type" or "name:type:required"
32
+ parts = attribute.split(':')
33
+ name = parts.first.underscore
34
+ type = ((parts.length > 1) ? parts[1] : 'string')
35
+
36
+ additional_options = case type.to_sym
37
+ when :integer, :decimal, :boolean, :date, :time, :datetime
38
+ ", :as => :#{type}"
39
+ when :enum
40
+ ", :collection => #{name.titleize}.collection"
41
+ when :model
42
+ ", :collection => #{name.titleize}.all"
43
+ else
44
+ ''
45
+ end
46
+
47
+ OpenStruct.new(
48
+ :name => name,
49
+ :type => type,
50
+ :inject_options => additional_options
51
+ )
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,57 @@
1
+ %h1 <%= class_name %>Enquiry
2
+ %p Find me in '<%= args.first %>'.
3
+
4
+ .filter
5
+
6
+ %h2 Search
7
+
8
+ = enquiry_form_for(@enquiry, :html => {:class => 'form-horizontal'}) do |f|
9
+ <% if defined?(SimpleForm) -%>
10
+ = f.error_notification
11
+ <% else -%>
12
+ - if f.object.errors.any?
13
+ #error_explanation
14
+ %h2= "#{pluralize(f.object.errors.count, "error")} prohibited performing this enquiry:"
15
+ %ul
16
+ - f.object.errors.full_messages.each do |msg|
17
+ %li= msg
18
+ <%end -%>
19
+
20
+ .form-inputs
21
+ <% if filter_attributes.any? -%>
22
+ <% filter_attributes.each do |attribute| -%>
23
+ = f.input :<%= attribute.name %><%= attribute.inject_options %>
24
+ <% end -%>
25
+ <% else -%>
26
+ -# TODO: provide inputs for each attribute
27
+ <% end -%>
28
+
29
+ .form-actions
30
+ = f.submit
31
+ = f.reset
32
+
33
+ .results
34
+
35
+ %h2 Listing <%= class_name.underscore.humanize.pluralize %>
36
+
37
+ %table.table.table-bordered
38
+ %tr
39
+ %th Col1
40
+ %th Col2
41
+
42
+ - unless @enquiry.has_data?
43
+ %tr
44
+ %td(colspan="2")
45
+ .no-data-message Invalid criteria or no items found...
46
+ - else
47
+ - @enquiry.find_each do |result|
48
+ %tr
49
+ %td= result.col1
50
+ %td= result.col2
51
+
52
+ - if @enquiry.has_data?
53
+ <% if defined?(Kaminari) -%>
54
+ = paginate @enquiry.query.relation
55
+ <% else -%>
56
+ -# TODO: provide pagination outputs against `@enquiry.query.relation`
57
+ <% end -%>
File without changes