affairs_of_state 0.1.4 → 0.2.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: 82cee7ae333311fa7e78ad67e2dadf4519588278
4
- data.tar.gz: c9e55851f6777e1c0db00e04752b620537cfdf4f
3
+ metadata.gz: 71da77675fa54352c44a00554fdde62d56b50881
4
+ data.tar.gz: d2a0215074c06bc571b51d8b0e918696ec1b027f
5
5
  SHA512:
6
- metadata.gz: 9a6113b5f54561f269db052207e4cdc352495ff90af4919422b16704db46b9c3da3898f41dd8660b68dab77fc7db6be71d523f374bc81bbd7088522bcfc527d7
7
- data.tar.gz: 207c299cae44330886c9ba4a93dbbff7a1d1d15eb119d05ebbff8153957a56df780ea01ad855e77846a76e68cf7f05f9decc0ad4ad1e5479d172de4d3fe2bd4d
6
+ metadata.gz: 777b4d67fde6f03c6ce0320d23ec7879d9dce2f9da70b026d1d70d1c78f8cb15c4c90393e381c46b1fc0935cde20b3f5a6122794fd93b2b81b9a9d08d5bb6b22
7
+ data.tar.gz: edd41d5cace467b7d629ee7d1596be76491272f6e2f66208a8bb9bb05dcc1ad05f4d10ec4920071a762123b415d834ad2ca9f5715dfe45559ea0297755053083
data/.travis.yml CHANGED
@@ -1,6 +1,21 @@
1
1
  language: ruby
2
+ script: bundle exec rspec
3
+ sudo: false
2
4
  rvm:
3
- - "1.9.3"
4
- - "2.0.0"
5
5
  - "2.1.0"
6
- script: bundle exec rspec
6
+ - "2.2.2"
7
+ - "2.3.1"
8
+
9
+ gemfile:
10
+ - Gemfile
11
+ - gemfiles/activerecord40.gemfile
12
+ - gemfiles/activerecord41.gemfile
13
+ - gemfiles/activerecord42.gemfile
14
+ - gemfiles/activerecord50.gemfile
15
+
16
+ matrix:
17
+ exclude:
18
+ - rvm: "2.1.0"
19
+ gemfile: Gemfile
20
+ - rvm: "2.1.0"
21
+ gemfile: gemfiles/activerecord50.gemfile
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/kmcphillips/affairs_of_state.png?branch=master)](https://travis-ci.org/kmcphillips/affairs_of_state)
4
4
 
5
- You have an Active Record model. It nees to have multiple states, but not complex rules. This gem gives you validation, easy check and change methods, and a single configuration line.
5
+ You have an Active Record model. It nees to have multiple states, boolean convenience methods, simple validation, but not complex rules. This gem gives you this in a single line class method.
6
6
 
7
7
  ## Installation
8
8
 
@@ -12,13 +12,7 @@ Add this line to your application's Gemfile:
12
12
  gem 'affairs_of_state'
13
13
  ```
14
14
 
15
- And then execute:
16
-
17
- ```ruby
18
- $ bundle
19
- ```
20
-
21
- Or install it yourself as:
15
+ Or install it with:
22
16
 
23
17
  ```ruby
24
18
  $ gem install affairs_of_state
@@ -29,7 +23,7 @@ $ gem install affairs_of_state
29
23
  The gem assumes you have a string column named `status` on your model:
30
24
 
31
25
  ```ruby
32
- add_column :model_name, :status, :default => "active"
26
+ add_column :model_name, :status, default: "active"
33
27
  ```
34
28
 
35
29
  Then you just list your states in the model:
@@ -41,13 +35,13 @@ affairs_of_state :active, :inactive
41
35
  If you'd like to use another column, lets say `state`, pass it in as a configuration option:
42
36
 
43
37
  ```ruby
44
- affairs_of_state :active, :inactive, :column => :state
38
+ affairs_of_state :active, :inactive, column: :state
45
39
  ```
46
40
 
47
41
  You can also turn off validation:
48
42
 
49
43
  ```ruby
50
- affairs_of_state :active, :inactive, :allow_blank => true
44
+ affairs_of_state :active, :inactive, allow_blank: true
51
45
  ```
52
46
 
53
47
  Or give it a long list of statuses:
@@ -59,9 +53,11 @@ affairs_of_state :ordered, :cancelled, :shipped, :lost, :in_transit
59
53
  You can also pass a proc or a method name symbol to the :if option to bypass validation:
60
54
 
61
55
  ```ruby
62
- affairs_of_state :active, :inactive, :if => lambda{|object| only_validate_if_this_is_true(object) }
63
- # or
64
- affairs_of_state :active, :inactive, :if => :only_validate_if_this_method_returns_true
56
+ affairs_of_state :active, :inactive, if: ->(object) { only_validate_if_this_is_true(object) }
57
+ ```
58
+ or
59
+ ```ruby
60
+ affairs_of_state :active, :inactive, if: :only_validate_if_this_method_returns_true
65
61
  ```
66
62
 
67
63
 
@@ -114,6 +110,6 @@ rspec
114
110
 
115
111
  ## The usual
116
112
 
117
- Author: Kevin McPhillips - github@kevinmcphillips.ca
113
+ By Kevin McPhillips (github@kevinmcphillips.ca)
118
114
 
119
- License: [MIT](http://opensource.org/licenses/MIT)
115
+ [MIT License](http://opensource.org/licenses/MIT)
@@ -16,9 +16,10 @@ Gem::Specification.new do |gem|
16
16
  gem.require_paths = ["lib"]
17
17
  gem.version = AffairsOfState::VERSION
18
18
 
19
- gem.add_dependency "activerecord", "> 3.0"
19
+ gem.add_dependency "activerecord", ">= 4.0"
20
+ gem.add_dependency "activesupport", ">= 4.0"
20
21
 
21
- gem.add_development_dependency "rspec", "~> 3.0"
22
+ gem.add_development_dependency "rspec"
22
23
  gem.add_development_dependency "sqlite3"
23
24
  gem.add_development_dependency "pry"
24
25
 
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'activerecord', '~> 4.0'
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'activerecord', '~> 4.1'
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'activerecord', '~> 4.2'
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'activerecord', '~> 5.0'
@@ -1,29 +1,27 @@
1
1
  require "affairs_of_state/version"
2
2
 
3
3
  module AffairsOfState
4
+ extend ActiveSupport::Concern
4
5
 
5
- def self.included(base)
6
- base.extend ClassMethods
7
- end
8
-
9
- module ClassMethods
6
+ class_methods do
10
7
  def affairs_of_state(*args)
11
- @_status_options = ({:column => :status, :allow_blank => false, :scopes => true, :if => nil}).merge(args.extract_options!)
8
+ @_status_options = { column: :status, allow_blank: false, scopes: true, if: nil }.merge(args.extract_options!)
12
9
  @_statuses = args.flatten.map(&:to_s)
13
10
 
14
11
  const_set("STATUSES", @_statuses)
15
12
 
16
- validates(@_status_options[:column], :inclusion => {:in => @_statuses, :allow_blank => @_status_options[:allow_blank]}, :if => @_status_options[:if])
13
+ validates(@_status_options[:column], inclusion: { in: @_statuses, allow_blank: @_status_options[:allow_blank] }, if: @_status_options[:if])
17
14
 
18
15
  if @_status_options[:scopes]
19
16
  @_statuses.each do |status|
20
- raise "Affairs of State: '#{ status }' is not a valid status" unless valid_status?(status)
17
+ raise ArgumentError.new("Affairs of State: '#{ status }' is not a valid status") unless valid_status?(status)
21
18
  self.scope status.to_sym, -> { where(@_status_options[:column] => status.to_s) }
22
19
  end
23
20
  end
24
21
 
25
22
  include InstanceMethods
26
23
  extend SingletonMethods
24
+
27
25
  true
28
26
  end
29
27
 
@@ -36,20 +34,20 @@ module AffairsOfState
36
34
 
37
35
  module InstanceMethods
38
36
  def method_missing(method, *args)
39
- if self.class::STATUSES.map{|s| "#{s}?".to_sym }.include?(method)
37
+ if self.class::STATUSES.map{ |s| "#{ s }?".to_sym }.include?(method)
40
38
  self.class.send(:define_method, method) do
41
39
  self.status == method.to_s.gsub(/\?$/, "")
42
40
  end
43
41
 
44
- send method
42
+ send(method)
45
43
 
46
- elsif self.class::STATUSES.map{|s| "#{s}!".to_sym }.include?(method)
44
+ elsif self.class::STATUSES.map{ |s| "#{ s }!".to_sym }.include?(method)
47
45
  self.class.send(:define_method, method) do
48
- self.send("#{self.class.instance_variable_get('@_status_options')[:column]}=", method.to_s.gsub(/\!$/, ""))
46
+ self.send("#{ self.class.instance_variable_get('@_status_options')[:column] }=", method.to_s.gsub(/\!$/, ""))
49
47
  self.save
50
48
  end
51
49
 
52
- send method
50
+ send(method)
53
51
  else
54
52
  super
55
53
  end
@@ -58,7 +56,7 @@ module AffairsOfState
58
56
 
59
57
  module SingletonMethods
60
58
  def statuses_for_select
61
- @_statuses.map{|s| [s.humanize, s]}
59
+ @_statuses.map{ |s| [s.humanize, s] }
62
60
  end
63
61
  end
64
62
 
@@ -1,3 +1,3 @@
1
1
  module AffairsOfState
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -163,7 +163,7 @@ describe AffairsOfState do
163
163
 
164
164
  describe "invalid status name" do
165
165
  it "should raise a good warning" do
166
- expect(->{ class Pie8 < ActiveRecord::Base ; affairs_of_state :new ; end }).to raise_error("Affairs of State: 'new' is not a valid status")
166
+ expect(->{ class Pie8 < ActiveRecord::Base ; affairs_of_state :new ; end }).to raise_error(ArgumentError, "Affairs of State: 'new' is not a valid status")
167
167
  end
168
168
  end
169
169
 
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'active_record'
2
+ require 'active_support/all'
2
3
  require 'affairs_of_state'
3
4
  require 'pry'
4
5
 
@@ -6,13 +7,12 @@ RSpec.configure do |config|
6
7
  config.run_all_when_everything_filtered = true
7
8
  end
8
9
 
9
-
10
10
  ## Create an AR model to test with
11
11
  I18n.enforce_available_locales = false
12
12
 
13
13
  ActiveRecord::Base.establish_connection(
14
- :adapter => "sqlite3",
15
- :database => "#{File.expand_path(File.join(File.dirname(__FILE__), '..'))}/spec/db/test.sqlite3"
14
+ adapter: "sqlite3",
15
+ database: "#{File.expand_path(File.join(File.dirname(__FILE__), '..'))}/spec/db/test.sqlite3"
16
16
  )
17
17
 
18
18
  ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS 'pies'")
metadata CHANGED
@@ -1,43 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: affairs_of_state
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin McPhillips
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-06 00:00:00.000000000 Z
11
+ date: 2016-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '4.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '3.0'
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '4.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '4.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rspec
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - "~>"
45
+ - - ">="
32
46
  - !ruby/object:Gem::Version
33
- version: '3.0'
47
+ version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - "~>"
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
- version: '3.0'
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: sqlite3
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -82,6 +96,10 @@ files:
82
96
  - README.md
83
97
  - Rakefile
84
98
  - affairs_of_state.gemspec
99
+ - gemfiles/activerecord40.gemfile
100
+ - gemfiles/activerecord41.gemfile
101
+ - gemfiles/activerecord42.gemfile
102
+ - gemfiles/activerecord50.gemfile
85
103
  - lib/affairs_of_state.rb
86
104
  - lib/affairs_of_state/version.rb
87
105
  - spec/affairs_of_state_spec.rb
@@ -107,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
125
  version: '0'
108
126
  requirements: []
109
127
  rubyforge_project:
110
- rubygems_version: 2.2.2
128
+ rubygems_version: 2.4.5.1
111
129
  signing_key:
112
130
  specification_version: 4
113
131
  summary: You have an Active Record model. It nees to have multiple states, but not