pardner 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3673f62b248402a9a1603c49a9f322f743c93e61
4
+ data.tar.gz: e279b4447af6f22850ecb1d783dbb36970e8999c
5
+ SHA512:
6
+ metadata.gz: 6e5f6651fc734784a3a955b82d7ca0dca7a9c6a0b961e3367331ffe86d419b4e2108ac58602e6cee8f64254b1f0ae1e920cbcfd4848fec2b934867138eb68a65
7
+ data.tar.gz: 5f6b1e8b156148bbe3d730f49361680a36608d56862d8f301fa3e4ba4a1294cf305ce70e15bf059271c59d5cb443a055a85254f997c2a7d069b7b2f645cdc700
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /log/*.log
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.rubocop.yml ADDED
@@ -0,0 +1,21 @@
1
+ AllCops:
2
+ Exclude:
3
+ - 'bin/**/*'
4
+
5
+ # Allow 120 character line lengths
6
+ LineLength:
7
+ Max: 100
8
+
9
+ # Allow tabbed alignment of method args
10
+ SingleSpaceBeforeFirstArg:
11
+ Enabled: false
12
+
13
+ # Don't require top-level documenation
14
+ Documentation:
15
+ Enabled: false
16
+
17
+ Style/AndOr:
18
+ EnforcedStyle: conditionals
19
+
20
+ Metrics/MethodLength:
21
+ Max: 20
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.3
4
+ before_install: gem install bundler -v 1.10.3
@@ -0,0 +1,13 @@
1
+ # Contributor Code of Conduct
2
+
3
+ As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
4
+
5
+ We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion.
6
+
7
+ Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
8
+
9
+ Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.
10
+
11
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
12
+
13
+ This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pardner.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,9 @@
1
+ guard :rspec, cmd: 'bundle exec rspec' do
2
+ require 'guard/rspec/dsl'
3
+ dsl = Guard::RSpec::Dsl.new(self)
4
+
5
+ watch(dsl.ruby.lib_files) { dsl.rspec.spec_dir }
6
+ watch(dsl.rspec.spec_files)
7
+ watch(dsl.rspec.spec_helper) { dsl.rspec.spec_dir }
8
+ watch(dsl.rspec.spec_support) { dsl.rspec.spec_dir }
9
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Andy Hartford
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,121 @@
1
+
2
+
3
+ .~~~~`\~~\
4
+ ; ~~ \
5
+ | ;
6
+ ,--------,______|---.
7
+ / \-----` \
8
+ `.__________`-_______-' _
9
+ _ __ __ _ _ __ __| |_ __ ___ _ __
10
+ | '_ \ / _` | '__/ _` | '_ \ / _ \ '__|
11
+ | |_) | (_| | | | (_| | | | | __/ |
12
+ | .__/ \__,_|_| \__,_|_| |_|\___|_|
13
+ |_|
14
+
15
+ # pardner
16
+
17
+ A decorator library for ActiveRecord that has features to fit in nicely with the ActiveModel world
18
+
19
+ ## Use cases
20
+
21
+ 1. Presenters for views
22
+ 2. Handle form params and translate them to what the modal understands
23
+ 3. Creating or updating multiple ActiveRecord models atomically
24
+ 4. Adding optional validations
25
+ 5. And more!
26
+
27
+ ## 1. Presenters
28
+
29
+ A presenter can be used as an alternative to a view helper to add logic
30
+ to a view. In this example we add a `description` method to a decorator
31
+ for the view:
32
+
33
+ # app/models/conestoga_wagon.rb
34
+ class ConestogaWagon < ActiveRecord::Base
35
+ attr_accessor :wheels_count, :covered
36
+ end
37
+
38
+ # app/presenters/conestoga_wagon_presenter.rb
39
+ class ConestogaWagonPresenter < Pardner::Base
40
+ howdy_pardner ConestogaWagon
41
+
42
+ def description
43
+ covered_string = covered ? "covered" : "uncovered"
44
+ "a #{wheels_count} wheeled #{covered_string} wagon"
45
+ end
46
+ end
47
+
48
+ # app/view/conestoga_wagons/show.html.haml
49
+ ...
50
+ span.description= @conestoga_wagon.description
51
+ ...
52
+
53
+ ## 2. Handle form params
54
+
55
+ In this example, the `GoldRush` model has separate `city` and `state`
56
+ fields, but we want to present that to the user as a single form field.
57
+ The decorator will split the incoming `location` param into `city` and
58
+ `state` fields.
59
+
60
+ # app/models/gold_rush.rb
61
+ class GoldRush < ActiveRecord::Base
62
+ attr_accessor :city, :state
63
+ end
64
+
65
+ # app/decorators/gold_rush_form.rb
66
+ class GoldRushForm < Pardner::Base
67
+ howdy_pardner GoldRush
68
+
69
+ def location
70
+ "#{city}, #{state}"
71
+ end
72
+
73
+ def location=(val)
74
+ self.city, self.state = val.split ','
75
+ end
76
+ end
77
+
78
+ # app/controllers/gold_rushes_controller.rb
79
+ def new
80
+ @gold_rush = GoldRushForm.new GoldRush.new
81
+ end
82
+
83
+ # app/view/gold_rushes/new.html.haml
84
+ = form_for @gold_rush do |form|
85
+ form.text :location
86
+
87
+ ## Installation
88
+
89
+ Add this line to your application's Gemfile:
90
+
91
+ ```ruby
92
+ gem 'pardner'
93
+ ```
94
+
95
+ And then execute:
96
+
97
+ $ bundle
98
+
99
+ Or install it yourself as:
100
+
101
+ $ gem install pardner
102
+
103
+ ## Usage
104
+
105
+ TODO: Write usage instructions here
106
+
107
+ ## Development
108
+
109
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
110
+
111
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
112
+
113
+ ## Contributing
114
+
115
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/pardner. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
116
+
117
+
118
+ ## License
119
+
120
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
121
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "pardner"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,141 @@
1
+ require 'delegate'
2
+
3
+ module Pardner
4
+ # A base class for creating an active model that decorate an active record
5
+ # model to add behavior. Common active record persistence methods are
6
+ # available and delegated to the decorated active record instance.
7
+ #
8
+ # To use:
9
+ #
10
+ # 1. create a subclass of Pardner::Base
11
+ # 2. call .pardner_config to configure things
12
+ # 3. override methods, add validations, add callbacks etc to get custom
13
+ # behavior
14
+ #
15
+ # For example:
16
+ #
17
+ # class BookDecorator < Pardner::Base
18
+ # pardner_config Book
19
+ #
20
+ # after_save :send_email
21
+ #
22
+ # private
23
+ #
24
+ # def send_email
25
+ # BookMailer.saved_book(self).deliver_now
26
+ # end
27
+ # end
28
+ #
29
+ class Base < SimpleDelegator
30
+ extend ActiveModel::Callbacks
31
+ include ActiveModel::Model
32
+ include ActiveModel::Validations
33
+ include ActiveModel::Validations::Callbacks
34
+
35
+ class_attribute :pardner_config
36
+
37
+ define_model_callbacks \
38
+ :destroy,
39
+ :save,
40
+ :validation
41
+
42
+ # Configure the decorator by calling this. Pass in one or many classes
43
+ # that will be delegated to. Define a block which'll be passed a
44
+ # configuration object to configure more things.
45
+ def self.howdy_pardner(decorated_class)
46
+ self.pardner_config = pardner_config ? pardner_config.deep_dup : Config.new
47
+ pardner_config.decorated_class = decorated_class
48
+ nil
49
+ end
50
+
51
+ def initialize(decorated_record)
52
+ __setobj__ decorated_record
53
+ end
54
+
55
+ # Returns the decorated record
56
+ def decorated_record
57
+ __getobj__
58
+ end
59
+
60
+ # Returns the decorated record deeply, ignoring any nested decorators.
61
+ def decorated_record_deep
62
+ __getobj__.is_a?(Pardner::Base) ? __getobj__.decorated_record_deep : __getobj__
63
+ end
64
+
65
+ def self.model_name
66
+ if pardner_config.try(:decorated_class)
67
+ pardner_config.decorated_class.model_name
68
+ else
69
+ super
70
+ end
71
+ end
72
+
73
+ def [](attr)
74
+ send(attr)
75
+ end
76
+
77
+ def []=(attr, value)
78
+ send("#{attr}=", value)
79
+ end
80
+
81
+ def attributes=(attrs = {})
82
+ attrs.each do |attr, value|
83
+ public_send "#{attr}=", value
84
+ end
85
+ end
86
+
87
+ def save
88
+ valid? or return false
89
+
90
+ status = ActiveRecord::Base.transaction do
91
+ run_callbacks(:save) { super }
92
+ end
93
+
94
+ status == true
95
+ end
96
+
97
+ def save!
98
+ save or fail InvalidModel, "Validation failed: #{errors.full_messages.join(',')}"
99
+ end
100
+
101
+ def destroy
102
+ ActiveRecord::Base.transaction do
103
+ run_callbacks(:destroy) { super }
104
+ end
105
+ end
106
+
107
+ def update(attrs = {})
108
+ self.attributes = attrs
109
+ save
110
+ end
111
+ alias_method :update_attributes, :update
112
+
113
+ def update!(attrs = {})
114
+ update attrs or
115
+ fail InvalidModel, "Validation failed: #{errors.full_messages.join(',')}"
116
+ end
117
+ alias_method :update_attributes!, :update!
118
+
119
+ def valid?
120
+ run_callbacks :validation do
121
+ if super && __getobj__.valid?
122
+ true
123
+ else
124
+ __getobj__.errors.each do |attr, msg|
125
+ errors.add attr, msg
126
+ end
127
+
128
+ false
129
+ end
130
+ end
131
+ end
132
+
133
+ def persisted?
134
+ decorated_record.persisted?
135
+ end
136
+
137
+ def new_record?
138
+ !persisted?
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,5 @@
1
+ module Pardner
2
+ class Config
3
+ attr_accessor :decorated_class
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module Pardner
2
+ VERSION = "0.1.0"
3
+ end
data/lib/pardner.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'active_model'
2
+ require 'active_record'
3
+ require 'active_support/all'
4
+
5
+ require 'pardner/version'
6
+ require 'pardner/config'
7
+ require 'pardner/base'
8
+
9
+ module Pardner
10
+ class InvalidModel < StandardError; end
11
+ end
data/log/.gitkeep ADDED
File without changes
data/pardner.gemspec ADDED
@@ -0,0 +1,40 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'pardner/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'pardner'
8
+ spec.version = Pardner::VERSION
9
+ spec.authors = ['Andy Hartford']
10
+ spec.email = ['andy.hartford@cohealo.com']
11
+
12
+ spec.summary = 'A decorator library for ActiveRecord'
13
+ spec.description = 'A decorator library for ActiveRecord that has features to fit in nicely with the ActiveModel world'
14
+ spec.homepage = 'https://github.com/ajh/pardner'
15
+ spec.license = 'MIT'
16
+
17
+ spec.files = `git ls-files -z`.split("\x0")
18
+ .reject { |f| f.match(%r{^(test|spec|features)/}) }
19
+ spec.bindir = 'exe'
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ['lib']
22
+
23
+ spec.add_runtime_dependency 'activemodel', '~> 4.2'
24
+ spec.add_runtime_dependency 'activerecord', '~> 4.2'
25
+ spec.add_runtime_dependency 'activesupport', '~> 4.2'
26
+
27
+ spec.add_development_dependency 'bundler', '~> 1.10'
28
+ spec.add_development_dependency 'rake', '~> 10.0'
29
+ spec.add_development_dependency 'rspec', '~> 3'
30
+ spec.add_development_dependency 'rspec-its', '~> 1'
31
+ spec.add_development_dependency 'database_cleaner', '~> 1.5'
32
+ spec.add_development_dependency 'rubocop', '~> 0.35'
33
+ spec.add_development_dependency 'sqlite3', '~> 1.3'
34
+
35
+ # guard stuff
36
+ spec.add_development_dependency 'guard-rspec', '~> 4.6'
37
+ spec.add_development_dependency 'rb-fsevent', '~> 0.9'
38
+ spec.add_development_dependency 'rb-inotify', '~> 0.9'
39
+ spec.add_development_dependency 'ruby_gntp', '~> 0.3'
40
+ end
metadata ADDED
@@ -0,0 +1,259 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pardner
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Andy Hartford
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-11-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activemodel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
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'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '4.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '4.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-its
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1'
111
+ - !ruby/object:Gem::Dependency
112
+ name: database_cleaner
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.5'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.5'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.35'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.35'
139
+ - !ruby/object:Gem::Dependency
140
+ name: sqlite3
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.3'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.3'
153
+ - !ruby/object:Gem::Dependency
154
+ name: guard-rspec
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '4.6'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '4.6'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rb-fsevent
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.9'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '0.9'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rb-inotify
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '0.9'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '0.9'
195
+ - !ruby/object:Gem::Dependency
196
+ name: ruby_gntp
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '0.3'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '0.3'
209
+ description: A decorator library for ActiveRecord that has features to fit in nicely
210
+ with the ActiveModel world
211
+ email:
212
+ - andy.hartford@cohealo.com
213
+ executables: []
214
+ extensions: []
215
+ extra_rdoc_files: []
216
+ files:
217
+ - ".gitignore"
218
+ - ".rspec"
219
+ - ".rubocop.yml"
220
+ - ".travis.yml"
221
+ - CODE_OF_CONDUCT.md
222
+ - Gemfile
223
+ - Guardfile
224
+ - LICENSE.txt
225
+ - README.md
226
+ - Rakefile
227
+ - bin/console
228
+ - bin/setup
229
+ - lib/pardner.rb
230
+ - lib/pardner/base.rb
231
+ - lib/pardner/config.rb
232
+ - lib/pardner/version.rb
233
+ - log/.gitkeep
234
+ - pardner.gemspec
235
+ homepage: https://github.com/ajh/pardner
236
+ licenses:
237
+ - MIT
238
+ metadata: {}
239
+ post_install_message:
240
+ rdoc_options: []
241
+ require_paths:
242
+ - lib
243
+ required_ruby_version: !ruby/object:Gem::Requirement
244
+ requirements:
245
+ - - ">="
246
+ - !ruby/object:Gem::Version
247
+ version: '0'
248
+ required_rubygems_version: !ruby/object:Gem::Requirement
249
+ requirements:
250
+ - - ">="
251
+ - !ruby/object:Gem::Version
252
+ version: '0'
253
+ requirements: []
254
+ rubyforge_project:
255
+ rubygems_version: 2.4.3
256
+ signing_key:
257
+ specification_version: 4
258
+ summary: A decorator library for ActiveRecord
259
+ test_files: []