object_services 0.0.1

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.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +5 -0
  4. data/Rakefile +34 -0
  5. data/lib/generators/object_services/USAGE +9 -0
  6. data/lib/generators/object_services/service_generator.rb +20 -0
  7. data/lib/object_services.rb +5 -0
  8. data/lib/object_services/base.rb +72 -0
  9. data/lib/object_services/version.rb +3 -0
  10. data/lib/tasks/object_services_tasks.rake +4 -0
  11. data/test/dummy/README.rdoc +28 -0
  12. data/test/dummy/Rakefile +6 -0
  13. data/test/dummy/app/assets/javascripts/application.js +13 -0
  14. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  15. data/test/dummy/app/controllers/application_controller.rb +5 -0
  16. data/test/dummy/app/helpers/application_helper.rb +2 -0
  17. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  18. data/test/dummy/bin/bundle +3 -0
  19. data/test/dummy/bin/rails +4 -0
  20. data/test/dummy/bin/rake +4 -0
  21. data/test/dummy/bin/setup +29 -0
  22. data/test/dummy/config.ru +4 -0
  23. data/test/dummy/config/application.rb +26 -0
  24. data/test/dummy/config/boot.rb +5 -0
  25. data/test/dummy/config/database.yml +25 -0
  26. data/test/dummy/config/environment.rb +5 -0
  27. data/test/dummy/config/environments/development.rb +41 -0
  28. data/test/dummy/config/environments/production.rb +79 -0
  29. data/test/dummy/config/environments/test.rb +42 -0
  30. data/test/dummy/config/initializers/assets.rb +11 -0
  31. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  32. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  33. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  34. data/test/dummy/config/initializers/inflections.rb +16 -0
  35. data/test/dummy/config/initializers/mime_types.rb +4 -0
  36. data/test/dummy/config/initializers/session_store.rb +3 -0
  37. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  38. data/test/dummy/config/locales/en.yml +23 -0
  39. data/test/dummy/config/routes.rb +56 -0
  40. data/test/dummy/config/secrets.yml +22 -0
  41. data/test/dummy/db/development.sqlite3 +0 -0
  42. data/test/dummy/db/schema.rb +16 -0
  43. data/test/dummy/db/test.sqlite3 +0 -0
  44. data/test/dummy/log/development.log +4 -0
  45. data/test/dummy/log/test.log +1863 -0
  46. data/test/dummy/public/404.html +67 -0
  47. data/test/dummy/public/422.html +67 -0
  48. data/test/dummy/public/500.html +66 -0
  49. data/test/dummy/public/favicon.ico +0 -0
  50. data/test/lib/generators/service_generator_test.rb +34 -0
  51. data/test/lib/object_services/base_test.rb +100 -0
  52. data/test/object_services_test.rb +7 -0
  53. data/test/test_helper.rb +26 -0
  54. metadata +195 -0
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/404.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The page you were looking for doesn't exist.</h1>
62
+ <p>You may have mistyped the address or the page may have moved.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+
3
+ class ServiceGeneratorTest < Rails::Generators::TestCase
4
+ tests ServiceGenerator
5
+ destination Rails.root.join('tmp/generators')
6
+ setup :prepare_destination
7
+ teardown :prepare_destination
8
+
9
+ test 'doesnt blow up' do
10
+ assert_nothing_raised do
11
+ run_generator ['hella']
12
+ end
13
+ end
14
+
15
+ test 'generates a class and test stub correctly' do
16
+ run_generator ['hella']
17
+
18
+ assert_file 'app/services/hella_service.rb' do |service|
19
+ assert service.include? 'HellaService < ObjectServices::Base'
20
+ end
21
+
22
+ assert_file 'test/services/hella_service_test.rb' do |test|
23
+ assert test.include? 'describe HellaService'
24
+ end
25
+ end
26
+
27
+ test 'generates a module::class correctly' do
28
+ run_generator ['super/big_time/hella']
29
+ assert_file 'app/services/super/big_time/hella_service.rb' do |service|
30
+ assert service.include? 'Super::BigTime::HellaService < ObjectServices::Base'
31
+ end
32
+ end
33
+
34
+ end
@@ -0,0 +1,100 @@
1
+ require 'test_helper'
2
+
3
+ class ObjectServicesTest < ActiveSupport::TestCase
4
+
5
+ describe '#initialize' do
6
+
7
+ describe 'when passing in an object' do
8
+ it 'should initialize a service object' do
9
+ object = {}
10
+ service = ObjectServices::Base.new(object)
11
+ assert service.kind_of? ObjectServices::Base
12
+ service.model.must_be_kind_of Object
13
+ service.errors.must_be_empty
14
+ end
15
+
16
+ it 'should initialize with nil passed in' do
17
+ service = ObjectServices::Base.new(nil)
18
+ assert service.kind_of? ObjectServices::Base
19
+ service.model.must_be_nil
20
+ service.errors.must_be_empty
21
+ end
22
+ end
23
+
24
+ end
25
+
26
+ describe '#create' do
27
+ it 'should create the model if an instance and params are present' do
28
+ mock = MiniTest::Mock.new
29
+ mock.expect(:update, true, [{test: true}])
30
+ mock.expect(:present?, true, [])
31
+
32
+ service = ObjectServices::Base.new(mock)
33
+ service.create({test: true})
34
+
35
+ assert mock.verify
36
+ end
37
+ end
38
+
39
+ describe '#destroy' do
40
+
41
+ it 'should destroy the model if the model is present' do
42
+ mock = MiniTest::Mock.new
43
+ mock.expect(:present?, true, [])
44
+ mock.expect(:destroy, true, [])
45
+
46
+ service = ObjectServices::Base.new(mock)
47
+ service.destroy
48
+
49
+ assert mock.verify
50
+ end
51
+
52
+ it 'should return errors if there is no model present' do
53
+ service = ObjectServices::Base.new(nil)
54
+ refute service.destroy
55
+ end
56
+
57
+ end
58
+
59
+ describe '#update' do
60
+
61
+ before do
62
+ class ErrorClass
63
+ def full_messages
64
+ return ['test error message']
65
+ end
66
+ end
67
+ @mock = MiniTest::Mock.new
68
+ end
69
+
70
+ it 'should update the model if the model and params are present' do
71
+ @mock.expect(:update, true, [{ test: false }])
72
+ @mock.expect(:present?, true, [])
73
+ service = ObjectServices::Base.new(@mock)
74
+ service.update({ test: false })
75
+ assert @mock.verify
76
+ end
77
+
78
+ it 'generates errors if an update fails' do
79
+ @mock.expect(:update, false, [{ test: false }])
80
+ @mock.expect(:present?, true, [])
81
+ @mock.expect(:errors, ErrorClass.new, [])
82
+ service = ObjectServices::Base.new(@mock)
83
+ service.update({ test: false })
84
+
85
+ service.errors.must_include 'test error message'
86
+
87
+ assert @mock.verify
88
+ end
89
+
90
+ it 'generates errors if a model is undefined' do
91
+ @mock.expect(:present?, false, [])
92
+ service = ObjectServices::Base.new(@mock)
93
+ service.update({ test: false })
94
+ service.errors.count.must_equal 1
95
+ service.errors.must_include 'Object not found.'
96
+ end
97
+
98
+ end
99
+
100
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ describe ObjectServices do
4
+ it 'is cool' do
5
+ assert_kind_of Module, ObjectServices
6
+ end
7
+ end
@@ -0,0 +1,26 @@
1
+ # Configure Rails Environment
2
+ ENV['RAILS_ENV'] = 'test'
3
+
4
+ require 'simplecov'
5
+ SimpleCov.start do
6
+ add_group 'Generators', 'lib/generators'
7
+ add_filter 'test/dummy'
8
+ end
9
+
10
+ require File.expand_path('../../test/dummy/config/environment.rb', __FILE__)
11
+ ActiveRecord::Migrator.migrations_paths = [File.expand_path('../../test/dummy/db/migrate', __FILE__)]
12
+ require 'rails/test_help'
13
+ require 'minitest/autorun'
14
+ require 'generators/object_services/service_generator'
15
+
16
+ # Filter out Minitest backtrace while allowing backtrace from other libraries
17
+ # to be shown.
18
+ Minitest.backtrace_filter = Minitest::BacktraceFilter.new
19
+
20
+ # Load support files
21
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
22
+
23
+ # Load fixtures from the engine
24
+ if ActiveSupport::TestCase.respond_to?(:fixture_path=)
25
+ ActiveSupport::TestCase.fixture_path = File.expand_path('../fixtures', __FILE__)
26
+ end
metadata ADDED
@@ -0,0 +1,195 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: object_services
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Tyler Davis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '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: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: A workspace for developing service objects.
70
+ email:
71
+ - tyler@tmd.io
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - MIT-LICENSE
77
+ - README.rdoc
78
+ - Rakefile
79
+ - lib/generators/object_services/USAGE
80
+ - lib/generators/object_services/service_generator.rb
81
+ - lib/object_services.rb
82
+ - lib/object_services/base.rb
83
+ - lib/object_services/version.rb
84
+ - lib/tasks/object_services_tasks.rake
85
+ - test/dummy/README.rdoc
86
+ - test/dummy/Rakefile
87
+ - test/dummy/app/assets/javascripts/application.js
88
+ - test/dummy/app/assets/stylesheets/application.css
89
+ - test/dummy/app/controllers/application_controller.rb
90
+ - test/dummy/app/helpers/application_helper.rb
91
+ - test/dummy/app/views/layouts/application.html.erb
92
+ - test/dummy/bin/bundle
93
+ - test/dummy/bin/rails
94
+ - test/dummy/bin/rake
95
+ - test/dummy/bin/setup
96
+ - test/dummy/config.ru
97
+ - test/dummy/config/application.rb
98
+ - test/dummy/config/boot.rb
99
+ - test/dummy/config/database.yml
100
+ - test/dummy/config/environment.rb
101
+ - test/dummy/config/environments/development.rb
102
+ - test/dummy/config/environments/production.rb
103
+ - test/dummy/config/environments/test.rb
104
+ - test/dummy/config/initializers/assets.rb
105
+ - test/dummy/config/initializers/backtrace_silencers.rb
106
+ - test/dummy/config/initializers/cookies_serializer.rb
107
+ - test/dummy/config/initializers/filter_parameter_logging.rb
108
+ - test/dummy/config/initializers/inflections.rb
109
+ - test/dummy/config/initializers/mime_types.rb
110
+ - test/dummy/config/initializers/session_store.rb
111
+ - test/dummy/config/initializers/wrap_parameters.rb
112
+ - test/dummy/config/locales/en.yml
113
+ - test/dummy/config/routes.rb
114
+ - test/dummy/config/secrets.yml
115
+ - test/dummy/db/development.sqlite3
116
+ - test/dummy/db/schema.rb
117
+ - test/dummy/db/test.sqlite3
118
+ - test/dummy/log/development.log
119
+ - test/dummy/log/test.log
120
+ - test/dummy/public/404.html
121
+ - test/dummy/public/422.html
122
+ - test/dummy/public/500.html
123
+ - test/dummy/public/favicon.ico
124
+ - test/lib/generators/service_generator_test.rb
125
+ - test/lib/object_services/base_test.rb
126
+ - test/object_services_test.rb
127
+ - test/test_helper.rb
128
+ homepage: http://www.tmd.io
129
+ licenses:
130
+ - MIT
131
+ metadata: {}
132
+ post_install_message:
133
+ rdoc_options: []
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ requirements: []
147
+ rubyforge_project:
148
+ rubygems_version: 2.2.2
149
+ signing_key:
150
+ specification_version: 4
151
+ summary: Services for rails.
152
+ test_files:
153
+ - test/dummy/app/assets/javascripts/application.js
154
+ - test/dummy/app/assets/stylesheets/application.css
155
+ - test/dummy/app/controllers/application_controller.rb
156
+ - test/dummy/app/helpers/application_helper.rb
157
+ - test/dummy/app/views/layouts/application.html.erb
158
+ - test/dummy/bin/bundle
159
+ - test/dummy/bin/rails
160
+ - test/dummy/bin/rake
161
+ - test/dummy/bin/setup
162
+ - test/dummy/config/application.rb
163
+ - test/dummy/config/boot.rb
164
+ - test/dummy/config/database.yml
165
+ - test/dummy/config/environment.rb
166
+ - test/dummy/config/environments/development.rb
167
+ - test/dummy/config/environments/production.rb
168
+ - test/dummy/config/environments/test.rb
169
+ - test/dummy/config/initializers/assets.rb
170
+ - test/dummy/config/initializers/backtrace_silencers.rb
171
+ - test/dummy/config/initializers/cookies_serializer.rb
172
+ - test/dummy/config/initializers/filter_parameter_logging.rb
173
+ - test/dummy/config/initializers/inflections.rb
174
+ - test/dummy/config/initializers/mime_types.rb
175
+ - test/dummy/config/initializers/session_store.rb
176
+ - test/dummy/config/initializers/wrap_parameters.rb
177
+ - test/dummy/config/locales/en.yml
178
+ - test/dummy/config/routes.rb
179
+ - test/dummy/config/secrets.yml
180
+ - test/dummy/config.ru
181
+ - test/dummy/db/development.sqlite3
182
+ - test/dummy/db/schema.rb
183
+ - test/dummy/db/test.sqlite3
184
+ - test/dummy/log/development.log
185
+ - test/dummy/log/test.log
186
+ - test/dummy/public/404.html
187
+ - test/dummy/public/422.html
188
+ - test/dummy/public/500.html
189
+ - test/dummy/public/favicon.ico
190
+ - test/dummy/Rakefile
191
+ - test/dummy/README.rdoc
192
+ - test/lib/generators/service_generator_test.rb
193
+ - test/lib/object_services/base_test.rb
194
+ - test/object_services_test.rb
195
+ - test/test_helper.rb