active_interaction 1.4.1 → 1.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f3886f47131ea3b818d3c1aac281179e65975a76
4
- data.tar.gz: adef81de6b569a05c85e4ffd59f2389836c1b5f9
3
+ metadata.gz: 9ba87c0f7766f1154697c93d29d10c0b0b0774d0
4
+ data.tar.gz: 0d299041f295fe030c7353fa23d058ac1d3f0f27
5
5
  SHA512:
6
- metadata.gz: 24989fa80ee14abcc56ddaa2b1c52c2c35286685d0fd27db0accc282581e598064e88cfb4898484a93327d23ebae246c50d415e4793a561d83f3b0e437bba808
7
- data.tar.gz: cb5b99e7bd5eca69ccfc75583edcc58a45ef5fa5b08340f17c0b52b5e0f3e6457839784e85c291e506ac154f7367e609917869697bc109684c971e0f62d818e6
6
+ metadata.gz: 02ce12f0701b9ec571b9988f0ba2bbdee87611b8504542ea052fa02fc854079c2ded5962b782e066b43d17812aee70d89750ed4c8a2d84204c05285e6de03b7e
7
+ data.tar.gz: eef2e988d3daa2e5ff0ea85a94fdfd9a4d4fc4acebb1b7ec555c326c2b8d6d4c4643038cb5955102d8427ef6200cca930d8cd13c78dda6e02c456cf9d03e91ae
data/CHANGELOG.md CHANGED
@@ -1,4 +1,12 @@
1
- # [Master][]
1
+ # [1.5.0][] (2015-02-05)
2
+
3
+ ## Added
4
+
5
+ - [#248][]: Add `has_attribute?` support to an instance of an interaction.
6
+
7
+ ## Fixed
8
+
9
+ - [#248][]: Fix support for simple_form gem.
2
10
 
3
11
  # [1.4.1][] (2014-12-12)
4
12
 
@@ -366,7 +374,7 @@
366
374
 
367
375
  - Initial release.
368
376
 
369
- [master]: https://github.com/orgsync/active_interaction/compare/v1.4.1...master
377
+ [1.5.0]: https://github.com/orgsync/active_interaction/compare/v1.4.1...1.5.0
370
378
  [1.4.1]: https://github.com/orgsync/active_interaction/compare/v1.4.0...v1.4.1
371
379
  [1.4.0]: https://github.com/orgsync/active_interaction/compare/v1.3.1...v1.4.0
372
380
  [1.3.1]: https://github.com/orgsync/active_interaction/compare/v1.3.0...v1.3.1
@@ -482,3 +490,4 @@
482
490
  [#235]: https://github.com/orgsync/active_interaction/issues/235
483
491
  [#239]: https://github.com/orgsync/active_interaction/issues/239
484
492
  [#244]: https://github.com/orgsync/active_interaction/issues/244
493
+ [#248]: https://github.com/orgsync/active_interaction/issues/248
data/README.md CHANGED
@@ -1,10 +1,30 @@
1
- # [ActiveInteraction][0]
2
-
3
- [![Gem Version][1]][2]
4
- [![Build Status][3]][4]
5
- [![Coverage Status][5]][6]
6
- [![Code Climate][7]][8]
7
- [![Dependency Status][9]][10]
1
+ <p align="center">
2
+ <img alt="briefcase" src="briefcase.png">
3
+ </p>
4
+
5
+ <h1 align="center">ActiveInteraction</h1>
6
+
7
+ <p align="center">Manage application specific business logic.</p>
8
+
9
+ <p align="center">
10
+ <a href="https://rubygems.org/gems/active_interaction">
11
+ <img alt="Gem Version" src="https://img.shields.io/gem/v/active_interaction.svg?style=flat">
12
+ </a>
13
+ <a href="https://travis-ci.org/orgsync/active_interaction">
14
+ <img alt="Build Status" src="https://img.shields.io/travis/orgsync/active_interaction/master.svg?style=flat">
15
+ </a>
16
+ <a href="https://coveralls.io/r/orgsync/active_interaction?branch=master">
17
+ <img alt="Coverage Status" src="https://img.shields.io/coveralls/orgsync/active_interaction/master.svg?style=flat">
18
+ </a>
19
+ <a href="https://codeclimate.com/github/orgsync/active_interaction">
20
+ <img alt="Code Climate" src="https://img.shields.io/codeclimate/github/orgsync/active_interaction.svg?style=flat">
21
+ </a>
22
+ <a href="https://gemnasium.com/orgsync/active_interaction">
23
+ <img alt="Dependency Status" src="https://img.shields.io/gemnasium/orgsync/active_interaction.svg?style=flat">
24
+ </a>
25
+
26
+ <hr>
27
+ </p>
8
28
 
9
29
  At first it seemed alright. A little business logic in a controller
10
30
  or model wasn't going to hurt anything. Then one day you wake up
@@ -15,17 +35,17 @@ to this.
15
35
  Take back control. Slim down models and wrangle monstrous controller
16
36
  methods with ActiveInteraction.
17
37
 
18
- Read more on the [project page][11] or check out the full [documentation][12]
38
+ Read more on the [project page][1] or check out the full [documentation][2]
19
39
  on RubyDoc.info.
20
40
 
21
41
  ## Installation
22
42
 
23
- This project uses [semantic versioning][13].
43
+ This project uses [semantic versioning][3].
24
44
 
25
45
  Add it to your Gemfile:
26
46
 
27
47
  ``` ruby
28
- gem 'active_interaction', '~> 1.4'
48
+ gem 'active_interaction', '~> 1.5'
29
49
  ```
30
50
 
31
51
  And then execute:
@@ -276,25 +296,17 @@ p Interaction.run.errors.messages
276
296
 
277
297
  ## Credits
278
298
 
279
- ActiveInteraction is brought to you by [@AaronLasseigne][14] and
280
- [@tfausak][15] from [@orgsync][16]. We were inspired by the fantastic
281
- work done in [Mutations][17].
282
-
283
- [0]: https://github.com/orgsync/active_interaction
284
- [1]: https://img.shields.io/gem/v/active_interaction.svg?style=flat
285
- [2]: http://rubygems.org/gems/active_interaction "Gem Version"
286
- [3]: https://img.shields.io/travis/orgsync/active_interaction/master.svg?style=flat
287
- [4]: https://travis-ci.org/orgsync/active_interaction "Build Status"
288
- [5]: https://img.shields.io/coveralls/orgsync/active_interaction/master.svg?style=flat
289
- [6]: https://coveralls.io/r/orgsync/active_interaction?branch=master "Coverage Status"
290
- [7]: https://img.shields.io/codeclimate/github/orgsync/active_interaction.svg?style=flat
291
- [8]: https://codeclimate.com/github/orgsync/active_interaction "Code Climate"
292
- [9]: https://img.shields.io/gemnasium/orgsync/active_interaction.svg?style=flat
293
- [10]: https://gemnasium.com/orgsync/active_interaction "Dependency Status"
294
- [11]: http://orgsync.github.io/active_interaction/
295
- [12]: http://rubydoc.info/github/orgsync/active_interaction
296
- [13]: http://semver.org/spec/v2.0.0.html
297
- [14]: https://github.com/AaronLasseigne
298
- [15]: https://github.com/tfausak
299
- [16]: https://github.com/orgsync
300
- [17]: https://github.com/cypriss/mutations
299
+ ActiveInteraction is brought to you by [@AaronLasseigne][4] and
300
+ [@tfausak][5] from [@orgsync][6]. We were inspired by the fantastic
301
+ work done in [Mutations][7].
302
+
303
+ Logo provided free by [Emoji One][8].
304
+
305
+ [1]: http://orgsync.github.io/active_interaction/
306
+ [2]: http://rubydoc.info/github/orgsync/active_interaction
307
+ [3]: http://semver.org/spec/v2.0.0.html
308
+ [4]: https://github.com/AaronLasseigne
309
+ [5]: https://github.com/tfausak
310
+ [6]: https://github.com/orgsync
311
+ [7]: https://github.com/cypriss/mutations
312
+ [8]: http://emojione.com/
@@ -6,6 +6,7 @@ require 'active_interaction/version'
6
6
  require 'active_interaction/errors'
7
7
 
8
8
  require 'active_interaction/concerns/active_modelable'
9
+ require 'active_interaction/concerns/active_recordable'
9
10
  require 'active_interaction/concerns/hashable'
10
11
  require 'active_interaction/concerns/missable'
11
12
  require 'active_interaction/concerns/transactable'
@@ -50,5 +51,5 @@ I18n.load_path.unshift(*Dir[File.expand_path(
50
51
  #
51
52
  # @since 1.0.0
52
53
  #
53
- # @version 1.4.1
54
+ # @version 1.5.0
54
55
  module ActiveInteraction end
@@ -29,6 +29,7 @@ module ActiveInteraction
29
29
  # end
30
30
  class Base
31
31
  include ActiveModelable
32
+ include ActiveRecordable
32
33
  include Runnable
33
34
 
34
35
  define_callbacks :type_check
@@ -181,31 +182,6 @@ module ActiveInteraction
181
182
  process_inputs(inputs.symbolize_keys)
182
183
  end
183
184
 
184
- # Returns the column object for the named filter.
185
- #
186
- # @param name [Symbol] The name of a filter.
187
- #
188
- # @example
189
- # class Interaction < ActiveInteraction::Base
190
- # string :email, default: nil
191
- #
192
- # def execute; end
193
- # end
194
- #
195
- # Interaction.new.column_for_attribute(:email)
196
- # # => #<ActiveInteraction::FilterColumn:0x007faebeb2a6c8 @type=:string>
197
- #
198
- # Interaction.new.column_for_attribute(:not_a_filter)
199
- # # => nil
200
- #
201
- # @return [FilterColumn, nil]
202
- #
203
- # @since 1.2.0
204
- def column_for_attribute(name)
205
- filter = self.class.filters[name]
206
- FilterColumn.intern(filter.database_column_type) if filter
207
- end
208
-
209
185
  # @!method compose(other, inputs = {})
210
186
  # Run another interaction and return its result. If the other interaction
211
187
  # fails, halt execution.
@@ -0,0 +1,58 @@
1
+ # coding: utf-8
2
+
3
+ module ActiveInteraction
4
+ # Implement the minimal ActiveRecord interface.
5
+ #
6
+ # @private
7
+ module ActiveRecordable
8
+ # Returns the column object for the named filter.
9
+ #
10
+ # @param name [Symbol] The name of a filter.
11
+ #
12
+ # @example
13
+ # class Interaction < ActiveInteraction::Base
14
+ # string :email, default: nil
15
+ #
16
+ # def execute; end
17
+ # end
18
+ #
19
+ # Interaction.new.column_for_attribute(:email)
20
+ # # => #<ActiveInteraction::FilterColumn:0x007faebeb2a6c8 @type=:string>
21
+ #
22
+ # Interaction.new.column_for_attribute(:not_a_filter)
23
+ # # => nil
24
+ #
25
+ # @return [FilterColumn, nil]
26
+ #
27
+ # @since 1.2.0
28
+ def column_for_attribute(name)
29
+ filter = self.class.filters[name]
30
+ FilterColumn.intern(filter.database_column_type) if filter
31
+ end
32
+
33
+ # Returns true if a filter of that name exists.
34
+ #
35
+ # @param name [String, Symbol] The name of a filter.
36
+ #
37
+ # @example
38
+ # class Interaction < ActiveInteraction::Base
39
+ # string :email, default: nil
40
+ #
41
+ # def execute; end
42
+ # end
43
+ #
44
+ # Interaction.new.has_attribute?(:email)
45
+ # # => true
46
+ #
47
+ # Interaction.new.has_attribute?(:not_a_filter)
48
+ # # => false
49
+ #
50
+ # @return [Boolean]
51
+ #
52
+ # @since 1.5.0
53
+ def has_attribute?(name) # rubocop:disable PredicateName
54
+ self.class.filters.key?(name.to_sym)
55
+ end
56
+ # rubocop:enable PredicateName
57
+ end
58
+ end
@@ -5,5 +5,5 @@ module ActiveInteraction
5
5
  # The version number.
6
6
  #
7
7
  # @return [Gem::Version]
8
- VERSION = Gem::Version.new('1.4.1')
8
+ VERSION = Gem::Version.new('1.5.0')
9
9
  end
@@ -313,31 +313,6 @@ describe ActiveInteraction::Base do
313
313
  end
314
314
  end
315
315
 
316
- describe '#column_for_attribute(name)' do
317
- let(:described_class) { InteractionWithFilter }
318
- let(:column) { outcome.column_for_attribute(name) }
319
-
320
- context 'name is not an input name' do
321
- let(:name) { SecureRandom.hex }
322
-
323
- it 'returns nil if the attribute cannot be found' do
324
- expect(column).to be_nil
325
- end
326
- end
327
-
328
- context 'name is an input name' do
329
- let(:name) { InteractionWithFilter.filters.keys.first }
330
-
331
- it 'returns a FilterColumn' do
332
- expect(column).to be_a ActiveInteraction::FilterColumn
333
- end
334
-
335
- it 'returns a FilterColumn of type boolean' do
336
- expect(column.type).to eql :float
337
- end
338
- end
339
- end
340
-
341
316
  describe '#inputs' do
342
317
  let(:described_class) { InteractionWithFilter }
343
318
  let(:other_val) { SecureRandom.hex }
@@ -0,0 +1,51 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ InteractionWithFilter = Class.new(TestInteraction) do
6
+ float :thing
7
+ end
8
+
9
+ describe ActiveInteraction::ActiveRecordable do
10
+ include_context 'interactions'
11
+
12
+ let(:described_class) { InteractionWithFilter }
13
+
14
+ describe '#column_for_attribute(name)' do
15
+ let(:column) { outcome.column_for_attribute(name) }
16
+
17
+ context 'name is not an input name' do
18
+ let(:name) { SecureRandom.hex }
19
+
20
+ it 'returns nil if the attribute cannot be found' do
21
+ expect(column).to be_nil
22
+ end
23
+ end
24
+
25
+ context 'name is an input name' do
26
+ let(:name) { described_class.filters.keys.first }
27
+
28
+ it 'returns a FilterColumn' do
29
+ expect(column).to be_a ActiveInteraction::FilterColumn
30
+ end
31
+
32
+ it 'returns a FilterColumn of type boolean' do
33
+ expect(column.type).to eql :float
34
+ end
35
+ end
36
+ end
37
+
38
+ describe '#has_attribute?' do
39
+ it 'returns true if the filter exists' do
40
+ expect(outcome.has_attribute?(:thing)).to be_truthy
41
+ end
42
+
43
+ it 'works with strings' do
44
+ expect(outcome.has_attribute?('thing')).to be_truthy
45
+ end
46
+
47
+ it 'returns false if the filter does not exist' do
48
+ expect(outcome.has_attribute?(:not_a_filter)).to be_falsey
49
+ end
50
+ end
51
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_interaction
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Lasseigne
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-12-13 00:00:00.000000000 Z
12
+ date: 2015-02-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
@@ -172,6 +172,7 @@ files:
172
172
  - lib/active_interaction/backports.rb
173
173
  - lib/active_interaction/base.rb
174
174
  - lib/active_interaction/concerns/active_modelable.rb
175
+ - lib/active_interaction/concerns/active_recordable.rb
175
176
  - lib/active_interaction/concerns/hashable.rb
176
177
  - lib/active_interaction/concerns/missable.rb
177
178
  - lib/active_interaction/concerns/runnable.rb
@@ -203,6 +204,7 @@ files:
203
204
  - lib/active_interaction/version.rb
204
205
  - spec/active_interaction/base_spec.rb
205
206
  - spec/active_interaction/concerns/active_modelable_spec.rb
207
+ - spec/active_interaction/concerns/active_recordable_spec.rb
206
208
  - spec/active_interaction/concerns/hashable_spec.rb
207
209
  - spec/active_interaction/concerns/missable_spec.rb
208
210
  - spec/active_interaction/concerns/runnable_spec.rb
@@ -268,13 +270,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
268
270
  version: '0'
269
271
  requirements: []
270
272
  rubyforge_project:
271
- rubygems_version: 2.2.2
273
+ rubygems_version: 2.4.5
272
274
  signing_key:
273
275
  specification_version: 4
274
276
  summary: Manage application specific business logic.
275
277
  test_files:
276
278
  - spec/active_interaction/base_spec.rb
277
279
  - spec/active_interaction/concerns/active_modelable_spec.rb
280
+ - spec/active_interaction/concerns/active_recordable_spec.rb
278
281
  - spec/active_interaction/concerns/hashable_spec.rb
279
282
  - spec/active_interaction/concerns/missable_spec.rb
280
283
  - spec/active_interaction/concerns/runnable_spec.rb