au_state_select 0.0.1 → 1.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: cc140dda27e749e18ccc020163262ba59b765629
4
- data.tar.gz: 3f72f6aa789968d961717a2195a21c11753d8b47
3
+ metadata.gz: c653a45089c19a6b94502fde4ede81eb294408a6
4
+ data.tar.gz: ab7d14c21012e8926ebda28cf27f171b72ba5cbe
5
5
  SHA512:
6
- metadata.gz: 242c894f86fd5ca3a4a8d44f8f394a5d949f3754f2e0d3fca2735501d291994f26e0411cdc3191c5419dfcd22a00d30e0840b106e342b98bdf69ddb7d40bb2df
7
- data.tar.gz: 43d7f62c60d24eb68365dc7941624e243daad58340b266ee4770bf790d283d967dc214feeac52508225e7204f9001789d3b29c6913d7d3ddb6b710230357de91
6
+ metadata.gz: e47e3f40b21a5c47d474079a3398738e907a083bf6e35e0725cafe8869abe6d347900231ef38a3e251283c67515dbed3565da3035833e5d2640f08cfb75c7ecd
7
+ data.tar.gz: b0102516754530829c06772ecd287953d5f9b14140732822787c53a4916ea0f2a111c9d34d993199567abd19ebac373fa57f7e1dbc827fafd20c1930a8f6432b
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # AuStateSelect
2
2
 
3
- TODO: Write a gem description
3
+ Provides a simple helper to get an HTML select list of Austraila states. Compatable with Rails 3 & 4.
4
4
 
5
5
  ## Installation
6
6
 
7
7
  Add this line to your application's Gemfile:
8
8
 
9
- gem 'au_state_select'
9
+ gem 'au_state_select', '~> 1.0'
10
10
 
11
11
  And then execute:
12
12
 
@@ -0,0 +1,7 @@
1
+ module AUStateSelect
2
+ module FormBuilder
3
+ def state_select(method, priority_countries = nil, options = {}, html_options = {})
4
+ @template.state_select(@object_name, method, priority_countries, options.merge(object: @object), html_options)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ module AUStateSelect
2
+ module FormHelpers
3
+ def state_select(object_name, method, priority_countries = nil, options = {}, html_options = {})
4
+ if Rails::VERSION::MAJOR >= 4
5
+ instance_tag = ActionView::Helpers::Tags::Select.new(object_name, method, self, [], options, html_options)
6
+ instance_tag.to_state_select_tag(priority_countries, html_options)
7
+ else
8
+ instance_tag = ActionView::Helpers::InstanceTag.new(object_name, method, self, options.delete(:object))
9
+ instance_tag.to_state_select_tag(priority_countries, html_options, options)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,37 @@
1
+ module AUStateSelect
2
+
3
+ module InstanceTag
4
+ def to_state_select_tag(priority_states, html_options = {}, options = {})
5
+ # Rails 4 stores options sent when creating an InstanceTag.
6
+ # Let's use them!
7
+ options = @options if defined?(@options)
8
+
9
+ state_select(priority_states, options, html_options)
10
+ end
11
+
12
+ # Adapted from Rails country_select. Just uses country codes instead of full names.
13
+ def state_select(priority_states, options, html_options)
14
+ selected = object.send(@method_name) if object.respond_to?(@method_name)
15
+
16
+ countries = ""
17
+
18
+ if options.present? and (options[:include_blank] or (options[:prompt] and !selected))
19
+ option = options[:include_blank] == true ? "" : options[:include_blank]
20
+ countries += "<option>#{option}</option>\n"
21
+ end
22
+
23
+ if priority_states
24
+ countries += options_for_select(priority_states, selected)
25
+ countries += "<option value=\"\" disabled=\"disabled\">-------------</option>\n"
26
+ end
27
+ p selected
28
+ countries = countries + options_for_select([['Australian Capital Territory', 'ACT'],['New South Wales', 'NSW'],['Northern Territory', 'NT'],['Queensland', 'QLD'],['South Australia', 'SA'],['Tasmania', 'TAS'],['Victoria', 'VIC'],['Western Australia', 'WA']], selected)
29
+
30
+ html_options = html_options.stringify_keys
31
+ add_default_name_and_id(html_options)
32
+
33
+ content_tag(:select, countries.html_safe, html_options)
34
+ end
35
+ end
36
+
37
+ end
@@ -3,15 +3,17 @@ require 'rails/railtie'
3
3
  module AUStateSelect
4
4
  class Railtie < Rails::Railtie
5
5
  initializer "au_state_select.configure_rails_initialization" do
6
- SimpleForm.input_mappings = { /state/ => :state }
7
6
 
7
+ SimpleForm.input_mappings = { /state/ => :state }
8
8
  module ::SimpleForm
9
9
  mattr_accessor :state_priority
10
10
  @@state_priority = nil
11
+
11
12
  class FormBuilder < ActionView::Helpers::FormBuilder
12
13
  map_type :state, to: SimpleForm::Inputs::PriorityInput
13
14
  end
14
15
  end
16
+
15
17
  end
16
18
  end
17
19
  end
@@ -1,3 +1,3 @@
1
1
  module AuStateSelect
2
- VERSION = "0.0.1"
2
+ VERSION = "1.0"
3
3
  end
@@ -1,62 +1,15 @@
1
1
  require "au_state_select/version"
2
-
3
- module ActionView
4
- module Helpers
5
- module FormOptionsHelper
6
- # Return select and option tags for the given object and method, using state_options_for_select to generate the list of option tags.
7
- def state_select(object, method, priority_states = nil, options = {}, html_options = {})
8
- InstanceTag.new(object, method, self, options.delete(:object)).to_state_select_tag(priority_states, options, html_options)
9
- end
10
- # Returns a string of option tags for pretty much any state in the world. Supply a state name as +selected+ to
11
- # have it marked as the selected option tag. You can also supply an array of countries as +priority_states+, so
12
- # that they will be listed above the rest of the (long) list.
13
- #
14
- # NOTE: Only the option tags are returned, you have to wrap this call in a regular HTML select tag.
15
- def state_options_for_select(selected = nil, priority_states = nil)
16
- state_options = ""
17
-
18
- if priority_states
19
- if (unlisted = priority_states - AU_STATES).any?
20
- raise RuntimeError.new("Supplied priority countries are not in the main list: #{unlisted}")
21
- end
22
- state_options += options_for_select(priority_states, selected)
23
- state_options += "<option value=\"\" disabled=\"disabled\">-------------</option>\n"
24
-
25
- # prevents selected from being included twice in the HTML which causes
26
- # some browsers to select the second selected option (not priority)
27
- # which makes it harder to select an alternative priority state
28
- selected = nil if priority_states.include?(selected)
29
- end
30
-
31
- state_options = state_options.html_safe if state_options.respond_to?(:html_safe)
32
-
33
- return state_options + options_for_select(AU_STATES, selected)
34
- end
35
-
36
- # All the countries included in the state_options output.
37
- AU_STATES = [['Australian Capital Territory', 'ACT'],['New South Wales', 'NSW'],['Northern Territory', 'NT'],['Queensland', 'QLD'],['South Australia', 'SA'],['Tasmania', 'TAS'],['Victoria', 'VIC'],['Western Australia', 'WA']] unless const_defined?("AU_STATES")
38
- end
39
-
40
- class InstanceTag
41
- def to_state_select_tag(priority_states, options, html_options)
42
- html_options = html_options.stringify_keys
43
- add_default_name_and_id(html_options)
44
- value = value(object)
45
- content_tag("select",
46
- add_options(
47
- state_options_for_select(value, priority_states),
48
- options, value
49
- ), html_options
50
- )
51
- end
52
- end
53
-
54
- class FormBuilder
55
- def state_select(method, priority_states = nil, options = {}, html_options = {})
56
- @template.state_select(@object_name, method, priority_states, options.merge(:object => @object), html_options)
57
- end
58
- end
59
- end
2
+ require "au_state_select/form_helpers"
3
+ require "au_state_select/instance_tag"
4
+ require "au_state_select/form_builder"
5
+
6
+ ActionView::Base.send(:include, AUStateSelect::FormHelpers)
7
+ if Rails::VERSION::MAJOR >= 4
8
+ ActionView::Helpers::ActiveModelInstanceTag.send(:include, AUStateSelect::InstanceTag)
9
+ else
10
+ ActionView::Helpers::InstanceTag.send(:include, AUStateSelect::InstanceTag)
60
11
  end
12
+ ActionView::Helpers::FormBuilder.send(:include, AUStateSelect::FormBuilder)
13
+
61
14
 
62
15
  require 'au_state_select/railtie' if defined?(Rails) and defined?(SimpleForm)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: au_state_select
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: '1.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Zhang
@@ -52,6 +52,9 @@ files:
52
52
  - Rakefile
53
53
  - au_state_select.gemspec
54
54
  - lib/au_state_select.rb
55
+ - lib/au_state_select/form_builder.rb
56
+ - lib/au_state_select/form_helpers.rb
57
+ - lib/au_state_select/instance_tag.rb
55
58
  - lib/au_state_select/railtie.rb
56
59
  - lib/au_state_select/version.rb
57
60
  homepage: ''