power_enum 1.4.0 → 2.0.0.rc

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YmI3NzljN2JiODEzOTQyOWMxMDk0N2ZjYjQ5ZGUwOTIwMmMyNWRkZA==
4
+ M2Q1NDg3Yzc2MDU2NjZmM2VlNDUwZWVhNTMxMTAyMzA5M2M0MDgwOQ==
5
5
  data.tar.gz: !binary |-
6
- NjAzMjkzYzg0YTJjNmEyYjIyYTExNjJkMWU3NmRlYjg3ZWFiZjgxNw==
6
+ NDlkMWUzNTlkNDM1NWQ5YmEyNzk3Y2M0NzY3MzM5NWNlNWJiYjMzOA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MjI5NDI4NWU2NDJiNTY5ZjY5NTc5YmU4NWQ5ODRmMDY5OWY3NTU0ZTZkMWVi
10
- YTA3ODBjMmNmOTBkMzEzZGJiM2MzOTY2YmE5MTA4MjI2NmEyODk5MWFhYTky
11
- MTkwY2RlZmRmYTZjODJkOWI1MDQ2NDkxYmFmOTY0ZmU4ZWNkOTU=
9
+ MzkzZTAyNGIwNGExMWIzMzhhNzBlNWYzNmZlMWYwMzA3MzQyN2ZmYmVlNTA1
10
+ MWNkZjNiYjYxYzk3NzMyNjkxMDQyNDM1ZDU0ZjEwMTliNjhiNjhhZDlmNzdj
11
+ ZTQ4YmQ2NTI0NThlYTZiMDQyODY3ZTQ1NTFiNzg0ZjBjODk5ZDE=
12
12
  data.tar.gz: !binary |-
13
- ZWUwOTY5NTM5NjVkZjNjMjhmMjAwYzkyMTllMTcwZDFjY2Q0YmYxNDkwMjY1
14
- NGZmYzRiZjMyMjdiMDY3OTRmYjA0NzVjMThiY2YzNDgzNzE1NWE5YzVlMjU0
15
- MDgxN2Y3OGJmODAxMDFhZGMyOTBlNGIwMDFlN2FhYWMyNjY1NzU=
13
+ ZTM4OWI0NWQ5MjBmYThkYTlmZjVkYzVkM2JkMjE2MWRjNjY0NzRmNzM5ODdk
14
+ MTEzMmU4NGQzOTM4MjNhNDJmNGE1NTIwNTdiZWY1NTc5YTFhYWQ1YWFiNTgy
15
+ YzUwODNmZTM4MmQ3ODQ2NzU0Mzg3YjI2NDNjM2M4NTRmYzA5MDQ=
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/README.markdown CHANGED
@@ -1,19 +1,16 @@
1
1
  # Power Enum
2
2
 
3
- https://github.com/albertosaurus/power_enum
3
+ https://github.com/albertosaurus/power_enum_2
4
4
 
5
- [![Build Status](https://travis-ci.org/albertosaurus/power_enum.png)](https://travis-ci.org/albertosaurus/power_enum)
6
- [![Code Climate](https://codeclimate.com/github/albertosaurus/power_enum.png)](https://codeclimate.com/github/albertosaurus/power_enum)
5
+ [![Build Status](https://travis-ci.org/albertosaurus/power_enum_2.png)](https://travis-ci.org/albertosaurus/power_enum_2)
6
+ [![Code Climate](https://codeclimate.com/github/albertosaurus/power_enum_2.png)](https://codeclimate.com/github/albertosaurus/power_enum_2)
7
7
 
8
- Enumerations for Rails 3.1/3.2 Done Right.
8
+ Enumerations for Rails 4 Done Right.
9
9
 
10
10
  ## Versions
11
11
 
12
- * PowerEnum 1.X (this version) supports Rails 3.1/3.2.
13
- * PowerEnum 2.X supports Rails 4, available here: https://github.com/albertosaurus/power_enum_2
14
-
15
- NOTICE: Version 1.0 removes support from Rails 3.0, as that version of Rails has no longer been supported for
16
- some time. The last version to support Rails 3.0 was 0.11.1.
12
+ * PowerEnum 2.X (this version) supports Rails 4.
13
+ * PowerEnum 1.X supports Rails 3.1/3.2, available here: https://github.com/albertosaurus/power_enum
17
14
 
18
15
  ## What is this?:
19
16
 
@@ -31,6 +28,8 @@ At it's most basic level, it allows you to say things along the lines of:
31
28
  ```ruby
32
29
  # Create a provisional booking
33
30
  booking = Booking.new( :status => BookingStatus[:provisional] )
31
+ # This also works
32
+ booking = Booking.new( :status => :provisional )
34
33
  # Set the booking status to 'confirmed'
35
34
  booking.status = :confirmed
36
35
  booking = Booking.create( :status => :rejected )
@@ -50,14 +49,16 @@ See "How to use it" below for more information.
50
49
 
51
50
  ## Requirements
52
51
 
53
- * Ruby 1.8.7, 1.9.2, 1.9.3, JRuby 1.6+ (Ruby 1.9.3 required for development)
54
- * Rails 3.1, 3.2
52
+ ### PowerEnum 2.X
53
+
54
+ * Ruby 1.9.3, 2.0, JRuby 1.7+ (Ruby 1.9.3 or 2.0 required for development)
55
+ * Rails 4.0
55
56
 
56
57
  ## Installation
57
58
 
58
59
  ### READ THIS FIRST
59
60
 
60
- Starting with version 1.1.0, the gem is signed. The public key is available
61
+ This gem is signed. The public key is available
61
62
  here: https://github.com/albertosaurus/power_enum (look for gem-public\_cert.pem). Hence, if
62
63
  you can get an error like the following if you're installing in `HighSecurity` mode.
63
64
 
@@ -2,12 +2,12 @@
2
2
  # Released under the MIT license. See LICENSE for details.
3
3
 
4
4
  # Generator for PowerEnum
5
- class EnumGenerator < Rails::Generators::NamedBase
5
+ class EnumGenerator < Rails::Generators::Base
6
6
  require File.expand_path('../enum_generator_helpers/migration_number', __FILE__)
7
- include Rails::Generators::Migration
8
- extend EnumGeneratorHelpers::MigrationNumber
7
+ include EnumGeneratorHelpers::MigrationNumber
9
8
 
10
9
  source_root File.expand_path('../templates', __FILE__)
10
+ argument :enum_name, :type => :string
11
11
  class_option :migration, :type => :boolean, :default => true, :desc => 'Generate migration for the enum'
12
12
  class_option :fixture, :type => :boolean, :default => false, :desc => 'Generate fixture for the enum'
13
13
 
@@ -18,17 +18,45 @@ class EnumGenerator < Rails::Generators::NamedBase
18
18
 
19
19
  # Generates the migration to create the enum table.
20
20
  def generate_migration
21
- migration_template 'rails31_migration.rb.erb', "db/migrate/create_enum_#{table_name}.rb" if options.migration?
22
- end
23
-
24
- # Do not pluralize enumeration names
25
- def pluralize_table_names?
26
- false
21
+ template migration_template, "db/migrate/#{migration_file_name}.rb" if options.migration?
27
22
  end
28
23
 
29
24
  hook_for :test_framework, :as => :model do |enum_generator_instance, test_generator_class|
30
25
  # Need to do this because I'm changing the default value of the 'fixture' option.
31
- table_name = enum_generator_instance.send(:table_name)
32
- enum_generator_instance.invoke( test_generator_class, [table_name], { 'fixture' => enum_generator_instance.options.fixture? } )
26
+ enum_generator_instance.invoke( test_generator_class, [enum_generator_instance.enum_name], { 'fixture' => enum_generator_instance.options.fixture? } )
27
+ end
28
+
29
+ no_tasks do
30
+
31
+ # Returns the file name of the enum model without the .rb extension.
32
+ def file_name
33
+ enum_name.underscore
34
+ end
35
+
36
+ # Returns the class name of the enum.
37
+ def enum_class_name
38
+ file_name.camelize
39
+ end
40
+
41
+ # Derives the name for the migration, something like 'create_enum_fruit'
42
+ def migration_name
43
+ "create_enum_#{file_name}"
44
+ end
45
+
46
+ # Returns the class name of our migration
47
+ def migration_class_name
48
+ migration_name.camelize
49
+ end
50
+
51
+ # Generates and returns the filename of our migration
52
+ def migration_file_name
53
+ "#{next_migration_number}_#{migration_name}"
54
+ end
55
+
56
+ # Returns the name of the template file for the migration.
57
+ def migration_template
58
+ 'rails31_migration.rb.erb'
59
+ end
60
+
33
61
  end
34
62
  end
@@ -2,13 +2,23 @@
2
2
  module EnumGeneratorHelpers
3
3
  # Helper methods to figure out the migration number.
4
4
  module MigrationNumber
5
+
6
+ # Returns the number of the last migration.
7
+ # @return [Fixnum]
8
+ def current_migration_number
9
+ dirname = "#{Rails.root}/db/migrate/[0-9]*_*.rb"
10
+ Dir.glob(dirname).collect do |file|
11
+ File.basename(file).split("_").first.to_i
12
+ end.max.to_i
13
+ end
14
+
5
15
  # Returns the next upcoming migration number. Sadly, Rails has no API for
6
16
  # this, so we're reduced to copying from ActiveRecord::Generators::Migration
7
17
  # @return [Fixnum]
8
- def next_migration_number(dirname)
18
+ def next_migration_number
9
19
  # Lifted directly from ActiveRecord::Generators::Migration
10
20
  # Unfortunately, no API is provided by Rails at this time.
11
- next_migration_number = current_migration_number(dirname) + 1
21
+ next_migration_number = current_migration_number + 1
12
22
  if ActiveRecord::Base.timestamped_migrations
13
23
  [Time.now.utc.strftime("%Y%m%d%H%M%S"), "%.14d" % next_migration_number].max
14
24
  else
@@ -17,4 +27,4 @@ module EnumGeneratorHelpers
17
27
  end
18
28
 
19
29
  end
20
- end
30
+ end
@@ -1,3 +1,3 @@
1
- class <%= class_name %> < ActiveRecord::Base
1
+ class <%= enum_class_name %> < ActiveRecord::Base
2
2
  acts_as_enumerated
3
3
  end
@@ -83,12 +83,34 @@ module PowerEnum::Enumerated
83
83
  self.acts_enumerated_name_column = get_name_column(options)
84
84
 
85
85
  unless self.is_a? PowerEnum::Enumerated::EnumClassMethods
86
+ preserve_query_aliases
86
87
  extend_enum_class_methods( options )
87
88
  end
88
89
  end
89
90
 
91
+ # Rails 4 delegates all the finder methods to 'all'. PowerEnum overrides 'all'. Hence,
92
+ # the need to re-alias the query methods.
93
+ def preserve_query_aliases
94
+ class << self
95
+ alias_method :__all, :all
96
+
97
+ # From ActiveRecord::Querying
98
+ delegate :find, :take, :take!, :first, :first!, :last, :last!, :exists?, :any?, :many?, :to => :__all
99
+ delegate :first_or_create, :first_or_create!, :first_or_initialize, :to => :__all
100
+ delegate :find_or_create_by, :find_or_create_by!, :find_or_initialize_by, :to => :__all
101
+ delegate :find_by, :find_by!, :to => :__all
102
+ delegate :destroy, :destroy_all, :delete, :delete_all, :update, :update_all, :to => :__all
103
+ delegate :find_each, :find_in_batches, :to => :__all
104
+ delegate :select, :group, :order, :except, :reorder, :limit, :offset, :joins,
105
+ :where, :preload, :eager_load, :includes, :from, :lock, :readonly,
106
+ :having, :create_with, :uniq, :distinct, :references, :none, :unscope, :to => :__all
107
+ delegate :count, :average, :minimum, :maximum, :sum, :calculate, :pluck, :ids, :to => :__all
108
+ end
109
+ end
110
+
90
111
  # Injects the class methods into model
91
112
  def extend_enum_class_methods(options) #:nodoc:
113
+
92
114
  extend PowerEnum::Enumerated::EnumClassMethods
93
115
 
94
116
  class_eval do
@@ -47,7 +47,7 @@ module PowerEnum::Reflection
47
47
 
48
48
  # See ActiveRecore::Reflection::MacroReflection
49
49
  def initialize( name, options, active_record )
50
- super :has_enumerated, name, options, active_record
50
+ super :has_enumerated, name, nil, options, active_record
51
51
  end
52
52
 
53
53
  # Returns the class name of the enum
@@ -106,5 +106,11 @@ module PowerEnum::Reflection
106
106
  true
107
107
  end
108
108
 
109
+ # An array of arrays of scopes. Each item in the outside array corresponds
110
+ # to a reflection in the #chain.
111
+ def scope_chain
112
+ scope ? [[scope]] : [[]]
113
+ end
114
+
109
115
  end
110
116
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: power_enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 2.0.0.rc
5
5
  platform: ruby
6
6
  authors:
7
7
  - Trevor Squires
@@ -39,7 +39,7 @@ cert_chain:
39
39
  amZaYUtWM2wwYTFkR2wyUVNMa2pScFFaRDFiRCtVSDdnT3F5N1piZGNzUkJM
40
40
  NEg3VTV6VQpibEtkZEg2dXhDckRTTTdLYWJrelNPVmYKLS0tLS1FTkQgQ0VS
41
41
  VElGSUNBVEUtLS0tLQo=
42
- date: 2014-01-21 00:00:00.000000000 Z
42
+ date: 2013-06-30 00:00:00.000000000 Z
43
43
  dependencies:
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: rails
@@ -47,14 +47,14 @@ dependencies:
47
47
  requirements:
48
48
  - - ~>
49
49
  - !ruby/object:Gem::Version
50
- version: '3.1'
50
+ version: 4.0.0
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
55
  - - ~>
56
56
  - !ruby/object:Gem::Version
57
- version: '3.1'
57
+ version: 4.0.0
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
60
  requirement: !ruby/object:Gem::Requirement
@@ -163,8 +163,7 @@ files:
163
163
  - LICENSE
164
164
  - README.markdown
165
165
  homepage: http://github.com/albertosaurus/power_enum
166
- licenses:
167
- - MIT
166
+ licenses: []
168
167
  metadata: {}
169
168
  post_install_message:
170
169
  rdoc_options: []
@@ -177,9 +176,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
177
176
  version: '0'
178
177
  required_rubygems_version: !ruby/object:Gem::Requirement
179
178
  requirements:
180
- - - ! '>='
179
+ - - ! '>'
181
180
  - !ruby/object:Gem::Version
182
- version: '0'
181
+ version: 1.3.1
183
182
  requirements: []
184
183
  rubyforge_project:
185
184
  rubygems_version: 2.0.3
@@ -188,3 +187,4 @@ specification_version: 4
188
187
  summary: Allows you to treat instances of your ActiveRecord models as though they
189
188
  were an enumeration of values
190
189
  test_files: []
190
+ has_rdoc:
metadata.gz.sig CHANGED
Binary file